Como influenciar a ordem de atualização do pacote (apt-get upgrade / dist-upgrade)

4

Estamos hospedando uma ramificação do repositório debian jessie com pacotes customizados, portados e remendados. Cada lançamento de produto de um instalador ISO é criado a partir deste repo. Percebemos agora que uma atualização entre um lançamento de alguns meses atrás e o lançamento deste mês falha. O problema ocorre graças a um pacote personalizado que tinha um arquivo de configuração incorreto em /etc/sysctl.d/. Isso resulta na falha de configuração do systemd (por causa da procps) durante a atualização. O pacote personalizado foi corrigido, mas durante uma atualização a configuração deste pacote acontece após a configuração do systemd.

Uma possibilidade é corrigir o systemd e adicionar nosso pacote personalizado como uma dependência ...

Outra ideia era trabalhar com Replace / Conflicts no arquivo debian / control, mas não consigo encontrar nenhuma documentação sobre a ordem de upgrade. O apt-get upgrade começa com a substituição de pacotes e depois com a atualização dos outros pacotes?

Alguma outra idéia de como obter o pacote personalizado configurado antes do systemd? (sem instalá-lo manualmente nós mesmos antes de iniciar a atualização completa)

    
por Sander 10.08.2015 / 17:23

2 respostas

0

Portanto, você tem um pacote personalizado antigo que aciona um erro quando o systemd é atualizado devido a um arquivo de configuração inválido.

Dada a ordem em que os scripts do mantenedor são executados , o primeiro momento em que a nova versão do seu pacote pode intervir é a etapa preinst upgrade , que acontece antes de o novo pacote ser descompactado, bem antes das etapas postinst configure . Você pode fazer com que seu novo preinst upgrade conserte o arquivo problemático ou mova-o para fora do caminho e use o script postinst configure para corrigir qualquer problema persistente.

Isso só funcionará se o APT decidir atualizar seu pacote e systemd na mesma execução. Dependendo do que mais tenha que fazer, acho que o APT poderia decidir atualizar completamente o systemd, depois atualizar seu pacote. Você pode evitar isso declarando uma dependência do systemd para a nova versão do seu pacote ( Depends: irá garantir que o postinst configure seja executado primeiro. Você também deve declarar um Breaks: relacionamento do systemd para a versão antiga do seu pacote; na verdade, acho que Breaks: é como seria feito se tudo envolvido era um pacote Debian oficial.O problema com isso é que você teria que modificar o novo pacote systemd (ou a versão antiga do seu pacote, mas é muito tarde para isso).

    
por 11.08.2015 / 09:12
1

without installing it manually ourselves before starting the full upgrade

Isso é difícil, porque o apt não tem essas facilidades.

Normalmente, quando você faz uma atualização, o dpkg é chamado para instalar todos os pacotes baixados e os separa em grupos que fazem sentido, descompactando todos eles e configurando todos eles (isso é muito simplificado, ele realmente faz mais), e sempre que um pacote falha ao configurar, ele tenta configurar os outros até que nenhum seja deixado. Assim, você pode fazer uma atualização dupla, primeiro esperando que o dpkg resgate e o segundo conclua o processo.

Mas, eu não confiaria nisso, a maneira recomendada é atualizar o pacote relevante independentemente (com install package ) e executar a atualização. Você também pode remover o pacote primeiro com upgrade package- , porque as operações de remoção normalmente têm precedência e, em seguida, instalá-lo.

A possiblity is to patch systemd and add our custom package as a dependency

Esta é outra opção, se você acrescentar ao systemd Depends: package >= version , o dpkg instalaria este pacote primeiro. Além desses, não acho que seria aconselhável fazer isso.

    
por 10.08.2015 / 17:52

Tags