Qual é a maneira correta de criar seus próprios pacotes para instalação local?

6

Estou executando um servidor Ubuntu 12.04 LTS. Atualmente, tenho um problema em que um dos meus pacotes usados tem um bug irritante. Em vez de removê-lo e apenas construí-lo a partir do código-fonte, quero integrá-lo ao gerenciamento de pacotes do Ubuntus / Debians.

Vindo do ArchLinux nós fizemos isso copiando o PKGBUILD original e o alterando de tal forma que ele compila o pacote new . Este é um processo muito simples, mas informa o gerenciador de pacotes sobre este pacote, mesmo que não esteja em repositórios locais.

Existe uma maneira similar para o Ubuntu / Debian? Posso facilmente basear meu pacote na versão desatualizada do Ubuntu e instalar este pacote em vez do repositório original?

Nota : O software relacionado é libvirt (eu preciso de 0.9.13, pelo menos, 12.04 é executado 0.9.8) e enquanto eu gostaria de uma solução para este pacote em particular nos comentários, eu estou procurando para uma solução mais geral para tais problemas, caso surjam no futuro.

Ao contrário de perguntas Como posso manualmente montar meu próprio pacote "da maneira mais difícil"? e O que é o mais simples Debian Packaging Guide? Não estou interessado em criar um pacote novo , mas sim em usar os recursos existentes e atualizá-los para uma versão mais recente.

    
por javex 27.01.2014 / 23:07

2 respostas

4

Eu baixaria o código fonte e as dependências de compilação para a versão do Ubuntu primeiro:

apt-get install dpkg-dev
apt-get build-dep <package>
apt-get source <package>

A fonte upstream não modificada na qual a versão do Ubuntu é baseada estará em um arquivo chamado < pkg > _ < ver > .orig.tar.gz (o esquema de compactação pode variar) - descompactaria isto para um diretório chamá-lo "dir A"), faça o download do código-fonte para a versão corrigida do bug em outro diretório ("dir B") e, em seguida, gere um patch para o que foi alterado:

diff -Nur <dirA> <dirB> >/tmp/upgrade.patch

Em seguida, mude para o diretório em que o apt-get source descomprimiu a versão modificada do Ubuntu e aplique o patch

patch -p1 </tmp/upgrade.patch

Supondo que não houve muitas mudanças entre as duas versões do upstream, e elas não entraram em conflito com nenhuma das mudanças do pacote do Ubuntu, isso deve funcionar. Então edite o debian / changelog no pacote Ubuntu para dar um novo número de versão, e o dpkg-buildpackage deve construir uma versão customizada para você ..

    
por Steve Dee 27.01.2014 / 23:23
1

Apenas para tocar minha própria buzina, eu tenho criado uma solução para essa circunstância exata. Você pode ter um pacote Debian baixado, descompactado, construído e reinstalado em 2 ou 3 comandos.

É um script de shell debtool e está disponível no GitHub através do link acima mencionado.

Construir pacotes Debian a partir do código-fonte pode ser incômodo, especialmente em um driver diário que você não quer necessariamente confundir com várias dependências de compilação e coisas do gênero.

Assumindo que libvirt esteja disponível via fontes, execute o seguinte comando:

debtool --download --unpack libvirt

O comando acima acabou de baixar o arquivo libvirt_0.9.8_all.deb e o descompactou no diretório libvirt_0.9.8_all .

Como alternativa, você pode descompactar a versão do libvirt que está atualmente instalada em seu sistema:

debtool --unpack libvirt

Neste ponto, você deve fazer todas as alterações nos arquivos no diretório. Também é provável que você queira aumentar o número da versão do pacote (ou seja, 0.9.8-custom1) localizado em ./ libvirt_0.9.8_all / DEBIAN / control .

Agora crie o pacote executando o seguinte comando:

debtool --build ./libvirt_0.9.8_all

Seu pacote finalizado agora está no diretório atual como libvirt_0.9.8-custom1_all.deb .

Você pode reinstalar rapidamente este pacote executando debtool --reinst ./libvirt_0.9.8-custom1_all.deb ou alternativamente debtool --build --reinst ./libvirt_0.9.8_all para criar e reinstalar de uma só vez.

Etcetera

Você também pode fazer algumas outras tarefas relacionadas com debtool .

Mostrar versões disponíveis

Se houver várias versões de um pacote disponíveis nos repositórios, você poderá listá-las da seguinte maneira:

debtool --show zsh

O comando acima retornará o seguinte:

zsh 5.0.5-4ubuntu1~ubuntu14.04.1 amd64
zsh 5.0.2-3ubuntu6 amd64

Se você quiser baixar os pacotes manualmente, use a opção --show-format .

debtool --show --show-format zsh

retornará o seguinte:

apt-get download zsh=5.0.5-4ubuntu1~ubuntu14.04.1 -a=amd64
apt-get download zsh=5.0.2-3ubuntu6 -a=amd64

Faça o download dos arquivos do Debian

Você pode fazer o download da versão mais recente de um pacote da seguinte forma:

debtool --download zsh

Você pode fazer o download de uma versão específica da seguinte forma:

debtool --download zsh=5.0.2-3ubuntu6

Desembalando pacotes

Você pode descompactar um pacote no seu disco rígido:

debtool --unpack package.deb

Você também pode descompactar um pacote atualmente instalado em seu sistema:

debtool --unpack package

Se você fez alterações em qualquer um dos arquivos instalados, eles serão incorporados também. Isso é perfeito se você quiser trabalhar com um pacote que não está mais disponível a partir de fontes ou se você deseja incorporar correções pré-existentes em um deb de 'patches'.

    
por Six 17.04.2015 / 20:56