Destination Debian

Infos à la source, maîtrisez votre distribution Debian/Ubuntu

  • Soutenir
  • Mes livres
    • Mémento Git à 100%
    • Debian 8 Jessie
  • Lettre d’informations
  • Mes activités chez Debian
    • Historique
    • Mes projets
  • Mes autres sites
    • My blog on free software
    • Freexian, ma société
    • Mon blog perso
  • Contact
Home Archives for Libre

Économisez de l’espace disque en excluant les fichiers inutiles avec dpkg

Posted on 14/04/2011 Written by Raphaël Hertzog

La plupart des paquets contiennent des fichiers dont vous n’avez pas besoin, comme par exemple des traductions dans des langues qui vous sont inconnues, ou de la documentation que vous ne lirez pas. Ne serait-il pas intéressant de s’en dispenser et sauver ainsi quelques méga-octets ? Bonne nouvelle : à partir de dpkg 1.15.8, c’est possible !

dpkg met à disposition deux options dans ce but :

  • --path-include=motif-de-type-glob
  • --path-exclude=motif-de-type-glob

D’elles dépend l’installation ou non d’un fichier. Le motif de recherche « glob » fonctionne de la même façon que ce à quoi vous êtes habitués au travers du shell (cf. la page de manuel glob(7)).

Passer ces deux options via la ligne de commande étant tout sauf pratique, la meilleure manière de les utiliser reste de les mettre dans un fichier de configuration résidant dans /etc/dpkg/dpkg.cfg.d/. Attention toutefois : l’ordre dans lequel sont énumérées les options compte. Lorsqu’un fichier correspond à plusieurs motifs de recherche, la dernière entrée l’emporte !

Un de leurs usages habituels consiste à exclure un dossier entier, puis à réintégrer certaines de ses parties que vous voulez conserver. Par exemple exclure les traductions gettext et manuels dans toutes les langues sauf le français. Il faut alors que le fichier /etc/dpkg/dpkg.cfg.d/excludes contienne :

# Supprimer toutes les locales, sauf le français
path-exclude=/usr/share/locale/*
path-include=/usr/share/locale/fr/*
path-include=/usr/share/locale/locale.alias

# Supprimer les pages de manuels, sauf celles en français
path-exclude=/usr/share/man/*
path-include=/usr/share/man/man[1-9]/*
path-include=/usr/share/man/fr*/*

Notez bien qu’à partir du moment où vous aurez mis à jour /etc/dpkg/dpkg.cfg.d/excludes, les fichiers commenceront à disparaître au fur et à mesure des mises à jour des paquets. Si l’objectif consiste à sauver de l’espace disque immédiatement, alors il vous faudra réinstaller les paquets installés sur votre système. aptitude reinstall ou apt-get --reinstall install pourront alors vous être utiles. En théorie, il serait même possible d’utiliser aptitude reinstall ~i, mais cela a de grandes chances d’échouer, du fait d’un paquet non disponible (parce qu’il a été installé manuellement ou parce qu’une nouvelle version a pris la place sur le miroir de l’ancienne ayant été installée).

Cet article est une traduction de Save disk space by excluding useless files with dpkg contribuée par Weierstrass01. Abonnez-vous à ce blog par RSS ou par email pour recevoir tous les prochains articles et améliorer votre maîtrise de Debian/Ubuntu.

Filed Under: Documentation, Documentation pour les utilisateurs Tagged With: Debian, dpkg, Espace disque, HOWTO, Libre, Référence, Ubuntu

5 raisons qui font qu’un paquet Debian est plus qu’une simple archive de fichiers

Posted on 06/04/2011 Written by Raphaël Hertzog

Folder with gearsLes paquets Debian font certainement partie de votre quotidien… mais savez-vous seulement ce qu’ils sont exactement ? De simples archives ? Sûrement plus que ça, sinon de « simples » archives TAR (vous savez, les fameux fichiers finissant par .tar.gz) feraient l’affaire. Cet article vous propose de plonger au cœur de leurs structures… suivez le guide !

1. Un paquet Debian ? Deux archives TAR dans une archive AR !

Un fichier .deb est, en premier lieu, une archive au format AR. Archive que vous pouvez manipuler à l’aide de la commande ar. Cette archive contient 3 fichiers, comme vous pouvez le constater par vous-même en téléchargeant n’importe quel .deb, et en lui passant la commande « ar t » :

$ ar t gwibber_2.31.91-1_all.deb
debian-binary
control.tar.gz
data.tar.gz

