Debian

Como fazer para criação de pacotes Debian

Como fazer para criação de pacotes Debian

1. Prefácio

Ser responsável por uma máquina significa cuidar do hardware, bem como dos componentes de software. Como visto no dia a dia como um administrador de sistema, é muito melhor instalar o software como um pacote de software em vez de um monte de arquivos de origem. Isso reduz os custos de manutenção adequada do sistema.

Os pacotes que estão disponíveis no distribuidor de sua preferência são validados e supervisionados por um mantenedor do pacote. Ele testou o software e garantiu que ele se adequa aos demais pacotes de software disponíveis na distribuição. Além disso, o pacote é assinado com uma chave GPG do mantenedor do pacote. 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 brevemente como construir um pacote para Debian GNU / Linux. Para 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 Debian [dpmb]. Para construir pacotes para o Debian GNU / Linux estes documentos são essenciais:

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

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

2. Requisitos

2.1. Chave GPG

Como etapa 1, tenha sua chave GPG disponível. Posteriormente, a chave será necessária para assinar o pacote. Tenha em mente que pacotes não assinados não são confiáveis ​​e não podem fazer parte do universo Debian.

Caso você ainda não tenha uma chave GPG, crie uma. Você pode seguir as três etapas abaixo. O primeiro comando gera uma nova chave, o segundo exporta sua nova chave para um arquivo separado e o terceiro 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_ está correto. É comum usar uma combinação de nome e sobrenome. Este nome terá que ser exatamente o mesmo no pacote, então, 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:

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

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Prepare o software a ser empacotado

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

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

Copie o 'tar.arquivo compactado gz 'no diretório:

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

Mude para o 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 compactado:

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

3. Debianização

Neste ponto, iremos adicionar os arquivos que são específicos para um pacote Debian. É por isso que esta etapa é chamada de _Debianização_ 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 helloworld.py 

Vamos adicionar os arquivos que são específicos de um pacote Debian. A ferramenta 'dh_make' entra em jogo. A opção '-e' usa o endereço fornecido como o endereço de e-mail no campo 'Mantenedor' do arquivo 'debian / control'. Construir o pacote use seu próprio endereço de e-mail, em vez. Lembre-se de usar o mesmo endereço de e-mail que corresponde à sua chave GPG.

A opção '-f' usa o arquivo fornecido como o arquivo fonte original e pula a cópia da árvore do programa atual para o 'programa.orig '.

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

No prompt você é solicitado a selecionar o tipo de pacote que deve ser criado. Para escolher _único binário_ digite 's'.

Tipo de pacote: binário único, binário indep, binário múltiplo, biblioteca, módulo do kernel, patch do kernel? [s / i / m / l / k / n] s Nome do mantenedor: Frank Hofmann Endereço de e-mail: [e-mail protegido] 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: Single Hit  para confirmar: Atualmente não há Makefile de nível superior. Isso pode exigir ajuste adicional. Feito. Por favor edite os arquivos no subdiretório debian / agora. Você também deve verificar se os Makefiles do helloworld são instalados 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 que são necessárias _para construir_ o pacote. Usando o comando 'dpkg-depcheck -d ./ configure 'você recebe uma lista com todos os pacotes necessários. Em nosso caso, não há mais nenhum pacote necessário porque Python é uma linguagem interpretada.

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

Fonte: helloworld Seção: python Prioridade: opcional Mantenedor: Frank Hofmann <[email protected]> Build-Depends: debhelper (> = 9) Standards-Version: 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 = collab-maint / helloworld.git; a = summary Pacote: helloworld Arquitetura: qualquer Depende: $ shlibs: Depends, $ misc: Depends, python Descrição: Imprime Hello World em Python Imprime Hello World em Python 

3.3. Ajuste o arquivo de direitos autorais

O arquivo 'debian / copyright' contém as informações da licença para o pacote de software. Ele está preparado para o lançamento via GNU Public License 2 (GPLv2). Para nosso exemplo, parece o seguinte:

Formato: http: // www.debian.org / doc / packaging-manuais / copyright-format / 1.0 / Upstream-Name: helloworld Fonte: http: // www.efho.de / Arquivos: debian / * Copyright: 2017 Frank Hofmann <[email protected]> Licença: GPL-2 + Este pacote é um software livre; você pode redistribuí-lo e / ou modificá-lo sob os termos da GNU General Public License conforme publicada pela Free Software Foundation; tanto 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 NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a GNU General Public License para mais detalhes ... Você deve ter recebido uma cópia da GNU General Public License junto com este programa. Se não, veja  . Em sistemas Debian, o texto completo da GNU General Public License versão 2 pode ser encontrado em "/ usr / share / common-licences / GPL-2". 

