Packaging Debian GNU/Linux avancé



Documents pareils
Référence du développeur Debian

Debian en milieu professionnel. This document is under the GNU Free Documentation License.

Créer son premier package.deb. 19 août

La création d un paquet Debian. Aurélien Jarno. Journées du Logiciel Libre. 15 octobre 2005

Pourquoi et comment faire sa première contribution à Debian?

Eole - gestion des dictionnaires personnalisés

Chapitre 10 : Logiciels

Logiciel Libre Cours 10 Debian

Qu est ce qu un Développeur Debian? Comment le devient on?

Manuel d installation pour la distribution Debian GNU/Linux

Installation de DocBook sur un système Linux

Tutoriel Création d une source Cydia et compilation des packages sous Linux

TD séance n 2c Mise à jour des Systèmes

Méthodes et outils employés pour développer des logiciels libres

Serveur DNS et DHCP couplé à LDAP Debian GNU/Linux

Personnes ressources Tice. Académie de Rouen

Cahiers de. l Admin. Collection dirigée par Nat Makarévitch. GNU/Linux. Raphaël Hertzog. Avec la contribution de Christophe Le Bars et Roland Mas

Serveur Subversion Debian GNU/Linux

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

Introduction...3. Objectif...3. Manipulations...3. Gestion des utilisateurs et des groupes...4. Introduction...4. Les fichiers de base...

Debian Lenny - Virtualisation avec Libvirt/KVM Debian GNU/Linux

Systèmes de gestion de code source

Guide du nouveau responsable Debian. Guide du nouveau responsable Debian

Alexandre Buge Epitech 5 Promo Soutenance de stage du 01/03/2004 au 31/08/2004

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Magento. Pratique du e-commerce avec Magento. Christophe Le Bot avec la contribution technique de Bruno Sebarte

Formation Debian GNU/Linux. Alexis de Lattre, Rémy Garrigue, Tanguy Ortolo, Adrien Grand, Loïc Alsfasser, Patrick Burri, et

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

Fiche d utilisation du logiciel. 1 - Installation. J. Thioulouse & D. Chessel

Administration Linux - FTP

Dr.Web Les Fonctionnalités

Tutoriel QSOS. Version /02/2013

Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

Convention de Licence Érudit (Open Source)

Informatique. Les réponses doivent être données en cochant les cases sur la dernière feuille du sujet, intitulée feuille de réponse

Gestion de parc Windows depuis Unix. Pascal Cabaud & Laurent Joly

IPS : Corrélation de vulnérabilités et Prévention des menaces

User Documentation. Documentation utilisateur. version 0.2b

Figure 1a. Réseau intranet avec pare feu et NAT.

Découverte des Logiciels Libres. Gilles Dequen

Virtualisation Vserver et OpenVz en entreprise

Annexe : La Programmation Informatique

WebSpy Analyzer Giga 2.1 Guide de démarrage

MANUEL UTILISATEUR KIWI BACKUP V 3

Cours 1 : La compilation

Installation d ORACLE 10g sous Debian Etch

Outils de développement collaboratif

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

SSL ET IPSEC. Licence Pro ATC Amel Guetat

UBUNTU Administration d'un système Linux (4ième édition)

Environnements et Outils de Développement Cours 1 Introduction

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Serveur de sauvegarde à moindre coût

Table des matières. Date : Version : 29/06/ Objet : OpenVas 6.0

Maintenir Debian GNU/Linux à jour

Les Licences Libres Ouverture et Protection des Logiciels. Plan

MANUEL D INSTALLATION D UN PROXY

Introduction aux antivirus et présentation de ClamAV

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Diffusion AFRISTAT. Quels droits accorder aux utilisateurs? - sur les données - sur les documents numériques

LISTE D OPTIONS DE LICENCE

Construction et sécurisation d'un système Linux embarqué. Frédéric AIME

FORMATION Offre de Formation - Packaging. Les bonnes pratiques du packaging avec Installshield et AdminStudio. Contact et inscriptions

SUGARCRM Sugar Open Source Guide d Installation de French SugarCRM Open Source Version 4.2

Manuel du Desktop Sharing

L art d ordonnancer. avec JobScheduler. François BAYART

Vérifier la qualité de vos applications logicielle de manière continue

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

Guide d installation de SugarCRM Open Source version 4.5.1

CHARTE INFORMATIQUE LGL

Formation Debian GNU/Linux

Gestion d identités PSL Exploitation IdP Authentic

CMS et logiciels libres : initiation 01 CONTENT MANAGEMENT SYSTEM / SYSTÈME DE GESTION DE CONTENU

Logiciel Libre Cours 9 Modèles Économiques

LiveUSB clefisn. Meilland jean claude et Kbida Abdellatif. 16 septembre 2012

Retour d expérience sur Prelude

Manuel des logiciels de transferts de fichiers File Delivery Services

Acquisition des données

FileMaker Server 12. publication Web personnalisée avec XML

LINUX - Sécurité. Déroulé de l'action. - 3 jours - Contenu de formation

II- Préparation du serveur et installation d OpenVpn :

Les logiciels libres. Université Antilles Guyane 14 novembre 2008 Olivier Watté

Organiser les informations ( approche technique )

Serveur Appliance IPAM et Services Réseaux

Installer et configurer un serveur Zimbra

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Fiche Technique. Cisco Security Agent

MailStore Server 7 Caractéristiques techniques

Petit guide des sous-réseaux IP

Méthode d Évaluation des Coûts liés à l Open Source (ECOS)

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Auditer une infrastructure Microsoft

sshgate Patrick Guiran Chef de projet support

Guide pratique de CSPM, l'outil de suivi des performances du système Version française du Complete System Performance Monitor HOWTO

Situation professionnelle n X

LICENCE PROFESSIONNELLE SYSTEMES INFORMATIQUES & LOGICIELS

Avant-propos Certificats et provisioning profiles

Perso. SmartCard. Mail distribution. Annuaire LDAP. SmartCard Distribution OCSP. Codes mobiles ActivX Applet. CRLs

Transcription:

Packaging Debian GNU/Linux avancé Ce document est sous Licence de Documentation Libre GNU.

Support de cours Packaging Debian GNU/Linux avancé Auteurs : Benjamin Drieu <benjamin.drieu@fr.alcove.com>. Alcôve Formations Organisme de formation enregistré sous le n 11 92 08864 92 en 2004, plus de 70 stages effectués, en Inter ou Intra-entreprises, avec plus de 250 stagiaires ; toutes nos formations sont agrées FAFIEC. Le catalogue Formations est disponible sur notre site Internet, http://www.alcove.fr/, à la rubrique Formations. Pour de plus amples renseignements : Téléphone : 01.46.49.25.02 Email : formation@alcove.fr Cet ouvrage a été mis en page avec L A T E X, à partir de fichiers au format XML convertis à l aide de xsltproc développé par Daniel Veillard (http://xmlsoft.org/xslt/). Les feuilles de styles, la DTD et les outils associés ont été developpés par Logidée (http://www.logidee.com) pour rédiger et maintenir ses supports de formations. Ces outils sont bien sûr sous licence libre et disponibles sur le site web mentionné ci-dessus. Permission est accordée de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License disponible à http://www.gnu.org/copyleft/fdl.html), version 1.1 ou toute version ultérieure publiée par la Free Software Foundation. Veuillez vous référer aux sources XML de ce document (que vous pouvez obtenir auprès de l auteur) pour connaitre le détail de la licence avec la liste des Sections Invariables, des Textes de Première de Couverture, et des Textes de Quatrième de Couverture.