Le fichier debian-binary est un fichier texte indiquant la version du format du .deb, la version actuelle étant la 2.0.

$ ar p gwibber_2.31.91-1_all.deb debian-binary
2.0

Le fichier data.tar.gz contient quant à lui les fichiers « utiles » du paquets, i.e. tous les fichiers décompressés lorsque vous exécutez dpkg --unpack.

Jusque-là…rien d’extraordinaire. Ce qui fait qu’un .deb est plus qu’une archive est contenu dans le dernier fichier : control.tar.gz. Il contient des métainformations utilisées par le gestionnaire de paquets. Par exemple :

$ ar p gwibber_2.31.91-1_all.deb control.tar.gz | tar tzf -
./
./postinst
./prerm
./preinst
./postrm
./conffiles
./md5sums
./control

2. Des méta-informations concernant le paquet et ses relations…

Le fichier control contenu dans l’archive control.tar.gz est le plus important de tous : il contient des informations basiques sur le paquet telles que son nom, sa version, sa description, les architectures supportées, son mainteneur, etc. Il contient également tout le jeu de dépendances nécessaires au paquet, grâce auquel le gestionnaire de paquets peut s’assurer de la cohérence de l’écosystème avant l’installation du paquet. La page dédiée aux Binary control files vous en dira plus quant à l’utilisation de tous ces attributs.

Ces informations sont copiées dans le fichier /var/lib/dpkg/status après que le paquet a été installé.

3. …et des scripts pour que tout fonctionne dès l’installation

Aux différentes étapes de la vie d’un paquet — installation, mise à jour, suppression… — dpkg exécute les scripts du mainteneur, embarqués dans le paquet :

  • postinst : après l’installation
  • preinst : avant l’installation
  • postrm : après la suppression
  • prerm : avant la suppression

Il s’agit là d’une description largement simplifiée. Plus exactement, ces scripts sont exécutés en de nombreuses autres occasions, avec des paramètres d’appel différents. Un chapitre entier de la Charte Technique Debian est dédié à ce sujet. Cette page du wiki Debian pourrait vous paraître plus digeste pour une première approche.

Bien qu’effrayante de prime abord, il s’agit là d’une fonctionnalité très importante, indispensable à la bonne gestion des mises à jour non réversibles, à la création d’utilisateurs système, pour la configuration automatique, etc.

4. Les fichiers de configuration sont… spéciaux

Décompresser une archive entraîne la suppression des versions précédentes des fichiers, ce qui constitue le comportement désiré lorsqu’un paquet est mis à jour… sauf pour les fichiers de configuration : il vaut mieux ne pas écraser vos modifications, non ?

C’est dans cette optique que les paquets listent les fichiers de configuration dans le fichier conffiles fourni par control.tar.gz. De cette manière, dpkg les traitera différemment.

5. Vous pouvez toujours ajouter de nouvelles méta-informations

Et il existe déjà des outils qui exploitent la possibilité d’ajouter des fichiers supplémentaires dans control.tar.gz :

  • debsums utilise le fichier md5sums pour s’assurer qu’aucun fichier n’a été modifié par accident
  • dpkg-shlibdeps utilise les fichiers shlibs et symbols pour générer les dépendances à une bibliothèque
  • debconf utilise les scripts config pour obtenir des informations de configuration de la part de l’utilisateur

Une fois installés, ces fichiers sont conservés par dpkg dans /var/lib/dpkg/info/package.* à côté des scripts du mainteneur du paquet.

Cet article est une traduction de 5 reasons why a Debian package is more than a simple file archive contribuée par Weierstrass01. Suivez moi sur Identi.ca, Twitter et Facebook. Ou abonnez-vous à ce blog par RSS ou par email.

Filed Under: Documentation, Documentation pour les utilisateurs Tagged With: ar, conffile, control, deb, Debian, Libre, maintainer scripts, Référence, Ubuntu

Comment créer des paquets Debian avec une méthode de compression alternative

Posted on 07/02/2011 Written by Raphaël Hertzog

Alors que gzip vient immédiatement à l’esprit quand il s’agit de compression de fichiers, d’autres outils existent et permettent même d’atteindre un meilleur ratio de compression que celui-ci. Cet article explique comment tirer parti de ces alternatives dans votre travail d’empaquetage Debian.

Dans le paquet source

