Product SiteDocumentation Site

15.2. Construindo seu Primeiro Pacote

15.2.1. Meta-pacotes ou Falsos Pacotes

Pacotes falsos e meta-pacotes são similares, ambos são caixas vazias que existem apenas pelo efeito que seus metadados fazem na pilha de gerenciamento de pacotes.
O propósito de um pacote falso é enganar o dpkg e o apt para acreditarem que algum pacote está instalado mesmo que em realidade seja apenas uma caixa vazia. Isto permite satisfazer dependências num pacote quando o programa correspondente foi instalado fora do escopo do sistema de pacotes. Este método funciona, porém deve mesmo assim ser evitado sempre que possível, já que não existem garantias de que o programa instalado manualmente se comportará exatamente como o pacote correspondente faria e outros pacotes dependentes dele podem não funcionar corretamente.
De outra maneira, um meta-pacote existe em sua maioria como uma coleção de dependências, então instalar um meta-pacote é na verdade instalar um conjunto de pacotes em um único passo.
Ambos os tipos de pacotes podem ser criados pelos comandos equivs-control e equivs-build (do pacote equivs). O comando equivs-control arquivo cria um arquivo de cabeçalho de pacote Debian que deve ser editado para conter o nome do pacote desejado, seu número de versão, o nome do mantenedor, suas dependências e sua descrição. Outros campos, sem um valor padrão são opcionais e podem ser excluídos. Os campos Copyright, Changelog, Readme e Extra-Files não são campos padrões em pacotes Debian; eles só fazem sentido no âmbito da equivs-build, e eles não serão mantidos nos cabeçalhos do pacote gerados.

Exemplo 15.2. Arquivo de cabeçalho do pacote falso libxml-libxml-perl

Section: perl
Priority: optional
Standards-Version: 4.5.1

Package: libxml-libxml-perl
Version: 2.0207-1
Maintainer: Raphael Hertzog <hertzog@debian.org>
Depends: libxml2 (>= 2.9.10)
Architecture: all
Description: Fake package - module manually installed in site_perl
 This is a fake package to let the packaging system
 believe that this Debian package is installed.
 .
 In fact, the package is not installed since a newer version
 of the module has been manually compiled &amp; installed in the
 site_perl directory.
O próximo passo é gerar o pacote Debian com o comando equivs-build arquivo. Voilà: o pacote foi criado no diretório atual e pode ser manejado como qualquer outro pacote Debian seria.
$ equivs-build arquivo
equivs-build control 
dpkg-buildpackage: info: source package libxml-libxml-perl
dpkg-buildpackage: info: source version 2.0207-1
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: source changed by Raphael Hertzog <hertzog@debian.org>
dpkg-buildpackage: info: host architecture amd64
 dpkg-source --before-build .
 debian/rules clean
dh clean
   dh_clean
 debian/rules binary
dh binary
   dh_update_autotools_config
   dh_autoreconf
   create-stamp debian/debhelper-build-stamp
   dh_prep
   dh_install
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_link
   dh_strip_nondeterminism
   dh_compress
   dh_fixperms
   dh_missing
   dh_installdeb
   dh_gencontrol
   dh_md5sums
   dh_builddeb
dpkg-deb: building package 'libxml-libxml-perl' in '../libxml-libxml-perl_2.0207-1_all.deb'.
 dpkg-genbuildinfo --build=binary
 dpkg-genchanges --build=binary >../libxml-libxml-perl_2.0207-1_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the messaige above!

15.2.2. Depósito Simples de Arquivos

Os administradores da Falcot Corp precisam criar um pacote Debian para facilitar a instalação de um conjunto de documentos em um grande número de máquina. O administrador responsável por essa tarefa primeiramente lê o “New Maintainer's Guide”, e então começa a trabalhar no seu primeiro pacote.
O primeiro passo é criar um diretório falcot-data-1.0 que conterá o pacote fonte. O pacote irá, logicamente, ser chamado de falcot-data e terá o número de versão 1.0. O administrador então coloca os documentos em um subdiretório data. Então ele chama o comando dh_make (do pacote dh-make) para adicionar os arquivos necessários para o processo de criação do pacote, o qual será armazenado em um subdiretório debian:
$ cd falcot-data-1.0
$ dh_make --native

Type of package: (single, indep, library, python)
[s/i/l/p]? i

Maintainer Name     : Raphael Hertzog
Email-Address       : hertzog@debian.org
Date                : Sat, 26 Feb 2021 13:02:06 +0100
Package Name        : falcot-data
Version             : 1.0
License             : gpl3
Package Type        : indep
Are the details correct? [Y/n/q]
Currently there is not top level Makefile. This may require additional tuning
Done. Please edit the files in the debian/ subdirectory now.

