Criação do pacote Debian Howto

Criação do pacote Debian Howto

Prefácio

Ser responsável por uma máquina significa cuidar do hardware, bem como dos componentes de software. Como visto na vida cotidiana como administrador do sistema, é muito melhor instalar o software como um pacote de software em vez de um monte de arquivos de origem. Isso reduz os custos para manter adequadamente o sistema.

Os pacotes disponíveis no seu distribuidor preferido são validados e supervisionados por um mantenedor de pacotes. Ele testou o software e garante que ele se encaixa nos outros pacotes de software disponíveis na distribuição. Além disso, o pacote é assinado com uma chave GPG do mantenedor de pacotes. Isso garante a integridade do pacote e mostra que o pacote é de uma fonte confiável.

O formato do pacote depende da sua distribuição Linux. Os formatos selecionados são os seguintes:

Deb

Pacotes usados ​​em: Debian GNU/Linux, Ubuntu, Armbian, Linux Mint, Knoppix

RPM

Pacotes usados ​​em: redhat, fedora, centos, openSuse

TGZ e TXZ

Pacotes usados ​​em: Slackware

alcatrão.xz

Pacotes usados ​​em: arch linux

Este documento explica como construir um pacote para o Debian GNU/Linux brevemente. Para obter informações detalhadas sobre o formato do pacote Debian e as ferramentas para manter um sistema Linux baseado em Deb ', você pode dar uma olhada no livro de gerenciamento de pacotes do Debian [DPMB] para criar pacotes para o Debian GNU/Linux, esses documentos são essenciais:

  • O guia do novo mantenedor do Debian [DNMG]
  • A referência do desenvolvedor do Debian [DDR]
  • O tutorial de embalagem do Debian [DPT]
  • O Manual de Política Debian [DPM]

O pacote com o qual trabalharemos é chamado 'Helloworld' e tem a versão número 0.1. Para fins de demonstração, ele simplesmente contém um único script python que gera a famosa mensagem “Olá, mundo!”:

#!/usr/bin/python
print ("Olá, mundo!")

Requisitos

2.1. Chave GPG

Como etapa 1, tenha sua chave GPG disponível. Mais tarde, a chave será necessária para assinar o pacote. Lembre -se de que pacotes não assinados não são confiáveis ​​e não podem fazer parte do universo Debian.

Caso você não tenha uma chave GPG, mas crie um. Você pode seguir as três etapas abaixo. O primeiro comando gera uma nova chave, a segunda exporta sua nova chave para um arquivo separado, e a terceira adiciona a chave ao seu chaveiro pessoal.

$ GPG-Gen-Key
$ gpg -a -output ~/.gnupg/your_name.gpg --export 'seu nome'
$ gpg --import ~/.gnupg/your_name.gpg

Durante a criação, certifique -se de que o nome dado _ seu nome esteja correto. É comum usar uma combinação de primeiro nome e sobrenome. Esse nome terá que ser exatamente o mesmo no pacote e, ao criar o arquivo 'Control' do pacote Debian. Para obter mais informações sobre o GPG, dê uma olhada no GNU Privacy Handbook [GPH].

2.2. A cadeia de ferramentas de embalagem

Para construir um pacote Debian com código -fonte, os seguintes pacotes de software são necessários em seu sistema:

  • Construção-essencial
  • Autoconf
  • Autorake
  • AutoTools-Dev
  • dh-make
  • Debhelper
  • DevScripts
  • Fakerot
  • xutils
  • Lintian
  • pbuilder

Como 'root' do usuário, você pode instalá -los usando o seguinte comando:

# instalação apt-get Build-essencial AutoConf Automake AutoTools-Dev DH-Make Debhelper Devscripts Fakerot Xutils Lintian Pbuilder

2.3. Prepare o software para ser embalado

Temos que preparar um diretório para construir o pacote. Crie um diretório para preparar o ambiente em que construiremos o pacote:

