Como criar um pacote deb que instale uma série de arquivos

23

Eu gostaria de criar um novo pacote deb para instalar uma série de arquivos. Se for possível, eu gostaria de descompactar a pasta que contém esses arquivos como parte da instalação em um local de pasta conhecido. Caso contrário, algum conhecimento sobre como empacotar as pastas e arquivos de origem seria muito útil.

A pergunta é - isso é possível e, em caso afirmativo, como?

Vamos dar um exemplo:

~/mypluginfolder/ contém os arquivos x , y , uma subpasta chamada abc e dentro desse outro arquivo chamado z .

Eu quero tar esta pasta: tar -cvf myfiles.tar ~/mypluginfolder

Eu presumo que meu pacote debian seria parecido com

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

É possível, de alguma forma, descompactar myfiles.tar para uma localização de pasta conhecida, por exemplo

/usr/share/rhythmbox/plugins/

Assim, o resultado final seria:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Se - presumindo que a barra de lançamento precisa de fonte, é aconselhado procurar onde eu deveria colocar as pastas e arquivos de origem na estrutura do pacote deb.

Isso acabará se tornando uma série de pacotes individuais de PPA da barra de lançamento.

O que eu prefiro (mas não posso conseguir ...) é manter minhas embalagens no mínimo - criar uma série de pacotes a partir de um template e ajustar o mínimo (changelog etc + o arquivo tar / file & estrutura de pastas).

    
por fossfreedom 04.06.2012 / 15:42

1 resposta

31

Abaixo, suponho que a fonte esteja aberta (por exemplo, scripts Python), que não estão vinculados a nenhuma arquitetura (por exemplo, amd64 ou i386), portanto, "all". Se você tiver alguma fonte C, precisará usar Architecture: amd64 i386 no arquivo de origem control .

criando o pacote pronto para o Launchpad

This will eventually will become a series of individual launchpad PPA packages.

What I prefer (but may not be able to achieve...) is to keep my packaging to a minimum - create a series of packages from a template and adjust the bare minimum (changelog etc + the tar file).

O Launchpad só aceita pacotes de código-fonte, portanto, crie um rules que instale os arquivos nos locais corretos. Por conveniência, vou usar debhelper . O diretório com seus arquivos deve se parecer com:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

Um arquivo debian/copyright também pode ser útil para informar os usuários sobre as licenças associadas ao pacote. Eu não acho que você precisa de um script postinst , pois você só precisa extrair alguns arquivos. compat deve conter o nível de compatibilidade do debhelper, digamos "8". (por favor, consulte a página de manual do debhelper para mais detalhes)

O arquivo changelog pode ser editado com o comando dch , disponível no pacote devscripts . O rules (usando o debhelper) deve conter:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Torne-o executável usando chmod 755 debian/rules . Um pacote de origem pode ser construído usando debuild -S . Certifique-se de estar em um diretório chamado <package-name>-<version> . Mais informações sobre o comportamento override_ e o comando dh podem ser encontradas em sua página de manual .

O Guia dos Novos Mantenedores Debian foi muito valioso para mim entender isso, é uma leitura recomendada . Exemplo de embalagem pode ser encontrado no link .

criando o pacote a partir da árvore de arquivos existente

dpkg-deb -b pode ser usado para criar tarballs de uma árvore de arquivos existente. Primeiro, comece criando um diretório que deve ser nomeado após o seu pacote. Eu suponho que você queira nomear myplugin e colocar em /usr/share/rhythmbox/plugins/mypluginfolder . Além disso, crie o diretório DEBIAN (maiúsculas!) Para armazenar informações do pacote:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Copie seus arquivos:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Em seguida, você precisará do arquivo chamado controle localizado em myplugin/DEBIAN/control que descreve o pacote. O conteúdo de tal arquivo é colocado abaixo:

Package: myplugin
Version: 1.0-1
Maintainer: You <[email protected]>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Agora, você pode, opcionalmente, verificar o conteúdo do seu pacote. O próximo comando lista o conteúdo das entradas de arquivo e diretório de myplugin :

find myplugin -ls

Se estiver satisfeito, crie o pacote no diretório atual:

dpkg-deb -b myplugin .

Um novo arquivo aparecerá, chamado <package>_<version>_<architecture>.deb , que está neste exemplo myplugin_1.0-1_all.deb . Você pode usar o programa less para espiar no arquivo. Por exemplo, less myplugin_1.0-1_all.deb .

    
por Lekensteyn 04.06.2012 / 16:10