Como mostro as ações que a instalação de um pacote .deb executará?

33

Gostaria de poder visualizar os scripts / gatilhos associados a um pacote que está prestes a ser atualizado, para que eu possa saber, por exemplo, se isso resultará no reinício do servidor da web. Não consigo encontrar uma opção de aptidão para me mostrar isso (ou apt / dpkg); o melhor que posso obter é o conteúdo (arquivos). Existe alguma combinação de opções de simulação / verbose / conteúdo que eu perdi que mostrará isso?

Além disso, se um pacote resultar em algo acontecendo - como uma reinicialização do serviço - que eu não quero que ocorra agora, existe uma maneira de instalar o pacote sem executar alguns ou todos os scripts?

Sam Brightman
fonte
Por que isso foi rejeitado? Parece uma pergunta razoável para mim (embora normalmente não seja necessário fazer algo assim).
Sleske
1
Me bate. Não há comentários ou respostas particularmente abrasivos, apenas votos negativos aleatórios. Como se "normalmente não deveria ser feito" é o mesmo que "nunca deveria ser feito sob nenhuma circunstância e nem mesmo educacional". :(
Sam Brightman

Respostas:

20

Você pode imprimir o arquivo de controle e outras informações com dpkg -I package.debou usar dpkg -e package.debpara extrair apenas os arquivos de informações de controle.

Além disso, você pode executar uma execução a seco para ver o que o dpkg faria com --dry-run:

dpkg --dry-run -i package.deb
Mikael S
fonte
Devo ter perdido essas opções, obrigado. -Eu não parece mostrar muito - parece apenas a primeira linha (interrobang).
21310 Sam Sammanman
2
Nota: Você precisa ter o arquivo do pacote disponível localmente. Faça o download primeiro através do 'aptitude download <packagename>'.
Martijn Heemels
3
A opção -e criará um DEBIANdiretório com o controlarquivo e os vários arquivos de script que serão executados. postinsté geralmente muito interessante, pois será executado depois que o pacote for instalado com sucesso.
dwurf
8

Não, não conheço nenhuma maneira de fazer isso usando o aptitude.

Você pode olhar diretamente para os scripts; os scripts executados durante a atualização estão contidos no pacote. Descompacte o deb usando ar:

ar -x package.deb

Em seguida, verifique control.tar.gz, ele contém os scripts.

sleske
fonte
Seria melhor se o aptitude -s com algumas opções de verbosidade realmente mostrasse os scripts que ele executaria durante toda a atualização. Isso é essencialmente o que eu estava pedindo, mas acho que a resposta de Mikael é um pouco mais simples.
21310 Sam
2

Também existe a --debugopção de dpkg, como emsudo dpkg --debug=72200 -i package.deb

Existem várias opções disponíveis para saída detalhada e elas podem ser combinadas.

Você pode ver todas as opções disponíveis executando: dpkg --debug=help.

pi@kaldi:~ $ dpkg --debug=help
dpkg debugging option, --debug=<octal> or -D<octal>:

 Number  Ref. in source   Description
      1  general          Generally helpful progress information
      2  scripts          Invocation and status of maintainer scripts
     10  eachfile         Output for each file processed
    100  eachfiledetail   Lots of output for each file processed
     20  conff            Output for each configuration file
    200  conffdetail      Lots of output for each configuration file
     40  depcon           Dependencies and conflicts
    400  depcondetail     Lots of dependencies/conflicts output
  10000  triggers         Trigger activation and processing
  20000  triggersdetail   Lots of output regarding triggers
  40000  triggersstupid   Silly amounts of output regarding triggers
   1000  veryverbose      Lots of drivel about eg the dpkg/info directory
   2000  stupidlyverbose  Insane amounts of drivel

Debugging options can be mixed using bitwise-or.
Note that the meanings and values are subject to change.
estibordo
fonte
Isso ainda fará a instalação, não é?
Sam Brightman
Sim, estão 100% certos. Isso deve ser feito em outra instância (de desenvolvimento).
estibordo 16/08
1

Não, você não pode executar parte de um script de manutenção, não há ganchos para fazer isso acontecer.

Você só pode ver o que o script faria examinando-o manualmente - novamente, nenhuma "execução a seco" pode dizer exatamente o que fará e o que não fará, apenas "Eu executarei o postinst com esses argumentos".

Esses são os motivos pelos quais temos ambientes de teste e teste.

mulher
fonte
Eu quis dizer um subconjunto dos scripts, não parte de um script individual. Desculpe se isso não estava claro. Não quero mágica, conhecer o script e os argumentos me permite inspecionar ou modificar as partes que são inconvenientes.
Sam Brightman