Como criar um arquivo DEB manualmente?

46

Eu quero criar um arquivo DEB manualmente. Gostaria apenas de fornecer uma pasta que contenha dados a serem instalados e um script a ser executado após a instalação.

Isso é possível?

margarida
fonte
Resposta não muito boa que você escolher?
Gigamegs
@ David, na verdade eu fiz isso com o "dpkg-deb", é muito mais fácil, é por isso que escolhi o Gilles, listando os arquivos na pasta do pacote, dando-me uma visão clara do arquivo para colocar lá. Então eu acho que a resposta dele é melhor ..
daisy
Também estou listando todos os arquivos no pacote.
Gigamegs
11
@ David, quero dizer, argumentar que sua resposta é derivada é uma coisa, mas "não é uma resposta muito boa"? A resposta de Gilles é excelente; não importa se a sua resposta foi a primeira, a dele é muito mais completa. E não há nada errado em pegar uma resposta existente e expandi-la; isso é uma coisa boa
Michael Mrozek

Respostas:

57

Criando um pacote de origem

Minha recomendação é fazer um pacote de origem. Instale o build-essential , debhelper , dh-make . Mude para o diretório em que os arquivos que você deseja instalar estão (o nome do diretório deve estar no formato $PACKAGE-$VERSION, por exemplo, myapp-4.2-1para sua primeira tentativa de empacotar o Myapp V4.2) e execute dh_make --createorig. Responda às perguntas. O Debhelper criará a infraestrutura básica necessária para criar um pacote gerando arquivos em um subdiretório chamado debian, alguns arquivos obrigatórios e modelos para arquivos opcionais. Pode ser necessário modificar alguns desses arquivos:

  • Edite debian/rulespara criar o que precisa para criar e instalar os arquivos no lugar certo. Se você apenas precisar copiar alguns arquivos e não compilar coisas, edite o arquivo debian/installpara especificar quais arquivos precisam ser instalados onde.
  • Edite debian/copyrightpara adicionar informações de licença sobre o seu pacote e informações sobre onde obter a versão mais recente (se relevante).
  • Edite debian/changelogpara remover a referência a um ITP (isso é relevante apenas se você estiver trabalhando no projeto Debian). Renomeie debian/postinst.expara debian/postinste adicione seus comandos de pós-instalação lá. Se você atualizar seu pacote posteriormente, execute debchange -ipara adicionar uma entrada no changelog ou edite o arquivo no Emacs (com o dpkg-dev-el instalado).

Execute dpkg-buildpackage -rfakeroot -us -ucpara criar o .debpacote (remova -us -ucse desejar assinar o pacote com sua chave PGP).

Criando um pacote binário diretamente

Se você decidir criar um pacote binário diretamente sem construí-lo a partir de um pacote fonte, o que não é realmente mais fácil porque não há tantas ferramentas para facilitar o processo, você precisará de alguma familiaridade básica com o formato dos pacotes deb. Está descrito no Manual de Políticas Debian , em particular ch. 3 (formato de pacotes binários) , cap. 5 (arquivos de controle) , cap. 6 (scripts de instalação) e apêndice B (manipulação de pacote binário) .

Você se certifica de que seu pacote instale os arquivos esperados /usr/share/doc/copyright(contendo a licença do conteúdo do pacote, bem como onde encontrar a versão mais recente do pacote) e /usr/share/doc/changelog.Debian.gz(contendo o registro de alterações do pacote deb). Você não precisa disso se quiser usar o pacote internamente, mas é melhor tê-lo.

No Debian e derivados

Se você possui as ferramentas Debian disponíveis, use dpkg-debpara construir o pacote. No diretório que contém os dados a serem instalados, adicione um diretório chamado DEBIANno nível superior, contendo os arquivos de controle e os scripts do mantenedor.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

O jeito difícil

Se você não possui as ferramentas Debian, construa um arquivo dos arquivos que deseja empacotar data.tar.gz, um arquivo separado dos arquivos de controle chamados control.tar.gz(sem subdiretórios) e um arquivo de texto chamado debian-binarye contendo o texto 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Você precisa de pelo menos um arquivo de controle com os campos Package, Maintainer, Priority, Architecture, Installed-Size, Version, e qualquer declaração de dependência necessário.

O script a ser executado após a instalação é chamado postinst. Certifique-se de torná-lo executável. Vai ao lado control.

