(Pertanyaan ini sangat mirip dengan 10458. Disarankan bahwa Fedora dan Ubuntu / Debian cukup berbeda untuk menjamin jawaban yang berbeda.)
Karena saya menggunakan pengaturan Ubuntu saya secara bertahap menginstal sejumlah paket di atas dan di atas instalasi dasar. Jika saya menginstal ulang, atau jika saya perlu menginstal mesin baru, saya biasanya ingin menginstal ulang paket - paket spesifik tersebut , dan saya ingin melakukannya dengan cepat untuk kembali bekerja dengan kerumitan minimum. Sejauh yang saya lihat, semua manajer paket ( apt-get
, aptitude
dan synaptic
) dapat memberi tahu saya paket mana yang diinstal, dan mereka semua memiliki log (walaupun yang berbeda untuk setiap alat, yang merepotkan). Tapi tidak satu pun dari mereka yang bisa memberi tahu saya paket mana yang saya milikidiinstal, tidak seperti dependensi atau pembaruan sistem mereka. Bahkan log itu rumit karena saya tidak sepenuhnya yakin apa yang harus saya ekstrak dari mereka, atau bagaimana mengintegrasikannya (dalam hal berbagai alat keluarga yang tepat). Ini berarti bahwa setiap kali saya menginstal ulang, atau bahkan hanya membuat cadangan, saya tidak yakin bagaimana cara membuat kembali daftar itu.
Saya tidak perlu mengharapkan alat apa pun untuk melakukan ini untuk saya, tetapi jika tidak, saya sedang mencari solusi. Bahkan pola yang harus dipahami, aturan praktis yang baik, atau gagasan yang jelas tentang apa yang sebenarnya dicatat, akan bermanfaat. Mungkin tidak ada "jawaban terbaik" di sini tetapi jawaban yang bagus akan sangat membantu.
Sebagian besar jawaban di bawah ini memberikan perkiraan tentang apa yang saya cari, dan berguna sampai batas tertentu. Yang dipilih adalah yang paling dekat dengan cara otomatis menginstal ulang alat saya pada sistem baru, bahkan dengan semua peringatannya.
Jawaban:
Pada mesin apa pun berbasis Debian, ini adalah salah satu cara umum untuk menduplikasi satu set paket. Di mesin lama:
Salin file
my_favorite_packages
ke mesin baru (thumb drive adalah pilihan yang baik, tetapiscp
juga berfungsi dengan baik). Kemudian jalankan urutan ini (dengan hak akses root):Ini tidak membuat Anda hanya paket yang Anda instal. Itu juga mendapatkan dependensi mereka, dll. Juga, jika repositori antara dua mesin berbeda, semua taruhan dimatikan.
Sejauh log, buat
apt-get
log di/var/log/apt/history.log
(terima kasih kepada Tshepang untuk memperbarui ini dalam komentar);dpkg
memang (at/var/log/dpkg.log
), tetapi sulit diurai dan hanya bisa dibaca dengan hak akses root;aptitude
memiliki satu di/var/log/aptitude
dan Anda dapat halaman melalui itu dengan hak pengguna biasa.Sejauh yang saya tahu, Anda benar bahwa tidak ada satu pun dari log ini yang melacak secara khusus apa yang Anda instal sebagai lawan dari dependensi yang diinstal secara otomatis. Anda dapat memperoleh informasi itu, dari
aptitude
pencarian. Cari semua paket yang diinstal yang juga diinstal secara otomatis:Jika Anda hanya menginginkan yang Anda instal (bukan dependensi otomatis), negasikan
~M
:Jika Anda ingin yang diformat sehingga Anda hanya memiliki nama paket dan kata "instal",
aptitude
dapat melakukannya juga. Ini memberi Anda daftar yang siap diumpankan kedpkg --get-selections
:(Aku punya apa-apa di RedHat atau sistem berbasis RedHat. Maaf. Tidak benar-benar ada satu jawaban untuk Linux per se karena manajemen paket adalah bagian besar dari apa yang membuat distro yang berbeda berbeda .)
sumber
apt-get
,synaptic
danaptitude
(sejauh yang saya telah melihat). Ini sejak awal 2010.dpkg.log
pernyataan tidak muncul untuk menjadi kenyataan di Ubuntu 14.04 sebagai pengguna saya bisa mendapatkan pilihan saya dengan mudah, tidak sepele, tapi tidak terlalu sulit.awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u
tidak.Gunakan
dpkg -l '*' > jaunty.original
untuk mengingat semua paket yang diinstal pada sistem yang baru diinstal.Setelah Anda menginstal semua paket tambahan Anda lakukan
dpkg -l '*' > mysystem.2009017
.Paket tambahan hanyalah perbedaan:
diff jaunty.original mysystem.2009017
sumber
Bakat sebenarnya cukup bagus dalam hal ini. Aptitude memang tahu kapan sesuatu dipasang dengan tangan atau dengan ketergantungan dan Anda dapat mengatakannya untuk menghapus hal-hal yang tidak lagi diperlukan dan hanya dipasang karena sesuatu yang bergantung padanya selalu menjaga sistem Anda sekecil mungkin.
Ada beberapa paket yang membuat instalasi Ubuntu, ubuntu-minimal, ubuntu-desktop, ubuntu-server dan sebagainya. Jika Anda memberi tahu Aptitude untuk menandai mereka sebagai yang diinstal secara manual dan menghapus yang lainnya, maka Anda akan mendapatkan jumlah paket minimum yang mungkin.
Saya menjelaskan bagaimana melakukan semua itu dalam dua posting di blog saya: Membersihkan sebuah Debian GNU / Linux dan Membersihkan sebuah Debian GNU / Linux (atau Ubuntu), reprise . Singkatnya, jawaban yang Anda cari adalah:
Terakhir kali saya bekerja dengan itu, jika Anda menggunakan apt-get, maka itu tidak berhasil. Itu sebabnya saya selalu merekomendasikan aptitude dan sejauh yang saya tahu, Debian sudah usang apt-get dalam mendukung aptitude.
Saya tidak tahu bagaimana melakukannya di Fedora dan Anda mungkin harus memisahkan daripada menjadi pertanyaan yang berbeda. Fedora dan Ubuntu adalah sistem operasi yang berbeda dan harus diperlakukan seperti itu (bahkan jika mereka berbagi kernel dan beberapa hal lainnya).
sumber
grep
:aptitude search '~i !~M'
harus melakukan trik.apt-get
tidak usang. Debian merekomendasikanaptitude
untuk manajemen paket pada baris perintah, tapi itu jauh dari usangapt-get
.Pada debian apt-show-versi menunjukkan versi paket yang diinstal.
sumber
Pada sistem berbasis apt, lihat /var/log/apt/term.log. Bagi saya, ada garis yang cukup jelas untuk menggambarkan di mana instalasi berakhir dan di mana instalasi saya dimulai.
sumber
Dari
man aptitude-create-state-bundle
:Ini akan menyimpan informasi yang sama dengan yang
aptitude
ada pada paket mana yang diinstal secara manual.Ini dimaksudkan untuk digunakan dengan
aptitude-run-state-bundle
:sumber
Ketika hanya menggunakan
dpkg
Anda tidak tahu apakah paket itu diinstal secara manual oleh pengguna atau secara otomatis (sebagai ketergantungan atau selama instalasi OS awal). Jika Anda ingin menyimpan informasi itu, Anda harus mendapatkan daftar hanya paket yang benar-benar diinstal secara manual.Untuk itu, Anda dapat menggunakan salah satu dari dua one-liner ini. Keduanya menghasilkan output yang sama persis pada mesin saya dan lebih tepat daripada semua solusi yang diajukan sampai sekarang dalam pertanyaan ini. Mereka adalah kombinasi dari dua jawaban (1) dan (2) . Perhatikan bahwa saya awalnya mengirim jawaban ini di sini .
Menggunakan
apt-mark
:Menggunakan
aptitude
:Sangat sedikit paket masih jatuh melalui celah-celah, walaupun aku curiga ini yang benar-benar dipasang oleh pengguna, baik tepat setelah instalasi melalui bahasa lokalisasi setup atau misalnya melalui Totem codec installer. Juga, versi linux-header juga tampaknya menumpuk, meskipun saya hanya menginstal metapackage non-spesifik. Contoh:
bagaimana cara kerjanya
sed
strip tambahan mengeluarkan spasi kosong di akhir baris.Kemungkinan lain tidak berfungsi juga:
ubuntu-14.04-desktop-amd64.manifest
file (di sini untuk Ubuntu 14.04) alih-alih/var/log/installer/initial-status.gz
. Lebih banyak paket ditampilkan sebagai diinstal secara manual meskipun tidak.apt-mark showauto
bukan/var/log/installer/initial-status.gz
.apt-mark
misalnya tidak menyertakan paket xserver-xorg, sedangkan file lain tidak.Keduanya mendaftar lebih banyak paket daripada solusi di atas.
sumber
Saya bias, dan solusi yang saya sajikan tidak selalu mungkin, tetapi saya bosan dengan situasi ini. Hasilnya adalah saya tidak menginstal apa pun lagi dengan alat manajer pembaruan / paket.
Saya mengambil rute yang cukup sulit (saya memiliki persyaratan ketat untuk versi). Saya membuat makefile besar yang mengunduh, mengkompilasi dan menginstal di direktori home saya setiap paket (program, perpustakaan, apa pun) yang saya butuhkan. Saya mengembangkannya bertahap, sepotong demi sepotong. Makefile mengunduh dan mengkompilasi semuanya, bahkan kompiler.
Ketika saya pindah ke sistem baru, atau menginstal ulang, saya hanya menyalin makefile (ditambah beberapa hal pendukung), jalankan make world dan kembali keesokan harinya.
Untuk beberapa program yang saya kembangkan (jadi saya memiliki kendali), saya menggunakan alat yang saya program, manajer paket berangan . Semacam folder .app suka di MacOSX. Semuanya ada dalam paket, jadi saya tahu apa yang diinstal kapan saja, dan saya tahu itu mandiri dan mandiri (kecuali untuk lib sistem)
sumber