Sommaire Thème 1 : Démarrage..................................................... 9 1.1 Plan du cours......................................................... 10 1.1.1 Plan du cours.......................................................... 11 1.2 Présentation de Debian.............................................. 12 1.2.1 Présentation de Debian................................................. 13 Qu est-ce que Debian?..................................................... 13 Qui produit Debian?....................................................... 13 Organisation de Debian..................................................... 14 Infrastructure du projet...................................................... 14 Tâches des développeurs................................................... 15 Software in the Public Interest (SPI).......................................... 15 1.2.2 Le «contrat social».................................................... 16 Debian demeurera un ensemble logiciel totalement libre......................... 16 Nous donnerons en retour à la communauté des logiciels libres................... 16 Nous ne cacherons pas les problèmes........................................ 16 Nos priorités sont nos utilisateurs et les logiciels libres........................... 16 Programmes non conformes à nos standards sur les logiciels libres................ 17 1.2.3 Critères de liberté des logiciels (DFSG)................................... 18 Redistribution libre et gratuite................................................ 18 Code source.............................................................. 18 Applications dérivées....................................................... 18 Intégrité du code source de l auteur........................................... 18 Aucune discrimination de personne ou de groupe............................... 18 Aucune discrimination de champ d application.................................. 19 Distribution de licence...................................................... 19 La licence ne doit pas être spécifique à Debian................................. 19 La licence ne doit pas contaminer d autres logiciels............................. 19 1.2.4 Les composants d un dépôt Debian standard............................. 20 main..................................................................... 20 contrib................................................................... 20 non-free.................................................................. 20 non-us/*................................................................. 20 1.2.5 Debian et le monde du logiciel libre...................................... 21 Collaboration verticale avec les développeurs upstream.......................... 21 Apports indirects aux développeurs amont..................................... 21 Collaboration horizontale.................................................... 21 1.2.6 Évolution des versions de la distribution.................................. 22 Cycle de vie actuel......................................................... 22 Les noms de code des versions.............................................. 23 Trouver les anciennes versions............................................... 23 Thème 2 : Les paquets Debian GNU/Linux.............................. 24 2.1 Les fichiers.deb...................................................... 25 2.1.1 Le nom du fichier.deb................................................. 26 Format de nom du fichier.deb.............................................. 26 2.1.2 Structure du fichier.deb................................................ 27 Nature du.deb (format 2.0)................................................. 27

Les fichiers de contrôle du paquet............................................ 27 L archive data............................................................ 28 Fichiers.deb signés....................................................... 29 2.1.3 Versionnement des paquets............................................. 31 Version upstream et révision Debian.......................................... 31 Époques................................................................. 31 Comparaisons, ordonnancement des versions.................................. 32 Cycle de vie d un paquet dans Debian........................................ 32 2.1.4 Relations entre paquets................................................. 34 Types de relations entre paquets............................................. 34 Paquets virtuels........................................................... 34 2.1.5 Classifications des paquets............................................. 35 Section................................................................... 35 Paquets essentiels......................................................... 35 Priorité................................................................... 35 Tâches................................................................... 35 2.1.6 Paquets spéciaux...................................................... 36 Méta-paquets............................................................. 36 Bibliothèques............................................................. 36 2.2 Manipulations des paquets.deb..................................... 37 2.2.1 Utilisation basique..................................................... 38 Etats possibles d un package................................................ 38 Informations sur les paquets................................................. 39 Modification du système.................................................... 39 2.2.2 Utilisation avancée..................................................... 41 Options classiques......................................................... 41 Exemple : changer de MTA.................................................. 41 Gestion des sélections...................................................... 42 Vérifications d intégrité...................................................... 42 2.3 Utilisation des dépôts APT........................................... 43 2.3.1 Survol de APT......................................................... 44 Rôle de apt.............................................................. 44 Outils principaux........................................................... 44 Outils complémentaires..................................................... 45 Le dépôt APT............................................................. 45 2.3.2 Gestion des sources de paquets......................................... 47 Sources habituelles........................................................ 47 Définition d une source APT................................................. 47 Sources APT utiles......................................................... 48 Suivi des versions installées et disponibles..................................... 48 Recouvrements de sources................................................. 49 Pinning de version......................................................... 49 2.3.3 Configuration de apt................................................... 51 Spécification de paramètres................................................. 51 Syntaxe.................................................................. 51 Paramètres principaux...................................................... 52 2.3.4 Administration de tous les jours......................................... 53 Front-ends de sélection des paquages........................................ 53 Rechercher les paquets inutilisées............................................ 53 Surveiller les mises à jour................................................... 54 Trouver le miroir le plus adapté............................................... 54 Vérifier la présence de logiciels non-libres..................................... 54

Thème 3 : Bases de la construction de paquets Debian GNU/Linux.... 55 3.1 Construction de paquet Debian : bases............................. 56 3.1.1 Pourquoi faire?........................................................ 57 Désinstallation............................................................ 57 Meilleure intégration dans le système......................................... 57 Déploiement facile sur d autres machines...................................... 57 Bénéfice de toute la chaîne Debian........................................... 57 3.1.2 Structure d un paquet source Debian..................................... 58 Description générale....................................................... 58 Éléments principaux du packaging............................................ 59 3.1.3 Autres fichiers......................................................... 61 Documentation............................................................ 61 Copyright................................................................. 61 3.1.4 Outils d aide........................................................... 62 debhelper................................................................ 62 Lintian................................................................... 63 devscripts................................................................ 63 dpkg-dev-el............................................................... 63 3.1.5 Construction d un paquet............................................... 64 Vérifier les dépendances de construction...................................... 64 Cas général............................................................... 64 Pour une autre version de Debian............................................ 64 3.1.6 Backporter un paquet : le cas simple..................................... 66 Objectif.................................................................. 66 Vérifier les dépendances de construction...................................... 66 Entrée dans debian/changelog........................................... 66 Le cas général............................................................ 67 Sites proposant des backports............................................... 67 3.1.7 Faire un dépôt local.................................................... 68 Dépôt simple.............................................................. 68 Dépôt avec sous-composants................................................ 68 3.2 Construction de paquet Debian : outils d aide...................... 69 3.2.1 Packaging générique avec dh_make...................................... 70 Principe.................................................................. 70 Utilisation................................................................. 70 Exemple.................................................................. 70 3.2.2 Utilisation de Alien..................................................... 72 Principe.................................................................. 72 Thème 4 : Le packaging Debian GNU/Linux avancé..................... 73 4.1 Configuation des paquets avec Debconf............................ 74 4.1.1 La configuration des packages.......................................... 75 Principe.................................................................. 75 Les fichiers de configuration................................................. 75 Un exemple d utilisation..................................................... 76 4.1.2 Debconf............................................................... 77 Principe.................................................................. 77 Reconfiguration des paquets................................................ 77 Interfaces................................................................. 78 Les priorités.............................................................. 78 La base de données....................................................... 79

4.1.3 Développer pour Debconf............................................... 80 Introduction............................................................... 80 Les fichiers de template..................................................... 80 Le maintainer script........................................................ 81 L installation des fichiers nécessaires.......................................... 82 Exercice.................................................................. 82 4.2 L intégration au système............................................. 83 4.2.1 La gestion des types MIME.............................................. 84 Via mailcap............................................................... 84 Via freedesktop............................................................ 84 4.2.2 Les menus............................................................. 86 Principe.................................................................. 86 Implémentation............................................................ 86 Exemple.................................................................. 86 Les paramètres............................................................ 87 4.3 Les bibliothèques.................................................... 88 4.3.1 Les bibliothèques partagées............................................. 89 Principe.................................................................. 89 Le nommage des paquets................................................... 89 Les fichiers.so........................................................... 89 ldconfig................................................................ 89 Les bibliothèques statiques.................................................. 90 4.3.2 Les bibliothèques de développement..................................... 91 Principe.................................................................. 91 Nommage................................................................ 91 Organisation.............................................................. 91 4.3.3 Les shlibs............................................................. 92 Principe.................................................................. 92 Fonctionnement de shlibs................................................... 92 Dans le paquet de bibliothèque.............................................. 93 4.4 Les paquets Perl/Python............................................. 94 4.4.1 La policy Perl.......................................................... 95 Noms de paquet........................................................... 95 Procédure d installation..................................................... 95 Les dépendances.......................................................... 95 4.4.2 La policy Python....................................................... 96 Introduction............................................................... 96 Les noms des paquets...................................................... 96 Les versions supportées.................................................... 96 Dépendances............................................................. 97 Les fichiers bytecompilés................................................... 97 4.5 SVN buildpackage.................................................... 98 4.5.1 Introduction........................................................... 99 Pourquoi utiliser un système de contrôle de version?............................ 99 Principe.................................................................. 99 Les avantages............................................................ 100 Un exemple d organisation................................................. 100 En pratique.............................................................. 101 4.5.2 Mise en pratique...................................................... 102 Création du référentiel..................................................... 102

Ajout d une version Debian................................................. 102 Mise à jour upstream...................................................... 103 Exercice................................................................. 103 Thème 5 : Debian comme organisation de développement............ 104 5.1 L organisation Debian............................................... 105 5.1.1 La constitution et le contrat social...................................... 106 Les développeurs individuels............................................... 106 Les développeurs par résolution générale ou élection........................... 106 Le responsable du projet (Project Leader).................................... 107 Le commité technique..................................................... 107 Le secrétaire............................................................. 108 Les délégués du responsable du projet....................................... 108 Capitaux administrés pour Debian........................................... 108 5.1.2 Les trousseaux de clés................................................ 110 L authentification des développeurs.......................................... 110 La signature des paquets.................................................. 110 La signature des archives.................................................. 110 Le paquet debian-keyring.................................................. 110 5.1.3 Les groupes de travail................................................. 111 Le groupe site web........................................................ 111 Les ftp-masters........................................................... 111 Le DDP / DDTP.......................................................... 111 Le grouepe Q&A.......................................................... 111 Le groupe Debian Installer................................................. 112 5.1.4 Les ressources Debian................................................. 113 Les listes de discussion.................................................... 113 Les channels IRC......................................................... 113 Les machines Debian..................................................... 113 La base de données Debian................................................ 113 5.2 Intégrer un paquet dans Debian.................................... 115 5.2.1 Les pré-requis........................................................ 116 Existence................................................................ 116 Licence................................................................. 116 Pour un premier paquet.................................................... 116 Fonctionnement.......................................................... 116 L ITP.................................................................... 116 5.2.2 Le parrainage......................................................... 117 Principe................................................................. 117 En pratique.............................................................. 117 Comment trouver un sponsor?............................................. 117 5.2.3 Les différents repositories............................................. 118 stable et testing.......................................................... 118 Les proposed-updates..................................................... 118 Les mises à jour de sécurité................................................ 119 experimental............................................................. 119 5.2.4 Debian Q&A.......................................................... 121 Le PTS.................................................................. 121 Le DDPO................................................................ 122 Les WNPP............................................................... 122

5.3 Devenir développeur Debian........................................ 124 5.3.1 Pourquoi faire?....................................................... 125 Participer à un projet communautaire........................................ 125 Maintenir plus facilement ses paquets........................................ 125 S informer............................................................... 125 S exprimer............................................................... 125 5.3.2 Les droits et les devoirs................................................ 126 Les droits................................................................ 126 Les devoirs.............................................................. 126 5.3.3 Les pré-requis et la procédure.......................................... 127 Pré-requis............................................................... 127 La procédure de recrutement............................................... 127 Solutions................................................................ 130 Glossaire................................................................ 135

1. Démarrage

1.1. Plan du cours

1.1.1 : Plan du cours Présentation, installation Les paquets Debian Bases de la construction de paquets Packaging avancé Debian comme organisme de développement Plan du cours Plan du cours 11

1.2. Présentation de Debian

1.2.1 : Présentation de Debian Qu est-ce que Debian? Qui produit Debian? Organisation de Debian Infrastructure du projet Tâches des développeurs Quotidiennement À l occasion Software in the Public Interest (SPI) Qu est-ce que Debian? Une distribution une collection de logiciels libres (répertoire de logiciels) des normes d intégration de logiciels (debian policy) une interface vis-à-vis des utilisateurs (BTS, etc...) Une distribution universelle Plusieurs noyaux supportés ou en voie de l être (Linux, Hurd, BSD) 11 architectures matérielles supportées (i386, powerpc, alpha, sparc, etc.) Plus de 10000 paquets logiciels touchant à tous les domaines d utilisation de l informatique Debian n est pas une distribution commerciale, mais... Qui produit Debian? Présentation de Debian Présentation de Debian 13

Plus de 1000 développeurs Personnes isolées Utilisation de la cryptographie (GPG, keyring) Institutions publiques (universités,...) Entreprises (Alcôve, Progeny, Logidée,...) Organisation de Debian Constitution Direction du projet : leader, comité technique, secrétaire Gestion de la distribution : responsables de paquets release-manager qualité portages documentation traduction... Infrastructure : sécurité, normes, X, etc. Programme de parrainage et d évaluation des candidats Infrastructure du projet Machines *.debian.org ; Présentation de Debian Présentation de Debian 14

Le système de publication de paquets ; Les build-daemons ; Listes de diffusion ; Le BTS ; Pages web de suivi (PTS, DDTP etc.) ; Alioth, notre Gforge à nous ; Le réseau de miroirs. Tâches des développeurs Quotidiennement Le BTS ; Les listes de diffusion et beaucoup d e-mail. ; Les canaux IRC ; Les auteurs amont ; À l occasion Bug squashing parties ; Votes ; Conférences Debian. Software in the Public Interest (SPI) "Vitrine légale" du projet Debian Sert de "vitrine légale" à d autres projets (Berlin, LSB,...) www.spi-ing.org Présentation de Debian Présentation de Debian 15

1.2.2 : Le «contrat social» Debian demeurera un ensemble logiciel totalement libre Nous donnerons en retour à la communauté des logiciels libres Nous ne cacherons pas les problèmes Nos priorités sont nos utilisateurs et les logiciels libres Programmes non conformes à nos standards sur les logiciels libres «Contrat social» avec la communauté des logiciels libres. Intégralité du texte : http://www.debian.org/social_contract.fr.html Debian demeurera un ensemble logiciel totalement libre Nous promettons de maintenir la distribution GNU/Linux Debian en tant qu ensemble logiciel entièrement libre. Comme il existe de nombreuses définitions du logiciel libre, nous incluons cidessous les principes que nous utilisons pour déterminer si un logiciel est libre. Nous offrirons de l assistance à nos utilisateurs qui développent et font fonctionner des logiciels non-libres sur Debian, mais jamais nous ne ferons dépendre le système d un élément de logiciel non-libre. Nous donnerons en retour à la communauté des logiciels libres Lorsque nous écrirons de nouveaux composants du système Debian, nous les licencierons sous forme de logiciels libres. Nous ferons le meilleur système possible, afin que les logiciels libres soient largement distribués et utilisés. Nous signalerons les corrections de bogues, les améliorations, les requêtes des utilisateurs, etc. aux auteurs des logiciels inclus dans notre système. Nous ne cacherons pas les problèmes Nous conserverons l ensemble de notre base de données de rapports de bogues constamment ouverte aux regards du public. Les rapports que les utilisateurs remplissent en ligne seront immédiatement visibles par les autres. Nos priorités sont nos utilisateurs et les logiciels libres Les besoins de nos utilisateurs et de la communauté des logiciels libres nous guideront. Nous placerons leurs intérêts en tête de nos priorités. Nous assumerons les besoins opérationnels de nos utilisateurs dans de nombreux types d environnements informatiques différents. Nous ne nous opposerons pas aux logiciels commerciaux prévus pour fonctionner sur les systèmes Debian, et nous permettrons que d autres créent des distributions à valeur ajoutée contenant conjointement des logiciels Debian et des logiciels commerciaux, et ceci sans réclamer aucune rétribution. Pour assumer ces objectifs, nous fournirons un système intégré de haute qualité, composé en totalité de logiciels libres, sans restrictions légales qui empêcheraient ce type d usage. Présentation de Debian Le «contrat social» 16

Programmes non conformes à nos standards sur les logiciels libres Nous reconnaissons que certains de nos utilisateurs demandent à pouvoir utiliser des programmes qui ne sont pas conformes aux principes du logiciel libre selon Debian (Debian Free Software Guidelines, ou DFSG). Pour ces logiciels, nous avons créé des zones contrib et non-free («non-libre») dans notre archive FTP. Les logiciels dans ces répertoires ne font pas partie du système Debian, bien qu ils aient été configurés afin d être utilisés avec Debian. Nous encourageons les fabricants de CD à lire les licences des paquets en question afin de déterminer s ils peuvent les distribuer dans leurs CD. Ainsi, bien que les logiciels non-libres ne fassent pas partie de Debian, nous assumons leur utilisation et fournissons une infrastructure (à l image de notre système de chasse aux bogues et de nos listes de diffusion) pour des paquets non-libres. Présentation de Debian Le «contrat social» 17

1.2.3 : Critères de liberté des logiciels (DFSG) Redistribution libre et gratuite Code source Applications dérivées Intégrité du code source de l auteur Aucune discrimination de personne ou de groupe Aucune discrimination de champ d application Distribution de licence La licence ne doit pas être spécifique à Debian La licence ne doit pas contaminer d autres logiciels Note Ces critères ont donné naissance à l Open-Source Definition Voir http://www.debian.org/social_contract Redistribution libre et gratuite La licence d un composant de Debian ne doit pas empêcher un contractant de vendre ou donner le logiciel sous forme de composant d un ensemble (distribution) constitué de programmes provenant de différentes sources. La licence ne doit requérir ni redevance ni rétribution sur une telle vente. Code source Le programme doit inclure le code source, et la diffusion sous forme de code source comme sous forme de programme compilé doit être autorisée. Applications dérivées La licence doit permettre les modifications et les applications dérivées, et elle doit permettre à celles-ci d être distribuées sous les mêmes termes que la licence du logiciel original. Intégrité du code source de l auteur La licence peut défendre de distribuer le code source modifié seulement si elle autorise la distribution avec le code source de fichiers correctifs (patch files) destinés à modifier le programme au moment de la génération. La licence doit autoriser explicitement la distribution de logiciels générés à partir de code source modifié. Elle peut requérir que les applications dérivées portent un nom ou un numéro de version différent de ceux du logiciel original (ceci est un compromis ; le groupe Debian encourage tous les auteurs à ne restreindre en aucune manière les modifications d un quelconque fichier, source ou binaire). Aucune discrimination de personne ou de groupe La licence ne doit discriminer aucune personne ou groupe de personnes. Présentation de Debian Critères de liberté des logiciels (DFSG) 18

Aucune discrimination de champ d application La licence ne doit pas défendre d utiliser le logiciel dans un champ d application particulier. Par exemple, elle ne doit pas défendre l utilisation du logiciel dans une entreprise ou pour la recherche génétique. Distribution de licence Les droits attachés au programme doivent s appliquer à tous ceux à qui il est distribué sans obligation pour aucune de ces parties de se conformer à une autre licence. La licence ne doit pas être spécifique à Debian Les droits attachés au programme ne doivent pas dépendre du fait qu il fasse partie du système Debian. Si le programme est extrait de Debian et est utilisé et distribué sans Debian mais au contraire sous les termes de sa propre licence, toutes les parties auxquelles il est redistribué doivent jouir des même droits que ceux accordés avec le système Debian. La licence ne doit pas contaminer d autres logiciels La licence ne doit pas placer de restrictions sur d autres logiciels distribués avec le logiciel licencié. Par exemple, la licence ne doit pas exiger que tous les autres programmes distribués sur le même médium doivent être des logiciels libres. Présentation de Debian Critères de liberté des logiciels (DFSG) 19

1.2.4 : Les composants d un dépôt Debian standard main contrib non-free non-us/* main paquets conformes au DFSG contrib paquets conformes au DFSG, mais avec des dépendances en dehors de main+contrib non-free paquets non conformes au DFSG, mais redistribuables par Debian non-us/* paquets non exportables des USA (ex: anciennement les paquets contenant de la cryptographie forte), éventuellement même non utilisables aux USA (ex: logiciels tombant sous le coup d un brevet logiciel). non-us est lui-même découpé en main, contrib, et non-free. Présentation de Debian Les composants d un dépôt Debian standard 20

1.2.5 : Debian et le monde du logiciel libre Collaboration verticale avec les développeurs upstream Apports indirects aux développeurs amont Collaboration horizontale Collaboration verticale avec les développeurs upstream Décharge d une partie du travail (packaging) ; Envoi de patches de portabilité ; Corrections de bugs divers ; Intégration de l équipe upstream. Apports indirects aux développeurs amont Filtrage des rapports de bugs ; Apport en visibilité ; Apport en expérience ; Adhésion aux standards. Collaboration horizontale Avec les autres distributions ; Avec des projets upstream ; Avec les organismes de sécurité (i.e. Common Vulnerabilities and Exposures). Un système Debian est conforme autant que possible aux standards existants (FHS, PO- SIX, LSB, RFC etc.) Debian participe à l élaboration de standards (OASIS, LSB etc.) Présentation de Debian Debian et le monde du logiciel libre 21

1.2.6 : Évolution des versions de la distribution Cycle de vie actuel Les noms de code des versions Utilité Correspondance versions / noms de codes Trouver les anciennes versions Cycle de vie actuel Les paquets apparaissent dans l archive de développement, dite unstable. Chaque jour des paquets sont promus dans l archive testing, après une période de test dans unstable, aux conditions que : ils n introduisent pas de bug release-critical ils ne cassent pas la cohérence de testing (toutes leurs dépendances sont disponibles) ils aient pu être recompilés sur toutes les architectures où ils ont pu un jour être compilés (non-régression) A un moment donné, le release-manager décide de geler testing, en vue de publication d une nouvelle version stable. Pendant cette période, seules les correctifs sont normallement acceptés dans testing. Une fois tous les bugs release-critical corrigés, la nouvelle version stable est publiée (par exemple, la version 3.0 Woody sortie le 19 juillet 2002). Les mises à jour de sécurité sont effectuées, dans un dépôt spécifique (security), et une DSA est publiée. Périodiquement de nouvelles révisions de la distribution stable sont publiées (par exemple, la version 3.0r4 de Woody sortie le 1er janvier 2005). Note Le paramètre Urgency permet de spécifier le nombre minimum de jours depuis l envoi dans unstable: low (10 jours), medium (5 jours), high (2 jours) et critical (0). Note La situation d un paquet vis-à-vis de ce cycle peut être consultée grâce à grep-excuses. Plus d informations sont disponibles à http://www.debian.org/devel/testing. Certains paquets passent par un dépôt experimental avant d être inclus dans unstable. Présentation de Debian Évolution des versions de la distribution 22

Les noms de code des versions Utilité moyen de parler d une release avant qu on lui ait attribué un numéro de version Correspondance versions / noms de codes Les noms de codes sont tirés des personnages du dessin animé Toy Story : buzz : 1.1 ( 1996), 474 paquets rex : 1.2 (1996), 848 paquets, 120 développeurs bo : 1.3 (1997), 947 paquets, 200 développeurs hamm : 2.0 (1998), 1524 paquets, 400 développeurs, 2 architectures (i386 et m68k) slink : 2.1 (1999), 2269 paquets, 450 développeurs, 4 architectures (alpha, i386, m68k et sparc) potato : 2.2 (2000), 3901 paquets, 500 développeurs, 6 architectures (alpha, arm, i386, m68k, powerpc et sparc) woody : 3.0 (2002), 8374 paquets, 1000 développeurs, 11 architectures (alpha, arm, ia64, i386, m68k, mips, mipsel, powerpc, s390 et sparc) sarge : 3.1 (2005), 15000 paquets, 1300 développeurs, 11 architectures (alpha, arm, ia64, i386, m68k, mips, mipsel, powerpc, s390 et sparc) etch : 4.0 (8 avril 2007) lenny : 5.0 (14 février 2009) squeeze : version actuelle de développement Trouver les anciennes versions ftp://ftp.debian.org/debian-archive/ deb http://ftp.debian.org/debian-archive Debian-1.3.1 main contrib non-free http://snapshot.debian.org/ Présentation de Debian Évolution des versions de la distribution 23

2. Les paquets Debian GNU/Linux

2.1. Les fichiers.deb

Format de nom du fichier.deb 2.1.1 : Le nom du fichier.deb Format de nom du fichier.deb <nom>_<version>_<architecture>.deb Exemple : gcc_2.95.2-13.1_i386.deb Les fichiers.deb Le nom du fichier.deb 26

Nature du.deb (format 2.0) Outils de manipulation Les fichiers de contrôle du paquet Structure du fichier control Extraction L archive data Contenu Extraction Fichiers.deb signés Principe de signature GPG La méthode Debian 2.1.2 : Structure du fichier.deb Nature du.deb (format 2.0) C est une archive ar, manipulable sur tout système UNIX par la commande ar: $ ar tv gcc_2.95.2-13.1_i386.deb rw-r--r-- 0/0 4 Jan 14 20:30 2002 debian-binary rw-r--r-- 0/0 2575 Jan 14 20:30 2002 control.tar.gz rw-r--r-- 0/0 960384 Jan 14 20:30 2002 data.tar.gz Note La commande ar est disponible dans le paquet binutils. Le fichier debian-binary contient la version du format auquel le paquet se conforme (actuellement 2.0). Outils de manipulation Outil principal : dpkg-deb. Comparable à tar ou zip. Les fichiers de contrôle du paquet Ce sont les fichiers contenus dans control.tar.gz : $ ar p gcc_2.95.2-13.1_i386.deb control.tar.gz tar ztvf - drwxr-xr-x root/root 0 2002-01-14 20:30:50./ -rwxr-xr-x root/root 888 2002-01-14 20:30:38./postinst -rwxr-xr-x root/root 440 2002-01-14 20:30:38./prerm -rw-r--r-- root/root 4291 2002-01-14 20:30:50./md5sums -rw-r--r-- root/root 629 2002-01-14 20:30:41./control De manière plus pratique : Les fichiers.deb Structure du fichier.deb 27

$ dpkg-deb -I gcc_2.95.2-13.1_i386.deb nouveau paquet Debian, version 2.0. taille 963152 octets : archive de contrôle= 2575 octets. 629 octets, 18 lignes control 4291 octets, 55 lignes md5sums 888 octets, 27 lignes * postinst #!/bin/sh 440 octets, 17 lignes * prerm #!/bin/sh Package: gcc Version: 1:2.95.2-13.1 Section: devel Priority: standard Architecture: i386 Depends: libc6 (>= 2.1.2), cpp (>= 1:2.95.2-10), cpp (<< 1:2.95.3), b Recommends: libc-dev Suggests: gcc-doc (>= 1:2.95.2-10) Conflicts: libc5-dev, egcc (<< 2.91.63-1.1) Replaces: egcc Provides: egcc, c-compiler Installed-Size: 2408 Maintainer: Debian GCC maintainers <gcc@packages.debian.org> Description: The GNU C compiler. This is the GNU C compiler, a fairly portable optimizing compiler wh supports multiple languages. This package includes support for C, C and Objective C. Source: gcc (2.95.2-13.1) Structure du fichier control Liste d enregistrements <clé>: <valeur> séparés par CR Champs multilignes : les lignes suivantes commencent pas un espace Convention : dans un champ à plusieurs valeurs, le séparateur est ", *" Extraction dpkg-deb -e gcc_2.95.2-13.1_i386.deb gcc/debian L archive data Contenu Système de fichiers Fichiers de configuration par défaut Extraction dpkg-deb -x gcc_2.95.2-13.1_i386.deb gcc Exercice 1 Dépaqueter une archive.deb, ajouter un fichier, et la repaqueter. Réponse page 131 Les fichiers.deb Structure du fichier.deb 28

Fichiers.deb signés Principe de signature GPG Les sites proposant des logiciels libres subissent de plus en plus d agressions et de piratages. Certains pirates insèrent du code malicieux dans les archives sources de logiciels libres afin de les faire s exécuter sur les ordinateurs des utilisateurs, à la manière d un virus ou d un cheval de troie. La manière la plus efficace de contrer cette menace consiste à signer les archives de sources grâce à GPG. Les développeurs se signent mutuellement leurs empreintes GPG pour constituer un réseau de confiance. Dans un système Debian, voir le paquet debian-keyring. Pour vérifier l intégrité d une archive à partir de la signature GPG (fichier.sig): tapez la commande suivante dans un terminal gpg --verify grisbi-n.n.n.tar.gz.sig grisbi-n.n.n.tar.gz GPG doit indiquer dans son résultat le message Bonne signature. En revanche, ignorer les éventuels avertissements sur la certification par une signature de confiance de la clef. La méthode Debian Pour un paquet source Debian, la signature est contenue dans le fichier dsc ou changes: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.0 Source: grisbi Version: 0.5.2-1 Binary: grisbi Maintainer: Benjamin Drieu <benj@debian.org> Architecture: any Standards-Version: 3.5.10 Build-Depends: debhelper (>> 3.0.0), libgtk2.0-dev, libxml2-dev, libof Files: fc32d48605867cbaf04051b33bc62ff2 968756 grisbi_0.5.2.orig.tar.gz 94eae7b34b7621abf24901d8b3a97374 1603 grisbi_0.5.2-1.diff.gz -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) id8dbqfbeqwcndlqtzbl50eran3makcif0okujbeq8agwjte8iw9aoez4acguri0 ioven7unxgdmnm2cmiy9vti= =Mc8D -----END PGP SIGNATURE----- On utilise la commande dscverify (fournie par le paquet devscripts) pour vérifier la signature d un paquet source (fichier DSC): : $ dscverify grisbi_0.5.2-1.dsc grisbi_0.5.2-1.dsc: Les fichiers.deb Structure du fichier.deb 29

Good signature found validating grisbi_0.5.2.orig.tar.gz validating grisbi_0.5.2-1.diff.gz All files validated successfully. Pour vérifier la signature d un paquet binaire on utilise les commandes debsigs et debsig-verify pour les signatures embarquées (embeded). Note La signature des paquets binaires n est pas répandue car les développeurs Debian signent déjà leurs paquets sources. Les paquets binaires sont construits sur les machines Debian puis intégrés dans la liste signée (avec GPG) des paquets binaires: la taille et la somme de contrôle MD5 des paquets peuvent donc être vérifiées. Les fichiers.deb Structure du fichier.deb 30

2.1.3 : Versionnement des paquets Version upstream et révision Debian Paquets natifs Époques Comparaisons, ordonnancement des versions Algorithme de comparaison Versions exotiques Opérateurs de comparaison Cycle de vie d un paquet dans Debian Version upstream et révision Debian Le système Debian distingue la numérotation d un numéro de version en deux parties distinctes et indépendantes: la version upstream correspond au numéro de version tel que fourni par l auteur du logiciel. la Debian revision correspond à la version du paquet Debian: pour une même version upstream, Debian peut fournir plusieurs versions du paquet au fur et à mesure des mises à jour (suite à des bugs ou des alertes de sécurité par exemple). Révision non entière (ex. 1.2) : NMU Mises à jour de la distribution stable : Stable ancien : 3.2-2 Unstable/testing : 3.2-3 Stable nouveau : 3.2-2woody1 Ceci pour vérifier 3.2-2 << 3.2-2woody1 << 3.2-3. Paquets natifs Paquets sans révision Debian. Il s agit en général de paquets spécifiques à Debian ou d un paquet mal généré. Époques But : corriger une erreur, ou prendre en compte un changement dans le versionnement upstream, qui ne pourrait pas être traité par le versionnement classique. L époque a un poids plus fort que la version upstream. On ne compare les versions upstream qu à époque égale. Syntaxe : 1:1.0, 2:1.2 Équivalence : 0:x.y.z = x.y.z Les fichiers.deb Versionnement des paquets 31

Comparaisons, ordonnancement des versions Point capital pour distinguer quelle version est la plus récente. La référence : dpkg $ dpkg --compare-versions 1.0 <= 2.0; echo $? 0 $ dpkg --compare-versions 1.0 >= 2.0; echo $? 1 Algorithme de comparaison Il est défini en détail dans la charte Debian. Les chaînes "version" à comparer sont découpées en époque, version upstream, et révision Debian Si les époques sont identiques, on découpe la version upstream (puis la révision) en groupes de caractèes numériques (0 à 9) et non-numériques, qui sont comparés 2 à 2 tour à tour, numériquement pour les nombres, lexicographiquement (ASCII) pour les autres. Depuis dpkg 1.10 (sarge), est considéré lexicographiquement inférieur à tout autre caractère, pour permettre la gestion de pré-versions. Exemple : 1.0.0 >> 1.0 ("." >> "") 1.0.0 >> 1.0+1 ("." (46) >> "+" (43)) 1.0beta >> 1.0.1 ("b" (98) >> "." (46)) 1.0 beta << 1.0.1 (" " (-1) << "." (46)) Versions exotiques Pour compenser ces limitations, des pré-versions de certains logiciels se font attribuer des numéros de versions «exotiques» : 1.0+1.1beta, 1.0.99.1.1beta, etc. Opérateurs de comparaison Compatibles avec les fichiers de contrôle : <=, =, => : les classiques <<, >> : comparaisons strictes <, > : historiques et obsolètes - équivalents à <= et => Spécifiques à --compare-versions lt le eq ne ge gt : less-than, less-or-equal, etc. Cycle de vie d un paquet dans Debian Un paquet est créé, puis uploadé sur un serveur Debian Si le paquet source crée un nouveau.deb, il doit être approuvé par l équipe de maintenance de l archive Debian (ftpmasters) Il est placé dans un dépôt incoming/, disponible à http://incoming.debian.org/. Les fichiers.deb Versionnement des paquets 32

Les robots de compilation automatique essayent de compiler le paquet sur les autres architectures. Une fois par jour, le contenu de incoming/ est installé dans l archive de développement, dite unstable. Au bout d un délai variable (10 jours par défaut), un paquet est promu dans l archive testing, aux conditions que : le paquet n introduise pas de bug release-critical le paquet ait pu être recompilé sur toutes les architectures où il a un jour pu être compilé (non-régression) Note La situation d un paquet vis-à-vis de ce cycle peut être consultée grâce à grep-excuses. Plus d informations sont disponibles à http://www.debian.org/devel/testing. Les fichiers.deb Versionnement des paquets 33

Types de relations entre paquets Paquets virtuels 2.1.4 : Relations entre paquets Types de relations entre paquets Elles sont définies dans le fichier de contrôle du paquet : Dépendance (Depends) Pré-dépendance (Predepends) Conflit (Conflicts) Recommandation (Recommends) Suggestion (Suggests) Ajout de fonctionnalités (Enhances) Remplacement de fichiers (Replaces) Remplacement d un paquet (Replaces et Conflicts) Provides Paquets virtuels Nom générique pour un ensemble de paquets Note Cette notion peut être utilisée pour gérer une fonctionnalité fournie par plusieurs paquets. Comme par exemple mail-transport-agent fournie par exim et postfix. On peut aussi utiliser cette fonctionnalité pour gérer la relation de dépendance entre des utilitaires systèmes et un module noyau qui pourrait être fourni par plusieurs paquets de versions différentes: un paquet alsa-utils pourrait dépendre du paquet virtuel alsa-modules-2.4 fourni par plusieurs paquets dont alsa-modules-2.4.27 et alsa-modules-2.4.28 par exemple. Cela permettrait d installer les utilitaires quelque soit la ou les versions du noyau que l on utilise. Note Dans le cas d un paquet semi-virtuel, une relation versionnée ne se rapportera qu au paquet réel, pas à ceux qui déclarent le fournir. Les fichiers.deb Relations entre paquets 34

2.1.5 : Classifications des paquets Section Paquets essentiels Priorité Tâches Section admin, net, web, devel, editors, doc, libs... Paquets essentiels Essentiels pour le système Difficiles à désinstaller Les bibliothèques et le noyau ne sont pas essentiels. Priorité required : nécéssaire au fonctionnement du système important : attendu sur tout système UNIX standard : installation de taille raisonable en mode console optional : «grosse» installation pour besoins génériques extra : logiciels très spécialisés, ou en conflit avec des paquets de priorité supérieure Tâches Regroupements de paquets Utilisables par tasksel Les fichiers.deb Classifications des paquets 35

2.1.6 : Paquets spéciaux Méta-paquets Bibliothèques Décomposition Méta-paquets Seule utilité : champs de dépendances. Cas d utilisation : Groupements logiques de paquets Paquets de transition Paquets d équivalence Bibliothèques Décomposition runtime nom = soname (ex: libgtk1.2) -dev fichiers d en-tête symlink pour le linker (ex: libgtk.so) version statique (ex: libgtk.a) -dbg bibliothèques ayant les symboles de débugage elles sont placées dans /usr/lib/debug utilisation de LD_LIBRARY_PATH Les fichiers.deb Paquets spéciaux 36

2.2.Manipulations des paquets.deb

2.2.1 : Utilisation basique Etats possibles d un package Informations sur les paquets Modification du système Tâches concernées Les opérations Etats possibles d un package non installé installé non configuré (unpacked) fichiers de configuration partiellement installé partiellement configuré Manipulations des paquets.deb Utilisation basique 38

Opérations et changements d états Informations sur les paquets dpkg -l, dlocate -l : liste des paquets installés dpkg -L, dlocate -L : fichiers installés par le paquet dpkg -S, dlocate -S : à quel paquet appartient un fichier Modification du système Tâches concernées Installation d un paquet isolé Installation d un paquet sans modifier sources.list Dépannage ponctuel Les opérations dpkg -i : installation de paquets dpkg --unpack : dépaquetage seul dpkg --configure : configuration après unpack dpkg -r : désinstallation en gardant la configuration dpkg -P : désinstallation en purgeant la configuration (dpkg --purge) Manipulations des paquets.deb Utilisation basique 39

Exercice 2 Désinstaller un paquet puis réinstaller le.deb correspondant trouvé sur le disque dur (avec locate ou find). Manipulations des paquets.deb Utilisation basique 40

2.2.2 : Utilisation avancée Options classiques Exemple : changer de MTA Gestion des sélections Présentation Rôle Mise en oeuvre Vérifications d intégrité Options classiques --no-act -EG (--skip-same-version --refuse-downgrade) -B (--auto-deconfigure) --ignore-depends=<paquet> --force-*, --force-help --force-overwrite, --force-depends, --force-confmiss, etc. Note L utilisation des options --force est à réserver en cas de dépannage afin de débloquer une situation précise. Si ces options sont utilisées afin de placer volontairement le système dans une situation incohérente (au niveau des dépendances), celui-ci ne pourra plus être géré par les frontends de gestion de paquets de hautniveau (comme apt). Note Dans les versions officielles de Debian le défaut est --force-overwrite, mais il est de --refuse-overwrite en cours de développement, pour aider à la détection des conflits non déclarés. Exemple : changer de MTA Problème : beaucoup de paquets dépendent de mail-transport-agent, et on ne veut pas les désinstaller. # dpkg -r exim dpkg : un problème de dépendance empêche la suppression de exim : mutt dépend de exim mail-transport-agent ; cependant : Paquet exim doit être supprimé. Paquet mail-transport-agent n est pas installé. Paquet exim qui fournit mail-transport-agent doit être supprimé. [...] Manipulations des paquets.deb Utilisation avancée 41

Des erreurs ont été rencontrées pendant l exécution : exim # dpkg -r --force-depends exim dpkg : exim : problème de dépendance, mais suppression comme demandé : [...] # apt-get install postfix ou # apt-get -f install Gestion des sélections Présentation dpkg garde en plus de l état actuel du paquet un état souhaité. Avantage centralisation de l état souhaité, pour tous les frontends basés sur dpkg comme backend Inconvénient Rôle difficile d ajouter un nouvel état souhaité (ex. reinstall) sans casser tous les frontends Note De nouveaux frontends (ex. aptitude) font leur propre gestion d état souhaité - aptitude gère ainsi un état reinstall. maîtrise des mises à jour archivage et duplication d état Mise en oeuvre dpkg: get-selections, set-selections dselect apt-get dselect-upgrade Note Sur Woody, toutes les dépendances doivent être résolues lors de l invocation d apt. Dans le cas contraire, celui-ci n installera pas tous les paquets souhaités. Vérifications d intégrité Ces outils permettent de vérifier l intégrité des paquets et des fichiers installés. dpkg --audit: cherche les paquets installés partiellement. apt-get check: vérifie les dépendances cassées. debsums (fourni par le paquet debsums): compare les sommes md5 des fichiers installés avec celle des fichiers des paquets (lorsque cette information est disponible). Manipulations des paquets.deb Utilisation avancée 42

2.3. Utilisation des dépôts APT

2.3.1 : Survol de APT Rôle de apt Outils principaux apt-get apt-cache Outils complémentaires Le dépôt APT Le fichier Release Le fichier Packages Le pool Rôle de apt Eviter à l administrateur les tâches fastidieuses de la gestion de paquets : localisation et téléchargement du paquet gestion des interactions avec d autres paquets (dépendances, conflits, etc.) moyens de contrôle des sources se recouvrant (sources externes à Debian comme des éditeurs ou des sites de backports par exemple Outils principaux apt-get L outil de base de manipulation de paquets. Il permet d effectuer un certain nombre d opérations et accepte toujours la même syntaxe: apt-get [options] <action> mise à jour de la liste des paquets disponibles (update) installation et désinstallation de paquets donnés (install, remove) mise à jour complète du système (upgrade, dist-upgrade, dselect-upgrade) nettoyage des fichiers.deb mis en cache (clean) tentative de résolution des problèmes de dépendances sur un système incohérent (-f install) Arguments courants: -u: force apt à afficher la liste des paquets mis à jour (avec upgrade) -q: mode calme (pas d indicateur de progrès) -qq: mode très calme -s: simulation -y: répond à oui à toutes les questions -d: télécharger uniquement (pas d installation) des paquets requis Utilisation des dépôts APT Survol de APT 44

--purge: purge les fichiers de configuration lors de l installation de paquets apt-cache recherche de packages parmi ceux disponibles (search) examen des méta-informations de paquets disponibles (show, showpkg) maintenance du cache (add, gencaches) etc. Note Cet outil est surtout utile pour les recherches de paquets. Exercice 3 Rechercher et installer le module Python contenant une implémentation DOM (XML). Réponse page 131 Outils complémentaires apt-file : recherche dans le contenu des paquets disponibles. Sous-commandes : update, search, list. apt-build : équivalent de apt-get, avec recompilation locale pour optimisation. Note Le gain de performances reste cependant très faible par rapport à l investissement. Le dépôt APT Contient : Les méta-informations du dépôts (fichier Release, optionnel) La liste des paquets, avec méta-informations (fichier Packages) Les paquets Le fichier Release Contient une description d un composant du dépot. Le composant stable de Debian 3.0 pour x86: Archive: stable Version: 3.0 Component: main Origin: Debian Label: Debian Architecture: i386 Le fichier Packages Contient les fichiers control des paquets concernés, séparés par une ligne vide. Le pool Depuis woody, les dépots de paquets Debian sont organisés en pool. Toutes les versions de paquets disponibles sont placées dans un répertoire du nom du paquet source, lui même classé par lettre ou groupe de lettres de l alphabet. Utilisation des dépôts APT Survol de APT 45

Le fichier Packages contient un pointeur vers la localisation du fichier.deb dans le pool. Utilisation des dépôts APT Survol de APT 46

Sources habituelles Définition d une source APT Manuellement Outils Sources APT utiles 2.3.2 : Gestion des sources de paquets Suivi des versions installées et disponibles Recouvrements de sources Pinning de version Principes Contrôle de l administrateur But : dire où on veut aller chercher des paquets Sources habituelles Distribution Debian : Miroir Debian (distant ou local): http://ftp.de.debian.org/debian/ (classés par pays) CD-roms ou DVD-rom Mises à jour de sécurité Site local ( backport, etc.) Proxy APT Note De plus en plus de projets fournissent une source pour APT, quand ils fournissent des paquets.deb (par exemple: http://download.gna.org/underware/). Définition d une source APT Localisation : /etc/apt/sources.list Manuellement Syntaxe d une source : <type> <uri> <répertoire>/ ou : <type> <uri> <distribution> <composant> [<composant>...] Types disponibles: deb, deb-src. Utilisation des dépôts APT Gestion des sources de paquets 47

Note Ne jamais spécifier stable comme source, sous peine de très gros ennuis potentiels lors de la publication de la version stable suivante! Utiliser le nom de code à la place. Une source sans composant entraine le téléchargement de <uri>/packages{.bz2,.gz,}. Une source avec composants entraine le téléchargement de <uri>/dists/<distribution>/<composant>/binary-<arch>/packages{.bz2,.gz,}, et les fichiers Release associés. Exercice 4 Comment faire pour insérer les paquets contenus à l URL suivante dans vos sources Debian? ftp://debian-multimedia.org/ Réponse page 131 Outils Il existe aussi des interfaces permettant de gérer ce fichier : aptconf : utilise debconf gtk-sources : frontend GTK apt-cdrom : outil restreint en ligne de commande Sources APT utiles deb http://ftp.de.debian.org/debian woody main contrib non-free deb-src http://ftp.de.debian.org/debian woody main contrib non-free deb http://security.debian.org/ woody/updates main contrib non-free deb http://ftp.de.debian.org/debian../project/experimental main contr deb http://ftp.de.debian.org/debian-archive Debian-2.1 main contrib no deb http://ftp.de.debian.org/debian-archive Debian-2.0 main contrib no deb http://ftp.de.debian.org/debian-archive Debian-1.3.1 main contrib Suivi des versions installées et disponibles D où viennent les paquets installés : apt-show-versions Quels paquets viennent de unstable : apt-show-versions grep /unstable Quelles versions de foo sont disponibles : apt-show-versions -a -p foo Quels paquets sont disponibles en mise à jour : apt-show-versions -u Note apt-show-versions ne fonctionne pas correctement si les noms flottants de la distribution (stable, testing,...) sont utilisés en lieu et place du nom de code (woody, sarge,...). apt-show-versions utilise le fichier Release des différents dépôts APT. Exercice 5 Concevoir et mettre en place une procédure automatique pour avertir l adminstrateur système d une machine debian stable de la présence de mises à jour de sécurité. Réponse page 131 Utilisation des dépôts APT Gestion des sources de paquets 48

Recouvrements de sources Exemple : pointer simultanément sur stable, testing, et unstable Note Dans ce cas il est nécessaire (avec woody) de modifier la taille du cache APT en spécifiant dans le fichier /etc/apt/apt.conf la ligne: APT::Cache-Limit 10000000;. Aller chercher un paquet dans une source donnée : apt-get install gcc/stable apt-get install gcc/3.0 apt-get install gcc=2:2.95.4-14 Source par défaut : APT::Default-Release "3.0*"; Note Le paramètre APT::Default-Release ne supporte pas les noms de code des release(woody, sarge, etc.). On doit utiliser l un des noms "flottants" (stable, testing, unstable). Note Il est possible que testing et unstable portent le même numéro de version! Pinning de version Principes La gestion des sources est basée sur un mécanisme d attribution de score à chaque version d un paquet. Les scores sont consultables par apt-cache policy <package> : # apt-cache policy dhcp dhcp: Installed: (none) Candidate: 2.0pl5-11 Version Table: 3.0.1betaRC4-1 0 1 http://ftp.debian.org../project/experimental/main Package 2.0pl5-14 0 500 http://debian-mirror.domain-int testing/main Packages 500 http://debian-mirror.domain-int sid/main Packages 2.0pl5-11 0 990 http://debian-mirror.domain-int woody/main Packages 1.0.2-0.1 0 990 http://ftp.debian.org Debian-2.1/main Packages Le candidat à l installation est la version la plus récente, dans celles ayant le meilleur score. Utilisation des dépôts APT Gestion des sources de paquets 49

Attribution des scores : Par défault : 500 APT::Default-Release : 990 Version installée : 100 Champ NotAutomatic: yes dans fichier Release (ex: experimental) : 1 Note Seul un score supérieur à 1000 peut donner lieu à une descente de version. Une version avec un score inférieur à 100 ne sera installée que si celle-ci est explicitement demandée (ie. si on lui attribue un score supérieur, ex. avec --default-release). Contrôle de l administrateur Dans le fichier /etc/apt/preferences. Forcer mysql à rester en 3.23.49, même si la source par défaut fournit une version par défaut : Package: mysql-server Pin: version 3.23.49-* Pin-Priority: 995 Quasi-équivalent de APT::Default-Release : Package: * Pin: release v=2.2* Note Par défaut, un score de 989, donc juste inférieur à celui de APT::Default-Release, est attribué. Exercice 6 Dans le cas où une machine est en unstable, proposer un plan de passage progressif en testing, sans utiliser de downgrade. Utilisation des dépôts APT Gestion des sources de paquets 50

2.3.3 : Configuration de apt Spécification de paramètres Syntaxe Paramètres principaux Spécification de paramètres La configuration de APT répartie dans : /etc/apt/apt.conf : options locales /etc/apt/apt.conf.d/ : utilisé par les paquets pour interagir avec APT On peut la modifier sur une ligne de commande (--option ou -o). Syntaxe Les paramètres sont classés dans une hiérarchie, avec 2 moyens pour les exprimer : Acquire::http::Proxy "http://proxy.domain-int:3128"; Acquire::ftp::Proxy "http://proxy.domain-int:3128"; est équivalent à : Acquire { http { Proxy "http://proxy.domain-int:3128"; }; ftp { Proxy "http://proxy.domain-int:3128"; }; }; ou, de manière hybride, à : Acquire Utilisation des dépôts APT Configuration de apt 51

{ http::proxy "http://proxy.domain-int:3128"; ftp::proxy "http://proxy.domain-int:3128"; }; Les paramètres sont documentés dans la manpage apt.conf(5). Les valeurs par défaut sont dans /usr/share/doc/apt/examples/configure-index.gz. Paramètres principaux Grandes catégories : APT APT::Get : apt-get APT::Cache : apt-cache APT::CDROM : apt-cdrom APT::* : options génériques Aquire : récupération des paquets APT::Cache-Limit : si beaucoup de sources de paquets Acquire::http::Proxy Acquire::http::Proxy::host: Proxy spécifique à un serveur distant Acquire::ftp::Proxy APT::Get::Show-Upgraded APT::Get::Purge APT::Get::List-Cleanup Note Il est possible de renseigner un proxy spécifique à un nom de machine distante grâce à la syntaxe suivante: Acquire::http::Proxy::www.backports.org http://proxy.domain-int:3128 Utilisation des dépôts APT Configuration de apt 52

2.3.4 : Administration de tous les jours Front-ends de sélection des paquages Rechercher les paquets inutilisées Surveiller les mises à jour Trouver le miroir le plus adapté Vérifier la présence de logiciels non-libres Front-ends de sélection des paquages dselect (déconseillé), aptitude (proche de apt-get), synaptic (interface graphique) Capture d écran de synaptic Utilisation des dépôts APT Administration de tous les jours 53

Rechercher les paquets inutilisées deborphan (fourni par le paquet deborphan) trouve les paquets dont aucun autre paquet ne dépend (et sont donc succeptibles d être inutiles donc désinstallables). Surveiller les mises à jour apt-listchanges: affiche notamment les contenus des changelog et des fichiers NEWS apt-show-versions: affiche les paquets à mettre à jour Trouver le miroir le plus adapté apt-spy: effectue des tests de bande passante sur différents miroirs et synthétise des statistiques Note Attention à ne pas détruire /etc/apt/sources.list, ce qui est possible si apt-spy est lancé sans paramètres. Vérifier la présence de logiciels non-libres vrms: cette commande est un clin d oeil à Richard Stallman, dont le surnom est rms. Exercice 7 Installer et tester les outils mentionnés dans cette section. Utilisation des dépôts APT Administration de tous les jours 54

3. Bases de la construction de paquets Debian GNU/Linux Objectifs Connaître la structure d un paquet Debian GNU/Linux. Pouvoir construire un paquet Debian GNU/Linux basique.

3.1. Construction de paquet Debian : bases

3.1.1 : Pourquoi faire? Désinstallation Meilleure intégration dans le système Déploiement facile sur d autres machines Bénéfice de toute la chaîne Debian Désinstallation Il est possible de désinstaller le paquet proprement sans oublier des fichiers. Meilleure intégration dans le système Les outils installés «à la main» sont placés dans /usr/local, alors qu avec un paquet, on peut se permettre de placer dans /usr. Déploiement facile sur d autres machines Il suffit de copier le paquet ailleurs ou de l intégrer dans un dépôt de paquets. Bénéfice de toute la chaîne Debian Mécanisme de configuration (conffiles et debconf), outils Debian (update-menus, update-rc.d, etc.)... Construction de paquet Debian : bases Pourquoi faire? 57

3.1.2 : Structure d un paquet source Debian Description générale Contenu d un paquet source non natif Manipulation d un paquet Éléments principaux du packaging Le sous répertoire debian control changelog rules Fichiers par paquet binaire : debian/package.* Description générale Contenu d un paquet source non natif Un paquet source Debian est toujours constitué des mêmes fichiers: l archive source upstream (fichier orig.tar.gz) les patches Debian (fichier.diff.gz) l index (fichier.dsc, signé) Note Dans le cas d un paquet natif, il n y a pas de fichier orig.tar.gz ni de diff, car les paquets natifs Debian contiennent tout dans une archive de la forme programme-n.n.tar.gz. L absence de fichier orig.tar.gz indique à dpkg-buildpackage qu il s agit d un paquet natif, souvenez-vous en lors de la construction d un paquet. Manipulation d un paquet Bien que tout puisse se faire «à la main,» il existe des commandes pour simplifier la vie du mainteneur: apt-get source (-d) paquet dpkg-source -x paquet.dsc Note La commande apt-get source implique que des lignes de source sont ajoutées au fichier /etc/apt/source.list. Exercice 8 Récupérer les sources d un paquet quelconque par l une ou l autre des méthodes et familiarisez vous avec son contenu. Comment pouvez-vous inspecter le contenu des patches Debian? Réponse page 132 Construction de paquet Debian : bases Structure d un paquet source Debian 58

Éléments principaux du packaging Le sous répertoire debian Les patch Debian contiennent principalement les fichiers administratifs du paquet, qui sont tous situés dans le répertoire debian. control Note On trouvera cependant des modifications au logiciel dans le cas où cela est nécessaire: conformance au FHS, mise à jour des man pages, modification des scripts d installation des Makefile,... Ce fichier contient plusieurs valeurs que dpkg, dselect et d autres outils de gestions de paquets vont utiliser pour gérer le paquet. Source: grisbi Section: x11 Priority: optional Maintainer: Benjamin Drieu <benj@debian.org> Build-Depends: debhelper (>> 3.0.0), libgtk2.0-dev, libxml2-dev, libgd, libofx-dev, libpopt-dev Standards-Version: 3.5.10 Package: grisbi Architecture: any Depends: ${shlibs:depends} Recommends: latex-ucs, tetex-extra Description: Personal financial management program Grisbi is a very functional personal financial management program wit a lot of features. changelog Ce fichier contient une trace des modifications apportées au paquet. Il contient des informations utilisées par les outils Debian. grisbi (0.5.1-1) unstable; urgency=low * New upstream version -- Benjamin Drieu <benj@debian.org> Thu, 29 Jul 2004 16:44:49 +0200 grisbi (0.4.3-2) unstable; urgency=low * Fix missing changelog.debian.gz * Fix a crash (closes: #202361) -- Benjamin Drieu <benj@debian.org> Tue, 6 Jan 2004 11:13:53 +0100 L outil debchange (ou dch) permet de mettre à jour le fichier changelog. Construction de paquet Debian : bases Structure d un paquet source Debian 59

rules C est un des fichiers les plus importants et les plus complets. Il contient les instructions nécessaires à la compilation du paquet. règles normalisées : build, binary, binary-indep, binary-arch, clean utilisation de fichiers *-stamp règles normalisées pour sarge : build-indep, build-arch règles habituelles : configure-stamp (ou config.status), install Fichiers par paquet binaire : debian/package.* En général, ils sont utilisés par les outils d aide (debhelper, debmake/debstd) {pre,post}{inst,rm} templates, config : voir debconf files, dirs : voir dh_make mime, desktop : utilisés pour l intégration dans le bureau examples, docs: documentation Construction de paquet Debian : bases Structure d un paquet source Debian 60

3.1.3 : Autres fichiers Documentation Copyright Documentation Le fichier README.Debian contient des informations utiles pour les utilisateurs du paquet Debian. Copyright Le fichier copyright est obligatoire (cf la Debian Policy) et doit comporter le nom du packageur ainsi que des informations de copyright sur l archive originale. Construction de paquet Debian : bases Autres fichiers 61

3.1.4 : Outils d aide debhelper Introduction Utilisation Outils principaux Lintian devscripts dpkg-dev-el debhelper Introduction Debhelper est un ensemble de scripts utilisés pour aider à la construction d un paquet Debian. La philosophie de debhelper est de fournir des outils petits, simples et facilement compréhensibles pour automatiser les tâches courantes. Utilisation Il suffit d appeler les outils de debhelper dans debian/rules. Ce sont des scripts shell acceptant plusieurs arguments (pratiquement tous possèdent des arguments communs): -a: exécution sur tous les paquets dépendants de l architecture -i: exécution sur tous les paquets indépendants de l architecture -ppackage: exécution sur le paquet package -Npackage: pas d exécution sur le paquet package -Xobjet: pas d exécution pour l objet objet (par exemple un fichier) Outils principaux Voici quelques uns des outils de debhelper. La liste exhaustive est dans la page man de debhelper(1). dh_testroot: vérifie que l utilisateur est root dh_installxxx: installation des composants xxx (info, pam, init, mime, menu, man,...) dh_builddeb: construit les paquets Debian dh_makeshlibs: crée les fichiers shlib dh_movefiles: déplace les fichiers dans les sous répertoires debian/*. dh_undocumented: crée une page de manuel undocumented pour les binaires passés en argument Construction de paquet Debian : bases Outils d aide 62

Note fakeroot permet de contourner dh_testroot et ainsi de compiler un paquet en tant qu utilisateur. Lintian lintian dissèque les paquets pour y repérer des bogues et des manquements aux règles de développement. Il contient des tests automatisés pour vérifier de nombreuses règles et quelques erreurs courantes. Lintian décompacte une archive Debian dans un répertoire dit laboratoire et effectue des tests unitaires puis affiche un rapport. Lintian produit parfois des faux positifs, utilisation des fichiers override dans /usr/share/lintian/overrides pour supprimer les faux positifs ou les erreurs qui ne peuvent être corrigées. Exercice 9 Installez lintian et exécutez le sur un de vos paquets avec l option -i si vous en avez un, puis essayez de corriger les erreurs évidentes. Essayez d utiliser l override pour supprimer les erreurs de lintian pour les problèmes que vous ne savez pas résoudre. Si vous n avez de paquet, gardez cet exercice pour plus tard ou utilisez un paquet officiel. Réponse page 132 Note Il existe un concurrent à lintian: linda. Pour le moment celui-ci n est pas très utilisé. devscripts Il s agit d un paquet contenant des scripts utiles pour la création de paquets: bts debsign debchange debuild... dpkg-dev-el Il s agit de modes Emacs utiles pour le développement d un paquet. Construction de paquet Debian : bases Outils d aide 63

3.1.5 : Construction d un paquet Vérifier les dépendances de construction Cas général Pour une autre version de Debian Vérifier les dépendances de construction apt-get install build-essential Champs Build-Depends et Build-Depends-Indep dpkg-checkbuilddeps apt-get build-dep Cas général Il s agit d exécuter les ordres qui se trouvent dans debian/rules et de produire l archive debian binaire. Il existe plusieurs méthodes: debian/rules binary: le plus bas niveau dpkg-source -b: construit un paquet source à partir d une archive décompactée dpkg-buildpackage: construit un paquet binaire et éventuellement source debuild: appelle dpkg-buildpackage puis lintian Note Il est en général utile d utiliser la commande fakeroot afin de faire croire aux outils de compilation que l utilisateur en cours est root. Exercice 10 Prenez les sources d un paquet Debian pas trop lourd à compiler (par exemple gzip) et recompilez votre propre paquet. N oubliez pas de mettre à jour le changelog en conséquence. Réponse page 132 Pour une autre version de Debian Il s agit de compiler un paquet Debian dans un environnement et des dépendances qui ne sont pas celles du système hôte. Plusieurs outils sont possibles: Construction de paquet Debian : bases Construction d un paquet 64

chroot et debootstrap pbuilder sbuild Construction de paquet Debian : bases Construction d un paquet 65

3.1.6 : Backporter un paquet : le cas simple Objectif Vérifier les dépendances de construction Entrée dans debian/changelog Choix du numéro de version Le cas général Sites proposant des backports Objectif But : rendre disponible un nouveau paquet, ou une version plus récente d un paquet, dans une distribution plus ancienne. On ne traitera ici que le cas simple où une simple reconstruction suffit, le cas général se rapproche du packaging générique Vérifier les dépendances de construction apt-get install build-essential Champs Build-Depends et Build-Depends-Indep dpkg-checkbuilddeps apt-get build-dep Note En général certaines dépendances sont bloquantes et imposent de backporter en premier lieu les outils de compilation de paquets comme debhelper ou debconf. Entrée dans debian/changelog Définit la version du paquet. Choix du numéro de version Comme pour une mise à jour de distribution stable, il faut que les versions vérifient l inéquation : stable << backport << nouvelle But : faire en sorte que le paquet (en général officiel) que l on backporte soit considéré comme plus récent que le paquet officiel. Note En général, on spécifie laprovenance dans la g version, par exemple: grisbi-0.5.0-1.alcove1_i386.deb Construction de paquet Debian : bases Backporter un paquet : le cas simple 66

Le cas général... se rapproche du packaging générique. Sites proposant des backports http://www.backports.org (backports.org) propose un ensemble de backports sous forme de paquets sources et binaires. http://www.apt-get.org (apt-get.org) est un moteur de recherche de backports. http://mentors.debian.net (mentors.debian.net) est un site de mise en relation de développeurs Debian et de développeurs de paquets non agréés par Debian. Construction de paquet Debian : bases Backporter un paquet : le cas simple 67

3.1.7 : Faire un dépôt local Dépôt simple Dépôt avec sous-composants Dépôt simple Dépôt sans sous-composants, correspondant à une définition de source du type <type> <uri>./ Placer les paquets sous <uri> apt-ftparchive packages path/to/debs gzip -9 > Packages.gz dpkg-scanpackages path/to/debs /dev/null./ gzip -9 > Packages.gz Dépôt avec sous-composants Organisation de la forme : dists/woody/main/binary-i386. Dans sources.list: deb http://debian-mirror.alcove-fr/ woody main contrib non-free Construction de paquet Debian : bases Faire un dépôt local 68

3.2. Construction de paquet Debian : outils d aide

3.2.1 : Packaging générique avec dh_make Principe Utilisation Mode binaire seul Mode binaire multiple Mode bibliothèque Exemple Principe dh_make est un outil permettant de débianiser un logiciel de manière automatique, à condition qu il supporte des options courantes de configuration (autoconf). dh_make se base notamment sur debhelper et crée tous les fichiers nécessaires dans le répertoire debian. Ces fichiers nécessitent cependant souvent des adaptations. Utilisation dh_make doit être invoqué dans le répertoire de sources, qui doit lui même avoir un nom de la forme paquet-version. dh_make a trois modes d invocation. Mode binaire seul Génération d un seul paquet binaire. C est le cas standard. Mode binaire multiple Génération de plusieurs paquets binaires. Utile pour les gros paquets. Mode bibliothèque Génération de deux paquets binaires: un paquet pour une bibliothèque runtime (libbibliothèque) et un paquet pour la version de développement (libbibliothèque-dev) Exemple Dans cette exemple nous allons tenter de créer un paquet Debian de l utilitaire afio. Télécharger le fichier source upstream et décompresser-le: $ wget http://members.brabant.chello.nl/ k.holtman/afio-2.5.tgz $ tar xfz afio-2.5.tgz $ cd afio-2.5 Construction de paquet Debian : outils d aide Packaging générique avec dh_make 70

$ dh_make Type of package: single binary, multiple binary, library, or kernel module? [s/m/l/k] s Done. Please edit the files in the debian/ subdirectory now. You should also check that the afio Makefiles install into $DESTDIR and not in /. dh_make a créé le répertoire debian dans l arbre de sources. Il ne reste plus qu à vérifier la cohérence des informations dans les fichiers control, changelog et rules. Le paquet peut ensuite être compilé avec debuild. Exercice 11 Utiliser l exemple ci-dessus pour créer un paquet Debian. Bien vérifier avec lintian que le paquet est correct. Réponse page 132 Construction de paquet Debian : outils d aide Packaging générique avec dh_make 71

3.2.2 : Utilisation de Alien Principe Principe L utilitaire alien permet de convertir automatiquement les paquets rpm en paquets deb (et inversement). Pour effectuer une conversion simple d un paquet rpm vers un paquet debian: $ fakeroot alien --to-deb rdesktop-1.3.0-1.i386.rpm rdesktop_1.3.0-2_i386.deb generated Note alien ne se restreint pas à la conversion d archives.rpm en.deb; il gère en outre les formats spécifiques de Slackware, Stampede et Solaris. Construction de paquet Debian : outils d aide Utilisation de Alien 72

4. Le packaging Debian GNU/Linux avancé

4.1.Configuation des paquets avec Debconf Objectifs Connaître le mécanisme de post configuration des paquets Debian GNU/Linux. Comprendre les spécificités de Debconf.

4.1.1 : La configuration des packages Principe Les fichiers de configuration postinst preinst prerm postrm Un exemple d utilisation Principe Il convient de différencier les tâches exécutées à la compilation du paquet (génération de fichiers de données statiques, paramétrage des défauts,...) des tâches exécutées à l installation du paquet (configuration par l utilisateur, renseignement d un mot de passe,...). Dans le premier cas, le traitement s effectue dans le fichier debian/rules, dans le deuxième cas, ce traitement s effectue dans les fichiers de post-configuration des paquets Debian GNU/Linux, appelés Maintainer scripts. Les fichiers de configuration Il existe quatre types de configuration des paquets. postinst Le fichier debian/postinst est un script qui sera exécuté dès la fin de l installation du paquet. Il est en charge de toute configuration ultérieure nécessaire ou de démarrer un service après l installation réussie du paquet. Dans la plupart des cas qui nous intéressent, debian/postinst est appellé avec l argument configure puis le numéro de version du dernier paquet configuré. preinst Le fichier debian/preinst est un script qui sera exécuté avant l installation du paquet (avant même qu il soit décompressé). Il sert par exemple à arrêter des services lors de la mise à jour d un paquet (services qui seront redémarrés par le postinst si l upgrade réussit). Le script debian/preinst est appelé avec deux arguments: prerm l action en cours: install ou upgrade le numéro de version du paquet installé Le fichier debian/prerm est un script qui sera exécuté avant la déinstallation du paquet. Il arrête Configuation des paquets avec Debconf La configuration des packages 75

typiquement les services d un paquet en cours de déinstallation. Le script debian/prerm est appelé avec deux arguments: postrm l action en cours: remove (pour une déinstallation) ou upgrade (l ancien paquet, pour une mise à jour) le numéro de version du paquet installé dans le cas d upgrade Le fichier debian/postrm est un script qui sera exécuté après la déinstallation du paquet. Il peut servir à supprimer tout lien restant avec le paquet déinstallé. Le script debian/postrm est appelé avec deux arguments: l action en cours: remove (pour une déinstallation), purge pour une déinstallation avec purge ou upgrade (l ancien paquet, pour une mise à jour) le numéro de version du paquet installé dans le cas d upgrade Un exemple d utilisation Il est possible de créer un fichier de post-installation pour effectuer un traitement particulier en fonction du choix d un utilisateur. Par exemple, générer un set de données. Nous placerons le script suivant dans debian/postinst: #!/bin/sh read -p Voulez vous générer les données (o/n)? \ result if test "$result" = "o" ; then echo "Génération des données..." /usr/bin/comp-data fi Exercice 12 Mettre un script de post configuration similaire dans un paquet debian de test, recompiler le paquet et le tester. Exercice 13 Dans le même paquet de test, que nous allons imaginer être un paquet contenant un service pour l exercice, créer des scripts permettant (ou tout du moins d afficher une trace simulant ces actions): de démarrer le service à l installation d arrêter le service à la préinstallation d arrêter le service à la déinstallation Réponse page 133 Configuation des paquets avec Debconf La configuration des packages 76

4.1.2 : Debconf Principe Reconfiguration des paquets Interfaces Les priorités La base de données Debconf est un système de configuration pour les paquets Debian. Principe Debconf permet de gérer les options interactives dans le processus de configuration d un paquet. Debconf fournit une interface cohérente pour la configuration des paquets et donne à l utilisateur le choix entre plusieurs interfaces. Il peut configurer des paquets avant qu ils ne soient installés, ce qui permet à des installations et des mises à niveau importantes de demander toutes les informations nécessaires au préalable et d effectuer l installation sans intervention de l utilisateur. Debconf permet de sauter les questions les moins importantes au moment de l installation d un paquet (on peut y revenir plus tard). Reconfiguration des paquets Debconf se souvient des options de configuration d un paquet. Il permet également lors d une phase de configuration de paquet de modifier les choix effectués, de manière simple et par une commande unique. Pour reconfigurer un paquet, il suffit de taper # dpkg-reconfigure foo Configuation des paquets avec Debconf Debconf 77

Exemple de configuration de paquet par Debconf Interfaces Une fonctionnalité remarquable de debconf est qu il possède plusieurs interfaces et l on peut les échanger à loisir. Voici les interfaces disponibles: dialog: l interface par défaut. Elle utilise les programmes whiptail ou dialog pour afficher les questions. Elle fonctionne en mode texte ; readline: c est l interface la plus traditionnelle. Elle ressemble à la configuration Debian classique : une série de questions, imprimées sur la console en mode texte et des invites affichées avec la bibliothèque readline ; non-interactive: elle n interagit jamais avec l utilisateur et utilise les réponses par défaut pour toutes les questions. Elle enverra parfois un courriel à root avec les messages que le paquet voulait afficher. Elle est utile pour les installations automatiques ; gnome: cette interface utilise les bibliothèques GTK+ et Gnome pour afficher une boîte de dialogue graphique. Bien sûr, elle nécessite un display X valide pour fonctionner ; si elle ne peut pas fonctionner, debconf se rabattra sur d autres interfaces. Le paquet libgnome-perl doit être installé ; editor: pour cette interface, Debconf exécute un éditeur de textes qui affiche les options à configurer et qu il faut éditer ; web: une interface qui exécute un serveur web sur lequel il faut se connecter. Elle est expérimentale. Les priorités Chaque question possède une priorité, ce qui permet d ignorer les moins importantes si on est Configuation des paquets avec Debconf Debconf 78

pressé. Les priorités sont: low: questions peu importantes dont les valeurs par défaut suffisent dans la majorité des cas ; medium: questions normales avec des valeurs par défaut raisonnables ; high: questions qui n ont pas de valeur par défaut convenable ; critical: questions que l utilisateur a vraiment besoin de voir (ou autre). Seules les questions avec une priorité égale ou supérieure à la priorité configurées seront affichées. L utilisateur peut fixer la valeur de la priorité en reconfigurant debconf ou temporairement en passant l option --priority= suivie de la valeur aux commandes dpkg-reconfigure et dpkg-preconfigure ou en positionnant la variable d environnement DEBIAN_PRIORITY. La base de données Debconf utilise une base de données principalepour garder les réponses déjà données aux questions. Le fichier /etc/debconf.conf est utilisé pour configurer cette base de données. La base de données principale se trouve généralement dans le répertoire /var/cache/debconf. La page de manuel debconf.conf indique plusieurs manières pour pour manipuler cette base de données. Exercice 14 Pour des besoins de test, reconfigurer le paquet contenant le serveur X (sous Debian, le serveur utilisé est Xorg). Réponse page 133 Configuation des paquets avec Debconf Debconf 79

4.1.3 : Développer pour Debconf Introduction Les fichiers de template Le maintainer script Les alternatives La version shell Exemple L installation des fichiers nécessaires Exercice Introduction Les détails de Debconf sont documentés dans la page de manuel debconf-devel(7). Debconf communique avec des scripts de maintenances ou d autres programmes via les entrée et sortie standards, en utilisant un langage orienté ligne de commandes semblable à ce qui est utilisé par les protocoles interne communs comme SMTP. Les programmes utilisent ce protocole pour demander à debconf d afficher les questions et de récupérer les réponses de l utilisateur. Les questions elles-mêmes sont définies dans des fichiers éparés, appelés «questionnaires», dont le format n est pas très différent de celui d un fichier de contrôle de Debian. Les paquets Debian qui utilisent debconf fournissent généralement un questionnaire et un script de «configuration» (exécuté pour préconfigurer le paquet) dans la partie metadonnées du paquet. Les fichiers de template Les templates sont contenues dans le fichier debian/template. Chaque question doit correspondre à une entrée dans ce fichier. Le format est toujours identique: Template: paquet/question Type: [select,multiselect,string,boolean,note,text,password] Default: [une valeur par défaut] Description: Are you sure you want to use this package? Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi.. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Template:... Configuation des paquets avec Debconf Développer pour Debconf 80

... Si select ou multiselect sont choisis, une ligne Choices: doit contenir la liste des possibles, séparés par une virgule et un espace Le maintainer script Debconf est ensuite utilisé via les maintainer scripts du paquet, en général dans debian/postinst. Les alternatives Il existe plusieurs méthodes pour communiquer avec Debconf: le script shell: en incluant le fichier /usr/share/debconf/confmodule dans le script shell, plusieurs commandes shell commençant par db_ permettent de manipuler Debconf ; le script perl: le module perl Debconf::Client::ConfModule permet de manipuler Debconf ; la communication directe avec Debconf, en utilisant directement le protocole et les entrées/sorties Unix standard. La version shell Quatre commandes sont principalement utilisées: Exemple db_input: demande au frontend de poser la question à l utilisateur si nécessaire ; db_go: demande au frontend d afficher toutes les questions à poser à l utilisateur ; db_get: récupère la réponse à une question ; db_purge: efface les réponses aux questions d un paquet. Voici un exemple de script: #!/bin/sh # Source debconf library.. /usr/share/debconf/confmodule # Aimez vous Debian? db_input medium foo/aime_debian true db_go # Récupérer la réponse db_get foo/aime_debian if [ "$RET" = "false" ]; then db_input high foo/pourquoi_debian_est_genial true db_go fi Et les templates correspondantes: Template: foo/aime_debian Type: boolean Configuation des paquets avec Debconf Développer pour Debconf 81

Description: Aimez vous Debian? Nous aimerions savoir si vous aimez le système Debian GNU/Linux. Template: foo/pourquoi_debian_est_genial Type: note Description: Mais pourquoi installez vous ce paquet? Debian est génial. Si vous continuez à utiliser Debian, nous espérons que vous découvrirez votre erreur. L installation des fichiers nécessaires L utilisation de la commande dh_installdebconf dans la cible install du fichier debian/rules permet d installer tous les fichiers nécessaires au bon endroit. Exercice Exercice 15 Implémenter une question Debconf dans un paquet de test. Et procéder aux manipulations suivantes: compiler le paquet l installer, répondre aux questions déinstaller le paquet, le réinstaller. Que se passe t il? faire varier la configuration de Debconf avec dpkg-reconfigure debconf et observer les différences. notez vous une différence la suppression et la purge d un paquet lorsque vous le réinstallez par la suite? Configuation des paquets avec Debconf Développer pour Debconf 82

4.2. L intégration au système

4.2.1 : La gestion des types MIME Via mailcap Principe Implémentation Via freedesktop Principe Implémentation Via mailcap Principe Dans un système Debian GNU/Linux, les associations de types MIME sont gérées par le biais du fichier /etc/mailcap. Ce fichier associe des types MIME à des programmes permettant de les ouvrir. Implémentation Chaque paquet est responsable de l installation d un fichier dans /usr/lib/mime/packages/foo. Le format d un fichier d association MIME est par exemple: application/x-grisbi; grisbi;description=grisbi file; \ test=test "$DISPLAY"!= ""; priority=7 L installation se fait dans les scripts de post installation. Il est conseillé de reproduire les lignes suivantes ou d utiliser dh_installmime (qui copiera le fichier debian/foo.mime dans /usr/lib/mime/packages/foo) : if [ -x /usr/sbin/update-mime ]; then update-mime fi Via freedesktop Principe Freedesktop est une ensemble de normes et de communications informelles entre développeurs d environnements graphiques (Desktops). Ces types MIME sont utilisés pour gérer les associations dans les environnements de travail type Gnome ou KDE. L intégration au système La gestion des types MIME 84

Implémentation Il est recommandé d utiliser dh_installmime, qui va copier le fichier debian/foo.sharedmimeinfo dans le répertoire /usr/share/mime/packages/foo.xml Exemple de fichier MIME freedesktop: <?xml version="1.0" encoding="utf-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/\ shared-mime-info"> <mime-type type="application/x-grisbi"> <comment>grisbi file</comment> <glob priority="80" pattern="*.gsb"/> <magic priority="80"> <match type="string" value="<grisbi>" offset="0:256"/> </magic> </mime-type> </mime-info> L intégration au système La gestion des types MIME 85

4.2.2 : Les menus Principe Implémentation Exemple Les paramètres title needs section command icon hints Principe Debian possède une méthode simple pour gérer les entrées dans les menus des window managers. Lorsqu une application est installée, un ensemble de scripts permet d insérer une entrée idoine dans les menus des environnements qui le permettent (gnome, kde, xfce, fvwm2,...). Ce travail est effectué par update-menus, qui concatène les fichiers de configuration de menu fournis par chaque paquet en quelque chose d utilisable par les environnements. Implémentation Chaque paquet fournit un fichier debian/foo.menu qui sera copé dans /usr/share/menu par exemple par debhelper (via dh_installmenu). Ce fichier possède une syntaxe simple qui définit un ensemble de paramètres de menu. La syntaxe est la suivante:?package(package[,package2,...]): \ field1="value1"\ field2="value2"\ Exemple Voici un exemple complet de fichier.menu:?package(gnumeric):\ needs="x11"\ section="applications/office"\ title="gnumeric"\ command="gnumeric" \ hints="gnome,spreadsheets" \ icon="/usr/share/pixmaps/gnumeric.xpm" Les champs title, needs, section et command sont obligatoires. Les autres sont optionnels. L intégration au système Les menus 86

Les paramètres title Il s agit du «titre» du paquet. Il doit être court (le paramètre longtitle peut être utilisé pour une version plus longue), commencer par une majuscule et être unique. C est typiquement le nom du paquet. needs Les pré-requis à l utilisation du programme. Les valeurs possibles sont: section X11: le programme est graphique ; text: le programme a besoin d un terminal, le gestionnaire de fenêtre exécutera un terminal ; vc: le programme sera exécuté dans une console, mais pas un terminal graphique ; wm: le programme est un gestionnaire de fenêtres. Le gestionnaire de fenêtres actuel sera donc arrêté avant de l exécuter. La section du menu où placer l entrée. La liste complète des sections possibles est maintenue dans le paquet debian-menu et sur http://www.debian.org/doc/packaging-manuals/menu.html/ch3.html (le site web de Debian.) command La commande qui sera exécutée lorsque l utilisateur clique sur l entrée du menu. icon Un nom de fichier au format XPM, située dans /usr/share/pixmaps. hints Un ensemble de mots-clés séparés par des virgules, permettant de classer les menus en sousmenus. Par exemple, cela pourrait être Gnome,Print,Mail,Expert,... L intégration au système Les menus 87

4.3. Les bibliothèques

4.3.1 : Les bibliothèques partagées Principe Le nommage des paquets Les fichiers.so ldconfig Les bibliothèques statiques Principe Les bibliothèques partagées sous Unix sont un contenues dans des fichiers d extension.so, qui contiennent du code partagé et sont placées généralement dans le répertoire /usr/lib ou /lib en fonction de leur criticité. Il est important de faire en sorte que les bibliothèques soient toujours présentes, surtout s il s agit de bibliothèques centrales comme la libc6. Sous Debian, les bibliothèques sont séparées en plusieurs paquets, dont nous allons détailler l organisation. Le nommage des paquets Le nom du paquet devrait changer à chaque fois que le soname de la bibliothèque change. Par exemple, si la bibliothèque est libfoo,so.2, le paquet devrait s appeler libfoo2. Note Si le nom de la bibliothèque termine par un nombre, on peut préfixer la version par un tiret. Par exemple: libbind9-41. Les fichiers.so Les fichiers.so doivent être copiés tels quels dans /usr/lib sans altérer leur nom. En revanche, il est nécessaire de créer un lien symbolique correspondant au soname. Par exemple, le paquet libgdbm3 devrait copier le fichier libgdbm.so.3.0.0 dans /usr/lib/libgdbm.so.3.0.0 et créer un lien symbolique vers ce dernier dans /usr/lib/libgdbm.so.3, ceci pour que ldconfig fonctionne correctement. ldconfig Les paquets installant des bibliothèques dans un chemin standard devraient ensuite exécuter ldconfig pour mettre à jour le système des bibliothèques partagées. ldconfig doit être exécuté uniquement dans deux circonstances: Les bibliothèques Les bibliothèques partagées 89

dans un script postinst, si l argument est configure dans un script postrm, si l argument est remove Les bibliothèques statiques Les bibliothèques statiques doivent être contenues dans les paquets de développement des bibliothèques, sauf cas particulier (voir la policy). Les bibliothèques Les bibliothèques partagées 90

4.3.2 : Les bibliothèques de développement Principe Nommage Organisation Principe Les paquets de développement contiennent les fichiers nécessaires au développement comme les fichiers d en-tête. Nommage Les bibliothèques de développement devraient être placées dans un paquet libfoo2-dev (2 étant le numéro de version du soname). Le paquet de développement doit avoir exactement le même numéro de version que le paquet de bibliothèque partagée. Si plusieurs versions existent, l utilisation du champ Conflict dans le fichier debian/control peut être nécessaire. Alternativement, libfoo-dev est envisageable si le packager ne désire pas maintenir plusieurs versions de ce paquet en parallèle. Organisation Ces paquets doivent contenir un lien symbolique pour la ou les bibliothèques partagées associées sans le numéro de version. Par exemple, libfoo2-dev devrait contenir un lien libfoo.so vers libfoo.so.2.0.0 Les bibliothèques Les bibliothèques de développement 91

4.3.3 : Les shlibs Principe Fonctionnement de shlibs Dans le paquet de bibliothèque Principe Quand un programme dépend d une bibliothèque partagée. il convient d être certain que toutes ces bibliothèqes sont installées pour que ce programme fonctionne correctement. La méthode Debian classique consiste donc à placer une dépendance sur les différents paquets fournissant des bibliothèques partagées dans la description d un paquet. Cette liste peut être longue et fastidieuse à calculer, c est pour cela que Debian fournit un mécanisme simplificateur appelé shlib. Chaque paquet doit fournir un fichier décrivant les dépendances qu il apporte. À la compilation, chaque paquet Debian contenant un exécutable dépendant de bibliothèques partagées exécute un programme appelé dpkg-shlibdeps, qui utilise ces informations pour obtenir la liste des dépendances. Fonctionnement de shlibs Le programme dpkg-shlibdeps va en premier lieu parcourir un ensemble de répertoires contenant des fichiers d extension.shlibs. Ces répertoires sont (dans l ordre): debian/shlibs.local /etc/dpkg/shlibs.override DEBIAN/shlibs (dans le répertoire de compilation) /var/lib/dpkg/info/*.shlibs /etc/dpkg/shlibs.default Il convient d appeler dpkg-shlibdeps dans le fichier debian/rules, par exemple: dpkg-shlibdeps debian/tmp/usr/bin/* Noter que dh_shlibdeps effectue ce travail également. Ensuite, un simple appel à ${shlibs:depends} dans le champ Depends du fichier debian/control est suffisant. Les bibliothèques Les shlibs 92

Dans le paquet de bibliothèque Le format des fichiers.shlibs est : library-name soname-version dependencies Par exemple: libz 1 zlib1g (>= 1:1.1.3) Le programme dh_makeshlibs effectue tous les traitements nécessaires à l installation des fichiers shlibs à l endroit idoine sur le système de fichiers. Les bibliothèques Les shlibs 93

4.4. Les paquets Perl/Python

4.4.1 : La policy Perl Noms de paquet Procédure d installation Les dépendances Noms de paquet Les paquets Perl doivent être nommés par exemple lib-foo-barperl pour le module Foo::Bar. Procédure d installation Un module Perl devrait contenir les deux lignes suivantes dans la cible build de son fichier debian/rules: perl Makefile.PL INSTALLDIRS=vendor $(MAKE) OPTIMIZE="-O2 -g -Wall" Et pour l installation : $(MAKE) install PREFIX=$(CURDIR)/debian/<tmp>/usr Il est nécessaire de spécifier un Build-Depends sur perl (>= 5.6.0-16). Les dépendances Les modules Perl qui dépendent d un module particulier devraient ajouter une dépendance vers le paquet correspondant. Les modules qui contiennent une dépendance du type require version doivent positionner une dépendance versionnée sur perl ou perl-base. Les paquets Perl/Python La policy Perl 95

4.4.2 : La policy Python Introduction Les noms des paquets Les versions supportées Dépendances Les fichiers bytecompilés Introduction Il existe deux types de modules python: les modules «pur python,» qui ne contiennent que du code python ; les extensions, qui sont compilés avec la libpython. Il existe également deux types de modules: les modules publics, qui sont utilisables par n importe quel programme ou module python et sont placés dans /usr/lib/pythonx.y ou /usr/lib/pythonx.y/site-packages. les modules privés qui sont utilisables uniquement par un programme ou module et qui sont fournis avec ce dernier dans son paquet. Ils sont placés dans /usr/share/foo ou /usr/lib/foo. Les noms des paquets Les paquets de modules publics doivent être nommés python-foo pour le module foo. Les versions supportées Chaque module python doit supporter au moins la version de python courante, plus si possible. Dans le fichier debian/control, le champ permet de spécifier quelles versions sont supportées. Ce champ permet d aider les maintainers du paquet python dans les migrations. Ce champ peut par exemple prendre les valeurs suivantes: XS-Python-Version: all XS-Python-Version: current XS-Python-Version: current, >= X.Y XS-Python-Version: >= X.Y XS-Python-Version: >= A.B, << X.Y XS-Python-Version: A.B, X.Y Les paquets Perl/Python La policy Python 96

Dépendances Les paquets python disponibles pour la version par défaut de python doivent dépendre de python et de python (>= X.Y) s ils ont besoin d une version de python particulière. S ils dépendent de modules python particuliers, ils doivent dépendre de python-foo (et pas pythonx.y-foo). Les paquets préparés pour une version particulière de Python doivent s appeler pythonx.y-foo et dépendre de pythonx.y à la place. S ils dépendent de modules python particuliers, ils doivent dépendre de pythonx.y-foo (et pas python-foo). Un champ Provides doit être spécifié pour les paquets qui fonctionnent pour plusieurs versions de python. Les fichiers bytecompilés Les fichiers.pyc et.pyo doivent être générés dans les scripts postinst et supprimés dans les paquets prerm. La bytecompilation doit respecter la configuration du fichier /etc/python/debian_config. Les paquets Perl/Python La policy Python 97

4.5. SVN buildpackage

4.5.1 : Introduction Pourquoi utiliser un système de contrôle de version? Principe Les avantages Un exemple d organisation En pratique Pourquoi utiliser un système de contrôle de version? Traditionnellement, les paquets Debian sont gérés de la manière suivante. Un développeur upstream maintient des sources en utilisant son propre système de contrôle de versions et publie de manière régulière des images de ses sources (releases ou snapshots). Le développeur Debian ajoute ses modifications à ces images et ces modifications finissent dans le.diff.gz et devront êtres appliquées aux futures versions. Le développeur Debian utilise donc fréquemment des copies locales et des collections de patches gérés manuellement. Avec un gros paquet, cela peut devenir pénible très vite. Principe Le développeur intègre l archive upstream directement dans un outil de contrôle de version comme SVN. Il maintient ensuite par exemple une branche principale comportant l upstream et crée une branche (ou tag) à chaque upstream pour tracer l évolution de ses patches Debian. À chaque release Debian, le packager positionne simplement un tag ou une branche dans son repository. SVN buildpackage Introduction 99

Exemple d organisation de repository SVN. Les avantages Ils sont multiples: possibilité d annuler une modification gestion de l historique création automatique des.diff.gz compilation dans un environnement propre, modifications non commitées visibles travail collaboratif Un exemple d organisation SVN buildpackage supporte plusieurs schémas d organisation, mais recommande le suivant. SVN buildpackage Introduction 100