Restaurando todos os dados e dependências do dpkg --set-selections '*'

44

Para que eu possa rodar em uma máquina:

dpkg --get-selections '*' > selection.txt

Em outra máquina:

dpkg --set-selections < selection.txt

... seguido por um dos seguintes:

aptitude install
apt-get -u dselect-upgrade

... para instalar os pacotes que.

No entanto, parece que algumas informações são perdidas no processo, como se um pacote (por exemplo xyz) foi instalado automaticamente como dependência de outro pacote ( abc). Você pode ver isso sempre que fizer algo parecido apt-get --purge remove abc. Na máquina original, você seria notificado de que o pacote xyzfoi instalado como dependência abce que você pode usar apt-get autoremovepara se livrar dele.

Agora estou ciente deborphane debfoster, mas eles são difíceis de usar, dada a tarefa (simples) em questão.

Parece que salvar e restaurar as seleções, como mostrado acima, não é suficiente para restaurar as dependências sutis dos pacotes instalados.

Existe uma maneira de fazer backup do conjunto completo de metadados para o gerenciamento de pacotes e restaurá-lo em sua totalidade?

0xC0000022L
fonte
Eu sempre me perguntei a mesma coisa que gero um grande script de shell com um 'sudo apt-get install' com todos os meus pacotes (menos libs). Claro, eu encontro o mesmo problema que você está tendo.
mandril R
Eu acho que o melhor lugar para começar a procurar seria verificar se o dpkg é de fato responsável por essas informações. Se não for, talvez esse seja o trabalho do apt.
Huckle
3
Se você estiver indo a maneira manual, você pode estar interessado em apt-markpara salvar / restaurar informações sobre automática vs pacotes instalados manualmente
Lekensteyn
Não está no repositório de pacotes 10.04, está? Isso faz parte dos acordos de recompra da Canonical ou de terceiros?
0xC0000022L
2
Não, isso é apenas um comentário "para sua informação". Eu usaria o apt-mark (faz parte do apt, portanto já deve estar instalado) para obter e definir as marcas dos pacotes (consulte a página de manual para obter detalhes).
htorque

Respostas:

39

Cópia de segurança:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Restaurar:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
fonte
Obrigado, estava prestes a pedir que você ou Lekensteyn escrevessem isso como resposta.
0xC0000022L
Esses comandos permitem reinstalar os programas dessa lista?
Svetlana Belkin
isso pode remover pacotes instalados extra na restauração?
N611x007
1
Você pode explicar a diferença entre autoe manual? Obrigado.
Anto
Marquei acidentalmente como manual um monte de outros pacotes ... existe uma maneira de reverter? Obrigado
dentex 5/16
2

A resposta selecionada para esta pergunta está incompleta e não funciona (ou não mais). A correção dolorosa é usar um loop for do bash para analisar os arquivos * .lst de saída e alimentá-los apt install. Uma má escolha, no entanto, não será ilustrada aqui.

Uma opção melhor é usar apt-clone, como visto nesta resposta no Unix e Linux Stackexchange. Isso cria um arquivo pequeno (cerca de 100 KB ou menos para o meu sistema). Alegadamente, ele irá clonar os pacotes com pouco esforço ou dor.

Então, em resumo, na máquina original:

apt-clone clone `uname -n`

Em seguida, na máquina para a qual clonar, copie o arquivo clone e execute:

apt-clone restore original-machine-name.apt-clone.tar.gz

Incluo esta resposta aqui, pois essa página apareceu nas pesquisas iniciais na Web, mas a outra resposta não. Este método parece muito mais fácil.

casualcoder
fonte