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 initial
dan installed
untuk 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 custom
ke 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 manual
tersedia untuk saya tinjau.
something
dan tidaksomething-common
baik.