3.4. Ajustar o arquivo changelog

Após as informações de copyright 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 = baixa * Versão inicial - Frank Hofmann <[email protected]> Sáb, 04 de novembro de 2017 21:16:13 +0100 

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


4. Construir o pacote

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

~ / build / helloworld / 0.1 / helloworld-0.1 $ dpkg-buildpackage -rfakeroot

A opção '-rfakeroot' permite ao 'dpkg-buildpackage' executar comandos como um usuário privilegiado com a ajuda do comando 'fakeroot'. 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 (mostrada aqui em um ambiente de idioma alemão):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann <[email protected]> dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian / rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Informação: Quellformat "3.0 (colcha) "wird verwendet dpkg-source: Informação: helloworld wird unter Benutzung des existierenden ./ helloworld_0.1.orig.alcatrão.gz gebaut dpkg-source: Informações: helloworld wird em helloworld_0.1-1.debian.alcatrão.xz gebaut dpkg-source: Informações: helloworld wird em helloworld_0.1-1.DSC gebaut debian / rules build dh construção dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian / rules binary dh binários 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 Depends von Paket helloWorld: unbekannte Substitutionsvariable $ shlibs : Depende dh_md5sums dh_builddeb dpkg-deb: Embarque "helloworld" wird em "… / helloworld_0.1-1_amd64.deb "gebaut. dpkg-genchanges <… /helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "Frank Hofmann (Hofmann EDV) <[email protected]> "4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 05/09/2014 

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 seu pacote para encontrar violações contra as regras estritas que os pacotes Debian devem 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 caracteres incorretos. A opção '-pedantic' pede ao 'lintian' para ser muito mais crítico do que o normal. Como você pode ver abaixo 'lintian' está um pouco mal-humorado e descobriu três avisos e um erro.

Exceto para o primeiro aviso podemos facilmente deixar 'lintian' feliz e ajustar o conteúdo do pacote de acordo com o conjunto de regras. O aviso 'new-package-should-close-itp-bug' significa que não há relatório de bug contra o pacote ITP (ITP significa _intencionado para o pacote_). Para um pacote Debian regular, um relatório de bug deve ser enviado ao bugtracker do pacote ITP para notificar os outros que você pretende começar a empacotar este software.

4.2. Aviso: 'readme-debian-contains-debmake-template

O arquivo 'README.Debian 'tem a intenção de manter notas adicionais sobre este pacote. 'dh_make' criou este arquivo para nós:

helloworld para Debian ---------------------  -- Frank Hofmann <[email protected]> Sáb, 04 de novembro de 2017 21:16:13 +0100 

Em nosso exemplo, não temos informações adicionais, portanto, podemos excluir o arquivo.

4.3. Aviso: 'descrição começa com espaços à esquerda'

Este aviso é gerado 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-sinopse-é-duplicada'

Cada pacote requer uma descrição curta e uma descrição mais longa em 'debian / control'. Este erro é gerado porque ambas as descrições são idênticas. Assim que estendemos a descrição mais longa, o erro desaparece.


5. Links e referências

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: The Debian Developer's Reference
- [dnmg] Josip Rodin, Osamu Aoki: O Guia do Novo Mantenedor do Debian
- [dpmb] Axel Beckert, Frank Hofmann: o livro de gerenciamento de pacotes Debian
- [dpm] O Manual de Políticas Debian
- [dpt] O tutorial de empacotamento do Debian
- [gph] O GNU Privacy Handbook
- [lushpaiPackage] Alex Lushpai: Como criar um pacote debian a partir da fonte


6. Reconhecimentos

O autor gostaria de agradecer a Axel Beckert e Gerold Rupprecht por seu apoio e críticas na preparação deste artigo.

Como alterar o ponteiro do mouse e tamanho do cursor, cor e esquema no Windows 10
O ponteiro do mouse e o cursor no Windows 10 são aspectos muito importantes do sistema operacional. Isso também pode ser dito para outros sistemas ope...
Mecanismos de jogos gratuitos e de código aberto para o desenvolvimento de jogos Linux
Este artigo cobrirá uma lista de mecanismos de jogo gratuitos e de código aberto que podem ser usados ​​para desenvolver jogos 2D e 3D no Linux. Exist...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider é a décima segunda adição à série Tomb Raider - uma franquia de jogos de ação e aventura criada pela Eidos Montreal. O jogo ...