Criando Backport para pacotes Debian
1 Objetivo
Este tutorial descreve em linhas gerais o processo de criação de Backports para pacotes Debian. Esse artigo foi baseado na
documentação oficial do Debian sobre Backporting.
Como exemplo, vamos ilustrar o backporting do pacote
freeradius da versão do Debian Jessie para a versão do Debian Wheezy (OBS: já existe um backport desse pacote, porém foi necessário gerar novamente devido a atualização da libssl que quebrou seu funcionamento retornando o erro
"libssl version mismatch. Built with: yyy Linked: xxx" ).
2 Definições
- Backport: No contexto de pacotes Debian, o processo de Backporting ou criação de backport consiste em recompilar um pacote que foi originalmente criado para uma versão diferente da versão do seu sistema. Por exemplo: suponha que você esteja executando o Debian stable (atualmente o jessie) e um pacote que você trabalha possui a funcionalidade desejada apenas no Debian testing; daí você tem algumas opções: atualizar todo o seu sistema para o testing (o que pode ser um esforço grande para o propósito específico); forçar a instalação do pacote da testing no seu sistema (esse procedimento não é adequado e pode prejudicar o funcionamento da sua máquina, quebrar outros pacotes, gerar erros de dependência complexos, etc); instalar a versão do fabricante do software (upstream) diretamente ou usar um pacote debian de outra distribuição como ubuntu (o que também não é adequado pelos motivos anteriores); ou, por fim e mais apropriado, fazer um backport do pacote em questão e instalá-lo em seu servidor.
3 Pré-requisitos
- Código fonte do pacote em questão (ex: habilitar a lista de fontes no
/etc/apt/sources.list)
- Privilégios de administrador na máquina
4 Descrição das etapas
A partir do seu browser, localize o pacote que você deseja fazer o backport na versão aproriada (via
http://packages.debian.org/) e baixe os arquivos DSC, ORIG.TAR.GZ e DEBIAN.TAR.GZ (as extensões podem variar um pouco, por exemplo .XZ a depender do tipo de compactação). Em nosso exemplo, decidimos fazer o backport do pacote freeradius do Jessie para Wheezy, portanto devemos baixar os seguintes arquivos:
wget http://http.debian.net/debian/pool/main/f/freeradius/freeradius_2.2.5+dfsg-0.1~bpo70+1.dsc
wget http://http.debian.net/debian/pool/main/f/freeradius/freeradius_2.2.5+dfsg.orig.tar.gz
wget http://http.debian.net/debian/pool/main/f/freeradius/freeradius_2.2.5+dfsg-0.1~bpo70+1.debian.tar.gz
Depois disso, instale as dependências de compilação do seu pacote. Em nosso caso:
apt-get build-dep freeradius
apt-get install devscripts
Extrair o source do pacote obtido anteriormente e acessar seu conteúdo. Em nosso caso:
dpkg-source -x freeradius_2.2.5+dfsg-0.1~bpo70+1.dsc
cd freeradius-2.2.5+dfsg
Em seguida, precisamos atualizar o changelog do pacote indicando a nossa alteração. Esse passo é importante pois, além de atualizar o changelog do pacote, ele atualiza o número da versão fazendo com que o pacote atual seja devidamente atualizado e permitindo que atualizações de versão do debian sobrescrevam essa mudança (uma vez que não faz mais sentido). No exemplo abaixo utilizamos a string
~bpo70+ pois a versão do nosso Debian era 7, usamos 70 (ver mais informações sobre a numeração
aqui):
dch --local ~bpo70+ --distribution wheezy-backports "Rebuild for wheezy-backports to fix issue with libssl."
Podemos agora compilar o pacote, atentando-se para não gerar a assinatura GPG e para não atualizar a lista de autores:
dpkg-buildpackage -us -uc
Se tudo correr bem, o seu pacote será gerado no diretório anterior ao que você fez a compilação (
../), agora basta instalar. Em nosso exemplo, foram gerados vários pacotes que necessitamos (veja os pacotes instalados com
dpkg -l | grep NOME-PACOTE, portanto precisamos instalar:
dpkg -i ../freeradius_2.2.5+dfsg-0.1~bpo70+2_amd64.deb ../freeradius-common_2.2.5+dfsg-0.1~bpo70+2_all.deb # outros...
Por fim, para remover as dependências de compilação que foram instaladas, podemos usar (substitua o NOME-PACOTE conforme seu ambiente):
PACOTES=$(egrep -A1 "build-dep.*NOME-PACOTE" /var/log/apt/history.log | grep Install: | sed 's/Install://; s/),/)\n/g' | grep -v automatic)
apt-get purge $PACOTES
apt-get autoremove
apt-get purge devscripts
5 Plano de Testes
Depende de cada pacote que foi instalado. Uma forma geral de verificar se o pacote foi atualizado é conferir a nova versão dele, com:
dpkg -l NOME-PACOTE
6 Plano de Retorno
Para retornar a versão anterior ao backport, você pode força a versão com o
apt-get install (substitua NOME-PACOTE e VERSAO-ANTERIOR de forma apropriada):
apt-get install NOME-PACOTE=VERSAO-ANTERIOR
7 Referências
--
ItaloValcy - 17 Jan 2017