Frage Wie bekomme und modifiziere ich den Quellcode von Paketen, die über apt-get installiert wurden?


Ich gehe davon aus, dass alle Anwendungen durch installiert werden apt-get sind Open Source; aber für diejenigen, die auf diese Weise verfügbar sind, wo kann ich den Quellcode für diese Anwendungen erhalten sowie sie aktualisieren?

Ich habe ein paar Anwendungen, die ich regelmäßig benutze, die nicht mehr aktiv entwickelt werden und ich möchte Features hinzufügen. Wohin sollte ich gehen, um die Rechte zur Aktualisierung dieser Anwendungen zu erhalten?

In diesem Fall beziehe ich mich speziell auf die Hellanzb Paket


147
2018-02-27 22:52


Ursprung


apt-get unterstützt auch Closed-Source-Programme, so dass Ihre ursprüngliche Annahme falsch ist. - Flimm


Antworten:


Verwenden Sie den Befehl apt-get source <package> (Verwenden Sie nicht sudo damit), um die Quelle eines Pakets herunterzuladen.

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

Um ein Paket von der Quelle zu erstellen, installieren Sie zuerst die Build-Abhängigkeiten:

sudo apt-get build-dep <package>  

Dann benutze dpkg-buildpackage ein erstellen .deb Datei. Von APT und Dpkg Quick Reference Sheet:

dpkg-Baupaket Erstellt ein Debian-Paket aus einer Debian-Quellstruktur. Sie müssen sich im Hauptverzeichnis des Quellbaums befinden, damit dies funktioniert. Beispielverwendung:

 dpkg-buildpackage -rfakeroot -uc -b

Woher -rfakeroot weist es an, das fakeroot-Programm zu verwenden, um Root-Berechtigungen zu simulieren (für Eigentumszwecke), -uc steht für "Verschlüsselungslogik nicht kryptographisch signieren", und -b steht für "Nur das Binärpaket erstellen"

In einem Terminal, cd in das Verzeichnis, das die Paketquelle enthält (z.B. ~/code/hellanzb-0.13) und führen Sie den folgenden Befehl aus:

dpkg-buildpackage -rfakeroot -uc -b

Wenn der Build erfolgreich ist, wird ein .deb Datei im Elternteil
 Verzeichnis (z.B. ~/code/hellanzb_0.13-6.1_all.deb).


172
2018-02-27 23:01



Wie kann ich von der geänderten Quelle aus installieren? sowie es für andere Benutzer zu verwenden. Vielen Dank! - myusuf3
@dustyprogrammer Aktualisiere meine Antwort mit Anweisungen zum Erstellen eines .deb Paket aus dem Quellcode. Um Ihr modifiziertes Paket in die Repositories zu bekommen, sollten Sie mit a sprechen MOTU über das. - Isaiah
@DoR gibt es eine Möglichkeit, eine Deb zu erstellen, die standardmäßig in einem benutzerdefinierten Verzeichnis installiert wird? genauso wie wir mit dem --prefix während des configure-Prozesses installieren können? eigentlich kann ich die Tarballs für die Quelle einer Bibliothek nicht finden, deshalb kann ich --prefix nicht konfigurieren und installiere es .. aber diese pakages Quelle ist durch apt verfügbar, so dass ich dachte, das Quellpaket im gewünschten Präfix zu installieren . - ashishsony
Wenn Sie apt-get source nicht verwenden möchten (z. B. beim Erstellen eines Pakets aus einer anderen Distribution), laden Sie die 3 Quelldateien herunter und verwenden Sie 'dpkg-source -x [fein] .dsc', um die Dateien zu extrahieren und die Diffs vor dpkg-buildpackage. (ftp.debian.org/debian/doc/source-unpack.txt) - Shlomi Loubaton
Tut sudo apt-get build-dep <package> Installieren Sie die Abhängigkeiten als Binärdateien? Wenn dies der Fall ist, ist dies kein vollständiger Build aus der Quelle. Wie macht man Build-Dep Abhängigkeiten von der Quelle installieren? - Hello World


Im Allgemeinen können Sie die Quelle eines installierten Pakets abrufen, indem Sie folgendermaßen vorgehen:

  1. Aktivieren Sie die Quellrepositorys. Öffnen Sie das Dashboard (Schaltfläche oben links) und suchen Sie nach sources. Das sollte die bringen Software & Updates Programm, führen Sie das aus und stellen Sie sicher, dass Sie die Option "Quellcode" ausgewählt haben:

    enter image description here

  2. Öffnen Sie ein Terminal und führen Sie diesen Befehl aus:

    apt-get source vlc
    