$ mkdir -p ~./build/helloworld/0.1

Copie o alcatrão.Arquivo comprimido de GZ no diretório:

$ cp helloworld-0.1.alcatrão.gz ~./build/helloworld/0.1

Mude no diretório e extraia o pacote:

$ CD ~./build/helloworld/0.1
~/build/helloworld/0.1 $ tar -xzf helloworld -0.1.alcatrão.gz

Agora, o diretório contém o código -fonte em um diretório separado e o arquivo comprimido:

~/build/helloworld/0.1 $ ls
helloworld-0.1 Helloworld-0.1.alcatrão.gz

Debianização

Neste ponto, adicionaremos os arquivos específicos a um pacote Debian. É por isso que esta etapa é chamada _debianization_ do software. Isso é feito em várias etapas únicas.

3.1 Prepare a estrutura do pacote

Mude para o diretório que mantém todo o código -fonte do pacote. Em nosso exemplo, o pacote contém o arquivo 'Helloworld.Py ', apenas:

~ $ CD Build/Helloworld/0.1/helloworld-0.1
~/build/helloworld/0.1/helloworld-0.1 $ ls
Olá Mundo.py

Vamos adicionar os arquivos específicos a um pacote Debian. A ferramenta 'dh_make' entra em jogo. O Switch '-e' usa o endereço fornecido como o endereço de email no campo 'mantenedor' do arquivo 'Debian/Control'. Construir o pacote Use seu próprio endereço de e -mail, em vez disso. Lembre -se de usar o mesmo endereço de e -mail que corresponde à sua chave GPG.

O Switch '-f' usa o arquivo especificado como o arquivo de origem original e pula a cópia da árvore do programa atual para 'Programa.origem '.

~/build/helloworld/0.1/helloworld-0.1 $ dh_make -e [email protected] -f… /helloworld -0.1.alcatrão.gz

No aviso, você deve selecionar o tipo de pacote que deve ser criado. Para escolher _single binary_ type 's'.

Tipo de pacote: binário único, binário independente, binário múltiplo, biblioteca, módulo de kernel, patch do kernel?
[s/i/m/l/k/n] s
Nome do mantenedor: Frank Hofmann
Email-Address: [email protected]
Data: Sáb, 04 de novembro de 2017 21:16:13 +0100
Nome do pacote: Helloworld
Versão: 0.1
Licença: em branco
Tipo de pacote: único
Acertar para confirmar:
Atualmente, não há makefile de nível superior. Isso pode exigir ajuste adicional.
Feito. Por favor, edite os arquivos no Debian/ Subdirectory agora. Você também deveria
Verifique se o Helloworld Makefiles se instala em $ destdir e não em / .

Isso resulta em um diretório chamado 'Debian':

~/build/helloworld/0.1/helloworld-0.1 $ ls
Debian Helloworld.py

Este diretório contém todos os arquivos específicos do pacote.

3.2. Ajuste o arquivo de controle

O arquivo 'Debian/Control' mantém as dependências necessárias _ para construir_ o pacote. Usando o comando 'dpkg -depcheck -d ./Configure 'Você recebe uma lista com todos os pacotes necessários. No nosso caso, não há mais pacote mais necessário porque o Python é uma linguagem interpretada.

Em seguida, temos que editar o arquivo 'Debian/Control' e adicionar valores específicos para o pacote. Para o nosso exemplo, parece o seguinte:

Fonte: Helloworld
Seção: Python
Prioridade: Opcional
Mantenedor: Frank Hofmann
Dependos de construção: Debhelper (> = 9)
Padrões-Versão: 3.9.5
Página inicial: http: // www.efho.de/
#Vcs-git: git: // Anonscm.Debian.Org/Collab-Maint/Helloworld.git
#VCS-Browser: http: // Anonscm.Debian.org/?p = colaboratório-mant/helloworld.git; a = resumo
Pacote: Helloworld
Arquitetura: qualquer
Depende: $ shlibs: depende, $ misc: depende, python
Descrição: Imprime Hello World in Python
Imprime Hello World in Python

