Um dos processos mais comuns no Debian é atualizar um pacote para a versão mais recente lançada pelo(a) autor(a) upstream.
Os passos listados aqui são genéricos e tentam abranger uma grande diversidade de cenários. No entanto, atualizar a versão pode ser simples e gastar poucos minutos ou muito complexo e demandar a ajuda de um conjunto de pessoas.
sudo sh /usr/share/doc/sbuild/examples/sbuild-debian-developer-setup-update-all
Caso encontre problemas ao atualizar o chroot, verifique o arquivo /var/log/sbuild-update-all.log
. Pode ocorrer da sua sessão do schroot estar ativa e o comando não funcionar devidamente.
Para encerrar qualquer sessão ativa, basta executar o seguinte comando:
schroot --end-session --all-sessions
Após isso, basta executar novamente o comando de atualização do chroot.
Antes de seguirmos para a atualização de um pacote é preciso verificar a viabilidade de atualizá-lo. Segue um checklist do que precisa ser verificado antes de atualizar um pacote:
Normalmente o autor upstream fornece algum tipo de changelog e, mesmo que não forneça, é possível analisar o diff das versões. Com essa revisão identificamos quais mudanças podem quebrar outros pacotes que são dependentes deste.
Com o comando apt rdepends [nome-do-pacote]
serão listados todos os pacotes que dependem do pacote candidato a atualização. Assim, é possível conferir se os pacotes são compatíveis com a nova versão para, caso não sejam compatíveis, decidir como prosseguir.
Como conferir se os pacotes são compatíveis com a nova versão? Verifique se a versão da dependência reversa no repositório do Debian satisfaz o que está especificado pelo upstream na versão nova (por exemplo, no *.gemspec
, go.mod
, setup.py
).
A main do Debian só aceita software livre, portanto é sempre bom garantir que o pacote está de acordo com a DFSG.
Isso serve tanto para remover quanto para adicionar novas dependências. Adicionar uma nova pode implicar um esforço extra caso a dependência não esteja no Debian.
No geral, os pacotes do Debian são versionados no Salsa. É interessante, nesse primeiro momento, trabalhar fora do repositório oficial. Para isso, crie um fork do repositório original dentro do seu namespace pessoal utilizando a interface do salsa.
gbp clone git@salsa.debian.org:[seu_usuário]/[nome-do-pacote].git
cd [nome-do-pacote]
git remote -v
origin git@salsa.debian.org:[seu_usuário]/[nome-do-pacote].git (fetch)
origin git@salsa.debian.org:[seu_usuário]/[nome-do-pacote].git (push)
git remote add oficial git@salsa.debian.org:[namespace_oficial]/[nome-do-pacote].git
git remote -v
oficial git@salsa.debian.org:[namespace_oficial]/[nome-do-pacote].git (fetch)
oficial git@salsa.debian.org:[namespace_oficial]/[nome-do-pacote].git (push)
origin git@salsa.debian.org:[seu_usuário]/[nome-do-pacote].git (fetch)
origin git@salsa.debian.org:[seu_usuário]/[nome-do-pacote].git (push)
Nesse exemplo, usamos a origin para edição enquanto o oficial apenas para leitura.
gbp buildpackage
Obs.: Caso a branch original tenha outro nome, você pode utilizar esta opção abaixo:
gbp buildpackage --git-debian-branch=branch_name
gbp import-orig --uscan --pristine-tar
Esse comando utiliza a ferramenta uscan que usa as regras definidas no arquivo debian/watch
para buscar a nova versão e importar no git. Só é necessário usar a opção --pristine-tar
caso não exista a linha pristine-tar=True
no arquivo ~/.gbp.conf
.
gbp dch --commit
Maintainer
do arquivo debian/control
, adicione a flag --team descrita no comando abaixo:gbp dch --commit --team
Essa parte é essencial na atualização upstream. Você irá revisar as mudanças feitas e ficar atento às modificações como:
Dependências novas e alteradas:
Verifique no arquivo debian/control
se as dependências declaradas estão atualizadas de acordo com as exigências da nova versão do software. Isso inclui dependências adicionadas, removidas ou alteradas. A Wiki também oferece informações mais detalhadas da estrutura de um pacote aqui
Mudanças e de licenças:
O arquivo debian/copyright
contém informação de licença de software e copyright de todos os arquivos do pacote fonte, inclusive do empacotamento (diretório debian/
). Uma tarefa bastante comum é atualizar também o Standards-Version (atualmente na versão 4.7.0), localizado no arquivo debian/control
. Porém, antes de realizar esta mudança, leia atentamente o checklist de atualização da wiki oficial Debian.
Erros e alertas do Lintian:
O Lintian é uma ferramenta utilizada no ecossistema Debian para verificar a conformidade de pacotes .deb
com as boas práticas e políticas do projeto Debian. Ele analisa pacotes binários e de origem, reportando potenciais problemas que podem variar de simples advertências (warnings) a erros críticos que impediriam a inclusão do pacote nos repositórios oficiais.
Confira o manual oficial do Lintian aqui.
Os avisos de erro e alerta do lintian ficam disponíveis no log de build, quando você executa o comando gbp buildpackage
. No entanto, para uma análise mais detalhada, execute a linha de comando abaixo:
lintian -EvIL +pedantic
-EvIL
inclui todos os detalhes possíveis (Erros, Avisos, Informações e Pedantic), enquanto o +pedantic
relata problemas menores que não são obrigatórios.
O comando lintian-explain-tags
exibe o significado de uma ou mais tags, podendo te direcionar assim para uma possível solução do problema. E.g.
lintian-explain-tags update-debian-copyright
Boas práticas de git:
Obs. Esta parte não é necessariamente obrigatória, mas se possível, tente seguir estas orientações.
Uma boa prática de git para a atualização da versão upstream de um pacote no Salsa é commitar separadamente cada arquivo alterado do diretório debian/
. Escreva uma mensagem de commmit concisa e significativa, evidenciando no início da mensagem do commit o arquivo em questão e tentando manter o mesmo "padrão" em todas as mensagens. Por exemplo, todos os commits abaixo começam com uma letra maiúscula e terminam com um ponto final:
d/changelog: Update changelog for 3.0.1-1 release.
d/copyright: Update the upstream license.
d/control: Bump Standards-Version to 4.7.0, no changes needed.
gbp buildpackage
É necessário fazer o push de 3 branches (debian
branch, upstream
branch, pristine-tar
branch), além da tag gerada pelo gbp import-orig. Felizmente o gbp
tem um comando para automatizar esse processo:
gbp push --debian-tag=''
Esse comando é equivalente a fazer o push de cada branch e das tags com o
git
Agora o pacote está pronto para a revisão. Você pode fazer um MR da branch de empacotamento (geralmente master
, debian/master
, debian/latest
, debian/unstable
ou debian/sid
) no salsa, mencionando na descrição que as outras branches estão no seu fork. Atente-se aos comentários, pois o seu revisor poderá sugerir alterações.