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.
@ 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).
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.
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-binarycontrol.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
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.
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.
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.
Respostas:
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-1
para sua primeira tentativa de empacotar o Myapp V4.2) e executedh_make --createorig
. Responda às perguntas. O Debhelper criará a infraestrutura básica necessária para criar um pacote gerando arquivos em um subdiretório chamadodebian
, alguns arquivos obrigatórios e modelos para arquivos opcionais. Pode ser necessário modificar alguns desses arquivos:debian/rules
para 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 arquivodebian/install
para especificar quais arquivos precisam ser instalados onde.debian/copyright
para adicionar informações de licença sobre o seu pacote e informações sobre onde obter a versão mais recente (se relevante).debian/changelog
para remover a referência a um ITP (isso é relevante apenas se você estiver trabalhando no projeto Debian). Renomeiedebian/postinst.ex
paradebian/postinst
e adicione seus comandos de pós-instalação lá. Se você atualizar seu pacote posteriormente, executedebchange -i
para adicionar uma entrada no changelog ou edite o arquivo no Emacs (com o dpkg-dev-el instalado).Execute
dpkg-buildpackage -rfakeroot -us -uc
para criar o.deb
pacote (remova-us -uc
se 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-deb
para construir o pacote. No diretório que contém os dados a serem instalados, adicione um diretório chamadoDEBIAN
no nível superior, contendo os arquivos de controle e os scripts do mantenedor.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 chamadoscontrol.tar.gz
(sem subdiretórios) e um arquivo de texto chamadodebian-binary
e contendo o texto2.0
.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 ladocontrol
.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.
fonte
dch -i
.ar
fazendo issotar
não é?dh_make --createorig
usados, é necessárioexport DEBEMAIL="[email protected]"
eexport DEBFULLNAME="Firstname Lastname"
antecipadamente.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:
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.gz
edata.tar.gz
.Finalmente, você precisa do
ar
pacote para criar o arquivo .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz
fonte
ar -r xxx.deb debian-binary control.tar.gz data.tar.gz
poderia valer a pena sublinhar a ordem é importante: o controle deve vir antes de dados.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.
fonte
Veja a Wiki Debian sobre Empacotamento , talvez
equivs
(veja o link) já satisfaça seus requisitos.A página da Wikipedia no
deb
formato de arquivo também inclui muitos links úteis.fonte
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!
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.
fonte
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.
fonte
fonte