Dadurch werden die Quellen von vlc in Ihr aktuelles Verzeichnis heruntergeladen und Sie können sie in Ruhe ansehen.

Natürlich, im Falle von vlcSie können sie auch direkt von der vodolan.org Website herunterladen: https://www.videolan.org/vlc/download-sources.html


19
2018-03-18 20:03



Sie sollten sudo nicht mit 'apt-get source' verwenden müssen - Squidly
@MrBones argh! Nein, natürlich nicht, aus Gewohnheit. Danke, dass du es aufgezeigt hast. - terdon♦
Im Terminal: software-properties-gtk <--- wird das GUI-Panel "Software & Updates" gestartet. (Es wurde nicht aus irgendeinem Grund in der Dashboard-Suche nach mir gefunden.) - pestophagous


Sie können verwenden apt-get source --compile direkt:

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

Arbeitete für mich. Das .deb endet in dem Verzeichnis, in dem Sie den Befehl ausgeführt haben.


16
2017-08-21 07:37



Arbeitete auch für mich, danke. Nur ein zusätzliches Detail: Sie können das .deb mit installieren sudo dpkg -i <package>.deb - waldyrious
Die beste Lösung mit Ausnahme von apt wird auf die Repository-Version zurückgesetzt, weil Sie vergessen haben, das Änderungsprotokoll mit "dch -i" zu dokumentieren. - Futal


Um mehr Informationen über ein Paket zu erhalten, einschließlich Upstream - URL und Projekt - / Programm - Kontakten, können Sie sich die Copyright-Datei (referenziert von packages.debian.de).

Wenn das Paket in Ihrem System enthalten und installiert ist, können Sie die Copyright-Datei auch direkt unter lesen /usr/share/doc/$package_or_program_name/copyright.

Sehen Wie lade ich den Quellcode des Debian-Pakets herunter?.


3
2017-08-01 12:52





Wie bereits erwähnt https://askubuntu.com/a/81889/52975 Es gibt auch einen Ubuntu-spezifischen Ansatz mit bzr.

Die neueste Version bekommen:

bzr branch lp:ubuntu/hello

TODO: Dies hat auf Ubuntu 16.04 Xenial aufgehört zu arbeiten. bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".. bzr branch lp:ubuntu/wily/hello funktioniert und bzr branch lp:ubuntu/xenial/helloscheitert erneut. Aus irgendeinem Grund https://code.launchpad.net/ubuntu/+source/hello zeigt Xenial nicht an: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source/hello

Spezifische Version:

bzr branch lp:ubuntu/trusty/hello

Sie können auch verwenden pull-lp-source:

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

Dann können Sie es bearbeiten:

cd hello
vim some_file

Erstelle es neu:

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

Und installieren Sie es:

sudo dpkg -i ../hello.deb

Das Ubuntu-Verpackungshandbuch ist eine gute Informationsquelle.


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/".  Ubuntu-Verpackungshandbuchspeziell 4.2. Die Quelle bekommen sagt: bzr branch ubuntu:lightdm lightdm.quickswitch bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/".  Was für ein Chaos. :-( - Stéphane Gourichon
Benutzt pull-lp-source Stattdessen erhalten wir kein bzr-Repository. bzr bd -- -b -us -uc sagt bzr: ERROR: Not a branch: "/org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3/". : - / Danke für jeden Hinweis. - Stéphane Gourichon
@ StéphaneGourichon hummm, ich reproduziere dich auf Ubuntu 16.04 Xenial. Das Hinzufügen der spezifischen Version funktioniert: bzr lp:ubuntu/wily/hello, aber aus irgendeinem Grund gibt es keine xenial Ausführung? Und keine zeigt auf: code.launchpad.net/ubuntu/+source/hello Stelle dir das vor. - Ciro Santilli 新疆改造中心 六四事件 法轮功
Danke, dass du dich um die Reproduktion gekümmert hast. Irgendwie wählte ich die falsche Karte aus. Geöffnet bugs.launchpad.net/ubuntu/+source/bzr/+bug/1614053 Erwähnung dieser Seite. - Stéphane Gourichon
Praktischer als einige der anderen Ansätze. Und danke für die anderen Insidertipps :) - nealmcb