web-dev-qa-db-fra.com

Comment construire un paquet Debian / Ubuntu à partir des sources?

J'ai la source d'un programme (tiré de cvs/svn/git/...) et j'aimerais construire un paquet Debian/Ubuntu pour cela. Le paquet est présent dans les référentiels, mais:

  • C'est une version plus ancienne (il me manque des fonctionnalités)
  • J'ai besoin d'options de compilation légèrement différentes de celles par défaut.

Quel est le moyen le plus simple de le faire? Je suis préoccupé par deux choses

  • Comment puis-je vérifier si j'ai répertorié correctement toutes les dépendances? (Je peux obtenir quelques astuces en cherchant sur ce dont dépendait l'ancienne version, mais de nouvelles dépendances ont peut-être été ajoutées.)
  • Comment puis-je empêcher le système de mise à jour d'installer l'ancienne version dans le référentiel lors d'une mise à jour?
  • Comment puis-je empêcher le système d’installer une version plus récente (lorsqu’il est sorti) et d’écraser mon package personnalisé?
113
Ryszard Szopa

Tout d’abord, la question du titre: En supposant que le répertoire debian existe déjà, placez-vous dans le répertoire source (le répertoire contenant le répertoire debian) et appelez dpkg-buildpackage. J'aime le lancer avec ces options:

dpkg-buildpackage -us -uc -nc

ce qui signifie ne pas signer le résultat et ne pas nettoyer.

Comment puis-je vérifier si j'ai répertorié correctement toutes les dépendances?

Obtenir les dépendances est un art noir. La méthode "officielle" consiste à vérifier que la compilation dépend du type de paquet construit avec uniquement le système de base, les paquetages "build-essential" et les dépendances de construction que vous avez spécifiées. Je ne connais pas de réponse générale pour les dépendances habituelles, allez-y simplement :)

Comment puis-je empêcher le système de mise à jour d'installer l'ancienne version dans le référentiel lors d'une mise à jour? Comment puis-je empêcher le système d’installer une version plus récente (lorsqu’il est sorti) et d’écraser mon package personnalisé?

Mes connaissances sont peut-être obsolètes à ce sujet, mais pour en aborder les deux: Utilisez dpkg --set-selections. En supposant que nullidentd soit le paquet sur lequel vous voulez rester, lancez en tant que root

echo 'nullidentd hold' | dpkg --set-selections

Alternativement, puisque vous construisez à partir des sources, vous pouvez utiliser un Epoch pour définir le numéro de version artificiellement haut et ne plus être dérangé. Pour utiliser une époque, ajoutez une nouvelle entrée au fichier debian/changelog et mettez un 99: devant le numéro de version. Étant donné mon exemple nullidentd, la première ligne de votre journal des modifications mis à jour se lirait comme suit:

nullidentd (99:1.0-4) unstable; urgency=low

le lien de Bernard est bon, surtout si vous devez créer vous-même le répertoire debian - les informations utiles --- sont également référence du développeur et page de ressources générale . lien d'Adam a également l'air bien mais je ne le connais pas bien.

26
Daniel Bungert

Exemple de construction basée sur Ubuntu pour ccache:

Sudo apt-get update
Sudo apt-get build-dep ccache
apt-get -b source ccache
Sudo dpkg -i ccache*.deb

Plus de détails: http://blog.aplikacja.info/2011/11/building-packages-from-sources-in-debianubuntu/

6
Dariusz Cieslak

Pour ce que vous voulez faire, vous voudrez probablement utiliser le diff source Debian, donc votre paquet est similaire au paquet officiel, mis à part la version amont utilisée. Vous pouvez télécharger le diff source à partir de packages.debian.org , ou bien l'obtenir avec le .dsc et l'archive source d'origine en utilisant "apt-get source".

Ensuite, décompressez votre nouvelle version de la source en amont, accédez à ce répertoire et appliquez le diff que vous avez téléchargé en faisant

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

Ensuite, apportez les modifications souhaitées pour compiler les options et construisez le paquet en faisant

dpkg-buildpackage -rfakeroot -us -uc
6
Mark Baker
  • place le répertoire "debian" du paquet d'origine dans votre répertoire source
  • utilisez " dch " pour mettre à jour la version du paquet
  • utilisez "debuild" pour construire le paquet
3
zowers

Je crois que this est le paquet Debian 'bible'.

Eh bien, c’est le guide du nouveau responsable Debian, il n’est donc pas applicable en grande partie, mais il couvre ce qui se passe où.

2
Bernard

Si vous utilisez Ubuntu, consultez le projet pkgcreator: http://code.google.com/p/pkgcreator

2
LRMAAX

Comment puis-je vérifier si j'ai répertorié correctement toutes les dépendances?

Le pbuilder est un excellent outil pour vérifier les dépendances de construction et les dépendances en configurant un système de base propre dans un environnement chroot. En compilant le paquet dans pbuilder, vous pouvez facilement vérifier les dépendances de construction, et en le testant dans un environnement pbuilder, vous pouvez vérifier les dépendances.

1
thiton

Here est un tutoriel pour la construction d’un paquet Debian.

En gros, vous devez:

  1. Configurez votre structure de dossier
  2. Créer un fichier de contrôle
  3. Facultativement, créez des scripts postinst ou prerm
  4. Lancer dpkg-deb

Je fais habituellement tout cela dans mon Makefile afin que je puisse simplement taper make pour cracher le binaire et le conditionner en une fois.

1
Adam Pierce

Si vous voulez un moyen rapide et sale d’installer les dépendances de construction, utilisez:

apt-get build-dep

Cela installe les dépendances. Pour cela, vous avez besoin de lignes sources dans votre fichier sources.list:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Si vous effectuez un backport sur des paquets de testing à stable, veuillez noter que les dépendances ont peut-être changé. La commande apt-get build-deb installe des dépendances pour les paquetages sources de votre référentiel actuel.

Mais bien sûr, dpkg-buildpackage -us -uc vous montrera toutes les dépendances désinstallées.

Si vous voulez compiler plus souvent, utilisez cowbuilder.

apt-get install cowbuilder

Ensuite, créez une zone de construction:

Sudo DIST = squeeze Arch = AMD64 cowbuilder --create

Puis compilez un paquet source:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

Regardez où cowbuilder met le paquet résultant.

Bonne chance!

1
Allard Hoeve