Estou tentando configurar um ambiente de armazenamento temporário em uma VM, para testar as atualizações antes de aplicá-las ao meu sistema principal.
Para fazer isso, eu fiz uma instalação básica do Debian Wheezy (igual ao sistema principal) na VM e, em seguida, executei como root a partir da VM:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
Infelizmente, a arquitetura i386 é necessária no meu caso; o sistema é amd64 nativo.
O problema está em dpkg --set-selections
execução na VM. Eu tenho alguns pacotes que requerem tratamento especial (esses são, na verdade, a principal razão pela qual eu quero um ambiente de armazenamento temporário), mas quando executo o último comando acima, recebo um zilhão de linhas de saída como:
dpkg: warning: package not in database at line NNN: package-name
para pacotes que realmente devem estar disponíveis no sistema base. Exemplos incluem xterm
, yelp
e zip
.
Agora, minha pergunta:
Qual é o processo específico para transferir a lista de seleção de pacotes de um sistema Debian para outro (assumindo o mesmo nível de lançamento do Debian, no Wheezy) e depois aplicar essas mudanças posteriormente? O objetivo é que ambos tenham a mesma lista de pacotes instalados, idealmente, fazendo um diff
entre as saídas dpkg --get-selections
ou dpkg --list
nas duas voltando, sem mostrar diferenças.
A grep -v deinstall
parte é emprestada dos pacotes Impedir que sejam removidos depois de repetirdpkg --set-selections
o processo no Ask Ubuntu.
Mudei a fonte na VM para ser a mesma do sistema principal, instalando também apt-transport-https
:
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main
Olhando para a saída --set-selections, estou vendo:
dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...
Os números das linhas pareciam ímpares, e a parte correspondente da saída de --get-selections é:
a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install
Note que entre acl
e aglfn
são acpi-support-base
, acpid
e adduser
para os quais não erros estão sendo relatados . Parece que os pacotes para os quais os erros estão sendo relatados estão de un
acordo dpkg -l
ou dpkg -l
não têm idéia alguma sobre eles ( dpkg-query: no packages found matching ...
). Eu sei que existem alguns pacotes instalados localmente, mas não muitos. i386
não aparece até gcc-4.7-base:i386 install
muito mais abaixo na lista (linha 342 na saída --get-selections).
fonte
dpkg --get-selections … | … dpkg --set-selections
é a maneira de replicar seleções de pacotes. Se estiver falhando, você precisará fornecer mais informações sobre o motivo. Poste seu conjunto completo de fontes nos dois sistemas, na saída dedpkg --get-selections
e na transcrição completa dedpkg --get-selections
(talvez possamos discernir um padrão vendo o que funciona e o que não funciona). Se o sistema principal amd64 ou i386? Funciona se você não adicionar a arquitetura i386?dpkg --get-selections
(e eu suponho que você quis dizer adpkg --set-selections
transcrição?)? Mesmo apenas o primeiro tem mais de 3.600 linhas e cerca de 100 KB./var/lib/dpkg/Packages
(que é ainda mais longa) também pode ser útil - isso pode ser um sintoma de um arquivo de Pacotes quebrado.Respostas:
Para clonar uma instalação Debian, use o
apt-clone
utilitário. Está disponível (como um pacote separado, não faz parte da instalação padrão) no Debian desde o wheezy e no Ubuntu desde o 12.04. Na máquina existente, executeIsso cria um arquivo
foo.apt-clone.tar.gz
. Copie-o para a máquina de destino e executeSe você estiver trabalhando com um sistema antigo, onde
apt-clone
não está disponível, ou apenas deseja replicar a lista de pacotes instalados, mas não qualquer arquivo de configuração, aqui estão as etapas manuais.Na máquina de origem:
Na máquina de destino:
Acredito que você seja afetado por uma alteração incompatível no dpkg que primeiro o transformou em chiado. Veja o bug # 703092 para obter mais informações.
A história curta é que
dpkg --set-selections
agora só aceita nomes de pacotes que estão presentes no arquivo/var/lib/dpkg/status
ou/var/lib/dpkg/available
. Se você usar o APT apenas para gerenciar pacotes, como a maioria das pessoas, ele/var/lib/dpkg/available
não será atualizado.Depois de executar
apt-get update
e antes de executardpkg --set-selections
eapt-get -u dselect-upgrade
, execute o seguinte comando:De Jessie em diante, você pode simplificar isso para
Como alternativa, execute
ou ainda mais simples
Outro método simples que não requer a instalação de um pacote adicional, mas faz o download das listas de pacotes novamente é
Veja as perguntas frequentes do dpkg para obter mais informações. (Isso é mencionado na página do manual do dpkg, mas mais de uma maneira que lembraria o problema se você já estivesse ciente, não de uma maneira que explique como resolver o problema!)
Observe que a clonagem de uma instalação de pacote com
dpkg --set-selections
não restaura a marca automática / manual no APT. Consulte Restaurando todos os dados e dependências do dpkg --set-selections '*' para obter mais detalhes. Você pode salvar as marcas no sistema de origem come restaure-os no sistema de destino com
fonte
dpkg --set-selections
desde antes do chiado!--set-selections
. Agora, como aplico as alterações? Atéapt-get -u dist-upgrade
menciona apenas um punhado de pacotes (todos relacionados ao ZFS), onde deve haver centenas, senão milhares de pacotes afetados.apt-get -u dselect-upgrade
Como eu fiz isso
No host de origem :
se preocupam
/etc/apt/sources.list.d
se usado ...Em seguida, copie o
source.sel
arquivo para o host de destino.No host de destino :
adapte sources.list mesmo com espelhos diferentes, mas a mesma lista de componentes .
E agora, meu host de destino está instalando muitas coisas no momento, então eu poderia levar algum tempo para postar isso.
fonte