Um dos processos mais comuns no Debian é atualizar um pacote para a versão mais recente lançada pelo autor 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
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á listado 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
gbp import-orig --uscan --pristine-tar
Esse comando utiliza a ferramenta uscan que usa as regras definidas no debian/watch para buscar a nova versão e importar no git. Só é necessário usar a opção --pristine-tar
caso no arquivo ~/.gbp.conf
não tenha a linha pristine-tar=True
.
gbp dch --commit
gbp buildpackage
Após esse passo muitos cenários diferentes podem acontecer, cabe ao empacotador analisar o que precisa ser feito a partir daqui.
Note que o Lintian vai reclamar com um eror de "unreleased-changes", isso é esperado. O Lintian acha que você já vai fazer o upload, mas na verdade o upload será feito por algum DD, e essa pessoa é quem altera o UNRELEASED do changelog.
É necessário fazer o push de 3 branches (debian branch, upstream branch, pristine-tar branch), além da tag gerada pelo gbp import-orig.
gbp push --debian-tag=''
Agora o pacote está pronto para review, você pode fazer um MR da branch debian no salsa, mencionando na descrição que as outras branches estão no seu fork.