\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. mars 15 19:03:25 CET 2010}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={dpkg},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Manipulation des paquets deb},
CreationDate={D:20100315190325},
ModDate={D:20100315190325},
Keywords={package manager;apt}
}}
\begin{document}
 
\begin{center}
{\Huge dpkg }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Manipulation des paquets deb}
 
\vspace{10mm}
 
\hspace{1mm}  dpkg ne gère pas les dépôts, ni ne télécharge de paquet. Son rôle est de gérer les paquets deb. Cet outils est principalement utilisé par apt-get et aptitude pour installer ou supprimer des programmes. Il sert également, via dpkg-deb, à manipuler des paquets, extraire des fichiers, obtenir des informations sur un paquet ou créer un paquet. dpkg peut agir comme une interface à dpkg-deb. il lance simplement dpkg-deb s'il est lancé avec les options suivantes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} ]{-b, --build}
\item[\hspace{1mm} ]{-c, --contents}
\item[\hspace{1mm} ]{-I, --info}
\item[\hspace{1mm} ]{-f, --field}
\item[\hspace{1mm} ]{-e, --control}
\item[\hspace{1mm} ]{-x, --extract}
\item[\hspace{1mm} ]{-X, --vextract}
\item[\hspace{1mm} ]{--fsys-tarfile}
\end{description}
 
\vspace{1cm}{\huge Renseignements sur les paquets }
 
\
 
