
Estou tentando fazer alguns scripts de instalação para um sistema que possui múltiplas dependências e descobri como fazer --dry-run
com o gerenciador de pacotes (Ubuntu, apt
neste caso) antes de fazer qualquer instalação real.
No entanto, após a instalação dos pacotes, é necessário copiar determinados arquivos de configuração. Como eu verificaria isso para ter certeza de que os destinos estão disponíveis antes de confirmar a instalação?
Não quero executar o script para ter as coisas parcialmente instaladas e colocar o sistema em um estado imprevisível, mas se o pacote envolvido não existir, os diretórios de configuração também não existiriam para eu verificar.
Digamos que eu queira copiar para base.conf
to /etc/package/system/
, mas /etc/package/
nem existe. Se o destino estiver configurado incorretamente (por exemplo, escrito incorretamente como sytem
), ocorrerá um erro após a instalação do pacote durante a cópia, que pode ser um dos vários arquivos de configuração que já foram copiados, então não tenho como "revertê-lo" por assim dizer. Meu objetivo final é ter um processo de instalação que não deixe para trás arquivos parcialmente copiados.
O cenário de falha ocorre quando vários arquivos precisam ser copiados. Se houver 3 arquivos para copiar e o destino do terceiro arquivo estiver configurado incorretamente, ele ainda copiará os 2 primeiros arquivos e gerará erro no terceiro. Os arquivos residuais causarão mais erros na próxima execução.
PS: Suspeito que talvez precise criar um pacote real para lidar com as dependências, mas a complexidade e o tempo necessários são substancialmente maiores e não quero investir nisso agora.
Responder1
Você pode examinar o conteúdo dos pacotes com antecedência, mesmo sem baixá-los; veja apt-file
e seu list
comando.
No entanto, isso nunca lhe dará uma imagem completa, e você não pode construir uma imagem completa das alterações feitas por um pacote arbitrário sem instalá-lo: os pacotes podem enviar scripts de mantenedor que realizam alterações adicionais. Isso significa que um pacote pode criar um diretório sem que isso seja evidente nos metadados do pacote, e você só pode descobrir isso analisando os scripts do mantenedor, levando em consideração todos os seus efeitos colaterais e os das dependências do pacote.
No seu cenário, suspeito que você precisará de uma abordagem em duas fases:
- instale todos os pacotes necessários, usando o sistema de gerenciamento de pacotes;
- verifique todas as expectativas que você tem em relação ao layout do diretório resultante e aos arquivos instalados, e
- se suas expectativas forem atendidas, copie todos os seus arquivos adicionais no lugar;
- se não estiverem, limpe todos os pacotes que você instalou (para
--autoremove
que quaisquer dependências instaladas automaticamente também sejam removidas).