Saya memasang Ubuntu 10.10 di komputer saya dan menginstal beberapa perangkat lunak melalui apt-get. Minggu lalu saya berhasil memecahkan semuanya dan baru saja memulai dari awal, dan saya perlu menginstal ulang perangkat lunak saya. Apakah ada cara untuk membuat daftar dengan semua paket yang telah saya instal secara manual?
Jadi itu akan memberi saya daftar suka texlive, ...
dan tidak texlive, texlive-dep1, textlive-dep2, ...
dan semua paket standar dihapus?
Jika saya entah bagaimana bisa mengetahui program mana dari instalasi biasa yang telah saya hapus, itu juga luar biasa!
Pembaruan 2015-05-23: Saya sekarang menggunakan Ansible sebagai manajemen konfigurasi pada sistem saya. Di sana saya menentukan paket yang akan diinstal. Ini melayani tujuan, menginstal semua program pada sistem baru, bahkan lebih baik. Jadi pertanyaan ini mungkin merupakan entri ke beberapa manajemen konfigurasi ringan.
something
dan tidaksomething-common
baik.Utas ini dari superuser.com memberikan solusi ini:
sumber
apt-get
, ditambah ketergantungannya. Jadi, misalnya, jika Anda menginstalaptitude
, maka itu juga akan menampilkanapt-xapian-index aptitude-common libboost-iostreams1.54.0 libclass-accessor-perl libcwidget3 libept1.4.12 libio-string-perl libparse-debianchangelog-perl libsigc++-2.0-0c2a libsub-name-perl libtimedate-perl libxapian22 python-chardet python-debian python-six python-xapian
Jika apt log Anda ada di / var / log / apt, sesuatu seperti ini seharusnya berfungsi:
Atau jika Anda ingin menyingkirkan beberapa sampah berulang di output:
sumber
Anda dapat menggunakan apt-mark , tetapi saya merekomendasikan debfoster :
Ini akan memeriksa semua paket yang diinstal dan mencari tahu yang mana yang tetap diinstal:
Saat Anda menjawab "y" untuk setiap pertanyaan (cukup tekan Enter untuk bergerak cepat), debfoster akan mengumpulkan daftar paket dan menuliskannya baris demi baris ke file. Secara default ini di
/var/lib/debfoster/keepers
. Ini terlihat seperti ini:Saya mengkonfigurasi debfoster via
/etc/debfoster.conf
untuk meletakkan daftar ini di/etc/debfoster-keepers
dan melacak file dengan dllkeeper untuk menjaga riwayat dan cadangan. The jawaban di sini menunjukkan cara menginstal daftar paket dari file teks baris-delimited:Perhatikan batasannya di sini, paket yang telah Anda hapus memiliki tanda '-' di depannya. Jadi, Anda ingin menghapus baris-baris itu sebelum memanggil apt-mark.
Meskipun situs web debfoster mengatakan bahwa debfoster tidak digunakan lagi karena kemampuan, saya lebih suka konfigurasi debfoster yang cepat dan sederhana. Ini menempatkan Anda di tengah-tengah basis data paket Anda dan memungkinkan Anda membersihkan segalanya, menjadikan paket otomatis dan manual lebih jelas.
Ketik "h" di prompt debfoster untuk menjelaskan opsi Anda. Tipe "?" untuk melihat deskripsi paket. Cara di sini mungkin bermanfaat.
sumber
Memberikan semua paket yang diinstal secara manual (bukan paket sistem, bukan dependensi). Sebagai contoh itu menunjukkan
build-essential
tetapi tidakgcc
.sumber
Bagi mereka yang lebih suka menggunakan alat apt-*, ada utilitas apt-mark yang memungkinkan query dan memodifikasi keadaan manual / otomatis.
Anda juga dapat menentukan pola untuk paket yang Anda minati:
sumber
Saya akhirnya mengerti sekarang:
sumber
/var/log/apt/history.log(.N.gz)
olah.zgrep
sebagai gantigunzip
atauzcat
disalurkan kegrep
. Ini adalah skrip pembungkus yang dikirimkan dengan gzip, saya percaya. Ini juga menerima file yang tidak dikompresi, sehingga Anda dapat menyederhanakan skrip Anda kezgrep -E '(\[INSTALLIEREN\]|\[INSTALL\])' /var/log/aptitude* | awk '{ print $2 }'
Saya dapat menarik semuanya dengan membuka file log di / var / log / apt /
Saya kemudian masuk dan secara manual menyaring paket instalasi apt-get. Mungkin ada cara untuk melakukan ini secara terprogram tetapi saya tidak menyadarinya.
sumber
dengan cara ini Anda melihat daftar perintah yang dilakukan di masa lalu.
Hapus kode grep jika Anda memerlukan informasi lebih lanjut:
jika log dikompresi (yaitu diakhiri dengan gz)
untuk zip lagi ketika selesai Anda dapat melakukan:
sumber
zcat
? Ini semudahzcat filename.gz
. Satu hanya dapat menggunakannya pada file terkompresi gzip di tempatcat
. Jugagrep
bisa diganti denganzgrep
, miszgrep Commandline history.log.1.gz
.(grep "Commandline" history.log ; zgrep "Commandline" history.log.*.gz ) | grep " install " | grep -v -- "--yes" | sed -r "s/^.*install //"
. Ini memiliki kekurangan, karena paket-paket yang dihapus juga terdaftar, dan jika sebuah paket diinstal lebih dari satu kali, ia terdaftar beberapa kali.Saya tidak melihat solusi apa pun yang berfungsi untuk saya, saya telah menginstal beberapa paket deb dengan dpkg dan beberapa item yang saya cari secara khusus hilang.
Liner satu yang agak panjang, tetapi nyaman untuk menyalin dan menempel adalah:
Perintah di atas menyimpan daftar paket ke file di direktori kerja Anda saat ini bernama
my-packages
.Penjelasan
Saya pertama kali membangun daftar paket yang menyusun garis dasar paket yang dipilih selama instalasi.
Diikuti oleh daftar panjang item yang diinstal secara umum.
Saya kemudian membandingkan dua file
initial
daninstalled
untuk daftar hanya item yang unik untuk diinstal.Dari sana saya ingin menyaring dependensi, di sinilah metode ini mungkin melewatkan beberapa paket yang diinginkan, tidak menyadari dependensi yang juga diinstal secara eksplisit.
Saya menulis fungsi bash cepat untuk mempersingkat langkah ini dalam memproses item ini.
Setelah itu saya melewati setiap baris dari file saya
custom
ke fungsi ini denganxargs
.Setelah saya memiliki daftar panjang setiap ketergantungan yang mungkin, (tidak yakin pada setiap pernyataan yang mungkin), saya sekali lagi mendapat garis yang unik untuk satu file.
Dan daftar paket jadi saya sekarang dalam file bernama
manual
tersedia untuk saya tinjau.sumber
Seseorang ditautkan ke https://unix.stackexchange.com/questions/3595/ubuntu-list-explicitly-installed-packages/3624#3624 yang memang memiliki solusi yang baik, tetapi, itu tidak berperilaku sebagai output dari aptitude. telah berubah. Ini adalah versi yang diperbarui, berdasarkan perbandingan antara paket yang diinstal saat ini dibandingkan dengan 12,04 LTS. Anda perlu
aptitude
diinstal, itu adalah satu-satunya persyaratan.Untuk memecah perintah di atas menjadi beberapa bagian, bit ini mengeluarkan satu paket per baris dari semua yang diinstal pada sistem
Dan ini mengunduh daftar paket default & memotong informasi yang berlebihan.
dan
comm
membandingkan dua file dan menampilkan paket-paket yang tidak ada dalam daftar default.sumber
Gunakan file manifes distribusi sebagai paket dasar yang ditetapkan. Urutkan hasil yang diinstal secara manual ke dalam grup paket menurut arsitektur dan bagian, sehingga lebih mudah untuk fokus pada kelompok paket (mungkin Anda tidak peduli dengan beberapa bagian).
https://gist.github.com/darrenleeweber/8cc570ff402f19af7fa4
sumber
apt-get install -y
dan file tersebut adalah skrip bash. Kemudian semua file paket bisa dimasukkan dalam loop ketentuan gelandangan.sumber
Saya tidak menemukan satu yang cocok untuk saya, jadi saya menulis naskah. Dengan menganalisis isi /var/log/apt/history.log* dan / var / log / aptitude, lalu urutkan berdasarkan datetime, menghasilkan dua daftar, satu diinstal pkg secara manual, yang lain diinstal tetapi dihapus pkg. Skrip dengan verifikasi 'daftar apt'. sedikit penyimpangan, karena penggunaan dpkg dipasang dan dimodifikasi sumber PPA.
Saya taruh di sini, https://github.com/eexpress/eexp-bin/blob/master/self-installed-pkg.pl .
jika ada yang perlu mengujinya, mungkin perlu memodifikasi beberapa kode, untuk file log saya dicampur dalam bahasa Cina dan Inggris (khususnya format datetime RFC2822), saya perlu menghadapinya.
sumber
Saya pikir Anda ingin menggunakan
/var/log/apt/history.log
dan teman-temannya untuk memberikan perubahan yang telah dibuat:(Dimodifikasi dari sumber )
Akan memberi Anda semua paket yang telah diinstal di baris perintah menggunakan variasi
apt-get install
.Ini mendapatkan file zip di yang lama
history.log
menambahkannya dengan arushistory.log
dan melewati grep, mengekstraksi baris dengan apt [-gunakan] instal [dan / atau instal ulang] dan menunjukkan sisa baris (-o flag) yang berjumlah nama paketIni akan membutuhkan sedikit modding (misalnya dengan
sed
) jika Anda ingin hanya nama paket pada baris yang berbeda; latihan untuk pembaca!Perlu dicatat bahwa pengelola paket sinaptik (
gksu synaptic
ataukdesudo synaptic
) di bagian "status" memiliki daftar "terpasang (secara manual)". Jika Anda menandai seluruh daftar untuk dihapus [tidak berlaku !!] Anda harus dapat menyimpan perubahan yang ditandai dan mendapatkan daftar paket dengan cara itu. Perhatian: ini dikuncisynaptic
untuk saya (menghitung penghapusan dependensi mungkin).sumber