Un paquet source se compose de plusieurs fichiers. Le fichier .dsc n’est jamais compressé, ce qui ne pose aucun problème puisqu’il s’agit d’un petit fichier texte. Outre via gzip (orig.tar.gz), les archives TAR amont peuvent être compressés grâce à bzip2 (orig.tar.bz2), lzma (orig.tar.lzma) ou xz (orig.tar.xz). À vous de choisir si l’archive amont est proposée sous différents formats de compression. Placez-le au bon endroit et dpkg-source l’utilisera automatiquement. Il est à noter toutefois que dans le cas du format source 1.0 seul gzip est utilisable, tandis que l’archive principale Debian n’autorise actuellement que gzip et bzip2 (xz suivra éventuellement plus tard), même si le format source « 3.0 (quilt) » les supporte tous.

Les fichiers d’empaquetage Debian sont fournis soit sous forme de fichier .diff.gz pour le format source 1.0 (seul gzip est supporté ici aussi), soit sous forme de fichier .debian.tar pour le format source « 3.0 (quilt) ». Cette dernière archive pouvant être compressée via l’outil de votre choix, il suffit de le spécifier à dpkg-source (cf. ci-dessous. À noter que la valeur par défaut correspond à l’utilisation de gzip).

Dpkg-source doit générer l’archive principale dans le cas d’un paquet natif et il est possible de lui faire utiliser autre chose que gzip, grâce à l’option --compression. Cette option est usuellement placée dans le fichier debian/source/options:

# Utilisation de bzip2 au lieu de gzip
compression = "bzip2"
compression-level = 9

Cette option n’est généralement pas très utile dans le cas des paquets sources au format « 3.0 (quilt) », dans la mesure où l’archive Debian compressée n’est pas d’une taille importante. Ceci étant, certains mainteneurs préfèrent utiliser le même outil de compression pour l’archive amont et l’archive Debian. Vous êtes donc libre d’utiliser cette option dans un souci d’harmonisation.

C’est par contre bien plus intéressant dans le cas des paquets natifs : pour exemple la taille du paquet source dpkg a été réduite de 30% en passant à bzip2, sauvant ainsi 2Mo d’espace disque.

Dans les paquets binaires

Les fichiers .deb contiennent également des archives compressées au format tar, et utilisent également gzip par défaut :

$ ar t dpkg_1.15.8.9_i386.deb 
debian-binary
control.tar.gz
data.tar.gz

L’archive data.tar.gz contient tous les fichiers à installer, et c’est précisément celle que vous pouvez compresser via un outil alternatif à gzip. Rappelons que ce n’est vraiment intéressant que dans le cas des — très — gros paquets, dont la taille justifie l’écart par rapport au processus standard de compression. Essayez et regardez un peu combien de Mo vous parvenez à sauver ! Le fait que ces alternatives puissent nécessiter une quantité importante de mémoire (que ce soit pour la compression ou la décompression) ne doit pas être négligé : dans le cas de plate-formes embarquées ou de matériels d’entrée de gamme disposant de peu de mémoire, il peut être intéressant de conserver gzip.

Ceci étant dit, quelle est donc la manière de procéder ? Rien de plus facile, dpkg-deb met à disposition l’option -Z, à laquelle il suffit de passer « -Zbzip2 » par exemple. Il est également possible de passer « -z6 » pour changer le ratio de compression à 6 (ce qui peut être utile car un niveau de compression inférieur peut entraîner une empreinte mémoire plus faible, selon le programme utilisé). L’invocation de dpkg-deb étant habituellement masquée derrière l’appel à dh_builddeb dans le fichier /debian/rules, il faut modifier ce dernier avec « dh_builddeb -- -Zbzip2 ».

Si vous utilisez les fichiers de règles de debhelper 7, il vous faudra neutraliser le comportement standard via par exemple l’ajout de :

%:
	dh $@

override_dh_builddeb:
	dh_builddeb -- -Zbzip2

Si vous utilisez CDBS, la variable d’environnement DEB_DH_BUILDDEB_ARGS doit être initialisée à :

include /usr/share/cdbs/1/rules/debhelper.mk
[...]
DEB_DH_BUILDDEB_ARGS = -- -Zbzip2

Cet article est une traduction de How to create Debian packages with alternative compression methods contribuée par Weierstrass01. Abonnez-vous à ce blog par RSS ou par email pour recevoir tous les prochains articles et améliorer votre maîtrise de Debian/Ubuntu.

