Como modificar um pacote deb?

7

O que eu fiz até agora

  • Eu baixei a fonte de um pacote deb oficial dos repositórios do ubuntu.
  • eu apliquei um patch.
  • Ran configure e faça com sucesso.
  • Testou o programa.

O que eu gostaria de fazer

  • Eu gostaria de criar um pacote deb usando todas as informações (dependências, etc.) do pacote antigo.

Minha pergunta é (eles estão intimamente relacionados)

  1. Existe uma maneira fácil (= principalmente automatizada) de fazer isso?
  2. Posso simplesmente copiar os binários para o antigo arquivo deb?
  3. As minhas alterações serão sobrescritas quando o pacote original for atualizado nos repositórios?
  4. Se sim, como evitar isso?
  5. Existe uma maneira de marcá-lo como uma versão "alternativa" que satisfaz todas as dependências "de entrada" do pacote original?

Informação adicional

  • Eu corro o Ubuntu 9.04, 32bit, eu não me importo com os outros archs / versões no momento.
  • O pacote em questão é compiz-gnome.
  • A alteração é muito pequena e não adiciona dependências.
por Kim 18.08.2009 / 15:05

5 respostas

4

Encontrei o seguinte guia nos fóruns do Ubuntu para recriar o pacote do gerenciador de rede aqui

Re: how to patch the source of a deb

Quote: Originally Posted by cord

I want to basically rebuild the network manager package with a custom patch of sorts to test something. So I want to: 1. get the source code for the ubuntu "version" of network manager

Code:

sudo apt-get source network-manager

Quote: 2. patch it with my patch The source files will be downloaded to the working directory. See this for more information.

Quote: 3. make a deb file that I can install in place of the current network manager.

Execute Code:

dpkg-buildpackage -rfakeroot -uc -b
in the directory created.

Também encontrado este artigo: Guia dos Novos Mantenedores Debian Capítulo 6 - Construindo o pacote

Quanto a suas alterações serem perdidas por uma atualização dos repositórios oficiais, não tenho certeza. Você sempre pode enviar seu patch de volta ao upstream para o compa-gnome pacote maintainers ou criam seu próprio repositório para o pacote atualizado.

    
por 18.08.2009 / 15:15
4

O procedimento que uso é o seguinte:

Obtenha a fonte (via apt-get src).

Aplique um patch ou faça as alterações necessárias.

execute debchange --nmu e digite uma descrição da alteração que você fez. Isso aumentará automaticamente o número da versão para que o sistema não tente "atualizar" seu pacote personalizado de volta para o padrão.

Executar debuild .

Aproveite seus arquivos deb.

    
por 07.09.2009 / 06:24
3

A resposta para # 3 e # 4 é que você deve colocar o pacote no status hold depois de instalar sua versão. Isto diz ao sistema de gerenciamento de pacotes Debian para "manter" quaisquer mudanças futuras neste pacote, na verdade, permite que você gerencie o pacote manualmente.

Da FAQ :

do Debian

7.11 What is meant by unknown, install, remove, purge and hold in the package status?

These "want" flags tell what the user wanted to do with a package (as indicated either by the user's actions in the "Select" section of dselect, or by the user's direct invocations of dpkg).

Their meanings are:

  • unknown - the user has never indicated whether he wants the package>

  • install - the user wants the package installed or upgraded

  • remove - the user wants the package removed, but does not want to remove any existing configuration files.

  • purge - the user wants the package to be removed completely, including its >configuration files.

  • hold - the user wants this package not to be processed, i.e., he wants to keep the >current version with the current status whatever that is.

7.12 How do I put a package on hold?

There are three ways of holding back packages, with dpkg, aptitude or with dselect.

With dpkg, you have to export the list of package selections, with:

dpkg --get-selections * > selections.txt

Then edit the resulting file selections.txt, change the line containing the package you wish to hold, e.g. libc6, from this:

libc6 install

to this:

libc6 hold

Save the file, and reload it into dpkg database with:

dpkg --set-selections < selections.txt

With aptitude, you can hold a package using

aptitude hold package_name

and remove the hold with

aptitude unhold package_name

With dselect, you have to enter the [S]elect screen, find the package you wish to hold in >its present state, and press the =' key (orH'). The changes will go live immediately >after you exit the [S]elect screen.

Nota: As pessoas encontraram problemas com o comando aptitude hold , portanto você deve preferir que o comando dpkg mantenha o pacote. Alternativamente, você poderia manter o pacote através da interface GUI do gerenciador de pacotes Synaptic (Package > Lock Version). Minha preferência é usar o dpkg porque funcionou bem para mim.

Você já tem uma boa resposta para o resto, então não vou arriscar minha opinião sobre isso.

    
por 18.08.2009 / 19:50
1

Se você baixar fontes do site oficial, então deve haver o próprio pacote disponível via apt. Então você cat apenas baixe o pacote pronto, modifique-o e empacote novamente:

apt-get download your_package
dpkg -x your_package_vesion.deb your_package_folder/
... making changes in your_package_folder/ ...
# extract all needed controles/scripts from existing deb to new
dpkg -e your_package_vesion.deb your_package_folder/DEBIAN
dpkg -b your_package_folder/ new_package_vesion.deb

Fonte com detalhes: link

    
por 02.11.2016 / 02:46
0

Bem, tudo se resume a recompilação. Se você não quer um ambiente de criação de pacotes aprovado pela debian (o caminho certo), eu tende a usar o checkinstall para criação de pacotes rápida e suja (o caminho mais fácil) - não é o caminho recomendado pelo Debian, mas é muito mais simples o outro jeito. configure, em seguida, faça e substitua makeinstall por checkinstall. Então instale seu novo pacote com o sudo dpkg -i

    
por 07.09.2009 / 10:01