Я не бачив тут жодних рішень для мене, я встановив досить багато пакетів дебюту з 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
Звідти я хотів відфільтрувати залежності, саме тут цей метод може пропустити деякі бажані пакети, він не знає про залежності, які також явно встановлені.
Я написав швидку функцію bash, щоб скоротити ці кроки в обробці цих елементів.
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
так добре.