criar um pacote .deb a partir de scripts ou binários

73

Procurei uma maneira simples de criar pacotes .deb para coisas que não têm código fonte para compilar (configurações, shellscripts, software proprietário). Isso foi um grande problema, porque a maioria dos tutoriais de pacotes pressupõe que você tenha um tarball de origem que deseja compilar. Então eu encontrei este pequeno tutorial (alemão).

Depois, criei um pequeno script para criar um repositório simples. Como isso:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

Eu adicionei a chave ao chaveiro apt e incluí a fonte assim:

deb http://my.default.com/my-repository/ ./

Parece que o repositório em si está funcionando bem (eu tive alguns problemas, para corrigi-los, eu precisava adicionar os Pacotes duas vezes e fazer a solução alternativa para o arquivo temporário do arquivo Release). Também coloquei alguns .deb baixados no repositório, parece que eles também estão funcionando sem problemas. Mas meus pacotes criados por mim não ... Quando eu faço sudo apt-get update, eles estão causando erros como este:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

Alguém tem uma idéia do que eu fiz de errado?

ATUALIZAÇÃO 06-03-2012: Apenas uma dica para outra pessoa que está procurando uma maneira fácil de criar DEBs: Dê uma olhada no FPM .

Thomas Deutsch
fonte
Você adicionou um arquivo DEBIAN / control ao pacote, que contém o campo Depende:?
Bilal Akhtar 23/02
5
Btw. Agora estou usando o FPM para minhas necessidades de embalagem: github.com/jordansissel/fpm
Thomas Deutsch
FWIW, recebi a mesma mensagem de erro em um pacote que criei porque havia especificado uma das dependências incorretamente. Eu tinha escrito "foo> = 2.1" quando deveria ser "foo (> = 2.1)". Passei mais de uma hora olhando a última metade do erro antes de perceber que a primeira metade do erro estava me dizendo exatamente o que havia de errado ... (PS: FPM é demais. Você também vê o Aptly.)
Mark E. Haase
2
Concordo plenamente que não há tutoriais ou guias para empacotar algo que não provenha de uma bola de alcatrão com arquivos make etc. É muito difícil descobrir como fazer isso. Precisamos de um guia para pessoas como desenvolvedores java que desejam distribuir uma guerra com alguns scripts e talvez liquibase, mas não são administradores ou mantenedores do debian sys. O FPM não ajuda nesse caso, pois também exige que você já saiba como criar algo que pode empacotar.
John
11
Muito obrigado por compartilhar as informações sobre o fpm. Funciona como charme!
Damian Nadales

Respostas:

70

O tutorial que você vinculou usa uma abordagem de baixo nível para criar um pacote. Essa abordagem geralmente não é recomendada e pode levar a todos os tipos de problemas quando não for feita com cuidado.

Criar um .deb para um script é muito simples quando você entende o básico sobre empacotamento. Em poucas palavras:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

A adição de mais scripts requer que eles sejam copiados para o diretório e adicionados ao arquivo debian / install - e apenas execute novamente o debuild. Você também deve verificar e atualizar os arquivos debian / *, conforme necessário.

Você deve ler as páginas de manual para: dh_make, dh_installedebuild

João Pinto
fonte
3
Edite debian / control, "Architecture: any" deve ser alterado para "Architecture: all". Não se esqueça de definir a pergunta como respondida;)
João Pinto
3
Além de renomear o diretório e atualizar o debian / changelog, você deve criar o arquivo .orig correspondente à nova versão, este é um arquivo do conteúdo do diretório de origem (sem incluir o debian /).
João Pinto
11
Com o diretório include, o que eu costumo fazer é algo como: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto
11
Adicionar o --indepsinalizador ao dh_makefará com que o pacote "Architecture: all" também -bnão exista no 11.04 e acima.
andrewsomething
11
Depois de construir o pacote .deb, você deve verificar se há erros e melhorias com lintian somescripts_0.1-1_i386.debou lintian package-source.changes- veja: packaging.ubuntu.com/html/...
rubo77