Comment obtenir et modifier le code source des paquets installés via apt-get?


163

Je suppose que toutes les applications installées via apt-getOpen Source sont installées . mais pour ceux qui sont disponibles de cette manière, où puis-je obtenir le code source de ces applications et les mettre à jour?

J'ai quelques applications que j'utilise régulièrement et qui ne sont plus développées activement et j'aimerais ajouter des fonctionnalités. Où pourrais-je aller pour obtenir les droits de mise à jour de ces applications?

Dans ce cas précis, je fais référence au paquet hellanzb


7
apt-getprend également en charge les programmes à source fermée, donc votre hypothèse initiale est incorrecte.
Flimm

Réponses:


183

Utilisez la commande apt-get source <package>(n'utilisez pas sudo avec elle) pour télécharger la source d'un paquet.

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.

Pour construire un paquet à partir de la source, commencez par installer les dépendances de construction:

sudo apt-get build-dep <package>  

Puis utilisez dpkg-buildpackagepour créer un .debfichier. À partir des feuilles de référence rapide APT et Dpkg :

dpkg-buildpackage Construit un paquet Debian à partir d'une arborescence source Debian. Vous devez être dans le répertoire principal de l’arbre source pour que cela fonctionne. Exemple d'utilisation:

 dpkg-buildpackage -rfakeroot -uc -b

Où lui -rfakerootordonne d'utiliser le programme fakeroot pour simuler les privilèges root (à des fins de propriété), -ucsignifie "Ne signez pas le journal des modifications de manière cryptographique" et -b"Construisez uniquement le paquet binaire"

Dans un terminal, cddans le répertoire contenant la source du paquet (par exemple ~/code/hellanzb-0.13) et exécutez la commande suivante:

dpkg-buildpackage -rfakeroot -uc -b

Si la construction réussit, il y aura un .debfichier situé dans le
répertoire parent (par exemple ~/code/hellanzb_0.13-6.1_all.deb).


comment puis-je installer à partir de la source modifiée. ainsi que de le remettre pour que les autres utilisateurs l'utilisent. Merci!
myusuf3

1
@dustyprogrammer Mise à jour de ma réponse avec des instructions sur la création d'un .debpaquet à partir du code source. Pour ce qui est d’obtenir votre paquet modifié dans les référentiels, vous devriez en parler à une MOTU .
Esaïe

@DoR existe-t-il un moyen de créer une deb installée par défaut dans un répertoire personnalisé? de la même manière que nous pouvons installer en utilisant le préfixe - pendant le processus de configuration? En fait, je ne peux pas trouver les archives pour la source d'une bibliothèque, c'est pourquoi je ne peux pas configurer --prefix, et le faire installer .. mais cette source de pakages est disponible via apt, donc je pensais installer le paquet source dans le préfixe souhaité .
Ashishsony

2
Si vous ne souhaitez pas utiliser apt-get source (par exemple lors de la construction d'un paquet à partir d'une autre distribution), téléchargez les 3 fichiers source et utilisez 'dpkg-source -x [fine] .dsc' pour extraire les fichiers et appliquer le diffs avant dpkg-buildpackage. ( ftp.debian.org/debian/doc/source-unpack.txt )
Shlomi Loubaton

Est-ce que sudo apt-get build-dep <package>les dépendances sont installées en tant que binaires? Si c'est le cas, il ne s'agit pas d'une version complète à partir des sources. Comment créer des dépendances d'installation avec build-dep à partir des sources?
Bonjour le monde

21

En général, vous pouvez obtenir le source d'un paquet installé en suivant cette procédure:

  1. Activer les référentiels sources. Ouvrez le tableau de bord (bouton en haut à gauche) et recherchez sources. Cela devrait afficher le Software & Updatesprogramme, l'exécuter et s'assurer que l'option "Code source" est sélectionnée:

    entrez la description de l'image ici

  2. Ouvrez un terminal et lancez cette commande:

    apt-get source vlc
    

Cela téléchargera les sources de vlc dans votre répertoire actuel et vous pourrez les consulter à votre guise.

Bien sûr, dans le cas de vlc, vous pouvez également les télécharger directement depuis le site Web videolan.org: https://www.videolan.org/vlc/download-sources.html


1
Vous ne devriez pas avoir besoin d'utiliser sudo avec 'apt-get source'
Squidly le

@MrBones argh! Non, bien sûr que non, force de l'habitude. Merci de l'avoir signalé.
terdon

dans le terminal: software-properties-gtk <--- qui lancera le panneau de l'interface graphique "Logiciels et mises à jour". (Il n'apparaît pas dans le tableau de bord.
Cherchez-

17

Vous pouvez utiliser apt-get source --compiledirectement:

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

Travaillé pour moi Le fichier .deb se termine dans le répertoire dans lequel vous avez exécuté la commande.


9
Travaillé pour moi aussi, merci. Juste un détail supplémentaire: vous pouvez installer le .deb avecsudo dpkg -i <package>.deb
waldyrious

La meilleure solution, sauf qu'apt va revenir à la version du référentiel, car vous avez oublié de documenter le journal des modifications avec "dch -i".
Futal


2

Exemple minimal avec le hellopackage

Tout cela et bien d’autres sont décrits à l’ adresse : https://www.debian.org/doc/manuals/maint-guide/build.en.html

Commençons par obtenir un exemple de package pour modifier le source pour:

sudo apt-get install hello
hello

les sorties:

Hello, world!

Maintenant, piratons-le. Obtenir la source:

apt-get source hello
cd hello-*

et ouvert:

vim src/hello.c

et modifiez le message à:

Hello, world hacked!

Ensuite, faites de même pour le test, sinon le test ennuyeux commencera à échouer:

vim tests/greeting-1

Puis reconstruire avec:

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

Vers la fin de la sortie, il est écrit:

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

donc il a créé le .deb sur le répertoire parent, comment osez-le. Alors finalement, nous installons et testons le paquet modifié:

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

et voilà, il envoie le nouveau message:

Hello, world hacked!

Testé sur Ubuntu 18.04.

Ancienne bzrréponse

TODO: cela a cessé de travailler sur Ubuntu 16.04 Xenial, à défaut avec: bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".. bzr branch lp:ubuntu/wily/hellofonctionne et bzr branch lp:ubuntu/xenial/helloéchoue à nouveau. Pour une raison quelconque, https://code.launchpad.net/ubuntu/+source/hello ne montre pas Xenial: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source /salut

Comme mentionné à l' adresse https://askubuntu.com/a/81889/52975, il existe également une approche spécifique à Ubuntu avec bzr.

Obtenez la dernière version:

bzr branch lp:ubuntu/hello

Version spécifique:

bzr branch lp:ubuntu/trusty/hello

Vous pouvez également utiliser pull-lp-source:

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

Ensuite, vous pourrez l'éditer:

cd hello
vim some_file

Reconstruisez-le:

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

Et installez-le:

sudo dpkg -i ../hello.deb

Le guide d’emballage Ubuntu est une bonne source d’information.


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/". Guide de l'emballage Ubuntu , en particulier 4.2. Obtenir la source dit: bzr branch ubuntu:lightdm lightdm.quickswitch bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/". Quel gâchis. :-(
Stéphane Gourichon

Utilisé à la pull-lp-sourceplace, mais nous n'obtenons pas de référentiel bzr. bzr bd -- -b -us -ucdit bzr: ERROR: Not a branch: "/org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3/".: - / Merci pour tout indice.
Stéphane Gourichon

@ StéphaneGourichon hummm, je vous reproduis sur Ubuntu 16.04 Xenial. L'ajout de la version spécifique fonctionne:, bzr lp:ubuntu/wily/hellomais pour une raison quelconque, il n'y a pas de xenialversion? Et aucun ne montre sur: code.launchpad.net/ubuntu/+source/hello Go figure.
Ciro Santilli a annoncé

1
Merci de prendre soin de reproduire. Type de choisi la mauvaise carte, alors. Bugs.launchpad.net/ubuntu/+source/bzr/+bug/1614053 ouvert en mentionnant cette page.
Stéphane Gourichon

1
Plus pratique que certaines des autres approches. Et merci pour les autres conseils d'initiés :)
nealmcb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.