O empacotamento de um software envolve muitas etapas e um conhecimento do processo de construção de um pacote Debian, mas é possível começar com uma contribuição de uma única linha. Apesar de parecer pouco, essa contribuição permitirá você a se acostumar com o processo de construção, o deixará familiriazado com o ferramental necessário e melhorará o pacote em questão. Sem contar que seu nome aparecerá na página de informações do pacote .
O primeiro passo será a escolha de um pacote para contribuir, esse pode parecer uma parte simples porque há mais de 25 mil pacotes no debian, mas pode ser bem complicado porque existem pacotes que não constroem atualmente, pacotes que o(a) mantenedor(a) não está ativo(a), ou simplesmente demandam recursos ou tempo demais para construir. Como é necessário um pacote razoavelmente bem mantido e que esteja funcional, foi montada essa lista com bons candidatos.
Após escolher um pacote da lista, siga com o processo de contribuição e crie uma issue no repositório utilizado para esse fim.
Lembre-se de verificar se já não há outra pessoa trabalhando neste pacote com base na lista de issues do repositório.
Em seguida, você deve fazer um fork do repositório oficial de empacotamento para aplicar as alterações e, em seguida, submeter uma Merge Request para o repositório oficial. Para encontrar o link do repositório, clique no nome do pacote na lista anterior. Então você será redirecionado para a página do "Tracker" do pacote. Essa página concentra várias informações importantes sobre o pacote e será utilizada diversas vezes. Uma forma alternativa, é digitar a URL https://tracker.debian.org/<nome-do-pacote-fonte> no seu navegador colocando o nome do pacote selecionado no lugar de <nome-do-pacote-fonte>.
Uma vez na página do Tracker, existe um conjunto de informações gerais sobre o pacote no canto superior esquerdo da página. Algumas dessas informações são source, version, maintainer e VCS, este último é a informação procurada. Clicando em Git ou Browse, você será redirecionado para o repositório oficial.
A partir do repositório oficial, é possível fazer um fork para o seu espaço pessoal clicando no botão fork no canto superior esquerdo da tela. Também é possível utilizar a URL do repositório para isso, basta digitar https://salsa.debian.org/caminho/repositorio/oficial/-/forks/new. Então você será direcionado para a sua cópia do repositório ao fim do processo e será possível cloná-lo para a sua máquina local. Para efetuar essa cópia, é preciso a URL correta, que deve ter o padrão git@salsa.debian.org/<seu-username>/<nome-do-projeto>, e pode ser conseguido a partir do botão code na página do seu fork. A partir de então, já é possível fazer a cópia local com o seguinte comando:
gbp clone git@salsa.debian.org/<seu-username>/<nome-do-projeto>
Lembre-se de adicionar a sua chave SSH ao salsa para poder efetuar o clone de repositórios e pull/push de commits.
Para verificar que o clone funcionou, basta construir o pacote com gbp buildpackage. Note que na saída do lintian é esperada a seguinte linha:
P: devtodo source: redundant-priority-optional-field [debian/control:3]
A alteração a ser feita aqui é bem simples e autocontida, será removida uma linha do arquivo debian/control que já não é mais necessária. Esse arquivo control dentro do diretório debian contém os metadados do pacote, eles são refletidos, por exemplo, na página do Tracker do pacote e no apt show <nome-do-pacote>. Contudo, ao longo do tempo, os campos desse arquivo vão se alterando e é preciso efetuar a mudança em todos os pacotes presentes no Debian, um exemplo disso é o campo Priority.
O campo Priority dita a prioridade de um pacote e isso impacta diretamente os(as) usuários(as) porque define se um pacote é instalado por padrão. A maioria dos pacotes não precisa ser instalada por padrão - imagine o navegador web aqui, não são todos os casos de uso que necessitam de um navegador, imagine um servidor cuja função é somento hospedar máquinas virtuais - e devem ter o valor optional definido. Contudo, versões recentes do ferramental do Debian tratam esse valor como o padrão, portanto não é necessário declará-lo em pacotes com prioridade opcional e o campo pode ser removido do arquivo. Logo, a seguinte alteração é necessária:
--- a/debian/control
+++ b/debian/control
@@ -1,6 +1,5 @@
Source: fastfetch
Section: utils
-Priority: optional
Maintainer: Hiago De Franco <hiagofranco@gmail.com>
Uploaders: Carlos Henrique Lima Melara <charlesmelara@riseup.net>,
Maytham Alsudany <maytham@debian.org>,
Após a alteração, é necessário realizar o commit da modificação no git. Para tanto, seguimos um padrão específico para a mensagem de commit:
<caminho/do/arquivo/modificado>: <descrição da modificação>
<Motivação mais detalhada>
<Trailers git adicionais>
A descrição longa e trailers git são opcionais e para esse caso não serão necessários. O exemplo para essa modificação seria git commit -m "d/control: drop Priority field, optional is default now" no qual d/ é a abreviação de debian/. Agora que a modificação já está feita, podemos documentá-la no debian/changelog porque é uma alteração de empacotamento. Mas, ao invés de editar o arquivo manualmente, podemos utilzar o seguinte comando para transformar a mensagem de commit em uma entrada do changelog:
gbp dch --commit
Então, já é possível construir o pacote para validar a alteração com o gbp buildpackage. Se tudo correr bem, o pacote será construido corretamente e o aviso do lintian sobre o campo redundante, terá sumido. Após validar que o aviso não aparece, já é possível empurrar as alterações para o fork com gbp push --debian-tag='' e criar uma Merge Request com essas alterações (modificação nos arquivos debian/control e debian/changelog).
Nessa segunda construção, o lintian pode indicar erros relacionados a
UNRELEASED changes, mas você não deve se preocupar com isso, é esperado que esse erro ocorra.
Utilizando como exemplo o pacote devtodo, todo o fluxo envolve os seguintes passos:
# Checar https://tracker.debian.org/devtodo
# Encontrar o link para o repo git
# Fazer um fork de https://salsa.debian.org/debian/devtodo
# Clonar o fork localmente
gbp clone git@salsa.debian.org:charles/devtodo.git
gbp buildpackage
# Fazer a alteração no debian/control
git add debian/control
git commit -m 'd/control: drop Priority field, optional is default now'
gbp dch --commit
gbp buildpackage
gbp push --debian-tag=''
# Abrir a MR