Convertendo um pacote binário de um formato diferente

Se você já possui um pacote binário de outra distribuição, pode usar alien para convertê-lo.

Gilles 'SO- parar de ser mau'
fonte
3
OMI é uma cópia da minha resposta? O que você acha?
Gigamegs
1
A resposta pressupõe que o OP saiba como usar o emacs. O emacs é realmente necessário aqui? Para editar changelogs, acho que podemos usar dch -i.
Faheem Mitha
O que está arfazendo isso tarnão é?
mmstick
@mmstick É um formato diferente. Não sei por que os designers do formato deb escolheram usar ar aqui.
Gilles 'SO- stop be evil'
1
Se você deseja alterar o nome e o email dh_make --createorigusados, é necessário export DEBEMAIL="[email protected]"e export DEBFULLNAME="Firstname Lastname"antecipadamente.
Ryan
10

Primeiro, você precisa criar uma pasta de compilação e um arquivo morto de seus arquivos: tar czvf data.tar.gz files

Em seguida, na pasta de construção, você deve criar um arquivo de controle com algumas informações desejadas:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <[email protected]>
 Description: This is optional, but creates warnings if left out

Em seguida, você pode adicionar scripts shell pré-instalar, pré-imprimir, prerm e postrm independentemente para controlar o comportamento de pré e pós-instalação e pré e pós-remoção do arquivo .deb e, em seguida, criar o arquivo de controle com o tar: tar czvf control.tar.gz control preinst postinst prerm postrm

Então você precisa de um arquivo debian-binária: echo 2.0 > debian-binary. Na sua pasta de construção, você deve ter agora esses arquivos: debian-binary control.tar.gze data.tar.gz.

Finalmente, você precisa do arpacote para criar o arquivo .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz

Gigamegs
fonte
1
Sobre ar -r xxx.deb debian-binary control.tar.gz data.tar.gzpoderia valer a pena sublinhar a ordem é importante: o controle deve vir antes de dados.
precisa saber é o seguinte
@ Byymain, a resposta mais votada parece, de fato, parcialmente com base no seu texto, mas adiciona detalhes a ela e é melhor legível. a sequência que podemos copiar / colar o torna particularmente mais bonito.
mariotomo
3

Eu faço muitos pacotes, e fazer um pacote completo não é uma questão trivial. Em uma nota positiva, arquivos e scripts são muito menos trabalhosos. Você pode criar esse pacote, de maneira muito simples, com uma ferramenta conhecida como debreate .

Debreate é uma GUI realmente simples, apenas para criar pacotes DEB simples. Você pode apenas especificar quais arquivos, para onde eles vão e se / o que deve ser executado na pós / pré-instalação / desinstalação. Eu costumava fazer todos os meus pacotes da maneira padrão, mas depois que comecei a usar essa ferramenta, voltarei apenas quando necessário.

JM Becker
fonte
1

Encontrei isso com o Zimbra 7 no Debian usando seus pacotes Ubuntu. (Sou teimoso, gosto do Debian> bUbuntu, apesar de o Zimbra ter lançado apenas para o Ubuntu.) Não tenho certeza de como trabalhei nisso antes, tenho certeza de que não precisei fazer isso quando o instalei anteriormente!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Todos os seus novos arquivos .deb estarão disponíveis new/.

Nota : isso estava no aperto - o dpkg no wheezy tem --force-bad-version agora.

matemática
fonte
1

Para a criação rápida de pacotes, você pode usar o programa checkinstall. Ele instala o programa, observa as alterações - e cria um pacote deb ou rpm.

indefinir
fonte
Isso soa como uma ótima opção para rastrear pacotes que você precisa instalar a partir do código-fonte. Você pode oferecer mais detalhes? Por exemplo, no decorrer da instalação, você pode alterar links simbólicos, excluir arquivos, editar arquivos de configuração, adicionar daemons, etc ... até que ponto os usuários verificam a instalação rastrear e desfazer essas alterações? Você pode modificar facilmente sua saída para adicionar scripts prerm e postrm?
GTAA
veja wiki.debian.org/CheckInstall Se você quiser mudar as coisas durante a instalação - a maneira mais fácil é modificar o Makefile para alterar a seção de instalação. prerm / postrm - não encontrei maneira de modificá-lo. É apenas para pequenos programas que permitem a desinstalação simples.
undefine
-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e [email protected] -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
Killinks
fonte