O principal comando para manipular pacotes deb é dpkg-deb
.
Para descompactar o pacote, crie um diretório vazio e alterne para ele, em seguida, execute dpkg-deb
para extrair suas informações de controle e os arquivos do pacote. Use dpkg-deb -b
para reconstruir o pacote.
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Tenha em atenção que, a menos que o seu script esteja em execução como raiz, as permissões e a propriedade dos ficheiros serão danificadas no estágio de extração. Uma maneira de evitar isso é executar seu script em fakeroot
. Observe que você precisa executar a sequência inteira em fakeroot
, não cada dpkg-deb
individualmente, pois é o processo fakeroot
que mantém a memória das permissões dos arquivos que não podem ser criados como sã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 com permissões, você pode manter o arquivo de dados intacto e modificar apenas o arquivo de controle. dpkg-deb
não fornece uma maneira de fazer isso. Felizmente, os pacotes deb estão em um formato padrão: eles são ar
. Portanto, você pode usar ar
para extrair o archive de controle, modificar seus arquivos e usar ar
novamente para substituir o archive 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ê deve adicionar uma entrada do changelog e alterar o número da versão se você modificar alguma coisa no pacote . A infra-estrutura para manipular os pacotes Debian assume que, se dois pacotes tiverem o mesmo nome e versão, eles são o mesmo pacote. Adicione um sufixo à parte debian_revision no final do número da versão; Por razões de classificação, o sufixo deve começar com ~
, por ex. 1.2.3-4.1
se torna 1.2.3-4.1~johnjumper1
.
Em vez de usar ferramentas shell, você pode usar o Emacs. O dpkg-dev-el
package (que é seu próprio upstream, pois este é um pacote Debian nativo) contém modos para editar .deb
arquivos e editar changelogs do Debian. O Emacs pode ser usado interativamente ou com scripts.