Filed Under: Documentation, Documentation pour les contributeurs Tagged With: CDBS, debhelper, Debian, dpkg-deb, dpkg-source, HOWTO, Libre, Packaging, Ubuntu

Comment utiliser plusieurs archives amont dans les paquets source Debian

Posted on 16/12/2010 Written by Raphaël Hertzog

Depuis l’introduction du format source « 3.0 (quilt) », il est maintenant possible d’intégrer plusieurs archives amont dans les paquets source Debian. Cet article a pour but de vous montrer comment faire avec votre propre paquet, étant donné qu’il est assez utile d’intégrer facilement des plugins, traductions ou documentations que les développeurs amont mettent à disposition sous forme d’archives séparées.

Explications pas-à-pas

Les sources de Spamassassin serviront d’exemple. La version en développement est la 3.3.1. L’archive principale est nommée de manière conventionnelle (spamassassin_3.3.1.orig.tar.gz) et contient le dossier racine des sources. Nous avons déjà un répertoire Debian dans la mesure où le paquet n’est pas nouveau.

Les développeurs mettent à disposition les règles spamassassin sous la forme d’une archive séparée nommée Mail-SpamAssassin-rules-3.3.1.r901671.tgz. On la récupère, la renomme spamassassin_3.3.1.orig-pkgrules.tar.gz et la copie dans le même répertoire que l’archive principale. Le suffixe « pkgrules » est non seulement la « clé » identifiant clairement l’archive amont, mais aussi le nom du dossier dans lequel il sera extrait à l’intérieur du paquet source. Un tel répertoire n’existant pas encore, nous devons le créer.

$ mv Mail-SpamAssassin-rules-3.3.1.r901671.tgz spamassassin_3.3.1.orig-pkgrules.tar.gz
$ cd spamassassin-3.3.1
$ mkdir pkgrules
$ tar -C pkgrules -zxf ../spamassassin_3.3.1.orig-pkgrules.tar.gz

Et cela suffit ! La prochaine fois que le paquet source sera généré, l’archive supplémentaire sera automatiquement intégrée dans le paquet.

$ dpkg-buildpackage -S
[...]
 dpkg-source -b spamassassin-3.3.1
dpkg-source: info: utilisation du format source « 3.0 (quilt) »
dpkg-source: info: construction de spamassassin à partir de ./spamassassin_3.3.1.orig-pkgrules.tar.gz ./spamassassin_3.3.1.orig.tar.gz
dpkg-source: info: construction de spamassassin dans spamassassin_3.3.1-1.debian.tar.gz
dpkg-source: info: construction de spamassassin dans spamassassin_3.3.1-1.dsc

L’archive supplémentaire est maintenant partie intégrante des sources mais, en l’état, ne sert à rien… il faut modifier le fichier debian/rules (ou debian/spamassin.install) pour installer les nouveaux fichiers dans le paquet binaire.

Un cas particulier : l’empaquetage d’un ensemble de logiciels connexes

Dans de très rares cas, vous pouvez être amenés à empaqueter ensemble plusieurs programmes (de petits modules Perl par exemple) et vous n’avez aucune archive principale, seulement plusieurs petites. Renommez-les selon la logique précédente, puis demandez à dpkg-source, lors de la génération du paquet, de créer une archive principale « factice » avec l’option --create-empty-orig :

$ dpkg-buildpackage -S --source-option=--create-empty-orig

Utilisez cette option avec précaution dans la mesure où le numéro de version que vous donnez au lot de programmes est très vraisemblablement décorrélé de celui de chaque programme.

Erreurs fréquentes

Oublier d’extraire les archives supplémentaires

Si vous oubliez d’extraire le contenu de l’archive supplémentaire dans le répertoire pkgrules, dpkg-source émettra de nombreux messages d’avertissement concernant la suppression des fichiers de cette archive. Il ne s’agit pas réellement d’une suppression, vous avez simplement oublié de les créer dans le répertoire précédent.

dpkg-source: avertissement: suppression du répertoire pkgrules ignorée
dpkg-source: avertissement: suppression du fichier pkgrules/20_fake_helo_tests.cf ignorée
dpkg-source: avertissement: suppression du fichier pkgrules/60_shortcircuit.cf ignorée
[...]

Mauvais numéro de version pour l’archive supplémentaire

Parfois l’archive supplémentaire se trouve dans une version ne correspondant pas à la version en développement. Vous devez nommez le fichier de façon cohérente avec la source amont, car dans le cas contraire il ne sera pas pris en compte par dpkg-source. Ce dernier générera un nouveau patch dans debian/patches contenant l’intégralité du nouveau dossier.

