Descompacte facilmente o DEB, edite o postinst e reempacote o DEB

Descompacte facilmente o DEB, edite o postinst e reempacote o DEB

Estou tentando instalar o OpenCL SDK da Intel, mas os arquivos DEB são conversões com erros do RPM (consulteaquipara os curiosos). Preciso editar o postinstscript no DEB que eles fornecem.

Como posso pegar um DEB existente, extrair o conteúdo (incluindo as informações de controle) e depois reembalar o conteúdo para criar um novo DEB? Vou apenas editar arquivos, nenhum arquivo será adicionado ou removido.

Responder1

O comando principal para manipular pacotes deb édpkg-deb.

Para descompactar o pacote, crie um diretório vazio e mude para ele, depois execute dpkg-debpara extrair suas informações de controle e os arquivos do pacote. Use dpkg-deb -bpara reconstruir o pacote.

mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb

Esteja ciente de que, a menos que seu script esteja sendo executado como root, as permissões e propriedade dos arquivos serão corrompidas na fase de extração. Uma maneira de evitar isso é executar seu script emfakeroot. Observe que você precisa executar toda a sequência em fakeroot, e não cada uma dpkg-debindividualmente, pois é o fakerootprocesso que mantém a memória das permissões dos arquivos que não podem ser criados como estão.

fakeroot sh -c '
  mkdir tmp
  dpkg-deb -R original.deb tmp
  # edit DEBIAN/postinst
  dpkg-deb -b tmp fixed.deb
'

Em vez de mexer nas permissões, você pode manter o arquivo de dados intacto e modificar apenas o arquivo de controle. dpkg-debnão fornece uma maneira de fazer isso. Felizmente, os pacotes deb estão em um formato padrão: eles sãoararquivos. Portanto, você pode usar arpara extrair o arquivo de controle, modificar seus arquivos e usar arnovamente para substituir o arquivo de controle por uma nova versão.

mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz

Você deveadicione umentrada do changeloge mude onúmero da versãose você modificar alguma coisa no pacote. A infraestrutura para manipular pacotes Debian assume que se dois pacotes tiverem o mesmo nome e versão, eles serão o mesmo pacote. Adicione um sufixo aorevisão_debianparte no final do número da versão; por motivos de classificação, o sufixo deve começar com ~, por exemplo , 1.2.3-4.1torna-se 1.2.3-4.1~johnjumper1.

Em vez de usar ferramentas shell, você pode usar o Emacs. Odpkg-dev-elpacote(que é seu próprio upstream, pois é um pacote nativo do Debian) contém modos para editar .debarquivos e editar changelogs do Debian. O Emacs pode ser usado de forma interativa ou com script.

Responder2

Você pode usarpmcom a --after-installopção de substituir o postinstscript, assim:

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb

Responder3

Se você deseja apenas extrair arquivos de um arquivo .deb, o 7-Zip é conveniente. 7-Zip suporta arquivos “ar” para “apenas descompactação”. (Não há necessidade de renomear o arquivo; ele abre *.deb como "ar" e mostra "data.tar" dentro.)

informação relacionada