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

23

Gostaria de criar um novo pacote deb para instalar uma série de arquivos. Se 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 de como empacotar as pastas e arquivos de origem seria muito útil.

A questão é - isso é possível e, se sim - como?

Vamos dar um exemplo:

~/mypluginfolder/contém os arquivos x, yuma subpasta chamada abce dentro desse outro arquivo chamado z.

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

Eu presumo que meu pacote debian se pareceria

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

É possível desarmar de alguma forma myfiles.tarpara um local de pasta conhecido, 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 ativação precise da fonte, é aconselhável procurar onde eu devo colocar as pastas e arquivos de origem na estrutura do pacote deb.


Isso acabará se tornando uma série de pacotes PPA individuais da barra de ativação.

O que eu prefiro (mas talvez não consiga alcançar ...) é manter minha embalagem no mínimo - criar uma série de pacotes a partir de um modelo e ajustar o mínimo (changelog etc + o arquivo tar / estrutura de arquivos e pastas) .

liberdade de expressão
fonte
Hum ... por que você quer que um .deb faça a extração de alcatrão ? Por que não pegar o código-fonte do tar e criar a deb do zero com a fonte?
Thomas Ward
2
Uma possibilidade pode ser que você use o tarball de outro lugar, no estilo adobe-flash.
JRG
@jrg, que baixa o instalador .bin, não um arquivo tar. O estilo de embalagem do Adobe não fornece a fonte (sua fonte fechada). O conceito, porém, ainda é o mesmo, baixar o código de outro lugar e depois extrair / instalar (estou sendo nit = exigente aqui: P)
Thomas Ward
@LordofTime A mesma diferença. ; p
jrg

Respostas:

31

Abaixo, estou assumindo que a fonte está aberta (por exemplo, scripts Python) que, portanto, não estão vinculados a nenhuma arquitetura (por exemplo, amd64 ou i386), portanto, "todos". Se você tiver alguma fonte C, precisará usar Architecture: amd64 i386em seu controlarquivo de origem .


criando pacote pronto para Launchpad

Isso acabará se tornando uma série de pacotes PPA individuais da barra de ativação.

O que eu prefiro (mas talvez não consiga alcançar ...) é manter minha embalagem no mínimo - criar uma série de pacotes a partir de um modelo e ajustar o mínimo (changelog etc + arquivo tar).

A barra de ativação aceita apenas pacotes de origem, portanto, crie um rulesque instale os arquivos nos locais corretos. Por conveniência, vou usar o debhelper . O diretório com seus arquivos deve se parecer com:

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

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

O changelogarquivo pode ser editado com o dchcomando, disponível no devscriptspacote. O rules(usando debhelper) deve conter:

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

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

O Guia dos Novos Mantenedores Debian foi muito valioso para eu entender isso, é uma leitura recomendada. Exemplo de embalagem pode ser encontrada em https://github.com/Bumblebee-Project/bumblebee-ppa .


criando pacote a partir da árvore de arquivos existente

dpkg-deb -bpode ser usado para criar tarballs a partir de uma árvore de arquivos existente. Primeiro, comece com a criação de um diretório que deve receber o nome do seu pacote. Presumo que você queira nomeá-lo myplugine colocá-lo /usr/share/rhythmbox/plugins/mypluginfolder. Além disso, crie o DEBIANdiretório (maiúsculo!) 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 chamado arquivo de controle localizado no myplugin/DEBIAN/controlqual descreve o pacote. O conteúdo desse 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 você estiver satisfeito, crie o pacote no diretório atual:

dpkg-deb -b myplugin .

Um novo arquivo aparecerá, nomeado como o <package>_<version>_<architecture>.debque está neste exemplo myplugin_1.0-1_all.deb. Você pode usar o lessprograma para espiar o arquivo. Por exemplo less myplugin_1.0-1_all.deb,.

Lekensteyn
fonte
3
+1 gênio absoluto - eu me curvo, senhor. Obrigado!
fossfreedom
Obrigado por esta grande ajuda! Tinha alguns problemas com o arquivo de controle, porém, no final, ele trabalhou, mas não me pergunte como;)
Gerhard Burger