$
O tipo de pacote escolhido (indep) indica que este pacote fonte irá gerar um único pacote binário que pode ser compartilhado entre todas as arquiteturas (Arquitetura: all em debian/control). single atua como contraparte, e leva a um único pacote binário que é dependente da arquitetura alvo ( Arquitetura: any). Neste caso, a primeira escolha é mais relevante uma vez que o pacote contém apenas os documentos e não programas binários, para que possa ser usado de forma semelhante em computadores de todas as arquiteturas.
O tipo biblioteca corresponde a um pacote fonte levando a vários pacotes binários. Ele é útil para bibliotecas compartilhadas, uma vez que precisa seguir regras rígidas do empacotamento.
O comando dh_make criou uma pasta debian com muitos arquivos. Alguns são necessários, em particular rules, control, changelog e copyright. Arquivos com extensão .ex são exemplos de arquivos que podem ser utilizados, modificando-os (e removendo a extensão), se for o caso. Quando eles não são necessários, então é recomendado removê-los. O arquivo compat não é mais usado nem criado. Em vez de definir o nível de compatibilidade do debhelper como um número neste arquivo, ele agora é definido como uma dependência de compilação no pacote virtual debhelper-compat no campo Build-Depends em debian/control.
O arquivo copyright deve conter informações sobre os autores dos documentos incluídos no pacote e os respectivos direitos autorais e licença. No nosso caso, esses são documentos internos e seu uso é restrito à empresa Falcot Corp. O formato padrão usado para este arquivo é definido no campo Format.
O arquivo changelog padrão é geralmente apropriado; basta substituir o “Initial release” por uma explicação mais detalhada e alterar a distribuição de UNRELEASED ou unstable para o nome do lançamento alvo.
O arquivo control também deve ser atualizado: o campo Section pode ser alterado para misc e os campos Homepage, Vcs-Git e Vcs-Browser foram removidos. Os campos Depends foram preenchidos com firefox-esr | www-browser para garantir a disponibilidade de um navegador web capaz de exibir os documentos do pacote. Se o pacote não exigir a execução de nenhum comando como root (consulte FERRAMENTA fakeroot), o campo Rules-Requires-Root pode ser deixado como está.

Exemplo 15.3. O arquivo control

Source: falcot-data
Section: misc
Priority: optional
Maintainer: Raphael Hertzog <hertzog@debian.org>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.5.1
Rules-Requires-Root: no

Package: falcot-data
Architecture: all
Depends: firefox-esr | www-browser, ${misc:Depends}
Description: Internal Falcot Corp Documentation
 This package provides several documents describing the internal
 structure at Falcot Corp.  This includes:
  - organization diagram
  - contacts for each department.
 .
 These documents MUST NOT leave the company.
 Their use is INTERNAL ONLY.

Exemplo 15.4. O arquivo changelog

falcot-data (1.0) bullseye; urgency=low

  * Initial Release.
  * Let's start with few documents:
    - internal company structure;
    - contacts for each department.

 -- Raphael Hertzog <hertzog@debian.org>  Sat, 26 Feb 2022 15:12:06 +0100

Exemplo 15.5. O arquivo copyright

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: falcot-data

Files: *
Copyright: 2004-2021 Falcot Corp
License:
 All rights reserved.
O arquivo rules geralmente contém um conjunto de regras usado para configurar, construir e instalar o software em um subdiretório específico (nomeado de acordo com o pacote binário gerado). O conteúdo desta pasta é depois arquivado dentro do pacote Debian como se fosse a raiz do sistema de arquivos. No nosso caso, os arquivos serão instalados na pasta debian/falcot-data/usr/share/falcot-data/ para que a instalação do pacote gerado implante os arquivos em /usr/share/falcot-data/. O arquivo rules é utilizado como um Makefile, com alguns alvos padrões (incluindoclean e binary, utilizados, respectivamente, para limpar a pasta de origem e gerar o pacote binário).
Embora esse arquivo seja o coração do processo, cada vez mais ele contém somente a informação mínima para executar um conjunto padrão de comandos provido pela ferramenta debhelper. Tal é o cado dos arquivos gerados pelo dh_make. Para instalar nossos arquivos, nós simplesmente configuramos o comportamento do comando dh_install criando o seguinte arquivo debian/falcot-data.install:
data/* usr/share/falcot-data/
Neste ponto, o pacote pode ser criado. Nós, no entanto, vamos adicionar um toque especial. Já que os administradores querem que os documentos sejam facilmente acessados a partir dos menus dos ambientes de trabalho gráficos, nós adicionamos um arquivo falcot-data.desktop e o instalaremos em /usr/share/applications através da adição de uma segunda linha em debian/falcot-data.install.

Exemplo 15.6. O arquivo falcot-data.desktop

[Desktop Entry]
Name=Internal Falcot Corp Documentation
Comment=Starts a browser to read the documentation
Exec=x-www-browser /usr/share/falcot-data/index.html
Terminal=false
Type=Application
Categories=Documentation;
O debian/falcot-data.install atualizado se parece com isso:
data/* usr/share/falcot-data/
falcot-data.desktop usr/share/applications/
Nosso pacote fonte está pronto. Agora só falta gerar um pacote binário, com o mesmo método que usamos anteriormente para reconstruir pacotes: executamos o comando dpkg-buildpackage -us -uc de dentro do diretório falcot-data-1.0.