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:
export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > $DPKG_INITIAL ; 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 > $DPKG_INSTALLED ; comm -23 installed initial > $DPKG_CUSTOM ; function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; } ; echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > $DPKG_DEPS ; comm -23 custom deps > my-packages ; rm $DPKG_INITIAL $DPKG_INSTALLED $DPKG_CUSTOM $DPKG_DEPS
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.
zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > initial
Diikuti oleh daftar panjang item yang diinstal secara umum.
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 > installed
Saya kemudian membandingkan dua file initialdan installeduntuk daftar hanya item yang unik untuk diinstal.
comm -23 installed initial > custom
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.
function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }
Setelah itu saya melewati setiap baris dari file saya customke fungsi ini dengan xargs.
echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps
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.
comm -23 custom deps > manual
Dan daftar paket jadi saya sekarang dalam file bernama manualtersedia untuk saya tinjau.
somethingdan tidaksomething-commonbaik.