मुझे यहां कोई समाधान नहीं दिखाई दिया, मेरे लिए काम करते हैं, मैंने dpkg के साथ काफी डिबेट पैकेज स्थापित किए हैं और कुछ आइटम जिन्हें मैं विशेष रूप से देख रहा था गायब थे।
एक लंबा एक लाइनर, लेकिन कॉपी और पेस्ट करने के लिए सुविधाजनक होगा:
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
उपरोक्त कमांड आपके वर्तमान कार्यशील निर्देशिका में फ़ाइल के लिए संकुल की सूची सहेजती है my-packages
।
व्याख्या
मैंने पहली बार उन पैकेजों की एक सूची बनाई है, जो स्थापना के दौरान चुने गए पैकेजों की आधार रेखा से बना है।
zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > 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 > installed
फिर मैंने दो फाइलों की तुलना की initial
और installed
केवल उन वस्तुओं को सूचीबद्ध किया, जो स्थापित करने के लिए अद्वितीय हैं।
comm -23 installed initial > custom
वहां से मैं निर्भरताओं को फ़िल्टर करना चाहता था, यह वह जगह है जहां यह विधि कुछ वांछित पैकेजों को याद कर सकती है, यह उन निर्भरताओं से अनजान है जो स्पष्ट रूप से स्थापित हैं।
मैंने इन वस्तुओं के प्रसंस्करण में इस कदम को छोटा करने के लिए एक त्वरित बैश फ़ंक्शन लिखा।
function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }
उसके बाद मैंने अपनी फ़ाइल से प्रत्येक पंक्ति custom
को इस फ़ंक्शन में पास किया xargs
।
echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps
एक बार जब मेरे पास हर संभव निर्भरता की लंबी सूची थी, (हर संभव कथन पर निश्चित नहीं), तो मुझे एक बार फिर वो पंक्तियाँ मिलीं जो एक फ़ाइल के लिए अद्वितीय थीं।
comm -23 custom deps > manual
और पैकेज की मेरी तैयार सूची अब एक फ़ाइल में manual
उपलब्ध है जिसका नाम समीक्षा के लिए मेरे पास उपलब्ध है।
something
औरsomething-common
साथ ही नहीं ।