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


Presumo che tutte le applicazioni installate tramite apt-get sono 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 che non vengono attivamente sviluppate e vorrei aggiungere funzionalità. Dove andrei a ottenere i diritti per aggiornare queste applicazioni?

In questo caso specifico, mi riferisco al hellanzb pacchetto


147
2018-02-27 22:52


origine


apt-get supporta anche i programmi closed-source, quindi l'ipotesi iniziale non è corretta. - Flimm


risposte:


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

A partire dal 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 utilizzare dpkg-buildpackage creare un .deb file. A partire dal Scheda 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 indica di utilizzare il programma fakeroot per simulare i privilegi di root (a scopi di proprietà), -uc sta per "Do not cryptographically sign the changelog", e -b sta per "Costruisci solo il pacchetto binario"

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

dpkg-buildpackage -rfakeroot -uc -b

Se la build ha successo, ci sarà un .deb file situato nel genitore
 directory (ad es ~/code/hellanzb_0.13-6.1_all.deb).


172
2018-02-27 23:01



come posso installare dalla sorgente modificata. così come lo rimpiazzerà per gli altri utenti. Grazie! - myusuf3
@dustyprogrammer Aggiornato la mia risposta con le istruzioni sulla creazione di un .deb pacchetto dal codice sorgente. Per ottenere il pacchetto modificato nei repository, dovresti parlare con a MOTU a tale proposito. - Isaiah
@DoR c'è un modo per creare un deb che si installa di default in una directory personalizzata? nello stesso modo in cui possiamo installare usando --prefix durante il processo di configurazione? in realtà non posso trovare i tarball per l'origine di una libreria, ecco perché non posso configurare --prefix, e installarlo .. ma quell'origine dei pacchetti è disponibile tramite apt, quindi stavo pensando di installare il pacchetto sorgente nel prefisso desiderato . - ashishsony
Se non vuoi usare apt-get source (ad esempio quando crei un pacchetto preso da un'altra distribuzione) scarica i 3 file sorgente e usa 'dpkg-source -x [fine] .dsc' per estrarre i file e applicare il diffs prima di dpkg-buildpackage. (ftp.debian.org/debian/doc/source-unpack.txt) - Shlomi Loubaton
fa sudo apt-get build-dep <package> installare le dipendenze come file binari? Se è così, questa non è una compilazione completa dalla fonte. Come si fanno le dipendenze di installazione build-dep dall'origine? - Hello World


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

  1. Abilita i repository di origine. Aprire la dashboard (in alto a sinistra) e cercare sources. Questo dovrebbe far apparire il Software & Updates programma, eseguilo e assicurati di avere l'opzione "Codice sorgente" selezionata:

    enter image description here

  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.

Certo, nel caso di vlc, puoi anche scaricarli direttamente dal sito web videolan.org: https://www.videolan.org/vlc/download-sources.html


19
2018-03-18 20:03



Non dovresti aver bisogno di usare sudo con 'apt-get source' - Squidly
@MrBones argh! No, certo che no, forza dell'abitudine. Grazie per segnalarlo. - terdon♦
nel terminale: software-properties-gtk <--- che avvierà il pannello della GUI "Software & Updates". (Non è stato visualizzato nella dashboard per cercarmi per qualsiasi motivo.) - pestophagous


Puoi usare apt-get source --compile direttamente:

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

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


16
2017-08-21 07:37



Ha funzionato anche per me, grazie. Solo un dettaglio in più: puoi installare il .deb con sudo dpkg -i <package>.deb - waldyrious
La migliore soluzione tranne che apt ritorna alla versione del repository perché hai dimenticato di documentare il changelog con "dch -i". - Futal


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

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

Vedere come scaricare il codice sorgente del pacchetto Debian?.


3
2017-08-01 12:52





Come menzionato a https://askubuntu.com/a/81889/52975 c'è anche un approccio specifico per Ubuntu con bzr.

Ottieni 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/hellofallisce di nuovo. Per qualche ragione https://code.launchpad.net/ubuntu/+source/hello non mostra Xenial: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source/hello

Versione specifica:

bzr branch lp:ubuntu/trusty/hello

Puoi anche usare 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

Ricostruiscilo:

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

E installalo:

sudo dpkg -i ../hello.deb

Il Guida all'impacchettamento di Ubuntu è una buona fonte di informazioni.


1
2018-05-17 06:57



bzr branch lp:ubuntu/hello bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".  bzr branch lp:ubuntu/xenial/lightdm bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/xenial/lightdm/".  Guida all'impacchettamento di Ubuntu, nello specifico 4.2. Ottenere la fonte dice: bzr branch ubuntu:lightdm lightdm.quickswitch bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/".  Che casino. :-( - Stéphane Gourichon
Usato pull-lp-source invece, ma poi non otteniamo un repository bzr. bzr bd -- -b -us -uc dice bzr: ERROR: Not a branch: "/org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3/". : - / Grazie per qualsiasi suggerimento. - Stéphane Gourichon
@ StéphaneGourichon hummm, ti riproduco su Ubuntu 16.04 Xenial. L'aggiunta della versione specifica funziona: bzr lp:ubuntu/wily/hello, ma per qualche motivo non c'è xenial versione? E nessuno mostra su: code.launchpad.net/ubuntu/+source/hello Vai a capire. - Ciro Santilli 新疆改造中心 六四事件 法轮功
Grazie per esserti preso cura di riprodurlo. Tipo di carta sbagliata, quindi. Ha aperto bugs.launchpad.net/ubuntu/+source/bzr/+bug/1614053 menzionando questa pagina. - Stéphane Gourichon
Più conveniente di alcuni altri approcci. E grazie per gli altri consigli utili :) - nealmcb