Rendre le nom du composant significatif en regard du numéro de version de l’archive supplémentaire est une solution possible (dans notre exemple ci-dessus, nous aurions pu ainsi adopter le suffixe « pkgrules-r901671 »). Le revers de la médaille consiste en un nom de dossier variable, changeant avec toute nouvelle version. Le corollaire étant bien sûr que vous devrez adapter vos règles d’empaquetage pour prendre en compte ce changement.

Ceci étant, cette astuce a le mérite de permettre la mise à jour du contenu additionnel sans pour autant impacter la version amont. L’envoi d’une nouvelle révision sera acceptée dans la mesure où l’archive principale sera ignorée — car inchangée — tandis que le contenu additionnel sera mis à jour (du fait du nom différent).

Assurez-vous cependant de retirer les anciennes versions des archives additionnelles, sans quoi vous auriez plusieurs copies différentes de la même archive dans votre paquet source !

Mauvaise extraction de l’archive supplémentaire

Vous devez faire preuve d’autant d’ingéniosité que dpkg-source lorsque vous extrayez manuellement l’archive supplémentaire !

Si l’archive contient uniquement un répertoire racine, celui-ci est extrait, renommé pour correspondre au nom du composant et déplacé dans le répertoire du paquet source.
Dans le cas contraire (plusieurs répertoires à la racine), alors le répertoire de destination est créé en premier et le contenu de l’archive directement extrait dans celui-ci.

Ci-dessous des commandes pour faire face dans tous les cas (le répertoire courant est supposé être celui du paquet source) :

$ mkdir pkgrules
# L'archive contient un unique répertoire de premier niveau
$ tar -C pkgrules --strip-components=1 -zxf ../spamassassin_3.3.1.orig-pkgrules.tar.gz
# L'archive contient plusieurs fichiers/répertoires au premier niveau
$ tar -C pkgrules -zxf ../spamassassin_3.3.1.orig-pkgrules.tar.gz

Cet article est une traduction de How to use multiple upstream tarballs in Debian source packages contribuée par Weierstrass01. Abonnez-vous à ce blog par RSS ou par email pour recevoir tous les prochains articles et améliorer votre maîtrise de Debian/Ubuntu.

Filed Under: Documentation, Documentation pour les contributeurs Tagged With: 3.0 (quilt), Debian, dpkg-source, HOWTO, Libre, Packaging, Ubuntu

  • « Previous Page
  • 1
  • …
  • 24
  • 25
  • 26
  • 27
  • 28
  • Next Page »

Découvrez mes ouvrages

Apprenez en plus en cliquant sur leur couverture :

Lettre d’informations

Abonnez-vous à ma lettre d'informations, saisissez votre adresse électronique et cliquez sur « S'abonner » :

Suivez moi

  • Adresse mail
  • Facebook
  • GitHub
  • RSS
  • Twitter

Archives

Planètes

  • Planète April
  • Planète Debian-Fr
  • Planète des utilisateurs Debian
  • Planète Libre

Flux Mon blog anglophone sur le libre

  • Freexian is looking to expand its team with more Debian contributors 29/03/2024
  • Freexian’s report about Debian Long Term Support, July 2022 31/08/2022
  • Freexian’s report about Debian Long Term Support, June 2022 26/07/2022
  • Freexian’s report about Debian Long Term Support, May 2022 23/06/2022
  • Freexian’s report about Debian Long Term Support, April 2022 03/06/2022
  • Debian 9 soon out of (free) security support 11/05/2022

Mots-clés

3.0 (quilt) Annonce aptitude Cahier Admin conffile Contribuer DebConf Debian Debian France Debian Live Distro Tracker dpkg dpkg-source Eyrolles Freexian GNOME GSOC HOWTO Informatique Kali Linux Libre Livres LTS Moi multiarch nautilus-dropbox nettoyage Packaging Politique Presse Pro Programmation PTS publican python-django Release Rolling Référence Résumé d'activité synaptic Testing Tryton Ubuntu unstable wordpress

Articles récents

  • Le logiciel libre a t’il une couleur politique ?
  • Mes activités libres en janvier 2017
  • Élections présidentielles, logiciel libre et Charlotte Marchandise
  • Mes activités libres en décembre 2016
  • Mes activités libres en novembre 2016

Copyright © 2025 · Focus Pro Theme sur Genesis Framework · WordPress · Log in