Eu não vi nenhuma solução aqui trabalhar para mim, eu instalei alguns pacotes deb com o dpkg e alguns dos itens que eu estava procurando estavam faltando.
Um forro bastante longo, mas conveniente para copiar e colar, seria:
export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print }' > $DPKG_INITIAL ; awk ' !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", ) ; gsub(/:.+/, "", ) ; a[]= } 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 | 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
O comando acima salva uma lista de pacotes em um arquivo em seu diretório de trabalho atual chamado my-packages
.
Explicação
Primeiro construí uma lista de pacotes que compunham a linha de base dos pacotes selecionados durante a instalação.
zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print }' > initial
Seguido por uma longa lista de itens instalados em geral.
awk ' !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", ) ; gsub(/:.+/, "", ) ; a[]= } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > installed
Em seguida, comparei os dois arquivos initial
e installed
para listar apenas os itens exclusivos da instalação.
comm -23 installed initial > custom
De lá, eu queria filtrar as dependências, é aí que esse método pode perder alguns pacotes desejados, ele não tem conhecimento das dependências que também são explicitamente instaladas.
Eu escrevi uma função bash rápida para encurtar essas etapas no processamento desses itens.
function rdep() { apt-cache rdepends | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }
Depois disso, passei cada linha do meu arquivo custom
para essa função com xargs
.
echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps
Uma vez que eu tive a longa lista de todas as dependências possíveis, (não tenho certeza sobre todas as declarações possíveis), mais uma vez eu peguei as linhas que eram exclusivas para um único arquivo.
comm -23 custom deps > manual
E minha lista finalizada de pacotes agora está em um arquivo chamado manual
disponível para eu revisar.