Come posso ottenere e modificare il codice sorgente dei pacchetti installati tramite apt-get?

146

Suppongo che tutte le applicazioni installate tramite apt-get siano open source; ma per quelli che sono disponibili in quel modo, dove posso ottenere il codice sorgente per queste applicazioni e aggiornarle?

Ho un paio di applicazioni che uso regolarmente e che non vengono più attivamente sviluppate e vorrei aggiungere funzionalità. Dove andrei a ottenere i diritti per aggiornare queste applicazioni?

In questo caso specifico, mi riferisco al pacchetto hellanzb

    
posta myusuf3 27.02.2011 - 23:52

5 risposte

171

Usa il comando apt-get source <package> (non usare sudo con esso) per scaricare l'origine di un pacchetto.

Da 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.

Per creare un pacchetto dal sorgente, prima installa le dipendenze di compilazione:

sudo apt-get build-dep <package>  

Quindi usa dpkg-buildpackage per creare un file .deb . Da foglio di riferimento rapido APT e Dpkg :

  

dpkg-buildpackage Crea un pacchetto Debian da un albero di sorgenti Debian. Devi essere nella directory principale dell'albero dei sorgenti affinché funzioni. Esempio di utilizzo:

 dpkg-buildpackage -rfakeroot -uc -b
     

Dove -rfakeroot lo istruisce a usare il programma fakeroot per simulare i privilegi di root (a scopo di proprietà), -uc sta per "Non firmare crittograficamente il log delle modifiche", e -b sta per "Costruisci il pacchetto binario solo "

In un terminale, cd nella directory contenente l'origine del pacchetto (ad esempio ~/code/hellanzb-0.13 ) ed esegui il seguente comando:

dpkg-buildpackage -rfakeroot -uc -b

Se la compilazione ha esito positivo, sarà presente un file .deb ubicato nella pagina principale  directory (ad esempio ~/code/hellanzb_0.13-6.1_all.deb ).

    
risposta data Isaiah 28.02.2011 - 00:01
19

In generale, puoi ottenere l'origine di un pacchetto installato seguendo questa procedura:

  1. Abilita i repository di origine. Apri la dashboard (in alto a sinistra) e cerca sources . Dovresti visualizzare il programma Software & Updates , eseguirlo e assicurarti di avere l'opzione "Codice sorgente" selezionata:

  2. Apri un terminale ed esegui questo comando:

    apt-get source vlc
    

Questo scaricherà i sorgenti di vlc nella tua directory corrente e potrai visualizzarli a tuo piacimento.

Naturalmente, nel caso di vlc , puoi anche scaricarli direttamente dal sito web videolan.org: link

    
risposta data terdon 18.03.2014 - 21:03
16

Puoi utilizzare apt-get source --compile direttamente:

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

Ha funzionato per me. Il .deb si trova nella directory da cui è stato eseguito il comando.

    
risposta data kaleissin 21.08.2013 - 09:37
3

Per ottenere maggiori informazioni su un pacchetto che include URL upstream e contatti di progetto / programma, puoi dare un'occhiata a file del copyright (a cui si fa riferimento da packages.debian.org ) .

Quando il pacchetto è incluso e installato sul tuo sistema, puoi anche leggere il file del copyright direttamente su /usr/share/doc/$package_or_program_name/copyright .

Vedi come scaricare il codice sorgente del pacchetto Debian? .

    
risposta data ypid 01.08.2015 - 14:52
1

Come accennato al link esiste anche un approccio specifico per Ubuntu con bzr .

Scarica l'ultima versione:

bzr branch lp:ubuntu/hello

TODO: questo ha smesso di funzionare su Ubuntu 16.04 Xenial, fallendo con: bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/". . bzr branch lp:ubuntu/wily/hello funziona e bzr branch lp:ubuntu/xenial/hello fallisce di nuovo. Per qualche motivo link non mostra Xenial: link

Versione specifica:

bzr branch lp:ubuntu/trusty/hello

Puoi anche utilizzare pull-lp-source :

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

Quindi sarai in grado di modificarlo:

cd hello
vim some_file

Ricostruisci:

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

E installalo:

sudo dpkg -i ../hello.deb

La guida all'imballaggio di Ubuntu è una buona fonte di informazioni.

    

Leggi altre domande sui tag