3.3. Ajuste o arquivo de direitos autorais

O arquivo 'Debian/Copyright' contém as informações de licença para o pacote de software. Está preparado para a liberação via Licença pública 2 da GNU (GPLV2). Para o nosso exemplo, parece o seguinte:

Formato: http: // www.Debian.org/doc/packaging-manuals/direitos autorais/1.0/
Nome upstream: helloworld
Fonte: http: // www.efho.de/
Arquivos: Debian/*
Direitos autorais: 2017 Frank Hofmann
Licença: GPL-2+
Este pacote é um software livre; você pode redistribuí -lo e/ou modificar
sob os termos da licença pública geral da GNU, conforme publicado por
a Free Software Foundation; a versão 2 da licença, ou
(por sua opção) Qualquer versão posterior.
.
Este pacote é distribuído na esperança de que seja útil,
mas sem qualquer garantia; sem sequer a garantia implícita de
Merchantabilidade ou condicionamento físico para um propósito específico. Veja o
GNU Licença pública geral para mais detalhes.
.
Você deveria ter recebido uma cópia da licença pública geral da GNU
junto com este programa. Se não, veja
.
Nos sistemas Debian, o texto completo do GNU General
Licença pública A versão 2 pode ser encontrada em "/usr/share/common-licenses/gpl-2".

3.4. Ajuste o arquivo Changelog

Após as informações de direitos autorais, o arquivo 'Debian/Changelog' deve ser ajustado. Em nosso exemplo, adicionamos as informações "lançamento inicial".

Helloworld (0.1-1) instável; urgência = baixo
* Lançamento inicial
-- Frank Hofmann Sáb, 04 de novembro de 2017 21:16:13 +0100

Isso é tudo o que precisamos até agora - agora podemos construir o pacote, finalmente.


Construa o pacote

Para construir o pacote, precisamos subir um diretório e executar o seguinte comando:

~/build/helloworld/0.1/helloworld-0.1 $ DPKG -BUILDPACKAGE -RFAKEROOT

A opção '-rfakeroot' permite 'dpkg-buildpackage' executar comandos como um usuário privilegiado com a ajuda do comando 'fakerot'. Isso é necessário para preparar o pacote e criar arquivos e diretórios.
O comando acima resulta em uma lista mais longa de mensagens de saída (mostradas aqui em um ambiente de idioma alemão):

DPKG-BuildPackage: Quellpaket Helloworld
DPKG-BuildPackage: Quellpaket Helloworld
DPKG-BUILDPACKAGE: QuillVersion 0.1-1
DPKG-BuildPackage: Quelldistribution instável
DPKG-BuildPackage: Quellen Geändert Durch Frank Hofmann
DPKG-BUILDPACKAGE: host-architektur amd64
DPKG-SOURCE-Helloworld-0 antes da construção.1
Fakerot Debian/Regras Limpe
DH limpo
dh_testdir
dh_auto_clean
dh_clean
dpkg-source -b helloworld-0.1
DPKG-SOURCE: Informação: QuellFormat "3.0 (Quilt) "Wird Verwendet
DPKG-Source: Informação: Helloworld Wird Unter Benutzung des Existienden ./helloworld_0.1.orig.alcatrão.GZ Gebaut
DPKG-SOURCE: Informação: Helloworld Wird in Helloworld_0.1-1.Debian.alcatrão.XZ Gebaut
DPKG-SOURCE: Informação: Helloworld Wird in Helloworld_0.1-1.DSC Gebaut
Debian/Regras Construa
DH Build
dh_testdir
dh_auto_configure
dh_auto_build
dh_auto_test
Fakerot Debian/Regras Binária
DH binário
dh_testroot
dh_prep
dh_auto_install
dh_installdocs
dh_installChangElogs
dh_perl
dh_link
dh_compress
dh_fixperms
dh_strip
dh_makeshlibs
dh_shlibdeps
dh_installdeb
dh_gencontrol
DPKG-GENCONTROL: Warnung: Feld Depende de von Paket Helloworld: não substituições não escaladas $ shlibs: depende
dh_md5sums
dh_builddeb
dpkg-deb: paket "helloworld" wird in "… /helloworld_0.1-1_AMD64.Deb "Gebaut.
DPKG-Gonchanges <… /helloworld_0.1-1_amd64.changes
DPKG-Gonchanges: Kompletter Quellcode Beim Hochladen Hinzufügen
DPKG-SOURCE-ADEMBLEIRO-BUILD HELLOWORLD-0.1
DPKG-BuildPackage: Alles Hochzuladen (OriginalQuellen entalten)
sinfile helloworld_0.1-1.dsc
Sie Benötigen Eine senha, um den geheimen schlüssel zu entsperren.
Benutzer: "Frank Hofmann (Hofmann Edv)
"
4096 bits RSA Schlüssel, ID D431AC07, ERZEUGT 2014-09-05

4.1. Validando o pacote

Parabéns - você conseguiu construir um pacote debian - sim! Agora, vamos dar uma olhada mais de perto no pacote. Aqui, 'Lintian' entra em jogo. Esta ferramenta valida o seu pacote para encontrar violações contra as regras estritas que os pacotes do Debian têm que cumprir.

Para executar os testes, digite o seguinte comando:

lintian helloworld_0.1-1_AMD64.Deb

A ferramenta não encontra violações de regras, mas também erros de ortografia e personagens errados. O interruptor '-Pedantic' pede que 'lintian' seja muito mais crítico do que o habitual. Como você pode ver abaixo 'Lintian' é um pouco mal -humorado e descobriu três avisos, e um erro.

Exceto pelo primeiro aviso, podemos facilmente fazer 'Lintian' feliz e causar o conteúdo do pacote de acordo com o conjunto de regras. O aviso 'Package-ombro-de-pacote-itp-bug' significa que não há relatório de bug no pacote ITP (ITP significa _pretendido para pacote_). Para um pacote debian regular, um relatório de bug deve ser enviado ao Bugtracker para o pacote ITP para notificar outras pessoas que você pretende começar a embalar este software.

4.2. Aviso: 'ReadMe-debian-contains-debmake-temply

O arquivo 'readme.Debian 'destina -se a manter anotações adicionais sobre este pacote. 'dh_make' criou este arquivo para nós:

Helloworld para Debian
---------------------

-- Frank Hofmann Sáb, 04 de novembro de 2017 21:16:13 +0100

Em nosso exemplo, não temos informações adicionais, para que possamos excluir o arquivo.

4.3. Aviso: 'Descrição-starts-with líder-espaços'

Esse aviso é levantado porque a descrição mais longa do nosso pacote no arquivo 'Debian/Control' começa com mais de um único espaço. Assim que removermos um único espaço, o aviso desaparecerá.

4.4. Erro: 'Descrição-Synopsis-is-Dupliced'

Cada pacote requer uma descrição curta e mais longa em 'Debian/Control'. Este erro é levantado porque ambas as descrições são idênticas. Assim que estendemos a descrição mais longa, o erro se foi.


Links e referências

- [DDR] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: a referência do desenvolvedor do Debian
- [DNMG] Josip Rodin, Osamu Aoki: O Guia do New Mantener Debian
- [DPMB] Axel Beckert, Frank Hofmann: O Livro de Gerenciamento de Pacote Debian
- [DPM] O Manual de Política Debian
- [DPT] O tutorial de embalagem do Debian
- [GPH] O Manual de Privacidade GNU
- [Lushpaipackage] Alex Lushpai: como criar o pacote Debian a partir da fonte


Reconhecimentos

O autor gostaria de agradecer a Axel Beckert e Gerold Ruprecht por seu apoio e críticos enquanto preparava este artigo.