Como obtenho e modifico o código fonte dos pacotes instalados através do apt-get?

149

Estou assumindo que todos os aplicativos instalados através de apt-get são de código aberto; mas para aqueles que estão disponíveis dessa maneira, onde posso obter o código-fonte desses aplicativos e atualizá-los?

Eu tenho alguns aplicativos que uso regularmente que não estão sendo desenvolvidos ativamente por mais tempo e gostaria de adicionar recursos. Para onde eu iria para obter os direitos para atualizar esses aplicativos?

Neste caso especificamente, estou me referindo ao pacote hellanzb

    
por myusuf3 27.02.2011 / 23:52

5 respostas

173

Use o comando apt-get source <package> (não use o sudo com ele) para baixar a origem de um pacote.

De man apt-get :

   source
       source causes apt-get to fetch source packages. APT will examine the
       available packages to decide which source package to fetch. It will then
       find and download into the current directory the newest available version of
       that source package while respect the default release, set with the option
       APT::Default-Release, the -t option or per package with the pkg/release
       syntax, if possible.

       Source packages are tracked separately from binary packages via deb-src type
       lines in the sources.list(5) file. This means that you will need to add such
       a line for each repository you want to get sources from. If you don't do
       this you will properly get another (newer, older or none) source version
       than the one you have installed or could install.

       If the --compile option is specified then the package will be compiled to a
       binary .deb using dpkg-buildpackage, if --download-only is specified then
       the source package will not be unpacked.

       A specific source version can be retrieved by postfixing the source name
       with an equals and then the version to fetch, similar to the mechanism used
       for the package files. This enables exact matching of the source package
       name and version, implicitly enabling the APT::Get::Only-Source option.

       Note that source packages are not tracked like binary packages, they exist
       only in the current directory and are similar to downloading source tar
       balls.

Para criar um pacote a partir do código-fonte, primeiro instale as dependências de construção:

sudo apt-get build-dep <package>  

Em seguida, use dpkg-buildpackage para criar um arquivo .deb . De Folha de referência rápida do APT e do Dpkg :

% bl0ck_qu0te%

Em um terminal, cd no diretório que contém a origem do pacote (por exemplo, ~/code/hellanzb-0.13 ) e execute o seguinte comando:

dpkg-buildpackage -rfakeroot -uc -b

Se a compilação for bem-sucedida, haverá um arquivo .deb localizado na propriedade pai  diretório (por exemplo, ~/code/hellanzb_0.13-6.1_all.deb ).

    
por Isaiah 28.02.2011 / 00:01
19

Em geral, você pode obter o código-fonte de um pacote instalado seguindo este procedimento:

  1. Ativar os repositórios de origem. Abra o painel (botão superior esquerdo) e procure por sources . Isso deve abrir o programa Software & Updates , executá-lo e ter a opção "Código-fonte" selecionada:

  2. Abraumterminaleexecuteestecomando:

    apt-getsourcevlc

Issofaráodownloaddasfontesdovlcparaoseudiretórioatualevocêpoderávisualizá-lascomoquiser.

Éclaroque,nocasodevlc,vocêtambémpodebaixá-losdiretamentedositedavideolan.org: link

    
por terdon 18.03.2014 / 21:03
16

Você pode usar apt-get source --compile diretamente:

sudo apt-get build-dep <package>
sudo apt-get source --compile <package>

Trabalhei para mim. O .deb acaba no diretório em que você executou o comando.

    
por kaleissin 21.08.2013 / 09:37
3

Para obter mais informações sobre um pacote, incluindo URL upstream e contatos de projeto / programa, você pode dar uma olhada no livro de direitos autorais (referenciado em packages.debian.org ) .

Quando o pacote é incluído e instalado em seu sistema, você também pode ler o arquivo de direitos autorais diretamente em /usr/share/doc/$package_or_program_name/copyright .

Veja como baixar o código-fonte do pacote Debian? .

    
por ypid 01.08.2015 / 14:52
1

Exemplo mínimo com o pacote hello

Tudo isso e muito mais é descrito em: link

Primeiro, vamos pegar um pacote de amostra para modificar a fonte de:

sudo apt-get install hello
hello

saídas:

Hello, world!

Agora vamos cortar. Obtenha a fonte:

apt-get source hello
cd hello-*

e aberto:

vim src/hello.c

e modifique a mensagem para:

Hello, world hacked!

Faça o mesmo no teste. Caso contrário, o teste irritante começará a falhar:

vim tests/greeting-1

Em seguida, reconstrua com:

sudo apt-get install devscripts
sudo apt-get build-dep hello
debuild -b -uc -us

Perto do final da saída, diz:

dpkg-deb: building package 'hello' in '../hello_2.10-1build1_amd64.deb'.

então criou o .deb no diretório pai, como ousa. Então, finalmente, instalamos e testamos o pacote modificado:

sudo dpkg -i ../hello_2.10-1build1_amd64.deb
hello

e lá vai você, gera a nova mensagem:

Hello, world hacked!

Testado no Ubuntu 18.04.

Old bzr answer

TODO: parou de funcionar no Ubuntu 16.04 Xenial, falhando com: bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/". . bzr branch lp:ubuntu/wily/hello funciona e bzr branch lp:ubuntu/xenial/hello falha novamente. Por alguma razão, o link não mostra o Xenial: link

Como mencionado no link , há também uma abordagem específica do Ubuntu com bzr .

Obtenha a versão mais recente:

bzr branch lp:ubuntu/hello

Versão específica:

bzr branch lp:ubuntu/trusty/hello

Você também pode usar pull-lp-source :

sudo apt-get install ubuntu-dev-tools
pull-lp-source hello

Então você poderá editá-lo:

cd hello
vim some_file

Reconstrua-o:

dch -i 
debcommit
bzr bd -- -b -us -uc

E instale-o:

sudo dpkg -i ../hello.deb

O guia de pacotes do Ubuntu é uma boa fonte de informações.