You are here: Foswiki>Wiki Web>BackportPacoteDebian (17 Jan 2017, italovalcy)EditAttach

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
Topic revision: r1 - 17 Jan 2017, italovalcy
 
  • <span class=
No permission to view System.WebBottomBarExample