como gerar lista de pacotes instalados a partir de um backup completo do sistema?

6

Se eu tivesse um sistema debian em execução, o seguinte comando poderia ser emitido para obter uma lista de pacotes instalados:

dpkg --get-selections > packages.lst

Mas agora eu tenho apenas um backup completo da partição raiz (backup completo do sistema) do sistema operacional e nada mais. Como posso gerar lista de pacotes instalados desses arquivos?

    
por ceremcem 19.09.2015 / 19:13

3 respostas

6

chroot, e rodar o dpkg seria a coisa mais fácil. Consulte o link para saber como trabalhar com /proc , /sys e /dev dentro do chroot.

Como você tem um sistema debian funcional fora do backup, você provavelmente poderia usar apenas

dpkg --admindir=dir --get-selections

O dir é padronizado para /var/lib/dpkg , portanto, coloque o caminho para o /var/lib/dpkg do seu backup.

Não se esqueça que dpkg --get-selections não mostra quais pacotes foram instalados manualmente e quais foram instalados apenas para satisfazer dependências (e, portanto, devem ser removidos automaticamente quando não forem mais necessários, pois as versões mais recentes dos pacotes você realmente deseja tem diferentes dependências, ou porque você purga um pacote instalado manualmente.)

Eu uso o aptitude, que facilita a marcação de tudo como auto-instalado, depois marque alguns pacotes como instalados manualmente até que nada que você queira manter esteja sendo removido automaticamente. Comece com grandes meta-pacotes, como build-essential , os equivalentes do Debian de ubuntu-standard e ubuntu-desktop , e coisas assim. No aptitude, pressione r para ver a dependência inversa de um pacote (pkgs que dependem dele).

    
por 19.09.2015 / 19:20
4

A abordagem de Peter é melhor, mas você também pode analisar apenas /var/lib/dpkg/status , o que não exige chroot :

 $ perl -00ne 'if(/: install/){/Package:\s*(\S+)/ && print "$1\n"}' /var/lib/dpkg/status

Na minha máquina, que retornou a mesma lista de pacotes que dpkg --get-selections | awk '$NF=="install"{print $1}' (a análise awk é necessária porque senão também mostra pacotes deinstallados).

    
por 19.09.2015 / 20:04
0

Você pode ter uma listagem usando seus pacotes usando:

awk '/Package:/ {print $2}' /var/lib/dpkg/status

    
por 19.09.2015 / 19:59