\hspace{1mm}  dpkg conserve des renseignements utiles sur les paquets disponibles.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge État des paquets }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} not-installed]{le paquet n'est pas installé}
\item[\hspace{1mm} config-files]{seules les fichiers de configuration du paquet existent sur le système}
\item[\hspace{1mm} half-installed]{l'installation du paquet a commencé mais ne s'est pas terminé}
\item[\hspace{1mm} unpacked]{Le paquet est dépaqueté mais n'est pas configuré}
\item[\hspace{1mm} half-configured]{Le paquet est dépaqueté et la configuration a commencé mais ne s'est pas terminée}
\item[\hspace{1mm} triggers-pending]{Une action différée de ce paquet a été activé, il reste à l'exécuter}
\item[\hspace{1mm} installed]{Le paquet est installé ETAT DE LA SELECTION DES PAQUETS}
\item[\hspace{1mm} install]{Le paquet est sélectionné pour être installé}
\item[\hspace{1mm} hold]{dpkg laisse de côté ce paquet à moins qu'il ne soit lancé avec --force-hold}
\item[\hspace{1mm} deinstall]{Le paquet est sélectionné pour désinstallation (sauf ses fichiers de configuration)}
\item[\hspace{1mm} purge]{Le paquet est sélectionné pour désinstallation complète DRAPEAU DES PAQUETS}
\item[\hspace{1mm} reinst-required]{Paquet défectueux et demande une réinstallation. dpkg ne peut pas le supprimer sauf en spécifiant l'option --force-remove-reinstreq}
\end{description}
 
\vspace{1cm}{\huge Étapes des opérations }
 
\
 
\hspace{1mm}  lors de l'installation d'un paquet, dpkg procède comme suit:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1.]{extraction des fichiers de contrôle du paquet}
\item[\hspace{1mm} 2.]{si une ancienne version est déjà installé, exécution du script \textbf{prerm} de l'ancien paquet}
\item[\hspace{1mm} 3.]{lancement du script \textbf{preinst}, s'il est fournit}
\item[\hspace{1mm} 4.]{dépaquetage des nouveaux fichiers et sauvegarde des anciens de manière à pouvoir les restaurer en cas de problème.}
\item[\hspace{1mm} 5.]{Si une ancienne version existe, exécution du script \textbf{postrm}}
\item[\hspace{1mm} 6.]{configuration du paquet.}
\end{description}
 
\hspace{1mm}  Lors de la configuration d'un paquet, dpkg procède comme suit:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1.]{dépaquetage des fichiers de configuration et sauvegarde des ancienne}
\item[\hspace{1mm} 2.]{exécution du script \textbf{postinst} s'il est fourni}
\end{description}
 
\hspace{1mm}  Lors de la suppression d'un paquet, dpkg procède comme suit:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1.]{Lancement du script \textbf{prerm}}
\item[\hspace{1mm} 2.]{suppression des fichiers installés}
\item[\hspace{1mm} 3.]{lancement du script \textbf{postrm}}
\end{description}
 
\vspace{1cm}{\huge Actions }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -i, --install]{installe le paquet. avec --recursive ou -R on doit indiquer un dossier}
\item[\hspace{1mm} --unpack]{Dépaquète le paquet, mais ne configure rien. avec --recursive indiquer une répertoire.}
\item[\hspace{1mm} --configure paquet -a|--pending]{Reconfiguration d'un paquet installé. avec -a ou --pending, tous les paquets installés mais non configurés sont configurés.}
\item[\hspace{1mm} --triggers-only paquet .... -a|--pending]{N'exécute que les actions différées de ces paquets}
\item[\hspace{1mm} -r, --remove, -P, --purge paquet -a|--pending]{supprime un paquet installé. Les fichiers de configuration sont les fichiers répertoriés dans le fichier de contrôle \textbf{debian/conffiles}. l'option -a ou --pending, tous les paquets non dépaquetés mais qui sont marqués comme devant être supprimés ou purgés dans le fichier \textbf{/var/lib/dpkg/status} sont supprimés ou purgés.}
\item[\hspace{1mm} --update-avail, --merge-avail fichier-Paquets]{met à jour l'information de dpkg et de dselect sur les paquets disponibles. --merge-avail combine les information anciennes avec celles qui proviennent de fichier-Paquets. --update-avail remplace les informations anciennes par celles du fichier-Paquets. Ce fichier distribué par Debian est appelé Packages. dpkg garde son propre enregistrement des paquets disponibles dans /var/lib/dpkg/available. Ce fichier n'est utile que pour dselect, pas pour APT.}
\item[\hspace{1mm} -A, --record-avail fichier-paquet]{met à jour l'information de dpkg et dselect sur les paquets disponibles avec les informations qui proviennent de fichier-paquet. --recursive ou -R pour indiquer un répertoire}
\item[\hspace{1mm} --clear-avail]{Efface les renseignements existants sur les paquets disponibles.}
\item[\hspace{1mm} -C, --audit]{Recherche les paquets qui n'ont été que partiellement installés sur le système. dpkg suggère une manière de les faire fonctionner}
\item[\hspace{1mm} --get-selections \texttt{[}motif-nom-paquet\texttt{]}]{Obtient la liste des sélections des paquets, et l'envoie sur la sortie standard. Sans un motif, les paquets non installés (c'est à dire ceux qui ont été précédemment purgés) ne seront pas affichés.}
\item[\hspace{1mm} --set-selections]{modifie la liste des sélections des paquets en lisant un fichier sur l'entrée standard. Le format de ce fichier doit être de la forme <paquet> <état>, où état vaut install, hold, deinstall ou purge. Les lignes vides ou les lignes de commentaires débutant par \# sont autorisées.}
\item[\hspace{1mm} --clear-selections]{Met l'état de chaque paquet non essentiel à deinstall. Il faut utiliser cette option juste avant --set-selections, pour désinstaller les paquets qui ne sont pas affichés par --set-selections.}
\item[\hspace{1mm} --yet-to-unpack]{Recherche les paquets qui ont été sélectionnés pour l'installation, mais qui pour une raison quelconque, ne sont pas encore installés.}
\item[\hspace{1mm} --print-architecture]{Affiche l'architecture des paquets installés}
\item[\hspace{1mm} --compare-versions ver1 op ver2]{Compare des numéros de version, où op est un opérateur binaire. dpkg retourne un zéro si la condition spécifiée est vérifiée. Il y a deux groupes d'opérateurs ; Pour lt le eq ne ge gt, l'absence d'une version est considérée comme inférieure à toute version ; pour lt-nl le-nl ge-nl gt-nl, l'absence d'une version est considérée comme supérieure à toute version. Les opérateurs < << <= = >= >> > ne sont fournis que pour la compatibilité avec la syntaxe du fichier de contrôle.}
\item[\hspace{1mm} --command-fd <n>]{Cette action accepte une série de commandes sur le descripteur du fichier d'entrée <n>. Note : des options supplémentaires définies sur la ligne de commande à travers ce descripteur de fichier ne sont pas redéfinies pour les commandes suivantes qui sont exécutées pendant la même séquence.}
\item[\hspace{1mm} --help]{Affiche un court message d'aide.}
\item[\hspace{1mm} --force-help]{Donne des renseignements sur les options --force-quelque-chose.}
\item[\hspace{1mm} -D, --debug=help]{donne des renseignements sur les options de débogage.}
\item[\hspace{1mm} --licence, --license]{Affiche la licence de dpkg.}
\item[\hspace{1mm} --version]{Affiche la version de dpkg.}
\end{description}
 
\vspace{1cm}{\huge Actions dpkg-deb }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -b, --build répertoire archive]{Construit un paquet deb.}
\item[\hspace{1mm} -c, --contents archive]{Liste le contenu d'un paquet deb.}
\item[\hspace{1mm} -e, --control nom-de-fichier \texttt{[}répertoire\texttt{]}]{Extrait les informations de contrôle d'un paquet.}
\item[\hspace{1mm} -x, --extract <répertoire de l'archive>]{Extrait et affiche les fichiers contenus dans un paquet.}
\item[\hspace{1mm} -f, --field nom-de-fichier \texttt{[}champ de contrôle\texttt{]} ...]{Affiche le(s) champ(s) de contrôle d'un paquet.}
\item[\hspace{1mm} --fsys-tarfile archive]{Affiche le contenu du fichier « tar » d'un paquet Debian.}
\item[\hspace{1mm} -I, --info nom-de-fichier \texttt{[}fichier de contrôle\texttt{]}]{Affiche des renseignements sur un paquet.}
\item[\hspace{1mm} dpkg-query actions]{Voir dpkg-query pour davantage d'explications sur les actions suivantes.}
\item[\hspace{1mm} -l, --list motif-du-nom-du-paquet ...]{Affiche la liste des paquets qui correspondent au motif.}
\item[\hspace{1mm} -s, --status nom-du-paquet ...]{Donne l'état du paquet indiqué.}
\item[\hspace{1mm} -L, --listfiles nom-paquet ...]{Affiche la liste des fichiers installés qui appartiennent à paquet.}
\item[\hspace{1mm} -S, --search motif-du-fichier-à-rechercher ...]{Recherche un fichier dans les paquets installés.}
\item[\hspace{1mm} -p, --print-avail nom-du-paquet]{Affiche les informations trouvées dans /var/lib/dpkg/available à propos de paquet. Les utilisateurs des interfaces à APT devraient plutôt utiliser apt-cache show nom-du-paquet}
\end{description}
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\hspace{1mm}  Toutes les options peuvent être spécifiées sur la ligne de commande et dans le fichier de configuration de dpkg /etc/dpkg/dpkg.cfg ou les fichiers de configuration du dossier /etc/dpkg/dpkg.cfg.d/.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} --abort-after=nombre]{Modifie le nombre d'erreurs au delà duquel dpkg s'arrête. Il est par défaut égal à 50.}
\item[\hspace{1mm} -B, --auto-deconfigure]{Quand un paquet est supprimé, il peut arriver qu'un paquet installé dépendait du paquet supprimé. En spécifiant cette option, on obtient la déconfiguration automatique du paquet qui dépendait du paquet supprimé.}
\item[\hspace{1mm} -Doctal, --debug=octal]{Demande de débogage.}
\item[\hspace{1mm} --force-quelque-chose, --no-force-quelque-chose, --refuse-quelque-chose]{Forcer ou refuser (no-force et refuse signifient la même chose) de faire quelque chose. quelque-chose est une liste d'actions séparées par des virgules, décrites ci-après. --force-help affiche un message qui les décrit. Les actions marquées d'un (*) sont forcées par défaut.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} all]{Met en oeuvre (ou pas) toutes les options de forçage.}
\item[\hspace{6mm} downgrade(*)]{Installe un paquet, même si une version plus récente du paquet est déjà installée.}
\item[\hspace{6mm} configure-any]{Configure aussi les paquets dépaquetés mais non configurés dont dépend le paquet en question.}
\item[\hspace{6mm} hold]{Traite même les paquets marqués à garder (hold).}
\item[\hspace{6mm} remove-reinstreq]{Supprime un paquet, même défectueux et marqué comme demandant une réinstallation. Il se peut, dès lors, que des éléments du paquet restent dans le système et soient oubliés par dpkg.}
\item[\hspace{6mm} remove-essential]{supprime un paquet même s'il est considéré comme indispensable. Les paquets Essential comportent les commandes Unix les plus fondamentales et les enlever peut casser le système entier. Il faut utiliser cette option avec prudence.}
\item[\hspace{6mm} depends]{Change tous les problèmes de dépendance en avertissements.}
\item[\hspace{6mm} depends-version]{Ignore les versions dans les questions de dépendance.}
\item[\hspace{6mm} breaks]{Force l'installation, même si cela risque de casser un autre paquet.}
\item[\hspace{6mm} conflicts]{Installe un paquet, même s'il est en conflit avec un autre paquet. C'est dangereux car habituellement cela produit le remplacement de certains fichiers.}
\item[\hspace{6mm} confmiss]{Installe un fichier de configuration manquant. Cette opération est dangereuse, puisque les changements apportés au fichier ne seront pas préservés (suppression).}
\item[\hspace{6mm} confnew]{Quand un conffile a été modifié, toujours installer la nouvelle version et ne rien demander, sauf si l'option --force-confdef est aussi présente, auquel cas l'action par défaut est choisie.}
\item[\hspace{6mm} confold]{Quand un conffile a été modifié, garder l'ancienne version et ne rien demander, sauf si l'option --force-confdef est aussi présente, auquel cas l'action par défaut est choisie.}
\item[\hspace{6mm} confdef]{Utilise toujours l'action par défaut quand un conffile a été modifié. Quand il n'y a pas d'action par défaut, la commande s'arrête et interroge l'utilisateur, à moins que l'option --force-confnew ou l'option --force-confold n'ait été donnée, auquel cas elle se sert de ces options pour déterminer ce qu'il faut faire.}
\item[\hspace{6mm} overwrite]{Remplace un fichier par un fichier d'un autre paquet.}
\item[\hspace{6mm} overwrite-dir]{Remplace un répertoire par un répertoire d'un autre paquet.}
\item[\hspace{6mm} overwrite-diverted]{Remplace un fichier détourné avec une version non détournée.}
\item[\hspace{6mm} architecture]{Traite même les paquets d'une autre architecture}
\item[\hspace{6mm} bad-path]{Programmes importants non visibles par la variable PATH, ce qui va poser des problèmes.}
\item[\hspace{6mm} not-root]{Tente de (dés)installer même sans être root.}
\item[\hspace{6mm} bad-verify]{Installe un paquet même si la vérification de son authenticité a échoué.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} --ignore-depends=paquet,...]{Ne tient pas compte de la vérification des dépendances pour les paquets spécifiés (en fait, la vérification est faite mais on ne donne rien d'autre que des avertissements).}
\item[\hspace{1mm} --new, --old]{Sélectionne soit l'ancien format des paquet binaires, soit le nouveau. C'est une option de dpkg-deb.}
\item[\hspace{1mm} --nocheck]{Ne pas lire ni vérifier le contenu du fichier de contrôle pendant la construction d'un paquet. C'est une option de dpkg-deb.}
\item[\hspace{1mm} --no-act, --dry-run, --simulate]{Faire tout ce qui doit être fait, mais n'écrire aucune modification. On utilise cette option pour voir ce qui se passe sans modifier quoi que ce soit. Assurez-vous de donner l'option --no-act avant le paramètre action !}
\item[\hspace{1mm} -R, --recursive]{Traite récursivement tous les simples fichiers qui correspondent au motif *.deb et qui se trouvent dans les répertoires et sous-répertoires spécifiés. On peut utiliser cette option avec les actions -i, -A, --install, --unpack et --avail.}
\item[\hspace{1mm} -G]{Ne pas installer un paquet si une version plus récente de ce paquet est déjà installée. C'est un alias pour --refuse-downgrade.}
\item[\hspace{1mm} --admindir=dir]{Modifie le répertoire d'administration par défaut, qui contient de nombreux fichiers donnant des informations au sujet de l'état des paquets installés ou non, etc. (Le répertoire par défaut étant /var/lib/dpkg)}
\item[\hspace{1mm} --instdir=repertoire]{Change le répertoire d'installation par défaut qui indique où les paquets vont être installés. instdir est aussi le nom du répertoire indiqué à chroot avant que ne soient lancés les scripts d'installation, ce qui signifie que ces scripts voient instdir comme répertoire racine. Le répertoire par défaut est /}
\item[\hspace{1mm} --root=répertoire]{Modifier root change instdir par répertoire et admindir par dir/var/lib/dpkg.}
\item[\hspace{1mm} -O, --selected-only]{Traiter seulement les paquets qui sont sélectionnés pour l'installation. La sélection est réellement faite par dselect ou par dpkg quand ils manipulent les paquets. Par exemple, quand un paquet est supprimé, il est marqué comme ayant été sélectionné pour une désinstallation.}
\item[\hspace{1mm} -E, --skip-same-version]{Ne pas installer le paquet si la même version du paquet est déjà installée.}
\item[\hspace{1mm} --pre-invoke=command]{}
\item[\hspace{1mm} --post-invoke=command]{Set an invoke hook command to be run via “sh -c” before or after the dpkg run}
\item[\hspace{1mm} --status-fd n]{Envoie un état du paquet compréhensible par la machine et met à jour cette information dans le fichier de description n. Cette option peut être spécifiée plusieurs fois. L'information est généralement constituée d'un enregistrement par ligne, dans l'une des formes suivantes:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} status:paquet:status]{L'état du paquet a changé ; le status est tel que dans le fichier d'état (status file).}
\item[\hspace{6mm} status:paquet:erreur:message-d'erreur-complet]{Une erreur s'est produite. Malheureusement, lors de l'écriture il se trouve que message-d'erreur-complet peut contenir des retour à la ligne, alors que dans les locales où les traducteurs n'ont pas fait d'erreurs, chaque nouvelle ligne est suivie par au moins une espace.}
\item[\hspace{6mm} status:fichier:conffile-prompt:'real-old' 'real-new' useredited distedited]{Une question pour un fichier de configuration va être posée à l'utilisateur.}
\item[\hspace{6mm} traitement:stage:paquet]{Envoyé juste avant le début du traitement d'un stage. Les stages sont upgrade, install (les deux sont envoyés avant le dépaquetage), configure, trigproc, remove, purge.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} --log=fichier]{Enregistre la modification de l'état, la mise à jour ou l'action sur fichier au lieu de l'habituel /var/log/dpkg.log. Si cette option est donnée plusieurs fois, le dernier fichier est utilisé. Les messages d'enregistrement sont de la forme AAAA-MM-JJ HH:MM:SS status <état> <paquet> <version-installée> pour les modifications d'état et les mises à jour. Pour une action, où <action> est install, upgrade, remove ou purge, le message est de la forme AAAA-MM-JJ HH:MM:SS <action> <paquet> <version-installée> <version-disponible>. Pour une modification de conffile, le message est de la forme AAAA-MM-JJ HH:MM:SS conffile <fichier> <décision> ou <décision> est soit install soit keep.}
\item[\hspace{1mm} --no-debsig]{Ne pas tenter de vérifier la signature des paquets.}
\item[\hspace{1mm} --no-triggers]{ne pas lancer d'actions différées (les activations seront toujours enregistrées). utilisé avec --configure paquet ou --triggers-only paquet alors le postinst du paquet sera toujours exécuté même si seule l'exécution d'une action différée est nécessaire. L'utilisation de cette option peut laisser des paquets dans les mauvais états triggers-awaited et triggers-pending. Cela peut être corrigé plus tard en exécutant dpkg --configure --pending.}
\item[\hspace{1mm} --triggers]{Annule un précédent --no-triggers.}
\end{description}
 
\vspace{1cm}{\huge Fichiers }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} /etc/dpkg/dpkg.cfg]{Fichier de configuration contenant les options par défaut.}
\item[\hspace{1mm} /var/log/dpkg.log]{Fichier journal standard. Voyez /etc/dpkg/dpkg.cfg et l'option --log.}
\end{description}
 
\hspace{1mm}  Les autres fichiers répertoriés ici sont dans leur répertoire par défaut, voyez l'option --admindir pour savoir changer l'emplacement de ces fichiers.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} /var/lib/dpkg/available]{Liste des paquets disponibles.}
\item[\hspace{1mm} /var/lib/dpkg/status]{États des paquets disponibles. Ce fichier contient des informations qui permettent de savoir si un paquet est marqué comme devant être supprimé ou pas, devant être installé ou pas, etc. Ce fichier est quotidiennement backupé dans /var/backups.}
\end{description}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Pour afficher les paquets liés au programme vi(1) \\
\hspace{1mm} \textbf{dpkg -l '*vi*'} \\
\hspace{1mm} Pour voir les entrées de /var/lib/dpkg/available concernant deux paquets \\
\hspace{1mm} \textbf{dpkg --print-avail elvis vim | less} \\
\hspace{1mm} Pour rechercher vous-même dans la liste des paquets \\
\hspace{1mm} \textbf{less /var/lib/dpkg/available} \\
\hspace{1mm} Pour supprimer le paquet installé elvis \\
\hspace{1mm} \textbf{dpkg -r elvis} \\
\hspace{1mm} Pour installer un paquet, vous devez d'abord le trouver dans une archive ou sur un CD. Le fichier available montre que le paquet vim se trouve dans la section editors \\
\hspace{1mm} \textbf{cd /cdrom/pool/main/v/vim ; dpkg -i vim\_4.5-3.deb} \\
\hspace{1mm} Pour faire une copie locale des états de sélection des paquets \\
\hspace{1mm} \textbf{dpkg --get-selections >myselections} \\
\hspace{1mm} Vous pourriez transférer ce fichier sur un autre ordinateur et l'installer de cette manière \\
\hspace{1mm} \textbf{dpkg --clear-selections ; dpkg --set-selections <myselections} \\
\end{flushleft}
\end{document}
