Copyright © 2007-2010 Osamu Aoki
Ce guide de référence Debian (v2) (2011-05-01 04:42:52 UTC) est destiné à procurer un large aperçu du système Debian en tant que guide de l’utilisateur d’un système installé. Il couvre de nombreux aspects de l’administration du système à l’aide d'exemples de commandes de l’interpréteur pour les non-développeurs.
Résumé
Ce livre est libre ; vous pouvez le redistribuer et le modifier selon les termes de la Licence Publique Général GNU (« GNU GPL ») à n'importe quelle version compatible avec les Règles des Logiciels Libres selon Debian (DFSG).
Table des matières
$LANG
»$PATH
»$HOME
»apt-get
/ apt-cache
comparés à
aptitude
$LANG
»Liste des tableaux
ls
-l
» :
chmod
(1)
$HOME
»
aptitude
(8), apt-get
(8) et
apt-cache
(8)
aptitude
(8)
dpkg
pam_unix
(8)
/etc/passwd
»
/etc/network/interfaces
»
net-tools
vers les nouvelles commandes
iproute2
ls -l
» avec lenny
/etc/fstab
»
cvs
(1))
svn
(1))
bsdmainutils
et coreutils
Cette Référence Debian (version 2) (2011-05-01 04:42:52 UTC) est destinée à fournir un large aperçu de l’administration système de Debian et un guide de l’utilisateur sur un système installé.
Le lecteur cible est quelqu'un qui désire apprendre les scripts de l’interpréteur de commandes mais qui ne souhaite pas lire toutes les sources en C pour comprendre le fonctionnement du système GNU /Linux.
Toute garantie est rejetée. Toutes les marques déposées sont la propriété de leurs détenteurs respectifs.
Le système Debian lui-même est une cible mouvante. Ceci rend difficile le maintien à jour et l’exactitude de sa documentation. Bien que la version instable (« unstable ») du système Debian ait été utilisée pour écrire ce document, certaines parties peuvent être dépassées au moment où vous lisez ceci.
Veuillez prendre ce document comme une référence secondaire. Ce document ne remplace aucun des guides autorisés. L’auteur et les contributeurs ne pourront être tenus pour responsables des conséquences des erreurs, omissions ou ambiguïtés que comporte ce document.
Le Projet Debian est une association de personnes qui ont fait cause commune afin de créer un système d'exploitation libre. Sa distribution est caractérisée par :
unstable
et
testing
;
Les éléments des logiciels libres de Debian proviennent de GNU, Linux, BSD, X, ISC, Apache, Ghostscript, Common Unix Printing System , Samba, GNOME, KDE, Mozilla, OpenOffice.org, Vim, TeX, LaTeX, DocBook, Perl, Python, Tcl, Java, Ruby, PHP, Berkeley DB, MySQL, PostgreSQL, Exim, Postfix, Mutt, FreeBSD, OpenBSD, Plan 9 et de nombreux autres projets de logiciels libres indépendants. Debian intègre cette diversité de logiciels libres dans un seul système.
Les règles suivantes ont été suivies lors de la compilation de ce document :
J'ai essayé d'élucider les aspects hiérarchiques et les niveaux les plus bas du système.
On attend de vous que vous fassiez des efforts pour rechercher des réponses par vous-même au-delà de cette documentation. Ce document ne donne que des points de départs efficaces.
Vous devez chercher vous-même une solution dans les sources primaires :
/usr/share/doc/<nom_paquet>
» :
dpkg -L <nom_paquet> |grep
'/man/man.*/'
» ;
dpkg -L <nom_paquet> |grep
'/info/'
» ;
Pour accéder à une documentation détaillée, vous devrez installer les
paquets de documentation qui correspondent au nom du paquet avec le suffixe
« .doc
».
Ce document fournit des informations en utilisant le style de présentation
simplifié suivant, avec des exemples de commandes de l’interpréteur
bash
(1) :
# <commande avec le compte root> $ <commande avec le compte d'un utilisateur>
Ces invites de l’interpréteur de commandes permettent de distinguer le
compte utilisé et correspondent à la définition des variables
d'environnement « PS1='\$'
» et
« PS2=' '
». Ces valeurs ont été choisies pour
ce document dans un but de lisibilité, elles ne sont pas représentatives
d'un système réel.
Voir la signification des variables d'environnement
« $PS1
» et
« $PS2
» dans bash
(1).
L’action demandée à l’administrateur du système est écrite sous forme d'une phrase impérative, par exemple « Pressez la touche Entrée après la saisie de chaque chaîne de commande dans l’interpréteur de commandes. »
La colonne de description ou similaire dans le tableau peut contenir une locution nominale selon la convention de description courte du paquet qui supprime les articles se trouvant en tête tels que « un » et « le » (« a », « the »). Elle peut contenir une phrase à l’infinitif comme locution nominale sans le « to » de tête (NdT : en français, une phrase impérative commençant par un verbe à l’infinitif), suivie de la description courte de la commande selon la convention des pages de manuel. Ceci peut sembler bizarre à certaines personnes mais ce sont les choix voulus par l’auteur afin de garder cette documentation la plus simple possible. Ces locutions nominales, selon cette convention de description courte, n'ont pas de majuscule à la première lettre et ne se terminent pas par un point.
Les noms propres, y-compris les noms de commandes, gardent leur casse indépendamment de l’endroit où ils se trouvent.
Un morceau de commande cité dans le
paragraphe d'un texte sera signalé par une police « typewriter »
(machine à écrire) entre guillemets, comme par exemple
« aptitude safe-upgrade
».
Les données textuelles d'un fichier de
configuration citées dans un paragraphe seront signalées par une police de
type machine à écrire entre guillemets, comme par exemple
« deb-src
».
Une commande sera indiquée par son nom
dans la police machine à écrire suivi, de manière optionnelle, par le numéro
de section de la page de manuel entre parenthèses, comme par exemple
bash
(1). Vous êtes encouragé à rechercher des
informations complémentaires en entrant :
$ man 1 bash
Une page de manuel est indiquée par son
nom dans la police machine à écrire suivie, entre parenthèses, du numéro de
la section de la page de manuel, comme par exemple, sources.list
(5). Vous êtes encouragé à rechercher des informations
complémentaires en entrant :
$ man 5 sources.list
Une page info est indiquée par un
fragment entre guillemets de la commande correspondante dans la police
machine à écrire, comme par exemple, « info
make
». Vous êtes encouragé à rechercher des informations
complémentaires en entrant :
$ info make
Un nom de fichier est indiqué par une
police machine à écrire entre guillemets, comme par exemple,
« /etc/passwd
». En ce qui concerne les
fichiers de configuration, vous êtes encouragé à rechercher des informations
complémentaires en entrant :
$ sensible-pager "/etc/passwd"
Un nom de répertoire est indiqué par la
police machine à écrire entre guillemets, comme par exemple,
« /etc/init.d/
». Vous êtes encouragé à
explorer son contenu en entrant :
$ mc "/etc/init.d/"
Un nom de paquet est indiqué par son nom
dans la police machine à écrire, comme par exemple
vim
. Vous êtes encouragé à rechercher des informations
complémentaires en entrant :
$ dpkg -L vim $ apt-cache show vim $ aptitude show vim
On peut indiquer l’emplacement d'une documentation par son nom de fichier dans la police
machine à écrire entre guillemets, comme par exemple
« /usr/share/doc/sysv-rc/README.runlevels.gz
»
et
« /usr/share/doc/base-passwd/users-and-groups.html
»
ou par son URL, comme par exemple http://www.debian.org. Vous êtes encouragé à
lire la documentation en entrant :
$ zcat "/usr/share/doc/sysv-rc/README.runlevels.gz" | sensible-pager $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html" $ sensible-browse "http://www.debian.org"
Une variable d'environnement est indiquée
par son nom précédé d’un « $
» dans la police
machine à écrire entre guillemets, comme par exemple
« $TERM
». Vous êtes encouragé à obtenir sa
valeur actuelle en entrant :
$ echo "$TERM"
Une astérisque « * » placée juste après chaque nom de paquet est liée au système de suivi des bogues de Debian (BTS) de chaque paquet.
Les données du popcon sont présentées comme une manière objective de mesurer la popularité de chaque paquet. Elles sont téléchargées depuis 2010-12-08 14:47:18 UTC et contiennent un total de 95150 soumissions de rapports pour 109197 paquets binaires et 19 architectures.
Vous remarquerez que l’archive amd64
unstable
ne contient actuellement que 30552 paquets. Les données
de popularité contiennent des rapports venant de nombreuses installations
anciennes.
Le numéro de « popcon », précédé par un « V: » pour « votes », est calculé par « 100 * (soumissions popcon pour le paquet exécuté récemment sur le PC)/(nombre total des soumissions popcon) ».
Le numéro de « popcon », précédé par un « I: » pour « installations », est calculé par « 100 * (soumissions popcon pour le paquet installé sur le PC)/(nombre total des soumissions popcon) ».
Les données numériques de popcon ne doivent pas être considérées comme des
mesures absolues de l’importance des paquets. Il y a de nombreux facteurs
qui peuvent fausser les statistiques. Par exemple, certains systèmes
participant au popcon ont monté des répertoires tels que
« /bin
» avec l’option
« noatime
» afin d'améliorer les performances
du système et ont, de ce fait, désactivé le « vote » de tels
systèmes.
Les données correspondant à la taille du paquet sont aussi présentées comme
une mesure objective de chacun des paquets. Elles sont basées sur
« Installed-Size:
» (« taille
installée ») indiquée par la commande « apt-cache
show
» ou « aptitude show
»
(actuellement sur l’architecture amd64
et pour la
version unstable
). La taille est indiquée en Kio (kibioctet = unité pour 1024 octets).
Si un paquet a une taille de faible valeur numérique, cela peut vouloir dire
que le paquet de la version unstable
est un paquet
« dummy » qui permet l’installation par dépendances d'autres
paquets ayant un contenu significatif. Un paquet dummy permet une transition
en douceur ou un éclatement du paquet.
Une taille de paquet suivie de « (*) » indique que la version
unstable
du paquet est absente et que la taille du paquet
venant de la version experimental
a été utilisée en
remplacement.
Si vous découvrez des problèmes dans ce document, veuillez signaler les
bogues du paquet debian-reference
en utilisant
reportbug
(1). Veuillez inclure des suggestions de
correction en lançant « diff -u
» sur la
version en texte brut ou sur le source.
Voici quelques citations intéressantes venant de la liste de diffusion Debian et qui peuvent aider les nouveaux utilisateurs à y voir plus clair :
<miquels@cistron.nl>
(C'est
Unix. Il vous donne assez de corde pour vous pendre vous-même).
<tollef@add.no>
(Unix EST l’ami de l’utilisateur... Il choisit juste qui sont ses amis).
Je pense qu’apprendre un système d'exploitation est comme apprendre une nouvelle langue étrangère. Bien que les livres de didacticiels et de documentation soient utiles, vous devrez pratiquer vous-même. Pour vous aider à vous lancer en douceur, je vais développer quelques points fondamentaux.
La puissance de la conception de Debian GNU/Linux vient du système d'exploitation Unix, c'est-à-dire un système d'exploitation multi-utilisateurs, multi-tâches. Vous devrez apprendre à tirer parti de la puissance de ces fonctionnalités et des similitudes entre Unix et GNU/Linux.
N’écartez pas des textes orientés Unix en ne vous reposant que sur les textes GNU/Linux, ceci vous priverait de beaucoup d'informations utiles.
Si vous avez utilisé pendant un certain temps des systèmes ressemblant à Unix avec des outils en ligne de commande, vous connaissez sans doute tout ce que j'explique ici. Vous pourrez utiliser ce document pour actualiser vos connaissances.
Au démarrage du système, si vous n'avez pas installé le système X Window avec un gestionnaire
d'affichage tel que gdm
, un écran d'identification en
mode caractères vous est présenté. Supposons que le nom d'hôte de votre
machine soit toto
, l’invite d'identification ressemblera
alors à ceci :
toto login:
Si vous avez installé un environnement graphique (GUI) tel que GNOME ou KDE, vous pouvez alors obtenir une telle invite d'identification par Ctrl-Alt-F1, vous pourrez ensuite revenir à l’environnement graphique par Alt-F7 (voir Section 1.1.6, « Consoles virtuelles » ci-dessous pour davantage d'informations).
À l’invite d'identification, entrez votre nom d'utilisateur, par exemple
pingouin
, et pressez la touche Entrée, entrez ensuite
votre mot de passe et pressez de nouveau la touche Entrée.
Conformément à la tradition Unix, l’identifiant de l’utilisateur et le mot
de passe sur un système Debian sont sensibles à la casse. L’identifiant de
l’utilisateur est habituellement choisi uniquement en minuscules. Le premier
compte d'utilisateur est normalement créé lors de l’installation. Des
comptes d'utilisateurs supplémentaires peuvent être créés avec la commande
adduser
(8) par l’administrateur (root).
Le système démarre avec le message de bienvenue qui se trouve dans
« /etc/motd
» (Message du jour :
« Message Of The Day ») et présente une invite de commande
comme :
Debian GNU/Linux lenny/sid toto tty1 toto login: pingouin Password: Last login: Sun Apr 22 09:29:34 2007 on tty1 Linux snoopy 2.6.20-1-amd64 #1 SMP Sun Apr 15 20:25:49 UTC 2007 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. toto:~$
Dans cet exemple, la partie principale du message d'accueil peut être
personnalisée en éditant le fichier
« /etc/motd.tail
». La première ligne est
générée à partir des informations du système obtenues par la commande
« uname -snrvm
».
Vous êtes maintenant sous l’interpréteur de commandes (« shell »). Le shell interprète vos commandes.
Si, lors de l’installation, vous avez installé, avec le système X Window, un gestionnaire graphique de
session tel que gdm
de GNOME
en sélectionnant la tâche « Environnement de bureau », un écran
d'identification graphique vous sera présenté au démarrage de votre
système. Entrez votre nom d'utilisateur et votre mot de passe pour vous
connecter à un compte d'utilisateur sans privilège. Utilisez la touche de
tabulation pour passer du champ d'entrée de l’utilisateur à celui du mot de
passe ou utilisez la souris et un clic-gauche.
Sous X, vous pouvez obtenir une invite de l’interpréteur de commandes en
lançant un programme d'émulation de terminal-x
comme
gnome-terminal
(1), rxvt
(1) ou
xterm
(1). Sous l’environnement de bureau GNOME, il suffit
de cliquer « Applications » → « Accessoires » →
« Terminal ».
Vous pouvez aussi consulter la Section 1.1.6, « Consoles virtuelles » ci-dessous.
Sous d'autres environnements de bureau (comme fluxbox
),
il peut ne pas y avoir de point d'entrée de menu évident. Si cela se
produit, essayez simplement de faire un clic-droit au milieu de l’écran en
espérant voir apparaître un menu.
Le compte de l’administrateur (root) est encore appelé superutilisateur ou utilisateur privilégié. Depuis ce compte, vous pouvez effectuer les opérations d'administrations du système suivantes :
La puissance illimitée du compte de l’administrateur fait que vous devez être attentif et responsable lorsque vous l’utilisez.
Ne donnez jamais le mot de passe de l’administrateur à d'autres personnes.
Les permissions d'un fichier (y-compris les fichiers de périphériques tels que les CD-ROM ou autres, qui ne sont que des fichiers parmi d'autres pour le système Debian) peuvent le rendre inutilisable ou inaccessible à des utilisateurs autres que l’administrateur. Bien que l’utilisation du compte de l’administrateur soit un moyen rapide de test dans une telle situation, sa résolution devra être effectuée en définissant les droits de fichiers et les membres des groupes d'utilisateurs corrects (voir Section 1.2.3, « Permissions du système de fichiers »).
Voici quelques méthodes de base pour obtenir l’invite de l’interpréteur de commande de l’administrateur en utilisant le mot de passe de « root » :
root
à l’invite de connexion en mode
caractère ;
entrez « su -l
» depuis une invite quelconque
de l’interpréteur de commandes ;
entrez « su
» depuis une invite quelconque de
l’interpréteur de commandes.
Lorsque le menu de votre environnement de bureau ne démarre pas
automatiquement, avec les droits appropriés, l’interface graphique des
outils d'administration du système, vous pouvez les démarrer depuis l’invite
de l’interpréteur du compte de l’administrateur dans un émulateur de
terminal X, tel que gnome-terminal
(1),
rxvt
(1) ou xterm
(1). Voir Section 1.1.4, « Invite de l’interpréteur de commandes pour l’administrateur » et Section 7.8.4, « Faire tourner X avec le compte de l’administrateur ».
Ne jamais lancer un affichage X ou un gestionnaire de session avec le compte
de l’administrateur en entrant root
à l’invite d'un
gestionnaire d'écran tel que gdm
(1).
Ne jamais faire tourner de programme distant non sûrs avec une interface graphique sous X window lorsque des informations critiques sont affichées parce votre écran X peut être espionné.
Il y a, dans le système Debian par défaut, six consoles commutables en mode
caractères de type VT100 disponibles pour
lancer directement l’interpréteur de commandes sur la machine Linux. À moins
que vous ne disposiez d'un environnement graphique, vous pouvez basculer
entre les consoles virtuelles en pressant la touche Alt de
gauche
et, simultanément, l’une des touches F1
à F6
. Chaque console en mode caractères permet de se
connecter de manière indépendante à un compte et offre un environnement
multi-utilisateurs. Cet environnement multi-utilisateurs est une
fonctionnalité intéressante d’Unix, très vite, on ne peut plus s'en passer.
Depuis le système, vous avez accès à la console 1 en pressant la combinaison
de touches Ctrl-Alt-F1
, c'est-à-dire que la
touche Ctrl de gauche
, la touche Alt de
gauche
et la touche F1
sont pressées
simultanément. Vous pouvez revenir au système X Window, qui tourne
normalement sur la console virtuelle 7, en pressant
Alt-F7
.
Vous pouvez aussi changer de console virtuelle, par exemple pour la console 1, par la commande :
# chvt 1
Pour arrêter l’activité de l’interpréteur de commandes, entrez
Ctrl-D
, c'est-à-dire la touche Ctrl de
gauche
et la touche d
pressées simultanément, à
l’invite de l’interpréteur. Si vous êtes sur une console en mode caractères,
ceci vous fera retourner alors à l’invite d'identification. Même si on se
réfère à ces caractères de commande avec « control D » en
majuscule, il n'est pas nécessaire de presser la touche majuscule. Le
raccourci ^D
, est aussi utilisé pour
Ctrl-D
. Vous pouvez aussi entrer « exit ».
Si vous êtes sur un émulateur de x-terminal
(1), vous
pouvez fermer la fenêtre de l’émulateur de terminal-x
de
la même manière.
Comme tout autre système d'exploitation moderne où les opérations sur les fichiers mettent en œuvre un cache de données en mémoire afin d'améliorer les performances, le système Debian demande que l’on exécute une procédure d'arrêt adaptée avant que le système ne puisse être mis hors tension. Ceci permet de maintenir l’intégrité des fichiers, en forçant l’écriture sur disque de toutes les informations conservées en mémoire. Si un logiciel de contrôle de l’alimentation est disponible, la procédure d'arrêt coupera automatiquement l’alimentation du système. (Sinon, vous devrez presser le bouton d'alimentation pendant quelques secondes une fois la procédure d'arrêt terminée).
Dans le mode normal multi-utilisateurs, vous pouvez arrêter le système depuis la ligne de commandes :
# shutdown -h now
Dans le mode normal mono-utilisateur, vous pouvez arrêter le système depuis la ligne de commandes :
# poweroff -i -f
Pour arrêter le système, vous pouvez aussi utiliser
Ctrl-Alt-Suppr
(la touche Ctrl de
gauche
, la touche Alt de gauche
et la
touche Suppr
pressées simultanément) si la ligne
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
»
se trouve dans le fichier
« /etc/inittab
». Voir
inittab
(5) pour davantage d'informations.
Voir Section 6.9.6, « Comment arrêter le système distant par SSH ».
Lorsque l’écran est corrompu après que vous ayez fait des choses amusantes
comme « cat <un-fichier-binaire>
» entrez
« reset
» à l’invite de commande. Il est
possible que vous ne voyiez pas ce que vous entrez. Vous pouvez aussi entrer
« clear
» pour nettoyer l’écran.
Bien que même une installation minimale du système Debian sans aucune tâche
d'environnement de bureau fournisse les fonctionnalités Unix de base, c'est
une bonne idée pour les débutants d'installer pour commencer quelques
paquets de ligne de commandes ou de terminal en mode caractères basé sur
« curses » comme mc
et vim
avec apt-get
(8) en utilisant les commandes
suivantes :
# apt-get update ... # apt-get install mc vim sudo ...
Si vous avez déjà installé ces paquets, aucun nouveau paquet ne sera installé.
Tableau 1.1. Liste de paquets de programmes intéressants en mode texte
paquet | popcon | taille | description |
---|---|---|---|
mc
*
|
V:12, I:28 | 6508 | gestionnaire de fichiers plein écran en mode texte |
sudo
*
|
V:42, I:71 | 668 | programme donnant aux utilisateurs des privilèges d'administration limités |
vim
*
|
V:15, I:33 | 1792 | éditeur de texte Unix Vi amélioré (Vi IMproved), éditeur de texte pour programmeurs (version standard) |
vim-tiny *
|
V:16, I:92 | 776 | éditeur de texte Unix Vi amélioré (Vi IMproved), éditeur de texte pour programmeurs (version compacte) |
emacs23 *
|
V:3, I:4 | 13016 | projet GNU Emacs, éditeur de texte extensible basé sur Lisp (version 23) |
w3m
*
|
V:24, I:84 | 1992 | navigateurs WWW en mode texte |
gpm
*
|
V:3, I:4 | 484 | couper-coller à la mode Unix sur une console texte (démon) |
Ce peut être une bonne idée de lire quelques documentations.
Tableau 1.2. Liste de paquets de documentation
paquet | popcon | taille | description |
---|---|---|---|
doc-debian *
|
I:82 | 408 | projet de documentation Debian, (FAQ Debian) et autres documents |
debian-policy *
|
I:3 | 3500 | Charte Debian et documents associés |
developers-reference *
|
I:1.0 | 1388 | Guides et informations pour les responsables Debian |
maint-guide *
|
I:0.7 | 776 | Guide des nouveaux responsables Debian |
debian-history *
|
I:0.3 | 3736 | Histoire du projet Debian |
debian-faq *
|
I:66 | 1224 | FAQ Debian |
doc-linux-text *
|
I:82 | 8616 | HOWTO et FAQ Linux (texte) |
doc-linux-html *
|
I:0.7 | 62564 | HOWTO et FAQ Linux (html) |
sysadmin-guide *
|
I:0.2 | 964 | Guide de l’administrateur système (« The Linux System Administrators' Guide ») |
Vous pouvez installer quelques-uns de ces paquets en passant les commandes suivantes :
# apt-get install nom_paquet
Si vous ne souhaitez pas utiliser votre compte d'utilisateur principal pour
les activités de formation qui suivent, vous pouvez créer un compte de
formation, par exemple poisson
en passant la commande qui
suit :
# adduser poisson
Répondez à toutes les questions.
Ceci va créer un nouveau compte appelé poisson
. Après vos
exercices, vous pourrez supprimer ce compte d'utilisateur et son répertoire
personnel par :
# deluser --remove-home poisson
Pour une station de travail typique avec un seul utilisateur tel que le
système de bureau Debian sur un PC de bureau, il est habituel de mettre en
œuvre une configuration simple de sudo
(8) comme suit afin
que l’utilisateur non privilégié, par exemple pingouin
,
puisse obtenir les privilèges d'administration avec simplement son mot de
passe personnel et non avec le mot de passe de l’administrateur :
# echo "pingouin ALL=(ALL) ALL" >> /etc/sudoers
Il est aussi habituel, en remplacement, de faire comme suit afin que
l’utilisateur non privilégié, par exemple pingouin
,
puisse obtenir les privilèges d'administration sans aucun mot de passe
personnel.
# echo "pingouin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Cette astuce ne doit être utilisée qu'avec une station de travail que vous administrez, n'ayant qu'un seul utilisateur et dont vous êtes le seul utilisateur.
Ne configurez pas de cette manière les utilisateurs normaux d'une station de travail multi-utilisateurs parce que cela serait très grave pour la sécurité du système.
Le mot de passe et le compte du pingouin
de l’exemple
précédent doivent bénéficier de la même protection que le mot de passe et le
compte de l’administrateur.
Le privilège d'administration, dans ce contexte, appartient à quelqu'un autorisé à effectuer les tâches d'administration du système sur la station de travail. Ne jamais donner un tel privilège à un responsable du département administratif de votre entreprise ni à votre patron, à moins qu'ils n'y soient autorisés et en soient capables.
Pour donner un accès privilégié à certains périphériques et certains
fichiers, vous devriez envisager l’utilisation d'un groupe donnant un accès limité plutôt que
d'utiliser le privilège de root
par l’intermédiaire de
sudo
(8).
Avec une configuration plus approfondie et prudente,
sudo
(8) peut permettre à d'autres utilisateurs d'obtenir
des privilèges limités d'administration sur un système partagé sans partager
le mot de passe de l’administrateur. Ceci peut faciliter la comptabilité sur
les machines ayant plusieurs administrateurs de manière à ce que vous
puissiez dire qui a fait quoi. D'un autre côté, vous ne devriez pas confier
de tels privilèges à quelqu'un d'autre.
Vous êtres maintenant prêt à jouer avec le système Debian, sans risque aussi longtemps que vous utiliserez un compte d'utilisateur sans privilège.
Ceci, parce que le système Debian, même après l’installation initiale, est configuré avec des permissions de fichiers adaptées qui évitent aux utilisateurs non privilégiés d'endommager le système. Bien entendu, il peut y avoir certaines failles qui peuvent être exploités mais ceux qui s’inquiètent de ces problèmes ne devraient pas lire cette section mais plutôt le Manuel de sécurisation (« Securing Debian Manual »).
Nous allons apprendre le système Debian en tant que système semblable à Unix (« Unix-like ») avec :
Avec GNU/Linux et d'autres systèmes d'exploitation semblables à Unix, les fichiers sont organisés en répertoires. Tous les fichiers et les
répertoires sont disposés sous forme d'une grosse arborescence ancrée sur
« /
». On l’appelle un arbre parce que si vous
dessinez le système de fichiers, il ressemble à un arbre qui se trouverait
disposé la tête en bas.
Ces fichiers et répertoires peuvent être répartis sur plusieurs
périphériques. La commande mount
(8) sert à attacher les
systèmes de fichiers se trouvant sur certains périphériques à la grosse
arborescence des fichiers. À l’opposé, la commande
umount
(8) les détachera de nouveau. Avec les noyaux Linux
récents, mount
(8) avec certaines options peut lier une
partie d'une arborescence de fichiers à un autre emplacement ou peut monter
un système de fichier de manière partagée, privée, esclave ou
« non-liable ». Vous trouverez les options de montage prises en
compte par chaque système de fichiers dans
« /share/doc/linux-doc-2.6.*/Documentation/filesystems/
».
Les répertoires d'un système Unix sont
appelés dossiers sur d'autres
systèmes. Vous remarquez aussi qu'il n'y a, sur aucun système Unix, de
concept de lecteur tel que
« A:
». Il y a un système de fichier qui
comprend tout. C'est un gros avantage comparé à Windows.
Voici les bases des fichiers Unix :
MONFICHIER
» et
« MonFichier
» sont des fichiers
différents ;
/
». Ne pas le confondre avec
le répertoire personnel de l’utilisateur root :
« /root
» ;
/
». Le répertoire racine est une
exception, son nom est « /
» (prononcé
« slash » ou « le répertoire racine »), il ne peut pas
être renommé ;
/
» et il y a un /
»
entre chaque répertoire ou fichier dans le nom du fichier. Le premier
« /
» est le répertoire de plus haut niveau, et
les autres « /
» séparent les sous-répertoires
successifs jusqu'à ce que l’on atteigne la dernière entrée qui est le nom
fichier proprement dit. Les mots utilisés ici peuvent être source de
confusion. Prenez comme exemple le nom pleinement
qualifié suivant :
« /usr/share/keytables/us.map.gz
». Cependant,
les gens utiliseront souvent son nom de base
« us.map.gz
» seul comme nom de fichier ;
/etc/
» et
« /usr/
». Ces sous-répertoires se décomposent
eux-mêmes en d'autres sous-répertoires comme
« /etc/init.d/
» et
« /usr/local/
». L’ensemble de la chose, vu
globalement, s'appelle l’arborescence des
répertoires. Vous pouvez imaginer un nom de fichier absolu comme
une route partant de la base de l’arbre (« /
»)
jusqu'à l’extrémité de certaines branches (le fichier). Vous entendrez aussi
certains parler de l’arborescence des répertoire comme d'un arbre généalogique : les sous-répertoires ont alors
des parents et un chemin montre
l’ascendance complète d'un fichier. Il y a aussi des chemins relatifs qui
commencent quelque part ailleurs qu'au niveau du répertoire racine. Il faut
vous souvenir que le répertoire « ../
» indique
le répertoire parent. Cette terminologie s'applique de la même manière aux
autre structures ressemblant aux répertoires comme les structures de données
hiérarchiques ;
C:\
». (Il existe cependant des entrées de
répertoire qui font référence aux périphériques physique en tant qu'élément
du système de fichiers normal. Voir Section 1.2.2, « Fonctionnement interne du système de fichiers »).
Bien que vous puissiez utiliser la
plupart des lettres ou symboles dans un nom de fichier, c'est en pratique un
mauvaise idée de le faire. Il est préférable d'éviter tous les caractères
qui ont une signification particulière sur la ligne de commandes, comme les
espaces, tabulations, sauts de ligne, et autres caractères spéciaux :
{ } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @
$
. Si vous voulez séparer des mots dans un nom, de bons choix sont
le point, le tiret et le tiret souligné. Vous pouvez aussi mettre une
majuscule en tête de chaque mot
« CommeCeci
». Les utilisateurs Linux
expérimentés on tendance à aussi à éviter les espaces dans les noms de
fichiers.
Le mot « root » signifie soit « utilisateur root », soit « répertoire root » Le contexte de son utilisation devrait permettre de les distinguer.
Le mot chemin (« path ») n’est pas utilisé que pour les noms de fichiers entièrement qualifiés comme ci-dessus mais aussi pour le chemin de recherche des commandes. La signification voulue est habituellement claire selon le contexte.
Les meilleures façons de faire en ce qui concerne la hiérarchie des fichiers
sont détaillées dans le « Standard de hiérarchie du système de
fichier » (« Filesystem Hierarchy Standard »)
(« /usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz
»
et hier
(7)). Vous devriez, pour commencer, mémoriser les
éléments suivants :
Tableau 1.3. Utilisation des répertoires-clés
répertoire | utilisation du répertoire |
---|---|
/
|
répertoire racine |
/etc/
|
fichiers de configuration valables pour l’ensemble du système |
/var/log/
|
fichiers journaux du système |
/home/
|
tous les répertoires personnels des utilisateurs non privilégiés |
En suivant la tradition Unix, le système
Debian GNU/Linux fournit un système de
fichiers où les données physiques se trouvent sur des disques durs
et d’autres périphériques de stockage et où les interaction avec les
périphériques physiques tels que les écrans de console et les consoles
distantes connectées en séries sont représentées de manière unifiée dans
« /dev/
».
Chaque fichier, répertoire, tube nommé (une manière pour les programmes de
partager des données) ou périphérique physique sur un système Debian
GNU/Linux possède une structure de données appelée i-nœud (« inode ») qui décrit les attributs
qui lui sont associés comme l’utilisateur qui le possède (propriétaire), le
groupe auquel il appartient, l’heure de dernier accès, etc. Si vous êtes
vraiment intéressé, voir dans
« /usr/include/linux/fs.h
» la définition
exacte de « struct inode
» dans le système
Debian GNU/Linux. L’idée de pouvoir presque tout représenter dans le système
de fichiers était une innovation d’Unix, et les noyaux modernes de Linux ont
encore développé plus loin cette idée. À l’heure actuelle, même les
informations concernant les processus qui tournent sur le système se
trouvent sur le système de fichiers.
Cette représentation abstraite et unifiée des entités physiques et des processus internes est très puissante puisque ceci nous permet d'utiliser la même commande pour le même type d'opération sur des périphériques complètement différents. Il est même possible de changer la manière dont fonctionne le noyau en écrivant des données dans des fichiers spéciaux liés aux processus en cours d'exécution.
Si vous avez besoin de connaître la correspondance entre une arborescence de
fichiers et un périphérique physique, lancez la commande
mount
(8) sans paramètre.
Les permissions du système de fichiers d'un système basé sur Unix sont définies pour trois catégories d'utilisateurs :
Pour les fichiers, chaque permission correspondante permet les actions suivantes :
Pour les répertoires, chaque permission correspondante permet les actions suivantes :
Ici, la permission en exécution sur un répertoire ne signifie pas uniquement l’autorisation de lire des fichiers dans ce répertoire mais aussi l’autorisation de voir leurs attributs, tels que leur taille et l’heure de modification.
ls
(1) est utilisé pour afficher les informations de
permissions (et davantage) des fichiers et répertoires. Lorsque cette
commande est passée avec l’option « -l
», elle
affiche les informations suivantes dans l’ordre donné :
Tableau 1.4. Liste des premiers caractères de la sortie de « ls
-l
» :
caractère | signification |
---|---|
-
|
fichier normal |
d
|
répertoire |
l
|
lien symbolique |
c
|
nœud de périphérique en mode caractère |
b
|
nœud de périphérique en mode bloc |
p
|
tube nommé |
s
|
socket |
chown
(1) est utilisé depuis le compte de l’administrateur
pour modifier le propriétaire d'un fichier. chgrp
(1) est
utilisé depuis le compte du propriétaire du fichier ou de l’administrateur
pour changer le groupe du fichier. chmod
(1) est utilisé
depuis le compte du propriétaire du fichier ou de l’administrateur pour
changer les droits d'accès à un fichier ou un répertoire. La syntaxe de base
pour manipuler le fichier toto
est la suivante :
# chown <nouvel_utilisateur> toto # chgrp <nouveau_groupe> toto # chmod [ugoa][+-=][rwxXst][,...] toto
Vous pouvez, par exemple, faire qu'une arborescence de répertoires soit la
propriété de l’utilisateur toto
et partagée par le groupe
titi
en faisant ce qui suit :
# cd /un/emplacement/ # chown -R toto:titi . # chmod -R ug+rwX,o=rX .
Il existe trois bits qui donnent des permissions particulières :
Ici la sortie de « ls -l
» avec ces bits est
en majuscules si les bits d'exécution
cachés par ces sorties ne sont pas
positionnés.
Définir set user ID sur un fichier exécutable permet à un utilisateur d'exécuter les fichier avec l’identifiant du propriétaire du fichier (par exemple root). De la même manière, définir set group ID sur un fichier exécutable permet d'exécuter le fichier avec l’identifiant de groupe du fichier (par exemple root). Parce que ces positionnements de bits peuvent créer des risques de sécurité, il ne faut les activer qu'avec des précautions extrêmes.
Définir set group ID sur un répertoire permet la création de fichiers à la BSD où tous les fichiers créés dans un répertoire appartiennent au groupe du répertoire.
Positionner le sticky bit d'un répertoire
empêche un fichier de ce répertoire d'être supprimé par un utilisateur qui
n'est pas le propriétaire du fichier. Pour sécuriser le contenu d'un fichier
dans des répertoires pouvant être écrits par tout le monde tels que
« /tmp
» ou dans des répertoires pouvant être
écrits par le groupe, il ne faut pas uniquement supprimer la permission du
fichier en écriture mais aussi
positionner le sticky bit sur le
répertoire. Sinon, le fichier pourra être supprimé et un nouveau fichier
créé avec le même nom par un utilisateur quelconque ayant l’accès en
écriture au répertoire.
Voici quelques exemples intéressants de permissions de fichiers.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------- 1 root root 108, 0 2007-04-29 07:00 /dev/ppp -rw-r--r-- 1 root root 1427 2007-04-16 00:19 /etc/passwd -rw-r----- 1 root shadow 943 2007-04-16 00:19 /etc/shadow -rwsr-xr-x 1 root root 700056 2007-04-22 05:29 /usr/sbin/exim4 $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 10 root root 4096 2007-04-29 07:59 /tmp drwxrwsr-x 10 root staff 4096 2007-03-24 18:48 /usr/local drwxrwsr-x 4 root src 4096 2007-04-27 00:31 /usr/src drwxrwsr-x 2 root mail 4096 2007-03-28 23:33 /var/mail drwxrwxrwt 2 root root 4096 2007-04-29 07:11 /var/tmp
Il existe aussi un mode numérique pour décrire les permissions des fichiers
avec chmod
(1). Ce mode numérique utilise des nombres en
base 8 (radix=8) codés sur 3 ou 4 chiffres.
Tableau 1.5. Mode numérique des permissions de fichiers dans les commandes
chmod
(1)
chiffre | signification |
---|---|
1er chiffre optionnel | somme de set user ID (=4), set group ID (=2), et sticky bit (=1) |
2ème chiffre | somme des permissions de lecture (=4), écriture (=2), et exécution (=1) pour l’utilisateur |
3ème chiffre | identique pour groupe |
4ème chiffre | identique pour autres |
Ceci peut sembler compliqué mais c'est en fait assez simple. Si vous
regardez les quelques premières colonnes (2-10) de la sortie de la commande
« ls -l
» et que vous lisez en représentation
binaire (base 2) les permissions des fichiers (le « - »
représentant « 0 » et « rwx » représentant
« 1 »), les trois derniers chiffres de la valeur numérique du mode
devraient vous donner la représentation des permissions du fichier en octal
(base 8).
Essayez, par exemple, ce qui suit :
$ touch toto titi $ chmod u=rw,go=r toto $ chmod 644 titi $ ls -l toto titi -rw-r--r-- 1 pingouin pingouin 17 2007-04-29 08:22 titi -rw-r--r-- 1 pingouin pingouin 12 2007-04-29 08:22 toto
Si vous avez besoin d'accéder aux informations affichées par
« ls -l
» depuis un script de l’interpréteur de
commandes, vous devrez utiliser des commandes pertinentes telles que
test
(1), stat
(1) et
readlink
(1). Vous pouvez aussi utiliser les commandes
internes du shell, telles que « [
» ou
« test
».
Les permissions appliquées à un fichier ou à un répertoire venant d'être
créé sont restreintes par la commande interne du shell
umask
. Voir dash
(1),
bash
(1) etbuiltins
(7).
(permissions du fichier) = (permissions demandées pour le fichier) & ~(valeur de umask)
Tableau 1.6. Exemples de valeurs de umask
umask | permissions des fichiers créés | permissions des répertoires créés | utilisation |
---|---|---|---|
0022
|
-rw-r--r--
|
-rwxr-xr-x
|
ne peut être écrit que par l’utilisateur |
0002
|
-rw-rw-r--
|
-rwxrwxr-x
|
peut être écrit par le groupe |
Le système Debian utilise par défaut un schéma de groupe privé par
utilisateur (UPG). Un UPG est créé chaque fois qu'un utilisateur est ajouté
au système. Un UPG a le même nom que l’utilisateur pour lequel il a été créé
et cet utilisateur est le seul membre de l’UPG. Un principe d'UPG rend sûr
le positionnement de umask à 0002
car chaque utilisateur
a son propre groupe privé. (Sur certaines variantes d’Unix, il est assez
courant de faire appartenir tous les utilisateurs au même groupe users
et, dans ce cas, c'est une
bonne idée de définir umask à 0022
pour des raisons de
sécurité).
Pour que les droits d'un groupe s'appliquent à un utilisateur particulier,
il faut donner à cet utilisateur l’appartenance au groupe en utilisant
« sudo vigr
».
Vous pouvez aussi ajouter dynamiquement des utilisateurs aux groupes durant
le processus d'authentification en ajoutant la ligne « auth
optional pam_group.so
» au fichier
« /etc/pam.d/common-auth
» et en définissant
« /etc/security/group.conf
». (Voir Chapitre 4, Authentification).
Sous le système Debian, les périphériques ne sont qu'un autre type de fichier. Si vous avez des problèmes pour accéder à des périphériques tel qu'un CD-ROM ou une clé USB depuis le compte d'un utilisateur, il faudra rendre cet utilisateur membre du groupe concerné.
Certains groupes importants fournis par le système permettent à leurs
membres l’accès à des fichiers et des périphériques particuliers sans avoir
les privilèges de l’administrateur
.
Tableau 1.7. Liste des groupes importants fournis par le système pour l’accès aux fichiers
groupe | description des fichiers et périphériques accessibles |
---|---|
dialout
|
accès complet et direct aux ports série
(« /dev/ttyS[0-3] »)
|
dip
|
accès limité aux ports série pour une connexion « Dialup IP (réseau commuté) vers des pairs de confiance |
cdrom
|
lecteurs et graveurs de CD-ROM, DVD+/-RW. |
audio
|
périphérique audio |
video
|
périphérique vidéo |
scanner
|
dispositifs de numérisation (scanners) |
adm
|
journaux de surveillance du système |
staff
|
quelques répertoires où effectuer du travail d'administration de
début : « /usr/local »,
« /home ».
|
Vous devez être membre du groupe dialout
pour pouvoir
reconfigurer un modem, numéroter vers n'importe où, etc. Mais si
l’administrateur
crée dans
« /etc/ppp/peers/
» des fichiers de
configuration pour des pairs de confiance, vous ne devrez appartenir qu'au
groupe dip
pour créer une connexion commutée (« Dialup IP ») vers ces pairs
de confiance avec commandes pppd
(8),
pon
(1) et poff
(1).
Certains groupes faisant partie du système, permettent à leurs membres
d'exécuter des commandes particulières sans les privilèges de
l’administrateur (root
).
Tableau 1.8. Liste des groupes importants fournis par le système pour l’exécution de commandes particulières
groupe | commandes accessibles |
---|---|
sudo
|
exécuter sudo sans son mot de passe.
|
lpadmin
|
exécuter des commandes pour ajouter, modifier et supprimer des imprimantes de la base de données des imprimantes |
plugdev
|
exécuter pmount (1) pour des disques amovibles tels que
des mémoires USB
|
Pour une liste complète des groupes et des utilisateurs fournis par les
système, veuillez consulter une version récente du document
« Utilisateurs et groupes » (« Users and Groups » se
trouvant dans
/usr/share/doc/base-passwd/users-and-groups.html
»
qui est fourni par le paquet base-passwd
.
Voir passwd
(5), group
(5),
shadow
(5), newgrp
(1),
vipw
(8), vigr
(8) et
pam_group
(8) pour les commande de gestion des
utilisateurs et des groupes du système.
Il existe trois types d'horodatage pour un fichier GNU/Linux.
Tableau 1.9. Liste des types d'horodatage
type | signification |
---|---|
mtime |
date de modification du fichier (ls -l )
|
ctime |
date de changement d'état du fichier (ls -lc )
|
atime |
date de dernier accès au fichier (ls -lu )
|
ctime n'est pas la date de création du fichier.
Sur un système Debian, même la simple lecture d'un fichier provoque
normalement une opération d'écriture afin de mettre à jour l’information
atime dans l’i-nœud. Monter un système de fichiers avec l’option
« noatime
» ou
« relatime
» fait que le système n'effectuera
pas cette opération et, en conséquence, les accès aux fichiers en lecture
seront plus rapides. Ceci est souvent recommandé pour les portables, parce
que cela réduit l’activité disque et préserve l’autonomie de la
batterie. Voir mount
(8).
Utilisez la commande touch
(1) pour modifier l’horodatage
des fichiers existants.
En ce qui concerne l’horodatage, la commande ls
affiche
des chaînes différentes avec les paramètres linguistiques modernes
(« en_US.UTF-8
») de ce qui était affiché avec
les anciens(« C
»).
$ LANG=en_US.UTF-8 ls -l toto -rw-r--r-- 1 pingouin pingouin 3 2008-03-05 00:47 toto $ LANG=C ls -l toto -rw-r--r-- 1 pingouin pingouin 3 Mar 5 00:47 toto
Voir Section 9.2.5, « Affichage personnalisé de la date et de l’heure » pour
personnaliser la sortie de « ls -l
».
Il existe deux méthodes pour associer le fichier
« toto
» avec un nom de fichier différent
« titi
» :
ln toto titi
»
ln -s toto titi
»
Voir dans l’exemple suivant des modifications du nombre de liens et les
subtiles différences dans le résultat de la commande rm
.
$ echo "Contenu d'origine" > toto $ ls -li toto 2398521 -rw-r--r-- 1 pingouin pingouin 17 2007-04-29 08:15 toto $ ln toto titi # hard link $ ln -s toto tutu # symlink $ ls -li toto titi tutu 2398521 -rw-r--r-- 2 pingouin pingouin 17 2007-04-29 08:15 titi 2398538 lrwxrwxrwx 1 pingouin pingouin 3 2007-04-29 08:16 tutu -> toto 2398521 -rw-r--r-- 2 pingouin pingouin 17 2007-04-29 08:15 toto $ rm toto $ echo "Nouveau contenu" > toto $ ls -li toto titi tutu 2398521 -rw-r--r-- 1 pingouin pingouin 17 2007-04-29 08:15 titi 2398538 lrwxrwxrwx 1 pingouin pingouin 3 2007-04-29 08:16 tutu -> toto 2398540 -rw-r--r-- 1 pingouin pingouin 12 2007-04-29 08:17 toto $ cat titi Contenu d'origine $ cat tutu Nouveau contenu
Un lien dur peut être mis en place à l’intérieur du même système de
fichiers, il partage le même numéro d'i-nœud, ce que montre l’option
« -i
» de ls
(1).
Le lien symbolique a toujours les permissions d'accès nominale au fichier de
« rwxrwxrwx
» comme il apparaît dans l’exemple
ci-dessus, alors que les permissions d'accès effectives sont celles du
fichier vers lequel il pointe.
En général, il est souhaitable de ne pas créer de liens symboliques compliqués ni de liens durs, à moins que vous n'ayez une très bonne raison. Ceci peut provoquer des cauchemars lorsque la combinaison logique des liens symboliques crée une boucle dans le système de fichiers.
Il est généralement préférable d'utiliser des liens symboliques plutôt que des liens durs à moins que vous n'ayez une bonne raison d'utiliser un lien dur.
Le répertoire « .
» est lié au répertoire dans
lequel il apparaît, le nombre de liens de n'importe quel nouveau répertoire
commence donc à 2. Le répertoire « ..
» est lié
au répertoire-père, le nombre de liens du répertoire augmente donc lors de
l’ajout de nouveaux sous-répertoires.
Si vous venez de passer à Linux depuis Windows, la bonne conception d'un système de fichiers Unix comparé à l’équivalent le plus proche que sont les « raccourcis Windows » deviendra vite claire. Parce qu'il est implémenté dans le système de fichiers, les application ne voient pas de différence entre un fichier lié et son original. Dans le cas de liens durs, il n'y a vraiment aucune différence.
Un tube nommé est un fichier qui se comporte comme un tuyau. Vous mettez quelque chose dans le tuyau et il ressort à l’autre bout. C'est donc appelé une FIFO, ou « premier entré - premier sorti » (First-In-First-Out) : la première chose que vous mettez dans le tuyau est la première chose qui ressortira à l’autre bout.
Si vous écrivez vers un tube nommé, le processus qui écrit dans le tube ne
se termine pas avant que l’information ne soit lue depuis le tube. Si vous
effectuez une lecture depuis un tube nommé, le processus de lecture attendra
jusqu'à ce qu'il n'y ait plus rien à lire avant de se terminer. La taille
d'un tube est toujours nulle --- il ne stocke pas de données, ce n'est qu'un
lien entre deux processus comme le « |
» de
l’interpréteur de commandes. Cependant, comme ce tube a un nom, il n'est pas
nécessaire que les deux processus se trouvent sur la même ligne de commandes
ni même qu'ils soient lancés par le même utilisateur. Les tubes sont une
innovation influente d’Unix.
Essayez, par exemple, ce qui suit :
$ cd; mkfifo montube $ echo "hello" >montube & # mettre en arrière-plan [1] 8022 $ ls -l montube prw-r--r-- 1 pingouin pingouin 0 2007-04-29 08:25 montube $ cat montube hello [1]+ Done echo "hello" >montube $ ls montube montube $ rm montube
Les sockets sont utilisées de manière intensives dans les communications par Internet, les bases de données et le système d'exploitation lui-même. Elles sont semblables aux tubes nommés (FIFO) et permettent aux processus d'échanger des informations même s'ils tournent sur des ordinateurs différents. Pour la socket, ces processus n'ont pas besoin de tourner en même temps ni de tourner en tant que fils du même processus père. C'est le point d'aboutissement du processus d'intercommunication (IPC). (« interprocess communication »). L’échange d'informations peut avoir lieu entre deux machines au travers du réseau. Les deux plus courantes sont la socket Internet (« Internet socket ») et la socket du domaine Unix (« Unix domain socket »).
« netstat -an
» fournit un aperçu très utile
des sockets qui sont ouvertes sur un système donné.
Fichiers de périphériques fait référence
aux périphériques virtuels ou physiques de votre système, tels que vos
disques durs, carte vidéo, écran ou clavier. Un exemple de périphérique
virtuel est la console, représentée par
« /dev/console
»
Il y a 2 types de fichiers de périphériques :
périphérique en mode caractère (« character device ») :
Périphériques en mode bloc (« block device ») :
Vous pouvez lire et écrire sur les fichiers de périphériques, cependant, le
fichier peut fort bien contenir des données binaires qui peuvent être du
charabia incompréhensible pour les êtres humains. Écrire des données
directement dans ces fichiers est parfois utile pour déboguer des connexions
matérielles. Vous pouvez, par exemple, vider un fichier texte vers le
périphérique d'impression « /dev/lp0
» ou
envoyer des commandes de modem vers le port série approprié
« /dev/ttyS0
». Mais, à moins que ce ne soit
fait avec précautions, ceci peut provoquer un désastre majeur. Soyez donc
prudent.
Pour l’accès normal à une imprimante, utilisez lp
(1).
On affiche le numéro de nœud du périphérique en utilisant la commande
ls
(1) comme suit :
$ ls -l /dev/hda /dev/ttyS0 /dev/zero brw-rw---- 1 root cdrom 3, 0 2007-04-29 07:00 /dev/hda crw-rw---- 1 root dialout 4, 64 2007-04-29 07:00 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 2007-04-29 07:00 /dev/zero
/dev/hda
» a le numéro majeur de périphérique
3 et le numéro mineur de périphérique 0. Il est accessible en lecture et
écriture par les utilisateurs qui appartiennent au groupe
cdrom
.
/dev/ttyS0
» a le numéro majeur de
périphérique 4 et le numéro mineur de périphérique 64. Il est accessible en
lecture et écriture par les utilisateurs qui appartiennent au groupe
dialout
.
/dev/zero
» a le numéro majeur de
périphérique 1 et le numéro mineur de périphérique 5. Il est accessible en
lecture et écriture par tout le monde.
Avec le système Linux 2.6, le système de fichiers sous
« /dev/
» est automatiquement rempli par
udev
(7).
Il y a aussi certains fichiers spéciaux de périphériques.
Tableau 1.10. Liste des fichiers spéciaux de périphériques
fichier de périphérique | action | description de la réponse |
---|---|---|
/dev/null
|
lire | retourne le « caractère fin de fichier (EOF) » |
/dev/null
|
écrire | ne retourne rien (un puits de données sans fond) |
/dev/zero
|
lire |
retourne le « caractère \0 (NULL) » (qui n'est
pas identique au chiffre zéro ASCII)
|
/dev/random
|
lire | retourne des caractères aléatoires depuis un générateur de nombres aléatoires réel, en donnant une vraie entropie (lent) |
/dev/urandom
|
lire | retourne des caractères aléatoires depuis un générateur de nombres pseudo-aléatoires, sécurisé par chiffrement |
/dev/full
|
écrire | retourne une erreur disque plein (ENOSPC) |
Ils sont fréquemment utilisés en conjonction avec une redirection du shell (voir Section 1.5.8, « Séquences de commandes typiques et redirection de l’interpréteur de commandes »).
procfs et sysfs
montés sur « /proc
» et
« /sys
sont des pseudo-systèmes de fichiers, ils
présentent dans l’espace utilisateur des structures de données internes du
noyau. En d'autres termes, ces entrées sont virtuelles, ce qui signifie
qu'elles présentent une fenêtre sur le fonctionnement du système
d'exploitation.
Le répertoire « /proc
» contient (entre autres
choses), pour chacun des processus tournant sur le système, un
sous-répertoire dont le nom est l’identifiant du processus (PID). Les
utilitaires du système qui accèdent aux information des processus, tels que
ps
(1), obtiennent leurs informations depuis cette
structure de répertoires.
Les répertoires qui se trouvent sous
« /proc/sys/
» contiennent une interface
permettant de modifier certains paramètres du système alors qu'il est en
fonctionnement. (Vous pouvez faire la même chose au travers de la commande
spécialisée sysctl
(8) ou de son fichier de configuration
« /etc/sysctrl.conf
).
Le noyau de Linux peut émettre un message « Too many open files »
(trop de fichiers ouverts). Vous pouvez corriger cela en augmentant la
valeur de « file-max
» depuis l’interpréteur de
commandes de l’administrateur. Par exemple, « echo "65536"
> /proc/sys/fs/file-max
» (Ceci était nécessaire avec les
noyaux plus anciens).
Certaines personnes paniquent lorsqu'elles remarquent un fichier particulier
- « /proc/kcore
» - qui est particulièrement
énorme. Ceci est (plus ou moins) le contenu de la mémoire de votre
ordinateur. Il est utilisé pour déboguer le noyau. C'est un fichier virtuel
qui pointe vers la mémoire de l’ordinateur, ne vous inquiétez donc pas de sa
taille.
Les répertoires sous « /sys
» contiennent des
structures de données exportées depuis le noyau, leurs attributs et les
liens entre elles. Ils contiennent aussi des interfaces pour modifier
certains paramètres du noyau pendant son fonctionnement.
Voir « proc.txt(.gz)
»,
« sysfs.txt(.gz)
» et d'autres documents en
rapport dans la documentation du noyau de Linux
(« /usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*
»)
fournie par le paquet linux-doc-2.6.*
.
Midnight Commander (MC) est un « couteau de l’armée Suisse » GNU pour la console Linux et d'autres environnements de terminaux. Il permet au débutant d'acquérir une expérience de la console pilotée par des menus, ce qui est bien plus facile à apprendre que les commandes Unix standard.
Il vous faudra peut-être installer le paquet Midnight Commander dont le nom
est « mc
» en effectuant ce qui suit :
$ sudo apt-get install mc
Utilisez la commande mc
(1) pour parcourir le système
Debian. C'est la meilleure manière d'apprendre. Vous pouvez explorer
certains emplacements intéressants en utilisant simplement les touches de
curseur et la touche Entrée :
/etc
» et ses sous-répertoires
/var/log
» et ses sous-répertoires
/usr/share/doc
» et ses sous-répertoires
/sbin
» et
« /bin
»
Pour que MC modifie le répertoire de travail en quittant, et
cd
vers le répertoire, je vous suggère de modifier
« ~/.bashrc
» afin d'inclure un script fourni
par le paquet mc
:
. /usr/share/mc/bin/mc.sh
Vous trouverez une explication dans mc
(1) (option
« -P
»). (Si vous ne comprenez pas exactement
ce dont je parle ici, vous pourrez le faire plus tard).
MC peut être lancé par :
$ mc
MC prend en charge toutes les opérations sur les fichiers par l’intermédiaire de son menu, ce qui ne demande que peu d'effort de la part de l’utilisateur. Pressez simplement F1 pour obtenir l’écran d'aide. Vous pouvez jouer avec MC simplement en pressant les touches de curseur et les touches de fonctions.
Sur certaines consoles telles que gnome-terminal
(1), les
actions sur les touches de fonctions peuvent être récupérées par le
programme de console. Vous pouvez désactiver cette fonctionnalité par
« Éditer » → « Raccourcis clavier » pour le
terminal gnome
.
Si vous rencontrez un problème de codage de caractères qui entraîne une
corruption de l’affichage, ajouter « -a
» à la
ligne de commandes de MC peut aider à éviter les problèmes.
Si ceci ne résout pas vos problèmes d'affichage avec MC, voir Section 9.6.6, « Configuration du terminal ».
Il y a par défaut, deux panneaux de répertoires affichant les listes de
fichiers. Un autre mode utile est de définir la fenêtre de droite à
« information » afin de voir les informations de privilèges
d'accès aux répertoires. Vous trouverez ci-après quelques raccourcis clavier
essentiels. Si le démon gpm
(8) tourne, une souris iest
utilisable avec les consoles Linux en mode caractères. (Assurez-vous de
presser la touche majuscules pour obtenir le comportement normal de
couper-coller avec MC).
Tableau 1.11. Touches de raccourcis de MC
touche | affectation |
---|---|
F1
|
menu d'aide |
F3
|
visualisateur interne de fichiers |
F4
|
éditeur interne |
F9
|
activer le menu déroulant |
F10
|
quitter Midnight Commander |
Tabulation
|
passer d'une fenêtre à l’autre |
Ins ou Ctrl-T
|
marquer le fichier pour des opérations sur plusieurs fichiers telles que copier |
Suppr
|
effacer le fichier (attention---configurez MC dans le mode d'effacement sécurisé) |
Touches de curseur | auto-explicatif |
cd
changera le répertoire affiché sur l’écran
sélectionné ;
Ctrl-Entrée
ou Alt-Entrée
copiera un
nom de fichier sur la ligne de commandes. Utilisez ceci avec les commandes
cp
(1) et mv
(1) en association avec
l’édition de la ligne de commandes ;
Alt-Tab
affichera les choix de l’interpréteur de
commandes pour l’expansion du nom de fichier ;
mc /etc /root
» ;
Échap
+ touche n
→
Fn
(par exemple Échap
+
1
→ F1
, etc. ;
Échap
+ 0
→
F10
) ;
Échap
avant une touche a le même effet
que presser simultanément Alt
et la touche. Par exemple,
entrez Échap
+ c
pour
Alt-C
. Échap
est appelée méta-touche
et parfois notée « M-
».
L’éditeur interne possède une manière intéressante d'effectuer un
copier-coller. Presser F3
marque le début de la
sélection, F3
pressé une seconde fois marque la fin de
la sélection et la met en surbrillance. Vous pouvez ensuite déplacer votre
curseur. Si vous appuyez sur F6, la zone sélectionnée sera déplacée jusqu'à
l’emplacement du curseur. Si vous pressez sur F5, la zone sélectionnée sera
copiée et insérée à l’emplacement du curseur. F2
enregistrera le fichier. F10
vous permettra de quitter
l’éditeur. La plupart des touches de déplacement du curseur fonctionnent de
manière intuitive.
Cet éditeur peut être directement lancé avec un fichier en utilisant l’une des commandes suivantes :
$ mc -e fichier_à_éditer
$ mcedit fichier_à_éditer
Il ne s'agit pas d'un éditeur multi-fenêtres mais on peut faire usage de plusieurs consoles Linux pour obtenir le même effet. Pour copier d'une fenêtre sur l’autre, utilisez les touches Alt-F<n> pour basculer d'une console virtuelle à l’autre et utilisez « File→Insert file » ou «File→Copy to file» pour déplacer une portion de fichier dans un autre fichier.
Cet éditeur interne peut être remplacé par n'importe quel autre éditeur externe de votre choix.
De nombreux programmes utilisent aussi les variables d'environnement
« $EDITOR
» ou
« $VISUAL
» afin de décider quel éditeur
utiliser. Si, au départ, vous n'êtes à l’aise ni avec
vim
(1) ni avec nano
(1), vous pouvez
définir ces variable à « mcedit
» en ajoutant
les lignes suivantes au fichier « ~/.bashrc
» :
export EDITOR=mcedit export VISUAL=mcedit
Je recommande de les définir à « vim
» si
possible.
Si vous n'êtes pas à l’aise avec vim
(1), vous pouvez
continuer à utiliser mcedit
(1) pour la plupart des tâches
de maintenance du système.
MC possède un visualisateur intelligent. C'est un très bon outil pour
rechercher des mots dans des documents. Je l’utilise toujours pour lire les
fichiers qui sont dans le répertoire
« /usr/share/doc
». C'est la manière la plus
rapide de naviguer dans les masses d'informations sur Linux. Ce
visualisateur peut être chargé directement utilisant l’une des commandes
suivantes :
$ mc -v chemin/vers/fichier_à_voir
$ mcview chemin/vers/fichier_à_voir
Pressez Entrée sur un fichier, et le programme approprié prendra en charge le contenu du fichier (voir Section 9.5.11, « Personnaliser le programme à lancer »). Il s'agit là d'une fonctionnalité très pratique de MC.
Tableau 1.12. Réaction à la touche Entrée dans MC
type de fichier | réaction à la touche Entrée |
---|---|
fichier exécutable | exécuter la commande |
fichier de page de manuel | envoyer (« pipe ») le contenu au logiciel de visualisation |
fichier html | envoyer (« pipe ») le contenu au navigateur web |
fichiers « *.tar.gz » et
« *.deb »
|
parcourir le contenu comme si c'était un sous-répertoire |
Afin de permettre le fonctionnement de ces visualisateurs et de ces
fonctionnalités de fichiers virtuels, les fichiers pouvant être visualisés
ne doivent pas être définis comme étant exécutables. Modifiez leur état avec
la commande chmod
(1) ou par l’intermédiaire du menu
fichiers de MC.
MC peut être utilisé pour accéder à des fichiers au travers d'Internet en
utilisant FTP. Allez au menu en pressant F9
, entrez
ensuite « p
» pour activer le système de
fichiers virtuel FTP. Entrez une URL sous la forme
« nomutilisateur:motdepasse@nommachine.nomdomaine
»
ce qui va permettre de récupérer un répertoire distant qui apparaît alors
comme s'il était local.
Essayez l’URL « [http.us.debian.org/debian] » et parcourez l’archive Debian.
Bien que MC vous permette de faire à peu près n'importe quoi, il est très important que vous appreniez comment utiliser les outils en ligne de commande appelés depuis l’invite de l’interpréteur de commandes et que vous vous familiarisiez avec un environnement de travail de type Unix.
Vous pouvez choisir votre interpréteur de commandes de connexion à l’aide de
chsh
(1).
Tableau 1.13. Liste de programme d'interprétation des commandes (« shells »)
paquet | popcon | taille | Interpréteur POSIX | description |
---|---|---|---|---|
bash
*
|
V:91, I:99 | 3536 | Oui | Bash : Shell GNU Bourne Again. (standard de fait) |
tcsh
*
|
V:4, I:27 | 768 | Non | Shell TENEX C : version améliorée de csh de Berkeley |
dash
*
|
V:25, I:32 | 248 | Oui | Le Shell Almquist de Debian. Bon pour les scripts en shell |
zsh
*
|
V:3, I:6 | 12784 | Oui | Z shell : interpréteur standard avec de nombreuses améliorations |
pdksh
*
|
V:0.2, I:1.1 | 468 | Oui | version du domaine public de l’interpréteur Korn |
csh
*
|
V:0.6, I:2 | 404 | Non | C Shell OpenBSD, une version de csh de Berkeley |
sash
*
|
V:0.2, I:1.0 | 856 | Oui |
Interpréteur de commande autonome
avec des commandes intégrées. (Ne convient pas en tant que
« /bin/sh » standard)
|
ksh
*
|
V:0.5, I:1.6 | 2800 | Oui | la vraie version de AT&T du shell Korn |
rc
*
|
V:0.16, I:1.6 | 204 | Non | implémentation du shell rc Plan 9 de AT&T |
posh
*
|
V:0.01, I:0.11 | 228 | Oui |
Policy-compliant Ordinary SHell (dérivé de pdksh )
|
Dans ce chapitre du didacticiel, l’interpréteur interactif sera toujours
bash
.
Vous pouvez personnaliser le comportement de bash
(1) à
l’aide de « ~/.bashrc
».
Essayez, par exemple, ce qui suit :
# CD en quittant MC . /usr/share/mc/bin/mc.sh # définir une valeur valable de CDPATH CDPATH=.:/usr/share/doc:~/Desktop:~ export CDPATH PATH="${PATH}":/usr/sbin:/sbin # définir le PATH pour qu'il comporte un répertoire bin privé de l’utilisateur s'il existe if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" fi export PATH EDITOR=vim export EDITOR
Vous pourrez trouver davantage d'informations concertant les astuces de
personnalisation de bash
, comme Section 9.2.7, « Commandes colorisées », dans Chapitre 9, Astuces du système.
Dans un environnement « de type
Unix », certaines séquences de touches ont une signification
particulière. Vous remarquerez que sur une console Linux normale en mode
caractères, seules les touches Ctrl
et
Alt
situées à gauche fonctionnent de la manière
voulue. Voici quelques séquences de touches dont il est intéressant de se
souvenir :
Tableau 1.14. Liste des raccourcis clavier de bash
touche | description des raccourcis clavier |
---|---|
Ctrl-U
|
effacer la ligne avant le curseur |
Ctrl-H
|
effacer le caractère précédant le curseur |
Ctrl-D
|
terminer l’entrée (quitter l’interpréteur si vous en utilisez un) |
Ctrl-C
|
terminer un programme en cours d'exécution |
Ctrl-Z
|
arrêter temporairement un programme en le mettant en tâche de fond |
Ctrl-S
|
arrêter le défilement de l’affichage à l’écran |
Ctrl-Q
|
reprendre le défilement de l’affichage |
Ctrl-Alt-Suppr
|
redémarrer ou arrêter le système, voir inittab (5).
|
Touche Alt de gauche (optionnellement, touche
Windows )
|
touche « meta » pour les interfaces utilisateurs Emacs et similaires |
Flèche haute
|
lancer la recherche dans l’historique des commandes sous
bash
|
Ctrl-R
|
lancer la recherche incrémentale dans l’historique des commandes sous
bash
|
Tabulation
|
complèter l’entrée du nom de fichier de la ligne de commandes sous
bash
|
Ctrl-V Tab
|
entrer une Tabulation sans expansion de la ligne de
commande sous bash
|
La fonctionnalité Ctrl-S
du terminal peut être désactivée
en utilisant stty
(1).
Les opérations de style Unix avec la souris sont basée sur une souris ayant 3 boutons.
Tableau 1.15. Liste des opérations de style Unix avec la souris
action | réponse |
---|---|
Clic-gauche et glisser de la souris | sélectionner et copier dans le presse-papiers |
Clic-gauche | sélectionner le début de la sélection |
Clic-droit | sélectionner la fin de la sélection et placez-là dans le presse-papiers |
Clic du milieu | coller le contenu du presse-papiers à l’emplacement du curseur |
La molette centrale des souris à molette modernes est considérée comme le
bouton du milieu et peut être utilisée pour les clics-milieu. Cliquer
simultanément le bouton de gauche et le bouton de droite sert à émuler le
bouton du milieu sur les systèmes ayant une souris à 2 boutons. Pour pouvoir
utiliser une souris avec les consoles Linux en mode caractère, il faut que
gpm
(8) tourne en tant que démon.
less
(1) est le visualisateur avancé (afficheur de contenu
de fichier). Pressez « h
» pour obtenir de
l’aide. Il peut faire beaucoup plus de choses que more
(1)
et peut être surchargé en exécutant « eval
$(lesspipe)
» ou « eval
$(lessfile)
» dans le script de démarrage de l’interpréteur
de commandes. Vous trouverez davantage d'informations dans
« /usr/share/doc/lessf/LESSOPEN
». L’option
« -R
» permet la sortie en mode caractères
bruts et permet les séquences d'échappement de couleurs ANSI. Voir
less
(1).
Il faudrait que vous soyez compétant avec l’une des variantes des programmes Vim ou d'Emacs qui sont très populaires sur les systèmes semblables à Unix.
Je pense que s'habituer aux commandes de Vim est une bonne chose, car
l’éditeur Vi est toujours présent dans le monde Linux et Unix. (En pratique,
le vi
d'origine ou le nouveau nvi
sont
des programmes que vous trouvez partout. Pour les débutants, j'ai plutôt
choisi Vim parce qu'il propose de l’aide par l’intermédiaire de la touche
F1
tout en restant assez semblable et plus puissant).
Si vous choisissez plutôt Emacs ou XEmacs comme éditeur, c'est aussi un bon choix évidemment, particulièrement pour la programmation. Emacs possède une pléthore d'autres fonctionnalités, y-compris un lecteur de nouvelles, un éditeur de répertoires, un programme de courriel, etc. Lorsqu'il est utilisé pour programmer ou éditer des scripts en shell, il reconnaît de manière intelligente le format de ce sur quoi vous être en train de travailler et il essaie de vous aider. Certaines personnes affirment que le seul programme dont ils ont besoin sous Linux est Emacs. Dix minutes d'apprentissage d'Emacs maintenant vous économiseront des heures plus tard. Il est grandement recommandé d'avoir le manuel de GNU Emacs comme référence lors de son apprentissage.
Tous ces programmes sont habituellement accompagnés d'un programme
d'apprentissage pour vous aider à les utiliser par la pratique. Lancez Vim
en entrant « vim
» et en pressant la touche
F1. Vous devriez au moins en lire les 35 premières lignes. Suivez ensuite le
cours en ligne en déplaçant le curseur sur
« |tutor|
» et en pressant
Ctrl-]
.
Avec les options appropriées, de bons éditeurs, tels que Vim et Emacs, peuvent être utilisés pour manipuler correctement des textes en UTF-8 ou dans d'autres codages exotiques dans un émulateur de terminal x sous X en utilisant les paramètres linguistiques UTF-8 avec le paramétrage de police approprié. Veuillez vous référer à leur documentation relative au texte multi-octets.
Debian est fourni avec de nombreux éditeurs différents. Nous recommandons
d'installer le paquet vim
, comme indiqué ci-dessus.
Debian offre un accès unifié à l’éditeur par défaut du système par
l’intermédiaire de la commande
« /usr/bin/editor
». Ceci permet à d'autres
programmes (par exemple reportbug
(1)) de pourvoir
l’appeler. Vous pouvez le modifier par la commande qui suit :
$ sudo update-alternatives --config editor
Pour les débutants, je recommande de choisir
« /usr/bin/vim.basic
» plutôt que
« /usr/bin/vim.tiny
» car il prend en charge la
mise en évidence de la syntaxe.
De nombreux programmes utilisent les variables d'environnement
« $EDITOR
» ou
« $VISUAL
» pour décider de l’éditeur à
utiliser (voir Section 1.3.5, « Éditeur interne de MC » et Section 9.5.11, « Personnaliser le programme à lancer »). Pour des raisons de
cohérence sur le système Debian, définissez-les à
« /usr/bin/editor
». (Historiquement
« $EDITOR
» était défini à
« ed
» et
« $VISUAL
» était défini à
« vi
»).
Vous pouvez personnaliser le comportement de vim
(1) à
l’aide de « ~/.vimrc
».
Essayez, par exemple, ce qui suit :
" ------------------------------- " Configuration des paramètres linguistiques " set nocompatible set nopaste set pastetoggle=<f2> syn on if $USER == "root" set nomodeline set noswapfile else set modeline set swapfile endif " remplissage pour éviter que la ligne du dessus ne soit identifiée comme une ligne de mode (modeline) " remplissage " remplissage
La sortie d'une commande de l’interpréteur peut défiler, quitter votre écran et être définitivement perdue. C'est une bonne habitude d'enregistrer l’activité de l’interpréteur de commandes dans un fichier afin de la consulter plus tard. Ce type d'enregistrement est essentiel lorsque vous effectuez une tâche d'administration quelconque.
La méthode de base pour enregistrer l’activité de l’interpréteur de
commandes est de la lancer sous script
(1).
Essayez, par exemple, ce qui suit :
$ script Script started, file is typescript
Lancez une commande quelconque sous script
.
Pressez Ctrl-D
pour quitter le script
.
$ vim typescript
Voir Section 9.2.3, « Enregistrer proprement l’activité de la console » .
Apprenons les commandes Unix de base. J'utilise ici « Unix » dans
son sens générique. Tous les clones d’Unix proposent habituellement des
commandes équivalentes. Le système Debian ne fait pas exception. Ne vous
inquiétez pas si certaines commandes ne fonctionnent pas comme vous le
voudriez maintenant. Si un alias
est utilisé dans le
shell, la sortie correspondante sera différente. Ces exemples ne sont pas
destinés à être exécutés dans cet ordre.
Essayez toutes les commandes qui suivent en utilisant un compte non privilégié :
Tableau 1.16. Liste des commandes Unix de base
commande | description |
---|---|
pwd
|
afficher le nom du répertoire actuel ou de travail |
whoami
|
afficher le nom de l’utilisateur actuel. |
id
|
afficher l’identité de l’utilisateur actuel (nom, uid, gid, et groupes associés) |
file <toto>
|
afficher le type de fichier du fichier
« <toto> »
|
type -p <nom-de-commande>
|
afficher l’emplacement du fichier de la commande
« <nom-de-commande> »
|
which <nom-de-commande>
|
, , |
type <nom-de-commande>
|
afficher des informations sur la commande
« <nom-de-commande> »
|
apropos <mot-clé>
|
rechercher les commandes ayant un rapport avec
« <mot-clé> »
|
man -k <mot-clé>
|
, , |
whatis <nom-de-commande>
|
afficher une ligne d'explication sur la commande
« <nom-de-commande> »
|
man -a <nom-de-commande>
|
afficher une explication sur la commande
« <nom-de-commande> » (style Unix)
|
info <nom-de-commande>
|
afficher une explication assez longue de la commande
« <nom-de-commande> » (style GNU)
|
ls
|
afficher le contenu du répertoire (tous les fichiers et répertoires non cachés) |
ls -a
|
afficher le contenu du répertoire (tous les fichiers et répertoires) |
ls -A
|
afficher le contenu du répertoire (presque tous les fichiers et répertoires,
par exemple sauter « .. » et
« . »)
|
ls -la
|
afficher tout le contenu du répertoire de façon détaillée |
ls -lai
|
afficher tout le contenu du répertoire avec les numéros d'i-nœuds et les informations détaillées |
ls -d
|
afficher tous les sous-répertoires du répertoire actuel |
tree
|
afficher le contenu de l’arborescence des fichiers |
lsof <toto>
|
afficher l’état d'ouverture du fichier
« <toto> »
|
lsof -p <pid>
|
afficher les fichiers ouverts par le processus de numéro :
« <pid> »
|
mkdir <toto>
|
créer le nouveau répertoire « <toto> »
dans le répertoire en cours
|
rmdir <toto>
|
supprimer le répertoire « <toto> » du
répertoire actuel
|
cd <toto>
|
allez au répertoire « <toto> » se
trouvant dans le répertoire actuel ou dans le répertoire figurant dans la
variable « $CDPATH »
|
cd /
|
aller au répertoire racine |
cd
|
aller au répertoire personnel de l’utilisateur actuel |
cd /<toto>
|
aller au répertoire de chemin absolu
« /<toto> »
|
cd ..
|
aller au répertoire parent |
cd ~<toto>
|
aller au répertoire « <foo> » se trouvant
dans le répertoire personnel de l’utilisateur
|
cd -
|
aller au répertoire précédent |
</etc/motd visualisateur
|
afficher le contenu de « /etc/motd » en
utilisant le visualisateur (« pager ») par défaut
|
touch <fichier-poubelle>
|
créer un fichier vide
« <fichier-poubelle> »
|
cp <toto> <titi>
|
copier le fichier « <toto> » existant
dans le nouveau fichier « <titi> »
|
rm <fichier-poubelle>
|
supprimer le fichier
« <fichier-poubelle> »
|
mv <toto> <titi>
|
renommer le fichier existant « <toto> »
avec le nouveau nom « <titi> »
(« <titi> » ne doit pas exister)
|
mv <toto> <titi>
|
déplacer le fichier existant « <toto> »
vers le nouvel emplacement
« <titi>/<toto> » (le répertoire
« <titi> » doit exister)
|
mv <toto> <titi>/<tutu>
|
déplacer le fichier existant « <toto> »
vers un nouvel emplacement avec le nouveau nom
« <titi>/<tutu> » (le répertoire
« <titi> » doit exister mais le
répertoire « <titi>/<tutu> » ne
doit pas exister)
|
chmod 600 <toto>
|
rendre le fichier « <toto> » non lisible
et non modifiable par les autres personnes (non exécutable pour tous)
|
chmod 644 <toto>
|
rendre un fichier existant « <toto> »
accessible en lecture mais non modifiable par les autres personnes (non
exécutable pour tous)
|
chmod 755 <toto>
|
rendre un fichier existant « <toto> »
accessible en lecture mais non modifiable par les autres utilisateurs
(exécutable pour tous)
|
find . -name <motif>
|
rechercher les noms de fichier contenant le
« <motif> » de l’interpréteur de
commandes (plus lent).
|
locate -d . <motif>
|
rechercher les noms de fichiers contenant en utilisant un
« <motif> » de l’interpréteur de
commandes (plus rapide si on utilise une base de données régulièrement
générée)
|
grep -e "<motif>" *.html
|
rechercher un « <motif> » dans tous les fichiers se
terminant par « .html » dans le répertoire
actuel et tous les afficher
|
top
|
afficher en plein écran les informations sur les processus, pressez
« q » pour quitter
|
ps aux | visualisateur
|
afficher les informations concernant tous les processus actifs en utilisant un affichage de type BSD |
ps -ef | visualisateur
|
afficher les informations concernant tous les processus actifs en utilisant un affichage de type Unix System-V |
ps aux | grep -e "[e]xim4*"
|
afficher tous les processus faisant appel à
« exim » et
« exim4 »
|
ps axf | visualisateur
|
afficher les informations concernant tous les processus en cours en utilisant une sortie ASCII pseudo-graphique |
kill <1234>
|
tuer le processus identifié par l’identifiant de processus : « <1234> » |
gzip <toto>
|
compresser « <toto> » afin de créer
« <toto>.gz » en utilisant le codage
Lempel-Ziv (LZ77)
|
gunzip <toto>.gz
|
décompresser « <toto>.gz » afin de créer
« <toto> ».
|
bzip2 <toto>
|
compresser « <toto> » pour créer
« <toto>.bz2 » en utilisant l’algorithme
de compression de tri de texte Burrows-Wheeler et le codage de Huffman
(meilleure compression que gzip )
|
bunzip2 <toto>.bz2
|
décompresser « <toto>.bz2 » afin de créer
« <toto> »
|
xz <toto>
|
compresser « <toto> » pour créer
« <toto>.xz » en utilisant l’algorithme
de compression de Lempel-Ziv-Markov chain (meilleure compression que
bzip2 )
|
unxz <toto>.xz
|
décompresser « <toto>.xz » afin de créer
« <toto> ».
|
tar -xvf <toto>.tar
|
extraire les fichiers de l’archive
« <toto>.tar »
|
tar -xvzf <toto>.tar.gz
|
extraire les fichiers d'une archive
« gzippée » « <toto>.tar.gz »
|
tar -xvjf <toto>.tar.bz2
|
extraire les fichiers de l’archive
« <toto>.tar.bz2 »
|
tar -xvJf <toto>.tar.xz
|
extraire les fichiers de l’archive
« <toto>.tar.xz »
|
tar -cvf <toto>.tar <titi>/
|
archiver le contenu du répertoire
« <titi>/ » dans l’archive
« <toto>.tar »
|
tar -cvzf <toto>.tar.gz <titi>/
|
archiver le contenu du répertoire
« <titi>/ » dans l’archive compressée
« <toto>.tar.gz »
|
tar -cvjf <toto>.tar.bz2 <titi>/
|
archiver le contenu du répertoire
« <titi>/ » sans l’archive
« <toto>.tar.bz2 »
|
tar -cvJf <toto>.tar.xz <titi>/
|
archiver le contenu du répertoire
« <titi>/ » sans l’archive
« <toto>.tar.xz »
|
zcat README.gz | visualisateur
|
afficher le contenu du fichier compressé
« README.gz » en utilisant le visualisateur
(« pager ») par défaut
|
zcat README.gz > toto
|
créer le fichier « toto » avec le contenu
décompressé de « README.gz »
|
zcat README.gz >> toto
|
ajouter le contenu décompressé de « README.gz »
à la fin du fichier. (S'il n'existe pas, créez-le d'abord).
|
Unix a pour tradition de cacher les fichiers dont le nom commence par un
« .
». Ce sont traditionnellement des fichiers
qui contiennent des informations de configuration et des préférences de
l’utilisateur.
Pour la commande cd
, voir builtins
(7).
Le visualisateur (« pager ») par défaut d'un système Debian non
personnalisé est more
(1) qui ne permet pas le défilement
vers l’arrière. En installant le paquet less
à l’aide de
la ligne de commandes « apt-get install less
»,
less
(1) deviendra le visualisateur par défaut et vous
pourrez faire défiler le texte vers l’arrière à l’aide des touches de
curseur.
« [
» et « ]
»
dans l’expression rationnelle de la commande « ps aux | grep
-e "[e]xim4*"
" » ci-dessus permet d'éviter une correspondance
de grep avec lui-même. Le « 4*
» de
l’expression rationnelle signifie 0 ou plusieurs instances du caractère
« 4
» et permet donc à grep
de trouver la correspondance à la fois avec
« exim
» et
« exim4
». Bien que
« *
» soit utilisé dans le motif générique
(« glob ») des noms de fichiers de l’interpréteur de commandes et
dans l’expression rationnelle, leurs significations sont différentes. Vous
pourrez apprendre les expression rationnelles dans
grep
(1).
À titre d'exercice, parcourez les répertoires et jetez un coup d'œil au système en vous servant des commandes ci-dessus. Si vous avez des questions sur ces commandes de la console, veuillez consulter la page de manuel.
Essayez, par exemple, ce qui suit :
$ man man $ man bash $ man builtins $ man grep $ man ls
Il peut être un peu difficile de s'habituer au style des pages de manuel parce qu'elles sont plutôt succinctes, particulièrement les plus anciennes, celles qui sont vraiment traditionnelles. Mais une fois que vous y serez familiarisé, vous apprécierez leur concision.
Remarquez que beaucoup de commandes Unix, y compris celles de GNU et BSD, affichent une information d'aide courte si vous les exécutez de l’une des façons suivantes (ou parfois sans paramètre) :
$ <nom-de-commande> --help $ <nom-de-commande> -h
Vous avez maintenant une certaine sensation sur la manière d'utiliser un
système Debian. Nous allons regarder plus profondément le mécanisme
d'exécution des commandes sous le système Debian. J'ai ici, pour les
débutants, simplifié la réalité. Voir bash
(1) pour
l’explication exacte.
Une simple commande est une séquence de :
>
,
>>
, <
,
<<
, etc.) ;
&&
,
||
, <nouvelle ligne> , ;
,
&
, (
, )
).
Les valeurs de certaines variables d'environnement modifient le comportement de certaines commandes Unix.
Les valeurs par défaut des variables d'environnement sont définies initialement par le système PAM, certaines d'entre-elles peuvent donc être réinitialisées par certains programmes d'application :
gdm
réinitialise les variables d'environnement ;
~/bash_profile
» et
« ~/.bashrc
».
La valeur complète des paramètres linguistiques indiqués par la variable
« $LANG
est constituée de trois parties
« xx_YY.ZZZZ
».
Tableau 1.17. Les trois parties des paramètres linguistiques
valeur des paramètres linguistiques | signification |
---|---|
xx
|
codes de langue ISO 639 (en minuscules) tel que « fr » |
YY
|
codes de pays ISO 3166 (en majuscules), par exemple « FR » |
ZZZZ
|
le jeu de caractères, toujours défini à « UTF-8 » |
Pour les codes de langues et de pays, voir la description dans
« info gettext
».
Vous devriez toujours définir le codage des caractères d'un système Debian
moderne à UTF-8
à
moins que vous ne vouliez spécifiquement en utiliser un ancien avec de
bonnes raisons et les connaissances de bases associées.
Pour des informations détaillées sur la configuration des paramètres linguistiques, voir Section 8.3, « Les paramètres linguistiques (« locale ») ».
« LANG=en_US
» n'est pas
« LANG=C
» ni
« LANG=en_US.UTF-8
». C'est
« LANG=en_US.ISO-8859-1
» (voir Section 8.3.1, « Bases du codage »).
Tableau 1.18. Liste des recommandations de paramètres linguistiques
recommandation de paramètres linguistiques | Langue (zone) |
---|---|
en_US.UTF-8
|
anglais (USA) |
en_GB.UTF-8
|
anglais (Grande-Bretagne) |
fr_FR.UTF-8
|
français (France) |
de_DE.UTF-8
|
allemand (Allemagne) |
it_IT.UTF-8
|
italien (Italie) |
es_ES.UTF-8
|
espagnol (Espagne) |
ca_ES.UTF-8
|
catalan (Espagne) |
sv_SE.UTF-8
|
suédois (Suède) |
pt_BR.UTF-8
|
portugais (Brésil) |
ru_RU.UTF-8
|
russe (Russie) |
zh_CN.UTF-8
|
chinois (RP de Chine) |
zh_TW.UTF-8
|
chinois (Taiwan) |
ja_JP.UTF-8
|
japonais (Japon) |
ko_KR.UTF-8
|
coréen (République de Corée) |
vi_VN.UTF-8
|
vietnamien (Vietnam) |
L’exécution typique d'une commande utilise une séquence de lignes telle que la suivante :
$ date Sun Jun 3 10:27:39 JST 2007 $ LANG=fr_FR.UTF-8 date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Ici, le programme date
(1) est exécuté comme tâche
d'avant-plan avec différentes valeurs de la variable d'environnement
« $LANG
».
$LANG
» est
définie à la valeur des paramètres
linguistiques par défaut du système
« en_US.UTF-8
».
$LANG
» est
définie à la valeur des paramètres
linguistiques UTF-8 français
« fr_FR.UTF-8
».
Habituellement, la plupart des exécutions de commandes ne sont pas précédées de la définition de variables d'environnement. Pour les exemple ci-dessus, vous pouvez aussi exécuter :
$ LANG=fr_FR.UTF-8 $ date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Comme vous pouvez le voir ici, la sortie de la commande est affectée par la variable d'environnement afin que la sortie s'effectue en français. Si vous désirez que la variable d'environnement hérite du sous-processus (par exemple le script appelant), vous devrez alors l’exporter de la manière suivante :
$ export LANG
En déposant un signalement de bogue, c'est une bonne idée de lancer et de
vérifier la commande « LANG=en_US.UTF-8
» si
vous utilisez un environnement autre que l’environnement anglais.
Voir locale
(5) et locale
(7) pour les
variables d'environnement « $LANG
» et
associées.
Je vous recommande de configurer l’environnement du système en ne touchant
qu'à la variable « $LANG
» en laissant de côté
les variables « $LC_*
» à moins que ce ne soit
absolument nécessaire.
Lorsque vous entrez une commande dans l’interpréteur, il recherche la
commande dans la liste des répertoires contenus dans la variable
d'environnement « $PATH
». La valeur de la
variable d'environnement « $PATH
» est aussi
appelée « chemin de recherche de l’interpréteur de commandes ».
Dans une installation Debian par défaut, la variable d'environnement
« $PATH
» des comptes d'utilisateurs peut ne
pas inclure « /sbin
» ni
« /usr/sbin
». Par exemple, la commande
ifconfig
doit être lancée avec son chemin complet
« /sbin/ifconfig
». (La commande similaire
ip
est située dans
« /bin
».)
Vous pouvez modifier la variable d'environnement
« $PATH
» de l’interpréteur de commandes Bash
par l’intermédiaire des
fichiers« ~/.bash_profile
» ou
« ~/.bashrc
».
De nombreuses commandes enregistrent la configuration spécifique à un
utilisateur dans son répertoire personnel et modifient leur comportement en
fonction de son contenu. Le répertoire personnel est identifié par la
variable d'environnement « $HOME
».
Tableau 1.19. Afficher les valeurs de la variable « $HOME
»
valeur de « $HOME »
|
situation d'exécution d'un programme |
---|---|
/
|
programme lancé par le processus init (démon) |
/root
|
programme lancé depuis l’interpréteur de commandes normal de l’administrateur (« root ») |
/home/<utilisateur_normal>
|
programme lancé depuis l’interpréteur de commandes d'un utilisateur normal |
/home/<utilisateur_normal>
|
programme lancé depuis le menu du bureau de l’interface graphique de l’utilisateur |
/home/<utilisateur_normal>
|
programmes lancé en tant qu'administrateur avec « sudo
programme »
|
/root
|
programme lancé en tant qu'administrateur avec « sudo -H
programme »
|
L’interpréteur de commandes étend « ~/
» pour
former le répertoire personnel réel de l’utilisateur, par exemple,
« $HOME/
». L’interpréteur de commande étend
« ~foo/
» sous la forme du répertoire personnel
de foo
, par exemple,
« /home/foo/
».
Certaines commandes prennent des paramètres. Les paramètres qui commencent
par « -
» ou
« --
» sont appelés options et contrôlent le
comportement de la commande.
$ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100
Ici, le paramètre de la ligne de commandes
« -R
» modifie le comportement de la commande
date
(1) afin qu'elle donne en sortie une chaîne de date
conforme à la RFC2822.
Souvent, vous voudrez utiliser une commande sur un groupe de fichiers sans avoir à tous les entrer. Ceci est facilité par l’utilisation des motifs génériques d'expansion du nom de fichier de l’interpréteur de commandes (glob), (on les appelle parfois jokers).
Tableau 1.20. Motifs génériques d'expansion du nom de fichier de l’interpréteur de commandes
motif générique de l’interpréteur | description de la règle de correspondance |
---|---|
*
|
nom de fichier (segment) ne commençant pas par
« . »
|
.*
|
nom de fichier (segment) commençant par « . »
|
?
|
exactement un caractère |
[…]
|
un caractère exactement, chaque caractère étant l’un de ceux entre crochets |
[a-z]
|
exactement un caractère, chaque caractère étant compris entre
« a » et « z »
|
[^…]
|
exactement un caractère devant être différent de tous les caractères entre
crochets (sauf « ^ »)
|
Essayez, par exemple, ce qui suit :
$ mkdir poubelle; cd poubelle; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf poubelle
Voir glob
(7).
Contrairement à l’expansion normale du nom de fichier par l’interpréteur de
commandes, le motif « *
» de l’interpréteur
testé par find
(1) avec
« -name
» test etc., correspond au
« .
» du nom de fichier. (Nouvelle
fonctionnalité POSIX).
On peut modifier le comportement d'expansion de fichiers selon des motifs
génériques de BASH (« glob ») avec ses options « shopt »
incluses telles que « dotglob
»,
« noglob
»,
« nocaseglob
»,
« nullglob
»,
« nocaseglob
», « extglob
», etc. Voir bash
(1).
Toutes les commandes retournent comme valeur de retour leur état de fin
d'exécution (variable : « $?
»).
Tableau 1.21. Codes de retour de la commande
état de sortie de la commande | valeur numérique de retour | valeur logique de retour |
---|---|---|
succès | zéro, 0 | VRAI |
erreur | non-nulle, -1 | FAUX |
Essayez, par exemple, ce qui suit :
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
Vous remarquerez que, dans le contexte logique de l’interpréteur de commandes, un succès est traité comme la valeur logique VRAIE qui possède la valeur 0 (zéro). C'est parfois un peu contre-intuitif et il fallait le rappeler ici.
Essayez de retenir les idiomes suivants de l’interpréteur de commandes entrés sur une seule ligne en tant qu'extrait d'une commande de l’interpréteur.
Tableau 1.22. Idiomes des commandes de l’interpréteur
idiome de commande | description |
---|---|
commande &
|
exécuter la commande en arrière-plan dans le sous-shell
|
commande1 | commande2
|
la sortie standard de commande1 est passée
(« piped ») à l’entrée standard de
commande2 . Les deux commandes peuvent tourner simultanément
|
commande1 2>&1 | commande2
|
La sortie standard et la sortie d'erreur standard de
commande1 sont toutes les deux passées à l’entrée
standard de commande2 . Les deux commandes peuvent tourner
simultanément
|
commande1 ; commande2
|
exécuter commande1 et commande2
séquentiellement
|
commande1 && commande2
|
exécuter commande1 , en cas de succès,
exécutercommande2 séquentiellement (retourne un succès si à la fois
commande1 et
commande2 ont été réussies)
|
commande1 || commande2
|
exécuter commande1 , en cas d'échec, exécuter
commande2 séquentiellement (retourne un succès si
commande1 ou
commande2 a été réussie)
|
commande > toto
|
rediriger la sortir standard de commande vers le fichier
toto (l’écraser)
|
commande 2> toto
|
rediriger la sortie d'erreur standard de la commande vers
le fichier toto (l’écraser)
|
commande >> toto
|
rediriger la sortie standard de la commande vers le
fichier toto (ajouter à la fin du fichier)
|
commande 2>> toto
|
rediriger la sortie d'erreur standard de la commande vers
le fichier toto (ajouter à la fin du fichier)
|
commande > toto 2>&1
|
rediriger à la fois la sortie standard et l’erreur standard de la
commande vers le fichier
« toto »
|
commande < toto
|
rediriger l’entrée standard de la commande vers le
fichier toto
|
commande << délimiteur
|
rediriger l’entrée standard de la commande vers les
lignes suivantes jusqu'à ce que le
« délimiteur » soit rencontré (ce document)
|
command <<- délimiteur
|
rediriger l’entrée standard de commande vers les lignes
qui suivent jusqu'à ce que le « délimiteur »
soit rencontré, les caractères de tabulation de tête sont supprimés des
lignes d'entrée)
|
Le système Debian est un système multi-tâches. Les travaux s'exécutant en
arrière-plan permettent aux utilisateur de faire tourner plusieurs
programmes depuis un seul interpréteur de commandes. La gestion des
processus en arrière-plan fait appel aux commandes internes de
l’interpréteur : jobs
, fg
,
bg
et kill
. Veuillez lire les sections
de bash(1) se trouvant sous « SIGNAUX » et « CONTRÔLE DES
TÂCHES » ainsi que builtins
(1).
Essayez, par exemple, ce qui suit :
$ </etc/motd visualisateur
$ visualisateur </etc/motd
$ visualisateur /etc/motd
$ cat /etc/motd | visualisateur
Bien que ces 4 exemples de redirections de shell affichent la même chose, le
dernier exemple utilise la commande supplémentaire cat
et
gaspille des ressources sans raison.
Le shell vous permet d'ouvrir des fichiers en utilisant la commande interne
exec
avec un descripteur de fichier arbitraire.
$ echo Hello >toto $ exec 3<toto 4>titi # ouvrir les fichiers $ cat <&3 >&4 # rediriger stdin vers 3, stdout vers 4 $ exec 3<&- 4>&- # fermer les fichiers $ cat titi Hello
Ici, « n<&-
» et
« n>&-
» indiquent
de fermer le descripteur de fichier
« n
».
Les descripteurs de fichiers 0-2 sont prédéfinis.
Tableau 1.23. Descripteurs de fichier prédéfinis
périphérique | description | descripteur de fichier |
---|---|---|
stdin
|
entrée standard | 0 |
stdout
|
sortie standard | 1 |
stderr
|
erreur standard | 2 |
Vous pouvez définir des alias pour les commandes fréquemment utilisées.
Essayez, par exemple, ce qui suit :
$ alias la='ls -la'
Maintenant, « la
» fonctionnera comme un
raccourci pour « ls -la
» qui donne la liste de
tous les fichier dans le format de liste long.
Vous pouvez afficher la liste de tous les alias existants par la commande
alias
(voir bash
(1) sous
« COMMANDES INTERNES DU SHELL »).
$ alias ... alias la='ls -la'
Vous pouvez identifier le chemin exact ou identifier la commande par
type
(voir bash
(1) sous
« COMMANDES INTERNES DU SHELL »).
Essayez, par exemple, ce qui suit :
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file
Ici, ls
a été récemment recherché alors que
« file
» ne l’a pas été, donc
« ls
» est « hachée », c'est-à-dire
que l’interpréteur de commandes possède un enregistrement interne permettant
un accès rapide à l’emplacement de la commande
« ls
».
Dans un environnement de travail à la Unix, le traitement du texte est effectué en passant le texte par des tubes au travers d'une chaîne d'outils standard de traitement du texte. C'est une autre innovation cruciale d’Unix.
Il existe quelques outils standard de traitement du texte qui sont très souvent utilisés sur les systèmes « Unix-like ».
Aucune expression rationnelle n'est utilisée :
cat
(1) concatène des fichiers et en affiche le contenu
complet ;
tac
(1) concatène des fichiers et les affiche en ordre
inverse ;
cut
(1) sélectionne des parties de lignes et les affiche
;
head
(1) affiche le début d'un fichier ;
tail
(1) affiche la fin d'un fichier ;
sort
(1) trie des lignes de texte ;
uniq
(1) supprime les lignes dupliquées d'un fichier trié
;
tr
(1) traduit ou supprime des caractères ;
diff
(1) compare des fichiers ligne par ligne.
Une expression rationnelle de base (« Basic regular expression - BRE ») est utilisée :
grep
(1) analyse la correspondance d'un texte avec des
motifs ;
ed
(1) est un éditeur par ligne primitif ;
sed
(1) est un éditeur de flux ;
vim
(1) est un éditeur en mode écran ;
emacs
(1) est un éditeur en mode écran. (un peu étendu
BRE).
Une expression rationnelle étendue (« Extended regular expression - ERE ») est utilisée :
egrep
(1) fait correspondre du texte avec des
motifs ;
awk
(1) effectue un traitement simple du texte ;
tcl
(3tcl) peut effectuer tous les traitements possibles
du texte : re_syntax
(3). Souvent utilisé avec
tk
(3tk) ;
perl
(1) peut effectuer tous les traitements imaginables
sur du texte.perlre
(1) ;
pcregrep
(1) du paquet pcregrep
fait la
correspondance de texte avec des motifs d'expressions rationnelles
compatibles avec Perl (PCRE) (« Perl Compatible Regular
Expressions ») ;
python
(1) avec le module re
peut faire
tous les traitements imaginables sur du texte. Voir
« /usr/share/doc/python/html/index.html
».
Si vous n'êtes pas certain de ce que font exactement ces commandes veuillez
utiliser la commande « man
» pour vous en faire
une idée par vous-même.
L’ordre de tri et la plage d'une expression dépendent des paramètres
linguistiques. Si vous désirez obtenir le comportement traditionnel d'une
commande, utilisez alors C plutôt que
UTF-8 en faisant précéder la commande de
« LANG=C
» (voir Section 1.5.2, « Variable « $LANG
» » and Section 8.3, « Les paramètres linguistiques (« locale ») »).
Les expressions rationnelles de Perl
(perlre
(1)), Expressions rationnelles compatible
avec Perl (PCRE) et les expressions rationnelles de Python proposées par le module re
ont de nombreuses extensions courantes par rapport aux expressions
rationnelles étendues ERE.
Les expressions rationnelles sont utilisées avec de nombreux outils de traitement du texte. Elles sont analogues aux motifs génériques « globs » du shell mais elles sont plus compliquées et plus puissantes.
L’expression rationnelle décrit le motif de correspondance, elle est constituée de caractères de texte et de méta-caractères.
Un méta-caractères est simplement un caractère ayant une signification particulière. Il en existe deux styles principaux, BRE et ERE suivant les outils de texte décrits ci-dessus.
Tableau 1.24. Méta-caractères pour BRE et ERE
BRE | ERE | description de l’expression rationnelle |
---|---|---|
\ . [ ] ^ $ *
|
\ . [ ] ^ $ *
|
méta-caractères courants |
\+ \? \( \) \{ \} \|
|
meta-caractères uniquement BRE,
déspécifiés par « \ »
|
|
+ ? ( ) { } |
|
meta-caractères uniquement ERE, non
déspécifiés par « \ »
|
|
c
|
c
|
correspond au non méta-caractère
« c »
|
\c
|
\c
|
correspond au caractère littéral « c » même si
« c » est un méta-caractère en lui-même
|
.
|
.
|
correspond à n'importe quel caractère y-compris le saut de ligne |
^
|
^
|
position au début d'une chaîne de caractères |
$
|
$
|
position à la fin d'une chaîne de caractères |
\<
|
\<
|
position au début d'un mot |
\>
|
\>
|
position à la fin d'un mot |
\[abc…\]
|
[abc…]
|
correspond à n'importe quel caractère dans
« abc… »
|
\[^abc…\]
|
[^abc…]
|
correspond à n'importe quel caractère sauf ceux se trouvant dans
« abc… »
|
r*
|
r*
|
correspond à aucune ou plusieurs instances de l’expression rationnelle
identifiée par « r »
|
r\+
|
r+
|
correspond à une ou plusieurs instances de l’expression rationnelle
identifiée par « r »
|
r\?
|
r?
|
correspond à aucune ou une instance de l’expression rationnelle identifiée
par « r »
|
r1\|r2
|
r1|r2
|
correspond à une instance de l’expression rationnelle identifiée par
« r1 » ou« r2 ».
|
\(r1\|r2\)
|
(r1|r2)
|
correspond à une des expressions rationnelles identifiées par
« r1 » ou « r2 »
et la traite comme une expression rationnelle entre
crochets
|
Une expression rationnelle d'emacs
est BRE de base mais elle a été étendue afin de traiter
« +
» et « ?
»
comme des méta-caractères comme dans les
ERE. Il n'est dont pas nécessaire de les
déspécifier avec « \
» dans les expression
rationnelles d'emacs
.
grep
(1) peut être utilisé pour effectuer de la recherche
de texte en utilisant une expression rationnelle.
Essayez, par exemple, ce qui suit :
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
Pour l’expression de remplacement, certains caractères ont une signification particulière.
Tableau 1.25. Expressions de remplacement
expressions de remplacement | description du texte destiné à remplacer l’expression de replacement |
---|---|
&
|
ce à quoi correspond l’expression rationnelle (utilisez
\& avec emacs )
|
\n
|
ce à quoi la nième expression rationnelle entre crochets correspond (« n » étant un nombre) |
Pour les chaînes de remplacement en Perl « $n
»
est utilisé à la place de « \n
» et
« &
» n'a pas de signification
particulière.
Essayez, par exemple, ce qui suit :
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&=
Vous prêterez ici une attention particulière au style de l’expression rationnelle entre crochets et à la manière dont les chaînes qui correspondent sont utilisées dans le processus de remplacement du texte avec les différents outils.
Ces expressions rationnelles peuvent aussi être utilisées pour les déplacements du curseur et des actions de remplacement de texte dans certains éditeurs.
Un « back slash » (« \
») en fin de
ligne sur la ligne de commandes du shell déspécifie le saut de ligne en un
caractère d'espacement et permet de poursuivre la ligne de commandes de
l’interpréteur sur la ligne suivante.
Pour apprendre ces commandes, veuillez lire les pages de manuel correspondantes.
La commande ed
(1) peut remplacer toutes les instances de
« REGEX_SOURCE
» par
« TEXTE_DESTINATION
dans
« fichier
» :
$ ed fichier <<EOF ,s/REGEX_SOURCE/TEXT_DESTINATION/g w q EOF
La commande sed
(1) peut remplacer toutes les instances de
« REGEX_SOURCE
» par
« TEXTE_DESTINATION
dans
« fichier
» :
$ sed file 's/REGEX_SOURCE/TEXTE_DESTINATION/g' | sponge fichier
La commande sponge
(8) est un outil non standard d’Unix
proposé par le paquet moreutils
. C'est assez utile
lorsque vous désirez écraser le fichier d'origine.
La commande vim
(1) peut remplacer toutes les instances de
« REGEX_SOURCE
» avec
« TEXTE_DESTINATION
» dans
« file
» en utilisant les commandes
« ex
(1) :
$ vim '+%s/REGEX_SOURCE/TEXTE_DESTINATION/gc' '+w' '+q' fichier
L’indicateur « c
» dans l’exemple qui précède
permet une confirmation interactive de chaque substitution.
Plusieurs fichiers ( fichier1
»,
« fichier2
» et
« fichier3
») peuvent être traités de manière
similaire par une expression rationnelle avec vim
(1) ou
perl
(1) :
$ vim '+argdo %s/REGEX_SOURCE/TEXT_DESTINATION/ge|update' '+q' fichier1 fichier2 fichier3
L’indicateur « e
» de l’exemple précédent évite
qu'une erreur « No match » (pas de correspondance) ne casse un
mapping :
$ perl -i -p -e 's/REGEX_SOURCE/TEXTE_DESTINATION/g;' fichier1 fichier2 fichier3
Dans l’exemple en perl(1) ci-dessus, « -i
»
permet l’édition en situation, « -p
» demande
une boucle explicite sur les fichiers.
L’utilisation du paramètre « -i.bak
» à la
place de « -i
» conserve le fichier d'origine
en ajoutant « .bak
» à son nom de fichier. Ceci
permet la récupération plus facile d'erreurs lors de substitutions
complexes.
ed
(1) et vim
(1) sont BRE ; perl
(1) est ERE.
Considérons un fichier texte « DPL
» dans
lequel les noms de certains des responsables du projet Debian d'avant 2004
et leur date d'investiture sont présentées dans un format séparés par des
espaces :
Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003
Voir « Bref historique de Debian » pour la dernière Debian leadership history.
Awk est fréquemment utilisé pour extraire des données de ce type de fichiers.
Essayez, par exemple, ce qui suit :
$ awk '{ print $3 }' <DPL # mois d'investiture August April January January April April March $ awk '($1=="Ian") { print }' <DPL # DPL appelé Ian Ian Murdock August 1993 Ian Jackson January 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # quand Perens a été investi April 1996
Des interpréteurs de commandes comme Bash peuvent aussi être utilisés pour analyser ce genre de fichiers.
Essayez, par exemple, ce qui suit :
$ while read first last month year; do echo $month done <DPL ... même sortie que le premier exemple Awk
Ici, la commande interne read
utilise les caractères de
« $IFS
» (séparateurs de champs internes) pour
scinder les lignes en mots.
Si vous changez « $IFS
» en
« :
», vous pouvez analyser facilement le
fichier « /etc/passwd
» :
$ oldIFS="$IFS" # préserver l’ancienne valeur $ IFS=":" $ while read user password uid gid rest_of_line; do if [ "$user" = "osamu" ]; then echo "ID de $user est $uid" fi done < /etc/passwd ID de osamu est 1001 $ IFS="$oldIFS" # remet l’ancienne valeur
(Si Awk est utilisé pour faire la même chose, utilisez
« FS=':'
» pour définir le séparateur de
champs).
IFS est aussi utilisé par l’interpréteur de commandes pour scinder le résultat de l’expansion des paramètres, de la substitution de commande et de l’expansion arithmétique. Ceci ne se produit pas pour les mots entre double ou simple apostrophes. La valeur de IFS par défaut est <space>, <tab> et <newline> combinés.
Faites attention en utilisant cette astuce IFS dans un shell. Des choses étranges peuvent survenir lorsque le shell interprète certaines parties du script comme son entrée.
$ IFS=":," # utiliser « : » et « , » pour IFS $ echo IFS=$IFS, IFS="$IFS" # echo est une commande interne de Bash IFS= , IFS=:, $ date -R # simplement une sortie de commande Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sous-shell --> entrée du shell principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # réinitialiser IFS à sa valeur par défaut $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Les scripts suivants font des choses sympa avec les tubes.
Tableau 1.26. Liste de parties de scripts pour enchaîner (piping) les commandes
fragment de script (à entrer sur une seule ligne) | effet de la commande |
---|---|
find /usr -print
|
rechercher tous les fichiers se trouvant sous
« /usr »
|
seq 1 100
|
imprimer 1 à 100 |
| xargs -n 1 <commande>
|
lancer la commande de manière répétitive en utilisant chaque élément provenant du tube (pipe) comme paramètre |
| xargs -n 1 echo
|
scinder les éléments séparés par des espaces provenant du tube (pipe) en différentes lignes |
| xargs echo
|
concaténer les lignes provenant du tube en une seule ligne |
| grep -e <motif_expression_rationnelle>
|
extraire du tube les lignes contenant <motif_expression_rationnelle> |
| grep -v -e <motif_expression_rationnelle>
|
extraire du tube les lignes ne contenant pas <motif_expression_rationnelle> |
| cut -d: -f3 -
|
extraire du tube le troisième champ, séparé par
« : » (fichier passwd, etc.)
|
| awk '{ print $3 }'
|
extraire du tube le troisième champ séparé par des caractères d'espacement |
| awk -F'\t' '{ print $3 }'
|
extraire du tube le troisième champ séparé par une tabulation |
| col -bx
|
supprimer le retour arrière (backspace) et convertir les tabulations en espaces |
| expand -
|
convertir les tabulations en espaces |
| sort| uniq
|
trier et supprimer les doublons |
| tr 'A-Z' 'a-z'
|
convertir de majuscules en minuscules |
| tr -d '\n'
|
concaténer les lignes en une seule ligne |
| tr -d '\r'
|
supprimer le retour à la ligne (CR) |
| sed 's/^/# /'
|
ajouter « # » au début de chaque ligne
|
| sed 's/\.ext//g'
|
supprimer « .ext »
|
| sed -n -e 2p
|
afficher la seconde ligne |
| head -n 2 -
|
afficher les deux premières lignes |
| tail -n 2 -
|
afficher les deux dernières lignes |
Un script de l’interpréteur d'une seule ligne peut reboucler sur de nombreux
fichier en utilisant find
(1) et
xargs
(1) afin d'effectuer des tâches assez
complexes. Voir Section 10.1.5, « Idiomes pour la sélection de fichiers » et
Section 9.5.9, « Répéter une commande en bouclant entre des fichiers ».
Lorsque l’utilisation de l’interpréteur de commandes en mode interactif devient trop compliquée, pensez à écrire un script en shell (voir Section 12.1, « Les scripts de l’interpréteur de commande »).
Ce chapitre a été écrit en supposant que le nom de code de la dernière
version stable est squeeze
.
Debian est une association de volontaires qui construit des distributions cohérentes de paquets binaires de logiciels libres pré-compilés et les distribue depuis son archive.
L’archive Debian est proposée depuis de nombreux sites-miroirs distants, on peut y accéder par les méthodes HTTP et FTP. Elle est aussi disponible sous forme de CD-ROM/DVD.
Le système de gestion des paquets Debian, lorsqu'il est proprement utilisé, permet à l’utilisateur d'installer sur le système des ensembles cohérents de paquets binaires à partir de l’archive. Il y a actuellement 30552 paquets disponibles pour l’architecture amd64.
Le système de gestion des paquets de Debian possède un riche historique et de nombreux choix de programmes d'interface pour l’utilisateur final et de méthodes de fond pour l’accès aux archives. Actuellement, nous recommandons ce qui suit :
apt-get
(8) pour toutes les opérations en ligne de
commandes, y-compris, l’installation et la suppression de paquet et
dist-upgrades.
aptitude
(8) pour une interface interactive en mode texte
permettant de gérer les paquets installés et de faire des recherches parmi
les paquets disponibles.
update-manager
(8) pour maintenir à jour votre système si
vous utilisez l’environnement de bureau GNOME par défaut.
Tableau 2.1. Liste des outils de gestion des paquets de Debian
paquet | popcon | taille | description |
---|---|---|---|
apt
*
|
V:90, I:99 | 5600 |
Advanced Packaging Tool (APT) (« outil avancé de paquetage »),
frontal de dpkg permettant les méthodes d'accès à
l’archive « http »,
« ftp » et
« file » (les commandes
apt-get et apt-cache sont comprises)
|
aptitude *
|
V:25, I:98 | 11916 |
gestionnaire de paquets interactif en mode terminal avec
aptitude (8)
|
update-manager-gnome *
|
V:7, I:10 | 1221 |
application GNOME gérant les mises à jour du logiciel avec
update-manager (8)
|
tasksel *
|
V:5, I:93 | 904 | outil de sélection de tâches pour l’installation sur un système Debian (frontal d'APT) |
unattended-upgrades *
|
V:4, I:31 | 280 | paquet d'amélioration d'APT permettant une installation automatique des mises à niveau de sécurité |
dselect *
|
V:2, I:30 | 2404 | gestionnaire de paquets en mode terminal (standard précédent, frontal d'APT et d'autres anciennes méthodes d'accès) |
dpkg
*
|
V:92, I:99 | 6804 | système de gestion des paquets pour Debian |
synaptic *
|
V:13, I:40 | 6464 | gestionnaire de paquets graphique (interface graphique GNOME pour APT) |
apt-utils *
|
V:51, I:99 | 516 |
Programmes utilitaires d'APT :
apt-extracttemplates (1),
apt-ftparchive (1) et apt-sortpkgs (1)
|
apt-listchanges *
|
V:11, I:17 | 280 | outil de notification des modifications d'un paquet |
apt-listbugs *
|
V:1.4, I:2 | 508 | affiche la liste des bogues critiques avant chaque installation par APT |
apt-file *
|
V:2, I:9 | 188 | utilitaire de recherche de paquet d'APT — interface en ligne de commandes |
apt-rdepends *
|
V:0.13, I:0.9 | 92 | afficher de manière récursive la liste des dépendances du paquet |
Voici quelques points-clés de la configuration des paquets sur un système Debian :
debconf
(7) qui permet de
faciliter le processus initial d'installation du paquet ;
Ne pas installer de paquets provenant d'un mélange aléatoire de suites. Ceci va probablement casser la cohérence des paquets et demande une connaissance en profondeur de la gestion du système, comme l’ABI, d'un compilateur, la version d'une bibliothèque, les fonctionnalités d'un interpréteur, etc.
L’administrateur débutant d'un système Debian
devrait conserver la version stable
de Debian en appliquant
les mises à jour de sécurité. Je veux dire qu'il vaut mieux éviter, par
précaution, certaines des actions valables suivantes, jusqu'à ce que vous
ayez très bien compris le système Debian. Voici quelques rappels :
testing
, ni unstable
dans
« /etc/apt/sources.list
» ;
/etc/apt/sources.list
» ;
/etc/apt/preferences
» ;
dpkg -i
<paquet_quelconque>
» ;
dpkg
--force-all -i <paquet_quelconque>
» ;
/var/lib/dpkg/
» ;
ne pas écraser les fichiers systèmes en installant des logiciels directement depuis les sources.
/usr/local
» ou
« /opt
».
Les effets non compatibles avec le système de gestion des paquets Debian engendrés par les actions ci-dessus peuvent rendre votre système inutilisable.
L’administrateur système Debian sérieux, qui s'occupe de serveurs dont la mission est critique, devra prendre des précautions supplémentaires :
ne pas installer de paquets, y-compris les mises à jour de sécurité provenant de Debian sans les avoir testés soigneusement, avec votre configuration particulière, dans des conditions sûres.
En dépit de mes avertissements précédents, je sais que de nombreux lecteurs
de ce document voudront utiliser versions testing
ou
unstable
de Debian comme système principal pour des
environnements de bureau
auto-administrés. Ceci parce qu'elles fonctionnent très bien,
sont fréquemment mises à jour et offrent les fonctionnalités les plus
récentes.
Pour votre serveur de production, la
suite stable
avec les mises à jour de sécurité est
recommandée. On peut dire la même chose des PC de bureau sur lesquels vous
ne pouvez dépenser que des efforts limités d'administration, par exemple le
PC de votre belle-mère.
Cela ne demande rien d'autre que de définir la chaîne de la distribution
dans « /etc/apt/sources.list
» avec le nom de
suite « testing
» ou
« unstable
», ou le nom de code
« wheezy
» ou
« sid
». Ceci vous permettra de
vivre la vie des mises à jour éternelles.
Il y a beaucoup de plaisir à prendre en
utilisant testing
ou unstable
mais
aussi quelques risques. Même si la version unstable
du
système Debian semble très stable la plupart du temps, il y a eu certains
problèmes de paquets sur les versions testing
et
unstable
et certains d'entre-eux n'ont pas été aisé à
résoudre. Ce peut être assez douloureux
pour vous. Quelquefois, vous pouvez avoir un paquet cassé ou une
fonctionnalité manquante pendant quelques semaines.
Voici quelques idées pour vous assurer une récupération rapide et facile lors de bogues dans les paquets Debian :
stable
du
système Debian sur une autre partition ;
apt-listbugs
afin de vérifier les
informations du Système Debian de
suivi des bogues (BTS) avant de faire une mise à jour ;
(si vous ne savez pas faire l’une quelconque de ces actions de précaution,
vous n'êtes probablement pas prêt pour les versions
testing
et unstable
).
La Lumière provenant de ce qui suit sauvera une personne de l’éternelle lutte karmique de l’enfer des mises à jour et lui permettra d'atteindre le nirvana de Debian.
Jetez un œil sur l’archive Debian avec le point de vue d'un utilisateur du système.
La charte officielle de l’archive Debian est définie dans la Charte Debian, chapitre 2 - l’archive Debian.
Pour un accès HTTP typique, l’archive est indiquée de la manière suivante
dans le fichier « /etc/apt/sources.list
», par
exemple pour le système stable
=
squeeze
actuel :
deb http://ftp.XX.debian.org/debian/ squeeze main contrib non-free deb-src http://ftp.XX.debian.org/debian/ squeeze main contrib non-free deb http://security.debian.org/ squeeze/updates main contrib deb-src http://security.debian.org/ squeeze/updates main contrib
Veuillez noter que « ftp.XX.debian.org
» doit
être remplacé par l’URL du site miroir approprié à votre lieu de résidence,
« ftp.us.debian.org
» pour les États-Unis (et
« ftp.fr.debian.org
» pour la France). On peut
la trouver dans la liste
mondiale des sites miroirs Debian. L’état de ces serveurs peut être
vérifié sur le site de vérification
des miroirs Debian.
Ici, j'ai tendance à utiliser le nom de code
« squeeze
» plutôt que le nom de la
suite « stable
» afin d'éviter des surprises
lorsque la version stable
suivante sera diffusée.
La signification de « /etc/apt/sources.list
»
est décrite dans sources.list
(5), ses points-clés sont
les suivants :
deb
» définit les paquets
binaires ;
deb-src
» définit les paquets
sources ;
Les lignes deb-src
peuvent être omises sans risque (ou
mises en commentaire en mettant un « # » au début de la ligne) si
ce n'est qu'aptitude
ne pourra pas avoir accès aux
méta-données liées aux sources. Ceci accélérera les mises à jour des
méta-données de l’archive. L’URL peut-être
« http://
»,
« ftp://
»,
« file://
», ...
Si « sid
» est utilisé dans l’exemple ci-dessus
plutôt que « squeeze
», il n’est pas
obligatoire d'avoir la ligne « deb:http://security.debian.org/
…
» pour les mises à jour de sécurité dans le fichier
« /etc/apt/sources.list
» parce qu’il n'y a pas
de mises à jour de sécurité pour « sid
»
(unstable
).
Voici la liste des URL des sites d'archives de Debian et les noms de suite ou les noms de code utilisés dans le fichier de configuration :
Tableau 2.2. Liste des sites d'archive de Debian
URL de l’archive | nom de la suite (nom de code) | but |
---|---|---|
http://ftp.XX.debian.org/debian/ |
stable (squeeze )
|
édition stable (squeeze) |
http://ftp.XX.debian.org/debian/ |
testing (wheezy )
|
édition testing (wheezy) |
http://ftp.XX.debian.org/debian/ |
unstable (sid )
|
édition unstable (sid) |
http://ftp.XX.debian.org/debian/ |
experimental
|
pré-version expérimental (optionnelle, uniquement pour les développeurs) |
http://ftp.XX.debian.org/debian/ |
stable-proposed-updates
|
mises à jour pour la prochaine version de stable (optionnel) |
http://security.debian.org/ |
stable/updates
|
mises à jour de sécurité pour la version stable (important) |
http://security.debian.org/ |
testing/updates
|
mises à jour de sécurité pour la version testing (important) |
http://ftp.XX.debian.org/debian/ |
squeeze-updates
|
mises à jour compatibles pour le filtrage de spam, les clients de messagerie instantanée, etc. pour squeeze |
http://backports.debian.org/debian-backports/ |
squeeze-backports
|
paquets plus récents rétroportés pour squeeze (optionnel) |
Seule la version stable
pure avec les mises à
jour de sécurité présente la meilleure stabilité. Faire tourner une version
principalement stable
mélangée à quelques paquets venant des versions testing
ou unstable
est plus risqué que
d'utiliser une version unstable
pure parce que des
versions de bibliothèques peuvent ne pas correspondre, etc. Si vous avez
réellement besoin de la dernière version de certains programme sous la
version stable
,
utilisez alors les paquets venant du squeeze-updates et des
services backports.debian.org
(voir Section 2.7.4, « Updates et Backports »). Ces services doivent être
utilisés avec des précautions supplémentaires.
De base, vous ne devriez avoir qu'une seule des suites
stable
, testing
ou
unstable
sur la ligne
« deb
». Si vous avez une combinaison des
suites stable
, testing
et
unstable
sur la ligne
« deb
», les programmes APT vont être ralentis
bien que seule la dernière archive soit utilisée. Des mentions multiples ont
un intérêt lorsqu'on utilise le fichier
« /etc/apt/preferences
» avec des objectifs
clairs (voir Section 2.7.3, « Ajuster la version candidate »).
Pour les systèmes Debian ayant les versions stable
et
testing
, c'est une bonne idée d'inclure les lignes ayant
« http://security.debian.org/
» dans le fichier
« /etc/apt/sources.list
» afin d'activer les
mises à jour de sécurité comme dans l’exemple ci-dessus.
Les bogues de sécurité de l’archive stable
sont corrigés
par l’équipe de sécurité de Debian. Cette activité a été assez rigoureuse et
fiable. Ceux de l’archive testing
peuvent être corrigés
par l’équipe de sécurité de Debian. Pour diverses raisons,
cette activité n’est pas aussi rigoureuse que pour stable
et vous pouvez avoir à attendre la migration de paquets corrigés de
unstable
. Ceux de l’archive unstable
sont corrigés par les responsables individuels. Les paquets de
unstable
maintenu de manière active sont habituellement
maintenu dans un assez bon état par mise à niveau avec les dernières
corrections de sécurité des développeurs amonts. Voir FAQ de sécurité de Debian concernant la
manière dont Debian gère les bogues de sécurité.
Tableau 2.3. Liste des zones d'archive de Debian
zone | nombre de paquets | critères de composant du paquet |
---|---|---|
main
|
29887 |
conforme à DSFG sans dépendance vers non-free
|
contrib
|
202 |
conforme à DSFG mais avec des dépendances vers non-free
|
non-free
|
463 | non conforme à DSFG |
Ici, le nombre de paquets est celui de l’architecture amd64. Strictement
parlant, seule la zone main
de l’archive peut être
considérée comme le système Debian.
La meilleure manière d'étudier l’organisation de l’archive Debian est de
pointer votre navigateur vers chacune des URL des archives en y ajoutant
dists
ou pool
.
On se réfère à la distribution de deux manières, la version ou le nom de code. Le mot « distribution » est aussi utilisé comme synonyme de version dans de nombreuses documentations. La relation entre la version et le nom de code peut être résumée comme suit :
Tableau 2.4. Relation entre version et nom de code
calendrier |
version = stable
|
version = testing
|
version = unstable
|
---|---|---|---|
après la diffusion de squeeze
|
nom de code = squeeze
|
nom de code = wheezy
|
nom de code = sid
|
après la diffusion de wheezy
|
nom de code = wheezy
|
nom de code = wheezy+1
|
nom de code = sid
|
L’histoire des noms de code a été décrite dans la FAQ Debian : 6.3.1 Quels noms de code ont déjà été utilisés ?
Dans la terminologie la plus stricte de l’archive Debian, le mot « section » est spécifiquement utilisé pour la catégorisation des paquets par zone d'application. (Cependant l’expression « section principale » peut parfois être utilisée pour décrire la zone de l’archive Debian qui fournit la zone « main »).
Chaque fois qu'un nouveau chargement est fait par un développeur Debian (DD)
vers l’archive unstable
(par l’intermédiaire du
traitement d'incoming), le DD doit s'assurer
que les paquets chargés sont compatibles avec le dernier ensemble de paquets
de l’archive unstable
.
Si le DD casse intentionnellement cette compatibilité en raison de la mise à jour d'une bibliothèque importante, etc., il y a habituellement une annonce sur la liste de diffusion debian-devel, etc.
Avant qu'un ensemble de paquets ne soit déplacé par le script de maintenance
de l’archive Debian depuis l’archive unstable
vers
l’archive testing
, le script de maintenance de l’archive
ne se contente pas vérifier sa maturité (environ 10 jours) et l’état des
rapports de bogues pour ces paquets mais essaie aussi de s'assurer qu'ils
sont compatibles avec le dernier ensemble des paquets de l’archive
testing
. Ce processus rend l’archive testing
très actuelle et utilisable.
Par le processus de gel progressif de l’archive dirigé par l’équipe de
diffusion (« release team »), l’archive testing
est mûrie afin de la rendre entièrement cohérente et sans bogue avec
quelques interventions manuelles. Ensuite, la nouvelle version
stable
est créée en assignant le nom de code de
l’ancienne archive testing
à la nouvelle archive
stable
et en créant un nouveau nom de code pour la
nouvelle archive testing
. Le contenu initial de la
nouvelle archive testing
est exactement le même que celui
de l’archive stable
qui vient d'être diffusée.
Les archives unstable
et testing
peuvent toutes les deux souffrir temporairement de problèmes en raison de
divers facteurs :
unstable
) ;
unstable
) ;
testing
et unstable
) ;
testing
), etc.
Si vous décidez donc d'utiliser ces archives, vous devriez être capable de corriger ou de contourner ces types de problèmes.
Pendant les quelques mois qui suivent la diffusion d'une nouvelle version
stable
, la plupart des utilisateur de machines de bureau
devraient utiliser l’archive stable
avec ses mises à jour
de sécurité même s'ils utilisent habituellement les archives
unstable
ou testing
. Pendant cette
période de transition, les archives unstable
et
testing
ne sont pas bonnes pour la plupart des
gens. Votre système sera difficile à conserver dans un bon état de
fonctionnement avec l’archive unstable
car elle souffre
de pics d'importantes mises à jour de paquets fondamentaux. L’archive
testing
n'est pas utile non plus car elle a sensiblement
le même contenu que l’archive stable
sans la prise en
compte de la sécurité (Debian testing-security-announce
2008-12). Après environ un mois, l’archive
unstable
peut être utilisée avec précautions.
Lors du suivi de l’archive testing
, un problème causé par
la suppression d'un paquet est habituellement contourné en installant le
paquet correspondant de l’archive unstable
qui est chargé
pour la correction du bogue.
Voir la Charte Debian pour la définition des archives.
Le système Debian offre un ensemble cohérent de paquets binaires par l’intermédiaire de son mécanisme de déclaration de dépendances binaires versionnées dans les champs du fichier « control ». En voici une définition un peu simplifiée :
« Depends »
« Pre-Depends »
« Recommends »
« Suggests »
« Enhances »
« Casse »
« Conflicts »
« Replaces »
« Provides »
Remarquez que définir simultanément « Provides », « Conflicts » and « Replaces » pour un paquet virtuel est une configuration saine. Ceci permet de s'assurer que ne puisse être installé à un moment donné installer qu'un seul paquet réel fournissant ce paquet virtuel.
La définition officielle, y-compris les dépendances de sources, se trouve dans la Charte Debian ; Chapitre 7 - Déclaration des dépendances entre paquets.
Voici un résumé du flux simplifié des événements de la gestion d'un paquet par APT.
Mettre à jour (« update »)
(« aptitude update
» ou « apt-get
update
») :
Mettre à niveau (« upgrade »)
(« aptitude safe-upgrade
» et
« aptitude full-upgrade
» ou
« apt-get upgrade
» et « apt-get
dist-upgrade
») :
Installer (« aptitude
install …
» ou « apt-get install
…
») :
Supprimer (« aptitude
remove …
» ou « apt-get remove
…
») :
Purger (« aptitude purge
…
» ou « apt-get purge
…
») :
J'ai ici intentionnellement sauté des détails techniques dans le souci d’avoir un vue d'ensemble.
Vous devriez lire l’excellente documentation officielle. Le premier document
à lire est
« /usr/share/doc/<nom_paquet>/README.Debian
»
qui est spécifique à Debian. Les autres documents dans
« /usr/share/doc/<nom_paquet>/
»
devraient aussi être consultés. Si vous avez configuré l’interpréteur de
commande comme dans Section 1.4.2, « Personnaliser bash », entrez ce qui
suit :
$ cd <nom_paquet> $ pager README.Debian $ mc
Vous aurez besoin d'installer le paquet de documentation correspondant au
paquet dont le nom possède le suffixe « -doc
»
pour des informations détaillées.
Si vous rencontrez des problèmes avec un paquet particulier, faites d'abord une recherche sur le site du système de suivi des bogues Debian (BTS).
Tableau 2.5. Liste de sites web clés pour résoudre les problèmes avec un paquet particulier
site web | commande |
---|---|
Page d'accueil du système de suivi des bogues Debian (BTS) |
sensible-browser « http://bugs.debian.org/ »
|
Signalement de bogue d'un nom de paquet connu |
sensible-browser
« http://bugs.debian.org/<package_name> »
|
Rapport de bogue concernant un numéro de bogue connu |
sensible-browser
« http://bugs.debian.org/<bug_number> »
|
Rechercher sur Google avec des mots de
recherche comprenant « site:debian.org
»,
« site:wiki.debian.org
»,
« site:lists.debian.org
», etc.
Pour déposer un signalement de bogue, veuillez utiliser la commande
reportbug
(1).
Les opérations de base de gestion des paquets avec le système Debian peuvent
être réalisées à l’aide d’un quelconque des outils de gestion des paquets
disponibles avec le système Debian. Nous décrirons ici les outils de base de
gestion des paquets : apt-get
/
apt-cache
et aptitude
.
Pour les opération de gestion des paquets qui concernent l’installation des paquets ou les mises à jour des méta-données des paquets, vous aurez besoin des privilèges de l’administrateur.
Les commandes apt-get
et apt-cache
sont les outils les plus basiques de
gestion des paquets.
apt-get
et apt-cache
n’offre qu’une
interface utilisateur en ligne de commandes.
apt-get
est le mieux adapté pour les mises à jour majeures du système entre les
diffusions, etc.
apt-get
offre un système de résolution des paquets
robuste et stable qui utilise les données
habituelles d’états des paquets.
apt-get
a été mis à jour afin de prendre en charge
l’installation automatique et la suppression automatique des paquets
recommandés.
apt-get
a été mis à jour afin de prendre en charge la
tenue d’un journal de l’activité des paquets.
apt-cache
offre une recherche basée sur des expressions
rationnelles standard sur les noms et les
descriptions des paquets.
apt-get
et apt-cache
peuvent gérer des
versions multiples des paquets en utilisant
/etc/apt/preferences
mais est assez lourd.
La commande aptitude
est l’outil de gestion des paquets
le plus flexible.
aptitude
offre une interface utilisateur interactive en
plein écran en mode texte.
aptitude
offre aussi une interface utilisateur en ligne
de commandes.
aptitude
est le mieux adapté pour la gestion interactive journalière des paquets comme,
par exemple, la vérification des paquets installés et la recherche de
paquets disponibles.
aptitude
offre un solveur avancé de paquets qui utilise aussi des données
d’état supplémentaires des paquets qui ne sont utilisées que par
aptitude
.
aptitude
prend en charge l’installation automatique et la
suppression automatique des paquets recommandés.
aptitude
prend en charge la tenue d’un journal de
l’activité des paquets.
aptitude
offre une recherche avancée basées sur des expression rationnelles pour
la recherche sur toutes les méta-données des paquets.
aptitude
peut gérer des versions multiples des paquets
sans utiliser /etc/apt/preferences
et est assez intuitif.
Bien que la commande aptitude
soit disponible avec de
riches fonctionnalités comme son solveur de paquets avancé, cette complexité
a causé (et peut encore causer) certaines régressions comme le bogue #411123, le bogue
#514930 et le bogue #570377. En cas
de doute, veuillez utiliser les commandes apt-get
et
apt-cache
plutôt que la commande
aptitude
.
Voici les opérations de base de gestion des paquets en ligne de commandes en
utilisant aptitude
(8), apt-get
(8) et
apt-cache
(8) :
Tableau 2.6. Opérations de base de gestion des paquets avec la ligne de commandes en
utilisant aptitude
(8), apt-get
(8) et
apt-cache
(8)
syntaxe d'aptitude
|
syntaxe d'apt-get et apt-cache
|
description |
---|---|---|
aptitude update
|
apt-get update
|
mettre à jour les méta-données de l’archive du paquet |
aptitude install toto
|
apt-get install toto
|
installer la version candidate du paquet
« toto » ainsi que ses dépendances
|
aptitude safe-upgrade
|
apt-get upgrade
|
installer les versions candidates des paquets installés sans supprimer aucun autre paquet |
aptitude full-upgrade
|
apt-get dist-upgrade <paquet>
|
installer les versions candidates des paquets installés en supprimant d'autres paquets si nécessaire |
aptitude remove toto
|
apt-get remove toto
|
supprimer le paquet « toto » en laissant ses
fichiers de configuration
|
N/A |
apt-get autoremove
|
supprimer les paquets installés automatiquement lorsqu'ils ne sont plus nécessaires |
aptitude purge toto
|
apt-get purge toto
|
purger le paquet « toto » ainsi que ses
fichiers de configuration
|
aptitude clean
|
apt-get clean
|
nettoyer complètement le dépôt local des fichiers de paquets récupérés |
aptitude autoclean
|
apt-get autoclean
|
nettoyer le dépôt local des fichiers des paquets périmés |
aptitude show toto
|
apt-cache show <paquet>
|
afficher des informations détaillées concernant le paquet
« toto »
|
aptitude search <expression rationnelle>
|
apt-cache search <expression rationnelle>
|
rechercher les paquets qui correspondent à l’<expression rationnelle> |
aptitude why <expression rationnelle>
|
N/A | expliquer les raisons qui font que les paquets correspondant à l’<expression rationnelle> devront être installés |
aptitude why-not <expression rationnelle>
|
N/A | expliquer les raisons pour lesquels les paquets qui correspondent à l’<expression rationnelle> ne peuvent pas être installés |
Puisqu'apt-get
et aptitude
partagent
l'état de paquet installé automatiquement (voir Section 2.5.5, « État des paquets pour APT ») après lenny
, vous
pouvez mélanger ces outils sans trop de problème (voir le Bogue #594490).
La différence entre
« safe-upgrade
»/« upgrade
»
et
« full-upgrade
»/« dist-upgrade
»
n'apparaît que lorsque les nouvelles versions des paquets reposent sur des
relations de dépendances différentes des anciennes versions de ces
paquets. La commande « aptitude safe-upgrade
»
n'installe pas de nouveau paquet et ne supprime aucun des paquets installés.
« aptitude why <expression-rationnelle>
»
peut afficher plus d'informations par « aptitude -v why
<expression_rationnelle>
». On peut obtenir des
informations similaires par « apt-cache rdepends
<paquet>
».
Lorsque la commande aptitude
est lancée en mode ligne de
commande, et rencontre des problèmes tels que des conflits de paquets, vous
pouvez passez en mode plein écran en pressant ensuite la touche
« e
» à l’invite de commande
Vous pouvez indiquer les options de commande juste après
« aptitude
».
Tableau 2.7. Options importantes de la commande aptitude
(8)
option de la commande | description |
---|---|
-s
|
simuler le résultat de la commande |
-d
|
charger les paquets uniquement sans les installer ni les mettre à jour |
-D
|
afficher une courte explication avant les installations ou les suppressions automatiques |
Voir aptitude
(8) et le « manuel de l’utilisateur
d'aptitude » à
« /usr/share/doc/aptitude/README
» pour en
apprendre davantage.
Le paquet dselect
est encore disponible et était l’outil
de gestion des paquets en mode plein écran préféré des versions précédentes.
Pour une gestion interactive des paquets, lancez aptitude
en mode interactif depuis l’invite de l’interpréteur de commandes à la
console comme suit :
$ sudo aptitude -u Password:
Ceci va mettre à jour la copie locale des informations de l’archive et
afficher la liste des paquets en plein écran avec un menu. On trouvera la
configuration d'aptitude dans
« ~/.aptitude/config
».
Si vous désirez utiliser la configuration de l’administrateur (root) plutôt
que celle de l’utilisateur, utilisez la commande « sudo -H
aptitude …
» en remplacement de « sudo aptitude
…
» dans l’expression précédente.
Aptitude
définit automatiquement les actions en attente lorsqu'il est lancé de manière
interactive. Si elles ne vous conviennent pas, vous pouvez le réinitialiser
depuis le menu : « Action » → « Annuler les opérations
en attente ».
Les raccourcis clavier principaux pour parcourir l’état des paquets et pour définir les « actions prévues » sur ces paquets dans le mode plein écran sont les suivants :
Tableau 2.8. Liste des raccourcis clavier d'aptitude
touche | affectation |
---|---|
F10 ou Ctrl-t
|
menu |
?
|
afficher l’aide pour les raccourcis clavier (liste plus complète) |
F10 → Aide → Manuel de l’utilisateur
|
afficher le Manuel de l’utilisateur |
u
|
mettre à jour les informations de l’archive des paquets |
+
|
marquer le paquet pour mise à niveau ou installation |
-
|
marquer le paquet pour suppression (conserver ses fichiers de configuration) |
_
|
marquer le paquet pour être purgé (supprimer ses fichiers de configuration) |
=
|
mettre le paquet dans l’état « conservé » |
U
|
marquer tous les paquets susceptibles de mise à niveau (fonctionne comme full-upgrade) |
g
|
lancer le téléchargement et l’installation des paquets sélectionnés |
q
|
quitter l’écran actuel et enregistrer les modifications |
x
|
quitter l’écran actuel en abandonnant les modifications |
Entrée
|
afficher les informations concernant un paquet |
C
|
afficher le journal des modifications (« changelog ») d'un paquet |
l
|
modifier les limites pour les paquets affichés |
/
|
rechercher la première correspondance |
\
|
répéter la dernière recherche |
L’indication du nom de fichier sur la ligne de commandes et à l’invite du
menu après avoir pressé « l
» et
« //
» prend l’expression rationnelle
d'aptitude telle que décrite ci-dessous. Une expression rationnelle
d'aptitude peut correspondre explicitement à un nom de paquet en utilisant
une chaîne de caractère commençant par « ~n
»
et suivie du nom de paquet.
Vous devrez presser « U
» pour obtenir la mise
à niveau de tous les paquets installés vers la version candidate de l’interface visuelle. Sinon,
seuls les paquets sélectionnés et certains paquets ayant des dépendances
versionnées sur ces paquets seront mis à niveau vers la version candidate.
Dans le mode interactif en plein écran d'aptitude
(8), les
paquets de la liste des paquets sont affichés comme dans l’exemple suivant.
idA libsmbclient -2220ko 3.0.25a-1 3.0.25a-2
Cette ligne signifie, en partant de la gauche :
La liste complète des indicateurs est donnée en bas de l’écran d’Aide affiché en pressant
« ?
».
La version candidate est choisie en
fonction des préférences locales actuelles (voir
apt_preferences
(5) et Section 2.7.3, « Ajuster la version candidate »).
Plusieurs types de vues de paquets sont disponibles depuis le menu
« Vues
».
Tableau 2.9. Liste des vues d'aptitude
vue | état | description de la vue |
---|---|---|
Vue des paquets
|
Bon | voir Tableau 2.10, « Classement par catégories des vues de paquets standard » (défaut) |
Recommendations d'audit
|
Bon | liste des paquets qui sont recommandés par certains paquets installés mais qui ne sont pas encore installés sur le système |
Liste de paquet « à plat »
|
Bon | liste des paquets sans regroupement par catégories (pour l’utilisation avec des expression rationnelles) |
Navigateur de Debtags
|
Très utilisable | liste des paquets classés selon leur entrée debtags |
Navigateur par catégories
|
Obsolète |
liste des paquets classés selon leur catégorie (utiliser plutôt
Debtags Browser )
|
Merci de nous aider à améliorer le marquage des paquets avec debtags !
La « Vue des paquets
» standard classe les
paquets un peu comme le fait dselect
avec quelques
fonctionnalités supplémentaires.
Tableau 2.10. Classement par catégories des vues de paquets standard
catégorie | description de la vue |
---|---|
Paquets susceptibles de mise à jour
|
liste des paquets organisée sous la forme section →
zone → paquet
|
Nouveaux paquets
|
, , |
Paquets installés
|
, , |
Paquets non installés
|
, , |
Paquets obsolètes ou créés localement
|
, , |
Paquets virtuels
|
liste des paquets ayant la même fonction |
Tâches
|
liste des paquets ayant les différentes fonctions généralement nécessaires à une tâche |
La vue des tâches
peut être utilisée pour choisir les
paquets nécessaires à votre tâche.
Aptitude vous offre différentes options pour rechercher des paquets en utilisant sa formule d'expressions rationnelles.
Ligne de commande du shell :
aptitude search
'<expression_rationnelle_aptitude>'
» afin d'afficher
l’état d'installation, le nom du paquet et une courte description des
paquets correspondants
aptitude show '<nom_paquet>'
» pour
afficher la description détaillée du paquet
Mode interactif plein écran :
l
» pour limiter la vue des paquets à ceux
qui correspondent
/
» pour rechercher un paquet correspondant
\
» pour rechercher en arrière un paquet
correspondant
n
» pour rechercher le suivant
N
» pour rechercher le suivant (en arrière)
La chaîne du <nom_paquet> est traitée comme la correspondance exacte
de chaîne pour le nom de paquet à moins qu'il ne soit lancé explicitement
avec « ~
» pour être la formule d'expression
rationnelle.
La formule des expressions rationnelles d'aptitude est étendue ERE de manière similaire à mutt (voir Section 1.6.2, « Expressions rationnelles ») et la signification des extensions de
règles de correspondance spécifiques à aptitude
est la
suivante :
Tableau 2.11. Liste des formules d'expressions rationnelles d'aptitude
description des règles étendues de correspondance | formules d'expressions rationnelles |
---|---|
correspond au nom du paquet |
~n<expression_rationnelle_nom>
|
correspond à la description |
~d<expression_rationnelle_description>
|
correspond au nom de la tâche |
~t<expression_rationnelle_tâche>
|
correspond à l’étiquette debtag |
~G<expression_rationnelle_debtag>
|
correspond au responsable du paquet |
~m<expression_rationnelle_responsable>
|
correspond à la section du paquet |
~s<expression_rationnelle_section>
|
correspond à la version du paquet |
~V<expression_rationnelle_version>
|
correspond à l’archive |
~A{sarge,etch,sid }
|
correspond à l’origine |
~O{debian,… }
|
correspond à la priorité |
~p{extra,important,optional,required,standard }
|
correspond aux paquets essentiels |
~E
|
correspond aux paquets virtuels |
~v
|
correspond aux nouveaux paquets |
~N
|
correspond aux actions en attente |
~a{install,upgrade,downgrade,remove,purge,hold,keep }
|
correspond aux paquets installés |
~i
|
correspond aux paquets installés ayant la marque A (paquets installés automatiquement) |
~M
|
correspond aux paquets installés n'ayant pas la marque A (paquets sélectionnés par l’administrateur) |
~i!~M
|
correspond aux paquets installés et pouvant être mis à jour |
~U
|
correspond aux paquets supprimés mais non purgés |
~c
|
correspond aux paquets supprimés, purgés ou pouvant être supprimés |
~g
|
correspond aux paquets ayant une relation cassée |
~b
|
correspond aux paquets ayant des dépendances, prédépendances ou conflits cassés |
~B<type>
|
correspond aux paquets depuis lesquels une relation <type> est définie vers le paquet <term> |
~D[<type>:]<term>
|
correspond aux paquets depuis lesquels une relation de <type> casse est définie vers le paquet <term> |
~DB[<type>:]<term>
|
correspond aux paquets vers lesquels le paquet <term> définit une relation <type> |
~R[<type>:]<term>
|
correspond aux paquets vers lesquels le paquet <term> définit un <type> de relation casse |
~RB[<type>:]<term>
|
correspond aux paquets desquels dépendent d'autres paquets installés |
~R~i
|
correspond aux paquets desquels ne dépend aucun autre paquet |
!~R~i
|
correspond aux paquets vers lesquels d'autres paquets installés dépendent ou qu'ils recommandent |
~R~i|~Rrecommends:~i
|
correspond au paquet <term> dont la version est filtrée |
~S filter <term>
|
correspond à tous les paquets (vrai) |
~T
|
ne correspond à aucun paquet (faux) |
~F
|
^
»,
« .*
», « $
»
etc. comme dans egrep
(1), awk
(1) et
perl
(1).
Lorsqu'un <motif d'expression rationnelle>
(« regex_pattern> ») est une chaîne de caractère vide, placez
« ~T
» directement après la commande.
Voici quelques raccourcis.
~P<term>
» ==
« ~Dprovides:<term>
»
~C<term>
» ==
« ~Dconflicts:<term>
»
…~W term
» ==
« (…|term)
»
Les utilisateurs familiers avec mutt
comprendront
rapidement car mutt a été la source d'inspiration pour la syntaxe des
expressions. Voir « SEARCHING, LIMITING, AND EXPRESSIONS » dans le
manuel de l’utilisateur
(« /usr/share/doc/aptitude/README
»).
Avec la version lenny
d'aptitude
(8),
la nouvelle forme longue de la syntaxe
comme « ?broken
» peut être utilisée pour la
correspondance des expressions rationnelles en remplacement de l’ancien
équivalent « ~b
» en forme courte. Le caractère d'espacement
«
» est maintenant considérée comme l’un des
caractères de terminaison d'une expression rationnelle en plus du caractère
tilde « ~
». Voir la syntaxe de la nouvelle
forme longue dans le « Manuel de
l’utilisateur ».
La sélection d'un paquet dans aptitude
récupère non
seulement les paquets définis dans son champ
« Depends:
» mais aussi ceux définis dans le
champ « Recommends:
» si la configuration a été
faite dans ce sens dans le menu « F10
→ Options →
Préférences → Gestion des dépendances ». Ces paquets installés
automatiquement seront supprimés automatiquement s'ils ne sont plus
nécessaires sous aptitude
.
Avant la diffusion de lenny
, apt-get
et d'autre outils standard d'APT n'offraient pas la fonctionnalité de
suppression automatique (« autoremove »).
Vous pouvez vérifier l’activité de l’historique des paquets dans les fichiers journaux.
Tableau 2.12. Fichiers journaux de l’activité des paquets
fichier | contenu |
---|---|
/var/log/dpkg.log
|
Enregistrement des actions au niveau de dpkg pour
l’activité de tous les paquets
|
/var/log/apt/term.log
|
Journal de l’activité générique d'APT |
/var/log/aptitude
|
Journal des actions de la commande aptitude
|
En réalité, il n'est pas aussi facile de comprendre la signification de ces journaux. Voir Section 9.2.10, « Enregistrer les modifications dans des fichiers de configuration » pour une façon de faire plus simple.
Voici quelques exemples d'opérations d'aptitude
(8).
La commande suivante affiche les paquets dont les noms correspondent à une expression rationnelle.
$ aptitude search '~n(pam|nss).*ldap' p libnss-ldap - NSS module for using LDAP as a naming service p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces
Il vous est assez facile de trouver le nom exact d'un paquet.
L’expression rationnelle « ~dipv6
» entrée dans
la vue « Nouvelle liste des paquets » (« New Flat Package
List » depuis l’invite « l
» limite la vue
aux paquets dont la description correspond à cette expression rationnelle et
vous permet de parcourir les informations de manière interactive.
Vous pouvez supprimer tous les fichiers de configuration subsistant des paquets supprimés.
Vérifiez le résultat de la commande suivante :
# aptitude search '~c'
Si vous pensez que les paquets affichés doivent être purgés, exécutez la commande suivante :
# aptitude purge '~c'
Vous pouvez avoir envie de faire la même chose en mode interactif avec un contrôle plus fin.
Indiquez l’expression rationnelle « ~c
» dans
la « Nouvelle liste des paquets » en utilisant l’invite
« l
». Ceci limite la vue des paquets à ceux
qui correspondent à l’expression rationnelle, c'est-à-dire « supprimé
mais non purgé ». On peut visualiser tous les paquets correspondant à
cette expression rationnelle en pressant « [
»
depuis une section de haut niveau.
Pressez ensuite « _
» depuis une fenêtre de
haut niveau comme « Paquets installés ». Seuls les paquets
correspondants à l’expression rationnelle se trouvant dans cette section
seront marqués comme devant être purgés par cette commande. Vous pouvez
exclure certains paquets de cette opération en pressant de manière
interactive la touche « =
» en face de chacun
d'eux.
Cette technique est assez pratique et fonctionne avec de nombreuses autres touches de commande.
Voici comment je nettoie l’état d'installation automatique / manuel des paquets (après avoir utilisé un installateur de paquets autre qu'aptitude, etc.).
aptitude
en mode interactif en tant
qu'administrateur.
u
»,
« U
», « f
» et
« g
» pour mettre à jour la liste des paquets
et mettre à niveau les paquets.
l
» afin de définir la limite
d'affichage des paquets avec
« ~i(~R~i|~Rrecommends:~i)
» et entrez
« M
» sur « Paquets
installés
» automatiquement.
l
» afin de définir la limite
d'affichage des paquets avec
« ~prequired|~pimportant|~pstandard|~E
» et
entrez « m
» sur les « Paquets
installés
» manuellement.
l
» pour définir la limite d'affichage
des paquets avec « ~i!~M
» et supprimez tous
les paquets inutilisés en entrant -
» sur chacun
d'eux après les avoir affichés en entrant « [
»
sur « Paquets installés
».
l
» pour définir la limite d'affichage
des paquets avec « ~i
» et entrez
m
» sur les « Tâches
»
manuellement installées.
aptitude
.
apt-get -s autoremove|less
» en tant
qu'administrateur pour vérifier les paquets non utilisés.
aptitude
en mode interactif et marquer les
paquets nécessaires comme « m
».
apt-get -s autoremove|less
» en
tant qu'administrateur et vérifier à nouveau que « REMOVED » ne
contient que les paquets voulus.
apt-get autoremove|less
» en tant
qu'administrateur pour supprimer automatiquement les paquets inutilisés.
L’action « m
» sur les
« Tâches
» est optionnelle pour éviter une
situation de suppression en masse de paquets dans le futur.
Lors du changement vers une nouvelle version, etc., vous devriez envisager d'effectuer une installation propre d'un nouveau système même si Debian peut être mis à niveau comme décrit ci-dessous. Ceci vous donne une chance de supprimer les résidus amassés et vous présente la meilleure combinaison des derniers paquets. Bien entendu, vous devrez effectuer une sauvegarde totale de votre système vers un endroit sûr (voir Section 10.1.6, « Sauvegarde et restauration ») avant de faire cela. Je vous recommande de faire une configuration dual boot en utilisant des partitions différentes afin d'effectuer une transition en douceur.
Vous pouvez effectuer une mise à niveau de l’ensemble du système vers une
nouvelle version en modifiant le contenu du fichier
« /etc/apt/sources.list
» pour qu'il pointe
vers la nouvelle version et en lançant la commande « apt-get
update; apt-get dist-upgrade
».
Pour effectuer la mise à jour depuis stable
vers
testing
ou unstable
, remplacez
« squeeze
» dans le fichier
« /etc/apt/sources.list
» d'exemple donné dans
Section 2.1.4, « Bases concernant l’archive Debian » par
« wheezy
» ou
« sid
».
En réalité, vous pouvez rencontrer quelques complications en raison de
problèmes de transition de paquets, le plus souvent pour des problèmes de
dépendances de paquets. Plus la mise à jour est importante, plus vous avez
de chances de rencontrer des problèmes importants. Lors de la transition de
l’ancienne version stable
vers la nouvelle version
stable
après sa diffusion, afin de minimiser les
problèmes vous pouvez lire ses nouvelles Notes
de diffusion et suivre la procédure exacte qui y est décrite.
Lorsque vous décidez de changer de la version stable
vers
la version testing
avant sa diffusion formelle, il n'y a
pas de Notes de diffusion pour vous
aider. La différence entre stable
et
testing
peut être devenue assez importante depuis la
diffusion de la version stable
précédente et rendre
compliquée la situation de la mise à jour.
Vous devriez aller vers la mise à niveau complète avec précaution tout en récupérant les dernières informations depuis les listes de diffusion et en usant de bon sens.
script
(1).
aptitude unmarkauto vim
», afin d'en éviter
la suppression.
/etc/apt/preferences
»
(désactiver l’épinglage apt « apt-pinning »).
oldstable
→
stable
→ testing
→
unstable
.
/etc/apt/sources.list
» afin qu'il pointe
uniquement vers la nouvelle archive et lancer « aptitude
update
».
aptitude
install perl
»
apt-get -s dist-upgrade
»
pour contrôler quel en sera l’impact.
apt-get
dist-upgrade
».
Il n'est pas sage de sauter une version majeure de Debian lors de la mise à
niveau entre versions stable
.
Dans les « Notes de diffusion » précédentes, GCC, Linux Kernel, initrd-tools, Glibc, Perl, APT tool chain, etc. ont demandé une attention particulière pour une mise à niveau de l’ensemble du système.
Pour une mise à jour quotidienne d'unstable
, voir Section 2.4.3, « Protection contre les problèmes de paquets ».
Voici la liste des autres opérations de gestion des paquets pour lesquelles
aptitude
est de trop haut niveau ou n'a pas la
fonctionnalité requise.
Tableau 2.13. Liste des opération avancées de gestion des paquets
commande | action |
---|---|
COLUMNS=120 dpkg -l <motif_nom_paquet>
|
afficher l’état d'un paquet installé pour le signalement de bogue |
dpkg -L <nom_paquet>
|
afficher le contenu d'un paquet installé. |
dpkg -L <nom_paquet> | egrep
'/usr/share/man/man.*/.+'
|
afficher les pages de manuel d'un paquet installé. |
dpkg -S <motif_nom_fichier>
|
afficher les paquets installés dont le nom correspond |
apt-file search <motif_nom_fichier>
|
afficher les paquets de l’archive dont le nom correspond |
apt-file list <motif_nom_paquet>
|
afficher le contenu d'un paquet correspondant de l’archive |
dpkg-reconfigure <nom_paquet>
|
reconfigurer le paquet exact |
dpkg-reconfigure -p=low <nom_paquet>
|
reconfigurer le paquet exact avec la question la plus détaillée |
configure-debian
|
reconfigurer les paquets depuis le menu en plein écran |
dpkg --audit
|
système de vérification des paquets partiellement installés |
dpkg --configure -a
|
configurer tous les paquets partiellement installés |
apt-cache policy <nom_paquet_binaire>
|
afficher la version disponible, la priorité et les informations concernant l’archive du paquet binaire |
apt-cache madison <nom_paquet>
|
afficher la version disponible et les informations de l’archive concernant un paquet |
apt-cache showsrc <nom_paquet_binaire>
|
afficher les informations concernant le paquet source d'un paquet binaire |
apt-get build-dep <nom_paquet>
|
installer les paquets nécessaires à la construction d'un paquet |
apt-get source <nom_paquet>
|
télécharger une source (depuis l’archive standard) |
dget <URL pour le fichier dsc>
|
télécharger un paquet source (depuis une autre archive) |
dpkg-source -x
<nom_paquet>_<version>-<version_debian>.dsc
|
construire une arborescence source depuis un ensemble de paquets
source(« *.tar.gz » et
« *.diff.gz »)
|
debuild binary
|
construire des paquets depuis une arborescence source locale |
make-kpkg kernel_image
|
construire un paquet du noyau à partir de l’arborescence source du noyau |
make-kpkg --initrd kernel_image
|
construire un paquet du noyau à partir de l’arborescence source du noyau avec initramfs activé |
dpkg -i
<nom_paquet><version>-<version_debian><arch>.deb
|
installer un paquet local sur le système |
debi
<nom_paquet><version>-<version_debian><arch>.dsc
|
installer des paquets locaux sur le système |
dpkg --get-selections '*' >selection.txt
|
enregistrer l’information d'état de la sélection des paquets au niveau de
dpkg
|
dpkg --set-selections <selection.txt
|
définir l’information d'état de sélection des paquets au niveau de
dpkg
|
echo <package_name> hold | dpkg --set-selections
|
définir l’information d'état de sélection des paquets au niveau de
dpkg à hold (gelé,
équivalent à aptitude hold <package_name> )
|
Un outil de plus bas niveau tel que « dpkg -i
…
» et « debi …
» devra être
utilisé avec précautions par l’administrateur du système. Il ne s'assure pas
automatiquement des dépendances exigées par le paquet. Les options
« --force-all
» et similaires de la ligne de
commandes de dpkg (voir dpkg
(1)) ne sont prévues pour
être utilisées que par des experts. Les utiliser sans comprendre entièrement
leurs effets peut casser l’ensemble de votre système.
Veuillez noter ce qui suit :
aptitude
qui utilise des expressions
rationnelles (voir Section 1.6.2, « Expressions rationnelles »), les autres
commandes de gestion des paquets utilisent des motifs semblables aux motifs
génériques (« glob ») de l’interpréteur de commandes (voir Section 1.5.6, « Motifs génériques (« glob ») de l’interpréteur de commandes »).
apt-file
(1) fourni par le paquet
apt-file
doit être précédé de l’exécution de la commande
« apt-file update
».
configure-debian
(8) fourni par le paquet
configure-debian
exécute en fond
dpkg-reconfigure
(8).
dpkg-reconfigure
(8) exécute les scripts du paquet en
utilisant en fond debconf
(1).
apt-get build-dep
»,
« apt-get source
» et « apt-cache
showsrc
» ont besoin d'une entrée
« deb-src
» dans
« /etc/apt/sources.list
».
dget
(1), debuild
(1)
etdebi
(1) ont besoin du paquet
devscripts
.
apt-get
source
» dans Section 2.7.10, « Porter un paquet vers le système stable ».
make-kpkg
exige le paquet
kernel-package
(voir Section 9.7, « Le noyau »).
L’installation de debsums
permet, avec
debsums
(1), la vérification des fichiers des paquets
installés d'après les valeurs de MD5sum se trouvant dans le fichier
« /var/lib/dpkg/info/*.md5sums
» Voir Section 10.4.5, « La somme de contrôle MD5 » pour le fonctionnement de MD5sum.
Comme la base de données MD5sum peut être trafiquée par un intrus,
debsums
(1) est d'une utilité restreinte en tant qu'outil
de sécurité. Il n'est bon que pour la vérification locale des modifications
de l’administrateur ou des défectuosités en raison de problèmes de support.
De nombreux utilisateurs préfèrent suivre la version unstable du système Debian parce qu'elle propose de nouvelles fonctionnalités et de nouveaux paquets. Ceci rend le système davantage sujet à être touché par des bugs critiques de paquets.
L’installation du paquet apt-listbugs
protège votre
système contre les bogues critiques en recherchant automatiquement dans le
BTS de Debian les bogues critiques lors de la mise à jour par
l’intermédiaire du système APT.
L’installation du paquet apt-listchanges
indique les
nouveautés importantes se trouvant dans
« NEWS.Debian
» lors de la mise à jour du
système avec APT.
Bien que visiter le site Debian à http://packages.debian.org/ permette aujourd'hui de rechercher facilement les méta-données des paquets, voyons les méthodes plus traditionnelles :
Les commandes grep-dctrl
(1),
grep-status
(1) et grep-available
(1)
peuvent être utilisées pour effectuer des recherches dans tous les fichiers
dont le format général est celui d'un fichier de contrôle de Debian.
« dpkg -S <motif_nom_fichier>
» peut être
utilisé pour rechercher les noms de paquets installés par
dpkg
.qui contiennent des fichiers dont le nom correspond
au motif. Mais les fichiers créés par les scripts du responsable du paquet
ne sont pas pris en compte.
Si vous devez faire des recherches plus élaborées sur les méta-données de
dpkg, il vous faudra lancer la commande « grep -e
motif_expression_rationnelle *
» dans le répertoire
« /var/lib/dpkg/info/
». Ceci vous permet de
rechercher des mots mentionnés dans les scripts des paquets et les textes
des requêtes d'installation.
Pour rechercher de manière récursive les dépendances de paquets, vous devrez
utiliser apt-rdepends
(8).
Voyons comment le système Debian de gestion des paquets fonctionne de manière interne. Ceci vous permettra de créer votre propre solution à certains problèmes de paquets.
Les fichiers de méta-données de chaque distribution se trouvent sur chaque
miroir Debian, dans
« dist/<nom_de_code>
», par exemple,
« http://ftp.us.debian.org/debian/
». On peut
parcourir la structure de son archive à l’aide d'un navigateur web. Il
existe 5 types de méta-données clés :
Tableau 2.14. Contenu des méta-données de l’archive Debian
fichier | emplacement | contenu |
---|---|---|
Release
|
sommet de la distribution | description de l’archive et informations d'intégrité |
Release.gpg
|
sommet de la distribution |
fichier signature du fichier « Release » signé
avec la clé de l’archive
|
Contents-<architecture>
|
sommet de la distribution | liste de tous les fichiers pour tous les paquets dans l’archive pertinente |
Release
|
sommet de chaque combinaison de distribution/zone/architecture |
description de l’archive utilisée pour la règle de
apt_preferences (5)
|
Packages
|
sommet de chaque combinaison de distribution/zone/binary-architecture |
debian/control concaténés des paquets binaires
|
Sources
|
sommet de chaque combinaison distribution/zone/source |
debian/control concaténés des paquets sources
|
Dans les archives récentes, ces méta-données sont enregistrée sous forme compressée et différentielles afin de limiter le trafic réseau.
Le fichier « Release
» de plus haut niveau est
utilisé pour signer l’archive au moyen du système secure APT.
Chaque version de l’archive Debian possède un fichier
« Release
» de plus haut niveau, par exemple,
« http://ftp.us.debian.org/debian/dists/unstable/Release
»,
comme ci-dessous :
Origin: Debian Label: Debian Suite: unstable Codename: sid Date: Sat, 26 Jan 2008 20:13:58 UTC Architectures: alpha amd64 arm hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc Components: main contrib non-free Description: Debian x.y Unstable - Not Released MD5Sum: e9f11bc50b12af7927d6583de0a3bd06 22788722 main/binary-alpha/Packages 43524d07f7fa21b10f472c426db66168 6561398 main/binary-alpha/Packages.gz ...
Vous pouvez trouver ici ma justification pour l’utilisation de « suite », « nom de code » dans Section 2.1.4, « Bases concernant l’archive Debian ». La « distribution » est utilisée pour désigner à la fois « suite » et « nom de code ». Touts les noms de « zones » de l’archive proposés par l’archive sont indiqués sous « Composantes ».
L’intégrité du fichier « Release
» de plus haut
niveau est vérifiée par une infrastructure cryptographique appelée secure apt.
Release.gpg
»
est créé à partir du fichier « Release
» réel
de plus haut niveau et de la clé secrète de l’archive Debian.
La clé publique de l’archive Debian peut être placée dans
« /etc/apt/trusted.gpg
» ;
base-files
, ou
gpg
ou
apt-key
en utilisant la dernière clé publique de
l’archive postée sur ftp-master.debian.org.
Release.gpg
» et de la clé publique de
l’archive Debian de « /etc/apt/trusted.gpg
»,
l’intégrité du fichier « Release
» de plus haut
niveau téléchargé .
L’intégrité de tous les fichiers « Packages
»
et « Sources
» est vérifiée en utilisant les
valeurs des sommes MD5 se trouvant dans son fichier de plus haut niveau
« Release
». L’intégrité de tous les fichiers
de paquets est vérifiée en utilisant les valeurs des sommes MD5 se trouvant
dans les fichiers « Packages
» et
« Sources
». Voir debsums
(1)
et Section 2.4.2, « Vérifier les fichiers de paquets installés ».
Comme la vérification de la signature cryptographique est un processus
beaucoup plus consommateur de CPU que les calculs de sommes MD5,
l’utilisation d'une somme MD5 pour chacun des paquets tout en utilisant une
signature cryptographique pour le fichier
« Release
» de plus haut niveau allie une bonne sécurité avec de bonnes
performances (voir Section 10.4, « Infrastructure de sécurité des données »).
Les fichiers « Release
» au niveau de l’archive
sont utilisés pour la règle d'apt_preferences
(5).
Il y a des fichiers « Release
» du niveau de
l’archive pour tous les emplacements d’archives indiqués par une ligne
« deb
» dans
« /etc/apt/sources.list
» comme, par exemple,
« http://ftp.us.debian.org/debian/dists/unstable/main/binary-amd64/Release
»
ou
« http://ftp.us.debian.org/debian/dists/sid/main/binary-amd64/Release
»
comme suit :
Archive: unstable Component: main Origin: Debian Label: Debian Architecture: amd64
Pour l’entrée « Archive:
», les noms de version
(« stable
»,
« testing
»,
« unstable
», …) sont utilisés dans l’archive Debian alors que les noms de code
(« dapper
", « feisty
»,
« gutsy
»,
« hardy
»,
« intrepid
», …) sont utilisés dans l’archive Ubuntu.
Pour certaines archives, comme experimental
, et
squeeze-backports
, qui contiennent des paquets
qui ne devraient pas être installés automatiquement, il y a une ligne
supplémentaire, par exemple
« http://ftp.us.debian.org/debian/dists/experimental/main/binary-amd64/Release
»
comme suit :
Archive: experimental Component: main Origin: Debian Label: Debian NotAutomatic: yes Architecture: amd64
Remarquez que les archives normales, sans « NotAutomatic:
yes
», la valeur par défaut de « Pin-Priority » est
de 500, alors que pour les archives spéciales avec
« NotAutomatic: yes
» la valeur par défaut de
« Pin-Priority » est de 1 (voir
apt_preferences
(5) et Section 2.7.3, « Ajuster la version candidate »).
Lorsqu'on utilise les outils APT, comme aptitude
,
apt-get
, synaptic
,
apt-file
, auto-apt
, …, il faut mettre
à jour les copies locales des méta-données contenant les informations de
l’archive Debian. Ces copies locales ont les noms suivants, qui
correspondent aux noms de la distribution
, de la
zone
et de l’architecture
indiquées
dans « /etc/apt/sources.list
» (voir Section 2.1.4, « Bases concernant l’archive Debian »).
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_Release
»
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_Release.gpg
»
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_<area>_binary-<architecture>_Packages
»
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_<area>_source_Sources
»
/var/cache/apt/apt-file/ftp.us.debian.org_debian_dists_<distribution>_Contents-<architecture>.gz
»
(pour apt-file
)
Les quatre premiers types de fichiers sont partagés par toutes les commandes
APT pertinentes et sont mis à jour depuis la ligne de commandes par
« apt-get update
» et « aptitude
update
». Les méta-données
« Packages
» sont mises à jour s'il y a une
ligne « deb
» dans le fichier
« /etc/apt/sources.list
». Les méta-données
« Sources
» sont mises à jour s'il y a une
ligne « deb-src
» dans le fichier
« /etc/apt/sources.list
».
Les méta-données « Packages
» et
« Sources
» contiennent une entrée
« Filename:
» pointant vers l’emplacement du
paquet binaire et du paquet source. Actuellement, ces paquets sont situés
dans l’arborescence du répertoire « pool/
»
afin d'améliorer le passage d'une version à l’autre.
On peut effectuer des recherches interactivement dans les copies locales des
méta-données « Packages
» à l’aide
d'aptitude
. La commande de recherche spécialisée
grep-dctrl
(1) peut effectuer des recherches dans les
copies locales des méta-données « Packages
» et
« Sources
».
La copie locale des méta-données
« Contents-<architecture>
» peut être
mise un jour par « apt-file update
», son
emplacement est différent des quatre autres. Voir
apt-file
(1). (auto-apt
utilise par
défaut un emplacement différent pour la copie locale de
« Contents-<architecture>.gz
»).
En plus des méta-données récupérées par téléchargement, l’outil APT des
versions ultérieures à lenny
enregistre l’état des
l’installation généré localement dans
« /var/lib/apt/extended_states
» qui est
utilisé par tous les outils APT afin de suivre tous les paquets installés
automatiquement.
En plus des méta-données récupérée par téléchargement, la commande
aptitude
enregistre l’état de l’installation
généréelocalement dans
« /var/lib/aptitude/pkgstates
» qu'il est le
seul à utiliser.
Tous les paquets ayant été téléchargés au moyen du mécanisme APT sont
enregistrés dans le répertoire
« /var/cache/apt/packages
» jusqu'à ce qu'ils
en soient supprimés.
Les fichiers de paquets Debian ont une structure de nom particulière.
Tableau 2.15. Structure du nom des paquets Debian :
type de paquet | structure du nom |
---|---|
Paquet binaire (encore appelé deb )
|
<nom_paquet>_<epoch>:<version_amont>-<version_debian>-<architecture>.deb
|
Paquet binaire (encore appelé udeb )
|
<nom_paquet>_<epoch>:<version_amont>-<version_debian>-<architecture>.udeb
|
paquet source (source amont) |
<nom_paquet>_<epoch>:<version_amont>-<version_debian>.orig.tar.gz
|
Paquet source 1.0 (modifications Debian)
|
<nom_paquet>_<epoch>:<version_amont>-<version_debian>.diff.gz
|
Paquet source 3.0 (quilt) (modifications Debian)
|
<nom_paquet>_<epoch>:<version_amont>-<version_debian>.debian.tar.gz
|
paquet source (description) |
<nom_paquet>_<epoch>:<version_amont>-<version_debian>.dsc
|
Seuls les formats de paquets source de base sont décrits ici. Voir
dpkg-source
(1) pour davantage d’informations.
Tableau 2.16. Caractères utilisables pour chacune des composantes des noms de paquets Debian
nom de la composante | caractères utilisables (expression rationnelle) | existence |
---|---|---|
<nom_paquet>
|
[a-z,A-Z,0-9,.,
|
nécessaire |
<epoch>:
|
[0-9]+:
|
optionnel |
<version_amont>
|
[a-z,A-Z,0-9,.,
|
nécessaire |
<version_debian>
|
[a-z,A-Z,0-9,.,
|
optionnel |
Vous pouvez vérifier l’ordre des versions d'un paquet à l’aide de
dpkg
(1), par exemple, « dpkg
--compare-versions 7.0 gt 7.~pre1 ; echo $?
».
L’installateur Debian (d-i)
utilise udeb
comme extension du nom de fichier de ses
paquets binaires plutôt que le deb
normal. Un paquet
udeb
est un paquet deb
allégé dont
certaines parties non essentielles du contenu, comme la documentation, sont
supprimées afin d'économiser de la place en relâchant les exigences de la
charte des paquets. Les paquet deb
et
udeb
partagent la même structure de paquet. Le
« u
» signifie micro.
dpkg
(1) est l’outil de plus bas niveau pour la gestion
des paquets de Debian. C'est un outil très puissant et il faut l’utiliser
avec précaution.
Lors de l’installation d'un paquet appelé
« <nom_paquet>
», dpkg
le traite selon l’ordre suivant :
ar
-x
») ;
<nom_paquet>.preinst
» en
utilisant debconf
(1) ;
tar -x
» ;
<nom_paquet>.postinst
» en
utilisant debconf
(1).
Le système debconf
fournit une interaction standardisée
avec l’utilisateur avec la prise en charge de I18N and L10N (Chapitre 8, I18N et L10N).
Tableau 2.17. Fichiers particuliers créés par dpkg
fichier | description du contenu |
---|---|
/var/lib/dpkg/info/<nom_paquet>.conffiles
|
liste de fichiers de configuration. (modifiables par l’utilisateur) |
/var/lib/dpkg/info/<nom_paquet>.list
|
liste des fichiers et répertoires installés par le paquet |
/var/lib/dpkg/info/<nom_paquet>.md5sums
|
liste des valeurs de hachage MD5 pour les fichiers installés par le paquet |
/var/lib/dpkg/info/<nom_paquet>.preinst
|
script du paquet exécuté avant l’installation du paquet |
/var/lib/dpkg/info/<nom_paquet>.postinst
|
script du paquet exécuté après l’installation du paquet |
/var/lib/dpkg/info/<nom_paquet>.prerm
|
script du paquet exécuté avant la suppression du paquet |
/var/lib/dpkg/info/<nom_paquet>.postrm
|
script du paquet exécuté après la suppression du paquet |
/var/lib/dpkg/info/<nom_paquet>.config
|
script du paquet pour le système debconf
|
/var/lib/dpkg/alternatives/<nom_paquet>
|
information d'alternative utilisé par la commande
update-alternatives command
|
/var/lib/dpkg/available
|
information de disponibilité de tous les paquets |
/var/lib/dpkg/diversions
|
informations de diversions utilisées par dpkg (1) et
définies par `dpkg-divert`(8)
|
/var/lib/dpkg/statoverride
|
information « stat override » utilisée par
dpkg (1) et définie par `dpkg-statoverride`(8)
|
/var/lib/dpkg/status
|
informations d'état pour tous les paquets |
/var/lib/dpkg/status-old
|
fichier de sauvegarde de première génération du fichier
« var/lib/dpkg/status »
|
/var/backups/dpkg.status*
|
fichier de sauvegarde de seconde génération du fichier
« var/lib/dpkg/status »
|
Le fichier « status
» est aussi utilisé par des
outils comme dpkg
(1), « dselect
update
» et « apt-get -u
dselect-upgrade
».
La commande de recherche spécialisée grep-dctrl
(1) peut
rechercher des copies locales des méta-données
« status
» et
« available
»
Dans l’environnement de l’installateur
debian, la commande udpkg
est utilisée pour
ouvrir les paquets udeb
. La commande
udpkg
est une version allégée de la commande
dpkg
.
Le système Debian possède un mécanisme pour installer paisiblement des
paquets qui présentent un certain recouvrement en utilisant
update-alternatives
(8). Par exemple, vous pouvez faire
que la commande vi
choisisse de lancer
vim
alors que les paquets vim
et
nvi
sont tous deux installés.
$ ls -l $(type -p vi) lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Appuyez sur <Entrée> pour conserver la valeur par défaut[*] ou choisissez le numéro sélectionné :
Le système d'alternatives de Debian utilise des liens symboliques dans
« /etc/alternatives/
» pour enregistrer ses
sélections. Le processus de sélection utilise le fichier correspondant de
« /var/lib/dpkg/alternatives/
».
Stat overrides, fournie par la commande
dpkg-statoverride
(8) est un moyen d'indiquer à
dpkg
(1) d'utiliser un propriétaire ou un mode différent
pour un fichier lorsqu'un paquet est
installé. Si « --update
» est indiqué et que le
fichier existe, il est immédiatement configuré avec le nouveau propriétaire
et le nouveau mode.
Une modification directe par l’administrateur du propriétaire ou du mode
d'un fichier dont le propriétaire est le
paquet en utilisant les commandes chmod
ou
chown
sera réinitialisée lors d'une nouvelle mise à
niveau du paquet.
J'utilise ici le mot fichier, mais en
réalité, ce peut être n'importe quel objet d'un système de fichiers que gère
dpkg
, y-compris les répertoires, les périphériques, etc.
Les fichiers diversions fournis par la
commande dpkg-divert
(8) sont un moyen de forcer
dpkg
(1) à ne pas installer un fichier à son emplacement
par défaut, mais à un emplacement détourné (« diverted »). L’utilisation de
dpkg-divert
est destinée à la maintenance de paquets par
des scripts. Son utilisation occasionnelle par l’administrateur du système
est obsolète.
En utilisant le système unstable
, l’administrateur peut
avoir à restaurer le système à partir d'une situation où la gestion des
paquets est défectueuse.
Certaines des méthodes décrites ici sont des actions très risquées. Vous avez été prévenu !
Si un programme avec une interface graphique présente une instabilité après une mise à niveau amont importante, vous devriez songer à des interférences avec les anciens fichiers de configurations locaux qu'il avait créé. S'il est stable avec un compte d'utilisateur fraîchement créé, cette hypothèse est confirmée. (C'est un bogue de réalisation du paquet et c'est le plus souvent évité par le responsable du paquet).
Pour retrouver la stabilité, vous devrez déplacer les fichiers de configuration locaux et redémarrer le programme ayant une interface graphique. Il vous faudra peut-être lire le contenu de l’ancien fichier de configuration pour retrouver plus tard vos informations de configuration. (Ne les effacez pas trop rapidement).
Les système de gestion d'archive au niveau du paquet, tels
qu'aptitude
(8) ou apt-get
(1) ne
tenteront même pas, grâce aux dépendances des paquets, d'installer des
paquet ayant des fichiers qui se superposent (voir Section 2.1.5, « Dépendances des paquets »).
Des erreurs du responsable du paquet ou le déploiement de sources d'archives
mélangées et incohérentes (voir Section 2.7.2, « Paquets venant de sources mélangées ») par l’administrateur du
système peuvent créer une situation où les dépendances des paquets sont
décrites de manière incorrecte. Lorsque, dans une telle situation, vous
installez un paquet qui écrase des fichiers en utilisant
aptitude
(8) ou apt-get
(1),
dpkg
(1) qui dépaquette le paquet va retourner une erreur
au programme appelant sans écraser les fichiers existants.
L’utilisation de programmes tierce partie introduit un risque significatif
par l’intermédiaire des scripts du responsable qui sont lancés avec les
privilèges de l’administrateur et peuvent effectuer n'importe quoi sur votre
système. La commande dpkg
(1) ne protège que contre
l’écrasement des fichiers lors du dépaquetage.
Vous pouvez contourner un tel problème d'installation cassée en supprimant
d'abord l’ancien paquet, <ancien_paquet>
, qui pose
des problèmes.
$ sudo dpkg -P <ancien_paquet>
Lorsqu'une commande dans le script du paquet retourne une erreur pour une raison quelconque et que le script retourne une erreur, le système de gestion des paquets arrête son action et se termine en laissant des paquets partiellement installés. Lorsqu'un paquet comporte des bogues dans les scripts de suppression, le paquet peut devenir impossible à supprimer et assez déplaisant.
Pour les problèmes avec le script de paquet de
« <nom_paquet>
», il vous faudra regarder
dans les scripts du paquet suivants :
/var/lib/dpkg/info/<nom_paquet>.preinst
»
/var/lib/dpkg/info/<nom_paquet>.postinst
»
/var/lib/dpkg/info/<nom_paquet>.prerm
»
/var/lib/dpkg/info/<nom_paquet>.postrm
»
Éditez le script du paquet posant problème avec le compte de l’administrateur en utilisant les techniques suivantes :
#
» en tête de ligne ;
|| true
».
Configurez tous les paquets partiellement installés à l’aide de la commande suivante :
# dpkg --configure -a
Comme dpkg
est un outil de gestion des paquets de très
bas niveau, il peut fonctionner dans des situations très difficiles telles
qu'un système qu'on ne peut pas démarrer et qui n'a pas de connexion
réseau. Supposons que le paquet toto
soit cassé et doive
être remplacé.
Vous pouvez trouver des copies de l’ancienne version du paquet
foo
sans bogue dans le répertoire de cache des paquets
« /var/cache/apt/archives/
». (Si ce n'est pas
le cas, vous pouvez télécharger l’archive depuis http://snapshot.debian.net/ ou la
copier depuis le cache des paquets d'une machine qui fonctionne).
Si vous pouvez démarrer le système, vous pouvez l’installer avec la commande suivante :
# dpkg -i /chemin/vers/toto_<ancienne-version>_<arch>.deb
Si la casse du système est minime, vous pouvez faire un retour en arrière (downgrade) de tout le système comme Section 2.7.7, « Retour d'urgence à une version précédente (downgrade) » en utilisant le système de plus haut niveau APT.
Si votre système ne peut pas être démarré depuis le disque dur, vous devrez rechercher d'autres manières de le démarrer :
/target
».
toto
en
faisant ce qui suit :
# dpkg --root /target -i /chemin/vers/toto_<ancienne_version>_<arch>.deb
Cet exemple fonctionne même si la commande dpkg
qui se
trouve sur le disque dur est cassée.
Tous les systèmes GNU/Linux démarrés depuis un autre système sur le disque dur, depuis un CD autonome GNU/Linux, depuis une clé USB amorçable, depuis le réseau peuvent être utilisés de manière similaire pour restaurer un système cassé.
Si la tentative d'installation d'un paquet de cette manière échoue en raison
de la violation de certaines dépendances et que vous voulez vraiment le
faire, vous pouvez, en dernier ressort, outrepasser les dépendances en
utilisant les options « --ignore-depends
»,
« --force-depends
» de dpkg
et d'autres options. Si vous le faites, vous aurez un sérieux effort à faire
pour restaurer les dépendances correctes par la suite. Voir
dpkg
(8) pour davantage d'informations.
Lorsque votre système est sérieusement cassé, vous devriez faire une sauvegarde complète du système dans un endroit sûr (voir Section 10.1.6, « Sauvegarde et restauration ») et effectuer une installation propre. Cela demande moins de temps et donne, en fin de compte, de meilleurs résultats.
Si le fichier « /var/lib/dpkg/status
» est
corrompu pour une raison quelconque, le système Debian perd les données de
paquets sélectionnés et est sérieusement endommagé. Regardez l’ancienne
version du fichier « /var/lib/dpkg/status
»
dans « /var/lib/dpkg/status-old
» ou
« /var/backups/dpkg.status.*
».
Conserver « /var/backups/
» sur une partition
séparée peut être une bonne idée car ce répertoire contient de nombreuses
données importantes du système.
Pour les casses sévères, je recommande de faire une réinstallation propre
après avoir fait une sauvegarde du système. Même si vous avez perdu tout ce
qui se trouve dans « /var/
», vous pouvez
encore récupérer certaines informations depuis les répertoires qui se
trouvent dans « /usr/share/doc/
» afin de vous
guider dans votre nouvelle installation.
Réinstaller un système (de bureau) minimum.
# mkdir -p /chemin/vers/ancien/système
Montez l’ancien système sur
« /chemin/vers/ancien/système/
».
# cd /chemin/vers/ancien/système/usr/share/doc # ls -1 >~/ls1.txt # cd /usr/share/doc # ls -1 >>~/ls1.txt # cd # sort ls1.txt | uniq | less
Le système vous présentera alors les noms de paquets à installer. (Il peut y
avoir des noms qui ne soient pas des noms de paquets, comme, par exemple,
« texmf
»).
Vous pouvez rechercher les paquets qui satisfont à vos besoins avec
aptitude
à partir de la description du paquet ou depuis
la liste se trouvant dans « Tasks ».
Si vous trouvez deux paquets similaires et que vous vous demandez lequel installer sans faire des efforts d'« essais et erreurs », vous pouvez user de bon sens. Je considère que les points suivants constituent de bonnes indications pour les paquets à privilégier :
python2.4
par python
)
Debian étant un projet basé sur le volontariat avec un modèle développement distribué, son archive contient de nombreux paquets avec des cibles différentes et de qualité variable. Vous devrez choisir vous-même ce que vous voulez en faire.
Installer des paquets provenant de sources d'archives mélangées n'est pas
pris en charge par la distribution officielle de Debian sauf pour la prise
en charge officielle d'une combinaison particulière d'archives telle que
stable
avec security
updates et squeeze-updates.
Voici un exemple des opérations pour inclure des paquets d'une version amont
spécifique plus récente se trouvant dans unstable
pour
une seule occasion tout en suivant testing
:
/etc/apt/sources.list
»
de manière temporaire avec la seule entrée
« unstable
» ;
aptitude update
» ;
aptitude install
<nom_paquet>
» ;
/etc/apt/sources.list
»
pour testing
.
aptitude update
» ;
Vous ne créez pas le fichier
« /etc/apt/preferences
» et vous n'avez pas
besoin de vous préoccuper de l’épinglage apt (« apt-pinning »)
avec cette approche manuelle. Mais c'est très lourd.
En utilisant une source d'archive mixte, vous devez vous assurer par vous-même de la compatibilité des paquets car Debian ne la garantit pas. S'il existe des incompatibilités de paquets, vous pouvez casser votre système. Vous devrez être capable d'apprécier ces exigences techniques. L’utilisation de sources mixtes d'archives aléatoires est une opération entièrement optionnelle et son utilisation est quelque chose que je ne vous encourage pas à faire.
Les règles générales pour l’installation de paquets de différentes archives sont les suivantes :
Les paquets non binaires (« Architecture:
all
») sont plus sûrs à
installer :
Les paquets binaires (qui ne sont pas « Architecture:
all
») sont confrontés à de nombreux barrages et ne sont
pas sûrs à installer
De manière à rendre un paquet plus sûr à installer, certains programmes commerciaux binaires et non libres peuvent être fournis liés avec des bibliothèques complètement statiques. Vous devrez quand même vérifier leurs problèmes de compatibilité avec l’ABI, etc.
Sauf pour éviter à court terme un paquet cassé, installer des paquets binaires depuis des archives officiellement non supportées est en général une mauvaise idée. Ceci est vrai même si vous utilisez l’épinglage apt (« apt-pinning ») (voir Section 2.7.3, « Ajuster la version candidate »). Vous devriez envisager chroot ou des techniques similaires (voir Section 9.8, « Système virtualisé ») afin de faire tourner des programmes en provenance d'archives différentes.
Sans le fichier « /etc/apt/preferences
», le
système APT choisit, en utilisant la chaîne de version, la dernière version
disponible comme version candidate. C'est
l’état normal et l’utilisation la plus recommandée du système APT. Toutes
les combinaisons d'archives officiellement prises en charge n'exigent pas le
fichier « /etc/apt/preferences
» car certaines
archives qui ne peuvent pas être utilisées comme source des mises à jour
automatiques sont marquées NotAutomatic
et gérées proprement.
La règle de comparaison de la chaîne de version peut être vérifiée avec, par
exemple « dpkg --compare-versions ver1.1 gt ver1.1~1; echo
$?
» (voir dpkg
(1)).
Lorsque vous installez régulièrement des paquets depuis un mélange de
sources d'archives (voir Section 2.7.2, « Paquets venant de sources mélangées »), vous pouvez
automatiser ces opérations compliquées en créant le fichier
« /etc/apt/preferences
» avec les entrées
correctes et en ajustant la règle de sélection des paquets pour la version candidate comme décrit dans
apt_preferences
(5). Ceci est appelé épinglage apt (« apt-pinning »).
L’utilisation de l’épinglage apt par un débutant est une source certaine de problèmes majeurs. Vous devriez éviter l’utilisation de l’épinglage apt sauf si vous avez absolument besoin.
Lorsque vous utilisez l’épinglage apt, vous devez vous assurer vous-même de la compatibilité des paquets car le système Debian ne la garantit pas. L’épinglage apt est une opération entièrement optionnelle et je ne vous encourage pas à l’utiliser.
Les fichiers Release au niveau de l’archive (voir Section 2.5.3, « Fichiers « Release » au niveau de l’archive ») sont utilisés pour la règle de
apt_preferences
(5). L’épinglage apt ne fonctionne donc
qu'avec le nom de « suite » pour les archives normales de Debian et les
archives de sécurité de
Debian. (Ceci est différents des archives Ubuntu). Par exemple, dans le fichier
« /etc/apt/preferences
», il est possible de
mettre « Pin: release a=unstable
» mais pas
« Pin: release a=sid
»
Lorsque vous utilisez une archive ne venant pas de Debian en tant que partie d'épinglage apt, vous devez vérifier ce pour quoi elles sont prévues et aussi vérifier leur crédibilité. Par exemple, Ubuntu et Debian ne sont pas prévues pour être mélangées.
Même si vous ne créez pas le fichier
« /etc/apt/preferences
», vous pouvez effectuer
des opérations assez complexes sur le système sans épinglage apt (voir Section 2.6.4, « Récupération avec la commande dpkg » et Section 2.7.2, « Paquets venant de sources mélangées »).
Voici une explication simplifiée de la technique d'apt-pinning (épinglage apt) :
Le système APT choisit la mise à niveau
du paquet de plus haute priorité d'épinglage (« Pin-Priority »)
dans la liste des sources de paquets disponible dans le fichier
« /etc/apt/sources.list
» comme paquet de
« version candidate. Si la priorité
d'épinglage du paquet est supérieure à 1000, cette restriction de version
pour la mise à niveau est levée afin de
permettre le retour vers une version précédente (voir Section 2.7.7, « Retour d'urgence à une version précédente (downgrade) »).
La valeur de priorité d'épinglage de chaque paquet est définie par l’entrée
« Pin-Priority » dans le fichier
« /etc/apt/preferences
» ou utilise sa valeur
par défaut.
Tableau 2.18. Liste des valeurs par défaut de la priorité d'épinglage pour chaque type de source
priorité d'épinglage par défaut | type de source de paquets |
---|---|
990 | archive version cible |
500 | archive normale |
100 | paquet installé |
1 | archive non automatique |
Il y a plusieurs méthodes pour définir l’archive version cible :
/etc/apt/apt.conf
»
avec la ligne « APT::Default-Release
"stable";
»
apt-get
install -t testing un_paquet
»
L’archive non automatique
(« NotAutomatic ») est définie par le serveur d'archive dont le
fichier Release au niveau de l’archive (voir Section 2.5.3, « Fichiers « Release » au niveau de l’archive ») comporte
« NotAutomatic: yes
».
La situation d'épinglage apt de
<paquet> provenant de sources d'archive multiple est affichée par
« apt-cache policy <paquet>
».
Package pin:
»
affiche la version d'épinglage du paquet
si l’association n'est définie que pour <paquet> par exemple,
« Package pin: 0.190
».
Package pin:
»
s'il n'y a pas d'association définie uniquement avec <paquet>.
0.181 700
».
0
» est affiché à droite de toutes les
chaînes de version s'il n'y a pas d'association définie avec uniquement
<package>, par exemple, « 0.181 0
».
Package: *
» dans le fichier
« /etc/apt/preferences
») sont affichées sur la
gauche de tous les chemins vers les archives, par exemple,
« 200 http://backports.debian.org/debian-backports/
squeeze-backports/main Packages
».
Voici un exemple de technique d'épinglage apt
permettant d'inclure de manière régulière une version amont plus
récente de paquets spécifiques se trouvant dans unstable
tout en suivant testing
. Listez toutes les archives
nécessaires dans le fichier
« /etc/apt/sources.list
» de la manière
suivante :
deb http://ftp.fr.debian.org/debian/ testing main contrib non-free deb http://ftp.fr.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/ testing/updates main contrib
Configurez le fichier « /etc/apt/preferences
»
comme suit :
Package: * Pin: release a=testing Pin-Priority: 500 Package: * Pin: release a=unstable Pin-Priority: 200
Lorsque vous désirez installer un paquet appelé
« <nom_paquet>
» avec ses dépendances
depuis l’archive unstable
avec cette configuration, vous
utilisez la commande suivante qui modifie la version cible avec l’option
« -t
» (la priorité d'épinglage de
unstable
devient 990.).
$ sudo apt-get install -t unstable <nom_paquet>
Avec cette configuration, l’exécution habituelle de « apt-get
upgrade
» et « apt-get
dist-upgrade
» (ou « aptitude
safe-upgrade
» et « aptitude
full-upgrade
» met à niveau les paquets qui avaient été
installés depuis l’archive testing
en utilisant l’archive
testing
actuelle et les paquets qui avaient été installés
depuis l’archive unstable
en utilisant l’archive
unstable
actuelle.
Faites bien attention à ne pas supprimer l’entrée
« testing
» du fichier
« /etc/apt/sources.list
». Sans l’entrée
« testing
», le système APT mettra à niveau les
paquets en utilisant la nouvelle archive unstable
.
J'édite habituellement le fichier
« /etc/apt/sources.list
» en commentant
l’entrée correspondant à l’archive « unstable
»
juste après avoir effectué les opérations ci-dessus. Ceci évite un processus
de mise à jour lent en raison du nombre trop important d'entrées dans le
fichier « /etc/apt/sources.list
» bien que ceci
ne permette pas de mettre à niveau les paquets qui avaient été installés
depuis l’archive unstable
en utilisant l’archive
unstable
actuelle.
Si on utilise « Pin-Priority: 20
» à la place
de Pin-Priority: 200
» pour le fichier
« /etc/apt/preferences
», les paquets déjà
installés ayant une valeur de Pin-Priority de 100 ne seront pas mis à niveau
depuis l’archive unstable
même si l’entrée
« testing
» du fichier
« /etc/apt/sources.list
» est supprimée.
Si vous désirez suivre automatiquement un paquet particulier dans
unstable
sans une installation initiale
« -t unstable
», vous devrez créer le fichier
« /etc/apt/preferences
» et lister
explicitement en début de ce fichier tous ces paquets de la manière
suivante :
Package: <paquet-1> Pin: release a=unstable Pin-Priority: 700 Package: <paquet-2> Pin: release a=unstable Pin-Priority: 700
Ceci définit la valeur de Pin-Priority pour chacun de ces paquets
spécifiques. Par exemple, pour suivre la dernière version
unstable
de cette « Référence Debian » en
français, vous devrez ajouter les entrées suivantes dans le fichier
« /etc/apt/preferences
».
Package: debian-reference-fr Pin: release a=unstable Pin-Priority: 700 Package: debian-reference-common Pin: release a=unstable Pin-Priority: 700
Cette technique d'épinglage apt est aussi valable si vous suivez l’archive
stable
. Jusqu'à présent et selon mon expérience, les
paquets de documentation ont toujours été sûrs à installer depuis l’archive
unstable
.
Voici un autre exemple de technique d'épinglage
apt destinée à inclure une version amont plus récente de paquets
spécifiques se trouvant dans experimental
tout en suivant
unstable
. Vous listez toutes les archives nécessaires
dans fichier « /etc/apt/sources.list
» de la
manière suivante :
deb http://ftp.us.debian.org/debian/ unstable main contrib non-free deb http://ftp.us.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing/updates main contrib
La valeur de Pin-Priority par défaut pour l’archive
experimental
est toujours de 1 (<<100) car c'est
une archive NotAutomatic (voir Section 2.5.3, « Fichiers « Release » au niveau de l’archive »). Il n'y a pas besoin de définir
explicitement de valeur de Pin-Priority dans le fichier
« /etc/apt/preferences
» simplement pour
utiliser l’archive experimental
à moins que vous ne
désiriez suivre des paquets particulier dans cette archive de manière
automatique pour la mise à niveau suivante.
Les archives du squeeze-updates et backports.debian.org fournissent des
paquets mis à niveau pour stable
(squeeze
).
N'utilisez pas tous les paquets disponibles dans des archives NotAutomatic telles que
squeeze-backports
. N'utilisez que des paquets
sélectionnés qui répondent à vos besoins.
Voici un exemple de technique d'épinglage
apt pour inclure une version amont plus récente de paquets
spécifiques se trouvant dans squeeze-backports
tout en suivant squeeze
et
squeeze-updates
. Vous listez tous les archives
nécessaires dans le fichier
« /etc/apt/sources.list
» comme suit :
deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free deb http://security.debian.org/ squeeze/updates main contrib deb http://ftp.us.debian.org/debian/ squeeze-updates main contrib non-free deb http://backports.debian.org/debian-backports/ squeeze-backports main contrib non-free
La valeur de Pin-Priority par défaut pour l’archive backports.debian.org est toujours de 1
(<<100) car c'est une archive NotAutomatic (voir Section 2.5.3, « Fichiers « Release » au niveau de l’archive »). Il n'y a pas besoin de définir
explicitement de valeur de Pin-Priority dans le fichier
« /etc/apt/preferences
» simplement pour
utiliser l’archive backports.debian.org à moins que vous ne
désiriez suivre des paquets particulier dans cette archive de manière
automatique pour la mise à niveau suivante.
Donc, chaque fois que vous désirerez installer un paquet nommé
« <nom_paquet>
» avec ses dépendances
depuis l’archive squeeze-backports
, vous
utiliserez la commande suivante en changeant de version cible avec l’option
« -t
» :
$ sudo apt-get install -t squeeze-backports <package-nom_paquet>
Si vous désirez mettre à niveau des paquets particuliers, vous devez créer
le fichier « /etc/apt/preferences
» et y lister
explicitement tous les paquets comme suit :
Package: <package-1> Pin: release o=Backports.org archive Pin-Priority: 700
Vous pouvez aussi configurer le fichier
« /etc/apt/preferences
» de la manière
suivante :
Package: * Pin: release a=stable , o=Debian Pin-Priority: 500 Package: * Pin: release a=squeeze-updates, o=Debian Pin-Priority: 500 Package: * Pin: release a=squeeze-backports, o=Backports.org archive Pin-Priority: 200
L’exécution d’« apt-get upgrade
» et
« apt-get dist-upgrade
» (ou
« aptitude safe-upgrade
» et
« aptitude full-upgrade
») met à niveau les
paquets qui avaient été installés depuis l’archive stable
en utilisant l’archive stable
actuelle et les paquets qui
avaient été installés depuis d'autres archives en utilisant l’archive
actuelle correspondante pour toutes les archives figurant dans le fichier
« /etc/apt/sources.list
».
Le paquet apt
est diffusé avec son propre script
d'événements planifiés (cron)
« /etc/cron.daily/apt
» afin de gérer le
téléchargement automatique de paquets. Ce script peut être amélioré afin
d'effectuer la mise à niveau automatique des paquets en installant le paquet
unattended-upgrades
. Ceci peut être personnalisé à l’aide
de paramètres se trouvant dans
« /etc/apt/apt.conf.d/02backup
» et
« /etc/apt/apt.conf.d/50unattended-upgrades
»
comme décrit dans
« /usr/share/doc/unattended-upgrades/README
».
Le paquet unattended-upgrades
est principalement destiné
à des mises à jour de sécurité des systèmes stable
. Si le
risque de casser un système stable
existant par la mise à
niveau automatique est plus faible que celui d'avoir un système cassé par un
intrus utilisant une de ses failles de sécurité qui a été fermée par une
mise à jour de sécurité, vous devriez envisager d'utiliser cette mise à
niveau automatique avec les paramètres de configuration suivants :
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1";
Si vous faites tourner un système unstable
, vous ne
devriez pas utiliser les mises à niveau automatiques car ceci cassera
probablement votre système un jour ou l’autre. Même dans ce cas, avec
unstable
, vous pourrez télécharger des paquets à l’avance
afin de gagner du temps pour la mise à niveau interactive avec les
paramètres de configuration suivants :
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "0";
Si vous désirez limiter la bande passante utilisée par APT à, par exemple, 800Kib/sec (=100kio/sec), vous devrez configurer APT avec son paramètre de configuration comme suit :
APT::Acquire::http::Dl-Limit "800";
Le retour vers une version antérieure n'est pas officiellement géré par Debian dans sa conception. Ce ne devrait être fait qu'en tant que partie d'un processus de récupération d'urgence. Malgré cette situation, on sait que cela fonctionne bien pour de nombreux incidents. Avec les systèmes critiques vous devrez effectuer un sauvegarde des données importantes du système après l’opération de récupération et réinstaller le nouveau système depuis le départ.
Vous pouvez être assez chanceux pour revenir en arrière depuis une archive
plus récente vers une archive plus ancienne afin de récupérer une mise à
jour du système en manipulant la version
candidate (voir Section 2.7.3, « Ajuster la version candidate »). Cette méthode est un remplacement
de paresseux des nombreuses et fastidieuses commandes « dpkg
-i <paquet-cassé>_<ancienne-version>.deb
» (voir
Section 2.6.4, « Récupération avec la commande dpkg »).
Recherchez les lignes du fichier
« /etc/apt/sources.list
» permettant de suivre
unstable
ayant la forme suivante :
deb http://ftp.us.debian.org/debian/ sid main contrib non-free
Remplacez-la avec la suivante pour suivre testing
:
deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free
Définissez comme suit le fichier
« /etc/apt/preferences
» :
Package: * Pin: release a=testing Pin-Priority: 1010
Lancez « apt-get dist-upgrade
» pour forcer
l’installation à une version antérieure des paquets du système.
Supprimez ce fichier spécial
« /etc/apt/preferences
» après ce retour en
arrière d'urgence.
C'est une bonne idée de supprimer (sans purger) autant de paquets que possible afin de limiter les problèmes de dépendances. Vous devrez peut-être supprimer et installer manuellement un certain nombre de paquets afin de remettre le système dans un étant antérieur. Le noyau de Linux, le gestionnaire d'amorçage, udev, PAM, APT, et les paquets relatifs au réseau ainsi que leurs fichiers de configuration demandent une attention particulière.
Bien que le nom du responsable figure dans
« /var/lib/dpkg/available
» et
« /usr/share/doc/package_name/changelog
»
procure quelques informations sur « qui se trouve derrière l’activité
de construction des paquets », celui qui a réellement chargé le paquet
est un peu obscur. who-uploads
(1) dans le paquet
devscripts
identifie celui qui a réellement chargé les
paquets sources Debian.
Si vous devez compiler un programme à partir de ses sources pour remplacer
un paquet Debian, le mieux est d'en faire un paquet local réellement
« debianisé » (*.deb
) et d'utiliser une archive
privée.
Si vous choisissez de compiler un programme depuis ses sources et de
l’installer plutôt sous « /usr/local
», vous
pouvez avoir besoin d'utiliser equivs
en dernier ressort
pour satisfaire les dépendances des paquets manquants.
Package: equivs Priority: extra Section: admin Description: Passer outre les dépendances de paquets. Ceci est paquet qui peut être utilisé pour créer des paquets Debian qui ne contiennent que des informations sur les dépendances.
Pour des mises à niveau partielles du système stable
, il
est souhaitable de reconstruire un paquet dans son environnement en
utilisant le paquet source. Ceci évite des mises à niveau massives de
paquets en raison de leurs dépendances.
Ajoutez les entrées suivantes au fichier
« /etc/apt/sources.list
» d'un système
stable
:
deb-src http://http.us.debian.org/debian unstable main contrib non-free
Installez les paquets nécessaires à la compilation et téléchargez les sources comme suit :
# apt-get update # apt-get dist-upgrade # apt-get install fakeroot devscripts build-essential $ apt-get build-dep toto $ apt-get source toto $ cd toto*
Ajustez les paquets installés si nécessaire.
Exécutez ce qui suit :
$ dch -i
Incrémentez la version du paquet, en ajoutant, par exemple
« +bp1
» dans
« debian/changelog
»
Construisez les paquets et installez-les sur le système en faisant ce qui suit :
$ debuild $ cd .. # debi toto*.changes
Comme effectuer le miroir complet d'une sous-section d'une archive Debian
gaspille de l’espace disque et de la bande passante du réseau, il est
souhaitable, lorsque vous administrez de nombreux systèmes sur le LAN, de mettre en œuvre un serveur mandataire
(« proxy ») local pour APT. APT peut être configuré pour utiliser
un serveur mandataire web (http) générique comme squid
(voir Section 6.10, « Autres serveurs d'applications réseau ») tel que décrit
dans apt.conf
(5) et dans
« /usr/share/doc/apt/examples/configure-index.gz
».
La variable d'environnement « $http_proxy
»
peut être utilisée pour outrepasser le serveur mandataire définit dans le
fichier « /etc/apt/apt.conf
».
Il y a des outils de proxy spécifiques pour l’archive Debian. Vous devriez consulter le BTS avant de les installer.
Tableau 2.19. Liste des outils de proxy spécifiques à l’archive Debian
paquet | popcon | taille | description |
---|---|---|---|
approx *
|
V:0.3, I:0.3 | 3896 | serveur proxy avec cache pour les fichiers de l’archive Debian (programme OCaml compilé) |
apt-cacher *
|
V:0.3, I:0.4 | 308 | proxy avec cache pour les paquets et les fichiers source Debian (programme Perl) |
apt-cacher-ng *
|
V:0.3, I:0.4 | 1092 | proxy avec cache pour la distribution de paquets de logiciel (programme C++ compilé) |
debtorrent *
|
V:0.12, I:0.17 | 1185 | proxy bittorrent pour le téléchargement de paquets Debian (programme Python) |
Lors que Debian réorganise la structure de son archive, ces outils de proxy spécialisés ont tendance à exiger que le code soit réécrit par le responsable du paquet et peuvent ne plus fonctionner pendant un certain temps. D'un autre côté, les serveur mandataires web (http) génériques sont plus robustes et s'accommodent plus facilement de tel changements.
Voici un exemple de création d'une petite archive publique de paquets compatible avec le système moderne d'APT sécurisée system (voir Section 2.5.2, « Fichier « Release » de plus haut niveau et authenticité »). Définissons un certain nombre de choses :
toto
»
www.example.com
»
apt-utils
,
gnupg
, et autres paquets
http://www.example.com/~toto/
» (
→ « /home/foo/public_html/index.html
»)
amd64
»
Créez une clé d'archive APT de Toto sur votre serveur en faisant ce qui suit :
$ ssh foo@www.example.com $ gpg --gen-key ... $ gpg -K ... sec 1024D/3A3CB5A6 2008-08-14 uid Toto (ARCHIVE KEY) <toto@www.example.com> ssb 2048g/6856F4A7 2008-08-14 $ gpg --export -a 3A3CB5A6 >toto.public.key
Publiez le fichier contenant la clé de l’archive
« toto.public.key
» avec l’ID de clé
« 3A3CB5A6
» pour toto
Créez une arborescence d'archive appelée « Origin: Toto » comme suit :
$ umask 022 $ mkdir -p ~/public_html/debian/pool/main $ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64 $ mkdir -p ~/public_html/debian/dists/unstable/main/source $ cd ~/public_html/debian $ cat > dists/unstable/main/binary-amd64/Release << EOF Archive: unstable Version: 4.0 Component: main Origin: Foo Label: Foo Architecture: amd64 EOF $ cat > dists/unstable/main/source/Release << EOF Archive: unstable Version: 4.0 Component: main Origin: Foo Label: Foo Architecture: source EOF $ cat >aptftp.conf <<EOF APT::FTPArchive::Release { Origin "Foo"; Label "Foo"; Suite "unstable"; Codename "sid"; Architectures "amd64"; Components "main"; Description "Archive publique de Toto"; }; EOF $ cat >aptgenerate.conf <<EOF Dir::ArchiveDir "."; Dir::CacheDir "."; TreeDefault::Directory "pool/"; TreeDefault::SrcDirectory "pool/"; Default::Packages::Extensions ".deb"; Default::Packages::Compress ". gzip bzip2"; Default::Sources::Compress "gzip bzip2"; Default::Contents::Compress "gzip bzip2"; BinDirectory "dists/unstable/main/binary-amd64" { Packages "dists/unstable/main/binary-amd64/Packages"; Contents "dists/unstable/Contents-amd64"; SrcPackages "dists/unstable/main/source/Sources"; }; Tree "dists/unstable" { Sections "main"; Architectures "amd64 source"; }; EOF
Vous pouvez automatiser les mises à jour répétitives du contenu de l’archive
APT sur votre serveur en configurant dupload
.
Placez tous les fichiers de paquets dans
« ~toto/public_html/debian/pool/main/
» en
exécutant « dupload -t toto changes_file
» dans
le client avec « ~/.dupload.conf
» contenant
ce qui suite :
$cfg{'toto'} = { fqdn => "www.example.com", method => "scpb", incoming => "/home/toto/public_html/debian/pool/main", # dinstall de ftp-master s'envoie lui-même des courriels dinstall_runs => 1, }; $cfg{'toto'}{postupload}{'changes'} = " echo 'cd public_html/debian ; apt-ftparchive generate -c=aptftp.conf aptgenerate.conf; apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ; rm -f dists/unstable/Release.gpg ; gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'| ssh toto@www.example.com 2>/dev/null ; echo 'Archive de paquets créée.'";
Le script automatique (« hook » postupload lancé par dupload
(1)
crée une archive mise à jour des fichiers lors de chaque dépôt
(« upload »).
Vous pouvez ajouter cette petite archive publique à la ligne apt de votre système client par ce qui suit :
$ sudo bash # echo "deb http://www.example.com/~foo/debian/ unstable main" \ >> /etc/apt/sources.list # apt-key add toto.public.key
Si l’archive est située sur le système de fichiers local, vous pouvez
utiliser à la place « deb file:///home/toto/debian/
…
».
Vous pouvez faire une copie locale de l’état de la sélection des paquets et de debconf à l’aide des commandes suivantes :
# dpkg --get-selections '*' > selection.dpkg # debconf-get-selections > selection.debconf
Ici, « *
» fait que
« selection.dpkg
» comportera aussi les entrées
de paquets à « purger ».
Vous pouvez transférer ces 2 fichiers vers un autre ordinateur, et les y installer avec :
# dselect update # debconf-set-selections < myselection.debconf # dpkg --set-selections < myselection.dpkg # apt-get -u dselect-upgrade # ou dselect install
Si vous envisagez de gérer de nombreux serveur dans une grappe avec
pratiquement la même configuration, vous devriez envisager d'utiliser un
paquet spécialisé tel que fai
pour gérer l’ensemble du
système.
alien
(1) permet de convertir des paquets binaires fournis
dans les fichiers de format rpm
de Red Hat,
slp
, de Stampede, tgz
de Slackware et
pkg
de Solaris sous forme de paquet
deb
de Debian. Si vous voulez utiliser des paquets d'une
autre distribution Linux que celle sur laquelle vous avez installé sur votre
système, vous pouvez utiliser alien
pour les convertir
depuis votre format de paquets préféré et les installer. alien
prend aussi en charge les paquets LSB.
alien
(1) ne devrait pas être utilisé pour remplacer des
paquets essentiels du système, tels que sysvinit
,
libc6
, libpam-modules
, etc. En
pratique, alien
(1) ne devrait être utilisé que pour des
paquets non libres uniquement binaires
qui soient conforme à LSB et liés statiquement. Pour les logiciels libres,
vous devriez utiliser leur paquet source pour en faire de vrais paquets
Debian.
Le contenu du paquet « *.deb
» actuel peut être
extrait sans utiliser dpkg
(1) sur un environnement
quelconque Unix-like en utilisant les
commandes standard ar
(1) et tar
(1).
# ar x /path/to/dpkg_<version>_<arch>.deb # ls total 24 -rw-r--r-- 1 bozo bozo 1320 2007-05-07 00:11 control.tar.gz -rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz -rw-r--r-- 1 bozo bozo 4 2007-05-07 00:11 debian-binary # mkdir control # mkdir data # tar xvzf control.tar.gz -C control # tar xvzf data.tar.gz -C data
Vous pouvez aussi parcourir le contenu du paquet en utilisant la commande
mc
.
Vous pouvez en apprendre davantage sur la gestion des paquets dans les documentations suivantes :
Documentations primaires sur la gestion des paquets :
aptitude
(8), dpkg
(1),
tasksel
(8), apt-get
(8),
apt-config
(8), apt-key
(8),
sources.list
(5), apt.conf
(5), and
apt_preferences
(5) ;
/usr/share/doc/apt-doc/guide.html/index.html
»
et
« /usr/share/doc/apt-doc/offline.html/index.html
»
du paquet apt-doc
;
/usr/share/doc/aptitude/html/en/index.html
»
du paquet aptitude-doc-fr
.
Documentations officielles et détaillées sur l’archive Debian :
Didacticiel pour la construction d'un paquet Debian pour les utilisateurs Debian :
En tant tant qu'administrateur du système, il est sage que vous sachiez en gros comment le système Debian est démarré et configuré. Bien que les détails exacts figurent dans les fichiers sources des paquets installés et dans leurs documentations, c'est un peu pénible pour la plupart d'entre-nous.
J'ai fait de mon mieux pour fournir un aperçu rapide des points-clés du système Debian et de sa configuration pour vous servir de référence en me basant sur mes propres connaissances actuelles et antérieures et celles des autres. Comme le système Debian est une cible changeante, la situation sur le système peut avoir changé. Avant de faire une quelconque modification au système, vous devrez vous référer à la dernière documentation de chacun des paquets.
Le système informatique subit plusieurs phases de processus d'amorçage (« boot strap process ») depuis l’événement de mise sous tension jusqu'à ce qu'il offre à l’utilisateur un système d'exploitation (OS) pleinement fonctionnel.
Pour des raison de simplicité, je limiterai la discussion à une plateforme PC typique avec l’installation par défaut.
Le processus d'amorçage typique est comme une fusée à quatre étages. Chaque étage de la fusée passe le contrôle du système à l’étage suivant.
Bien entendu, elles peuvent être configurées de manière différente. Par exemple, si vous avez compilé votre propre noyau, vous pouvez sautez l’étape avec le système mini-Debian. Ne supposez donc pas que c'est le cas sur votre système avant de l’avoir vérifié vous-même.
Pour les plateformes autres que les PC traditionnels tels que les systèmes SUN ou Macintosh, le BIOS sur la ROM et la partition sur le disque peuvent être assez différents (Section 9.3.1, « Configuration de la partition du disque »). Veuillez dans ce cas rechercher ailleurs une documentation spécifique à votre plateforme.
Le BIOS est la première étape du processus d'amorçage, il est est démarré par l’événement de mise sous tension. Le BIOS, qui est implanté sur une mémoire à lecture seule (ROM), est exécuté depuis l’adresse mémoire particulière à laquelle le pointeur de programme de la CPU est initialisé par l’événement de mise sous tension.
Ce BIOS effectue l’initialisation de base du matériel (POST : autotest à la mise sous tension) (« power on self test ») et passe le contrôle du système à l’étape suivante que vous luis indiquez. Le BIOS est habituellement fourni avec le matériel.
L’écran de démarrage du BIOS indique en général quelle(s) touche(s) presser pour entrer dans l’écran de configuration du BIOS afin de paramétrer son comportement. Des touches courantes sont F1, F2, F10, Échap, Ins et Suppr. Si l’écran de démarrage de votre BIOS est caché par un bel écran graphique, vous pouvez essayer de presser différentes touches comme Échap pour désactiver cet écran. Ces touches dépendent beaucoup du matériel.
L’emplacement du matériel et la priorité du code lancé par le BIOS peuvent être définis depuis l’écran de configuration du BIOS. Typiquement, quelques secteurs de début du premier périphérique sélectionné qui est trouvé (disque dur, disquette, CD-ROM, …) sont chargés en mémoire et le code initial est exécuté. Ce code peut être l’un des suivants :
Typiquement, le système est amorcé depuis la partition spécifiée du disque dur primaire. Les deux premiers secteurs du disque dur d'unPC traditionnel contiennent l’enregistrement maître d'amorçage (MBR). (« master boot record »). Les informations de partition du disque, y-compris la sélection de l’amorçage, sont enregistrée à la fin de ce MBR. Le code initial du chargeur d'amorçage exécuté depuis le BIOS occupe le reste de ce MBR.
Le chargeur initial (« boot loader ») est le deuxième étage du processus d'amorçage, il est lancé depuis le BIOS. Il charge en mémoire l’image du noyau du système et l’image initrd et leur passe le contrôle. Cette image mémoire initiale (« initrd image ») est l’image du système de fichiers racine et sa prise en compte dépend du chargeur initial utilisé.
Le système Debian utilise normalement le noyau de Linux comme noyau de système par défaut. L’image mémoire initiale de l’actuel noyau de Linux 2.6 est techniquement l’image initramfs (initial RAM filesystem : système de fichiers initial en mémoire). L’image initramfs est une archive cpio, compressée à l’aide de gzip des fichiers du système de fichiers racine.
L’installation par défaut du système Debian place, pour la plateforme PC, le premier étage du code du chargeur initial GRUB sur le MBR. Il existe de nombreux chargeurs d'amorçage et d'options de configuration possibles.
Tableau 3.1. Liste des chargeurs initiaux
chargeur initial | paquet | popcon | taille | initrd | description |
---|---|---|---|---|---|
GRUB Legacy | grub-legacy * | V:0.4, I:1.1 | 1984 | Supporté |
assez intelligent pour comprendre le partitionnement du disque et des
systèmes de fichiers tels que vfat, ext3, …. (par défaut sous
lenny )
|
GRUB 2 | grub-pc * | V:7, I:25 | 2480 | Supporté | assez intelligent pour comprendre le partitionnement du disque et des systèmes de fichiers tels que vfat, ext3, …. |
GRUB 2 | grub-rescue-pc * | V:0.04, I:0.5 | 3896 | Supporté | images de secours amorçables de GRUB 2 (CD et disquettes) (versions PC/BIOS) |
Lilo | lilo * | V:0.5, I:2 | 1236 | Supporté | réside sur les emplacements des secteurs de données du disque dur. (Ancien) |
Isolinux | syslinux * | V:1.3, I:8 | 204 | Supporté | il comprend le système de fichiers ISO9660. C'est utilisé pour le CD d'amorçage CD. |
Syslinux | syslinux * | V:1.3, I:8 | 204 | Supporté | il comprend le système de fichiers MSDOS (FAT). Il est utilisé par la disquette d'amorçage. |
Loadlin | loadlin * | V:0.03, I:0.2 | 144 | Supporté | un nouveau système est démarré depuis le système FreeDOS/MSDOS. |
MBR par Neil Turton | mbr * | V:0.8, I:5 | 96 | Non supporté | c'est un logiciel libre qui se substitue au MBR de MSDOS. Il ne comprend que les partitions sur disques. |
Ne jouez pas avec les chargeurs d'amorçage sans avoir un support de secours
amorçable (CD ou disquette) créé à partir des images du paquet
grub-rescue-pc
. Il vous permettra de démarrer votre
système sans même avoir de chargeur initial fonctionnel sur le disque dur.
Le menu de configuration de GRUB Legacy est situé en
« /boot/grub/menu.lst
». Il peut, par exemple,
avoir les entrées suivantes :
title Debian GNU/Linux root (hd0,2) kernel /vmlinuz root=/dev/hda3 ro initrd /initrd.img
Le fichier de menu de configuration de GRUB 2 est situé en
/boot/grub/grub.cfg
». Il est automatiquement
créé par « /usr/sbin/update-grub
» depuis les
modèles situés dans « /etc/grub.d/*
» et les
paramètres situés en « /etc/default/grub
». Il
peut, par exemple, avoir les entrées suivantes :
menuentry "Debian GNU/Linux" { set root=(hd0,3) linux /vmlinuz root=/dev/hda3 initrd /initrd.img }
Les paramètres de GRUB pour ces exemples ont la signification suivantes :
Tableau 3.2. Signification des paramètres de GRUB
Paramètres de GRUB | signification |
---|---|
root
|
utiliser la 3ème partition du premier disque en la désignant par
« (hd0,2) » avec GRUB legacy ou par
« (hd0,3) » dans GRUB 2
|
kernel
|
utiliser le noyau se trouvant en « /vmlinuz »
avec le paramètre du noyau : « root=/dev/hda3
ro »
|
initrd
|
utiliser l’image initrd/initramfs
située en « /initrd.img »
|
La valeur du numéro de partition utilisé par le programme « GRUB legacy » est inférieure d'un unité à celle normalement utilisée par le noyau de Linux et les outils utilitaires. Le programme GRUB 2 corrige ce problème.
Un UUID (voir Section 9.3.2, « Accès à une partition en utilisant l’UUID ») peut être utilisé pour
identifier un périphérique spécial par bloc plutôt que son nom de fichier
comme « /dev/hda3
», par exemple,
« root=UUID=81b289d5-4341-4003-9602-e254a17ac232
ro
».
Vous pouvez démarrer un chargeur d'amorçage depuis un autre chargeur d'amorçage en utilisant une technique appelée chargement en chaîne (« chain loading »).
Voir « info grub
» et
grub-install
(8).
Le système mini-Debian est la troisième étape du processus d'amorçage lancé par le chargeur d'amorçage. Elle lance le noyau du système avec son système de fichiers racine en mémoire. C'est une étape préparatoire optionnelle du processus de démarrage.
Le terme « système mini-Debian » est utilisé par l’auteur pour décrire dans ce document cette 3ème étape du processus de démarrage. On désigne souvent ce système par système initrd. Un système semblable en mémoire est utilisé par l’installateur Debian.
Le script « /init
» est exécuté en tant que
premier programme sur le système de fichiers racine en mémoire. C'est un
script de l’interpréteur de commandes qui initialise le noyau dans l’espace
utilisateur et passe le contrôle au reste de l’étage. Ce système mini-Debian
offre au système d'amorçage une flexibilité comme l’ajout de modules du
noyau avant le processus de démarrage principal ou le montage du système de
fichiers racines en mode chiffré.
Vous pouvez interrompre cette partie du processus d'amorçage afin d'obtenir
l’invite de l’interpréteur de l’administrateur en indiquant
« break=init
» etc. comme paramètre de
démarrage du noyau. Voir le script « /init
»
pour d'autres conditions d'interruption. Cet environnement d'interpréteur de
commandes est suffisamment sophistiqué pour effectuer une bonne inspection
du matériel de votre machine.
Les commandes disponibles avec ce système mini-Debian sont des commandes
réduites et sont principalement fournies par un outil GNU appelé
busybox
(1).
Vous devrez utiliser l’option « -n
» de la
commande mount
lorsque vous êtes sur le système de
fichiers en lecture seule.
Tableau 3.3. Voici une liste d'utilitaires d'amorçage initial pour le système Debian :
paquet | popcon | taille | description |
---|---|---|---|
initscripts *
|
V:91, I:99 | 284 | scripts pour initialiser et arrêter le système |
sysvinit *
|
V:85, I:99 | 208 |
Utilitaires init (8) de type System-V
|
sysv-rc *
|
V:91, I:99 | 300 | Mécanisme de changement de niveau de fonctionnement de type System-V |
sysvinit-utils *
|
V:91, I:99 | 224 |
Utilitaires de type System-V (startpar (8),
bootlogd (8), ...)
|
lsb-base *
|
V:91, I:99 | 36 | Linux Standard Base 3.2 fonctionnalité de script d'initialisation |
insserv *
|
V:22, I:26 | 292 | outil pour organiser la séquence de démarrage en utilisant les dépendances du script LSB de init.d |
upstart *
|
V:0.15, I:0.2 | 700 |
démon init (8) basé sur des événements pour la concurrence
(remplacement de sysvinit )
|
readahead-fedora *
|
V:0.3, I:0.5 | 144 |
readahead (8) pour précharger les fichiers nécessaires au
démarrage ;
|
uswsusp *
|
V:4, I:14 | 536 | outil permettant d'utiliser le programme de l’espace utilisateur de mise en veille fourni par Linux |
kexec-tools *
|
V:0.17, I:0.5 | 320 |
outil kexec pour le redémarrage par kexec (8) (redémarrage
à chaud)
|
bootchart *
|
V:0.13, I:0.7 | 132 | analyseur des performances du processus de démarrage |
bootchart-view *
|
V:0.10, I:0.6 | 280 | analyseur des performances du processus de démarrage (virtualisation) |
mingetty *
|
V:0.2, I:0.5 | 64 |
getty (8) en mode console uniquement
|
mgetty *
|
V:0.19, I:0.6 | 416 |
modem intelligent (« smart modem ») remplaçant de
getty (8)
|
Cette section décrit le démarrage classique dans le style System V sur lenny
. Debian se
tourne vers un système de démarrage piloté par événements. Voir Le futur du système d'amorçage de
Debian et Séquence de
démarrage basée sur des dépendances.
Tous les mécanismes de redémarrage sont compatibles par l’intermédiaire des
scripts « /etc/init.d/rc
»,
« /etc/init.d/rcS
»,
« /usr/sbin/update-rc.d
» et
« /usr/sbin/invoke-rc.d
».
Le paquet readahead-fedora
peut accélérer le démarrage
d'un système équipé d'une quantité suffisante de DRAM.
Le système Debian normal est le quatrième étage du processus d'amorçage, il est lancé par le système mini-Debian. Le noyau du système mini-Debian continue de tourner dans cet environnement. Le système de fichiers racine passe de celui en mémoire à celui, réel, lu sur le disque dur.
Le programme « /sbin/init
» est exécuté en tant
que premier programme et réalise le processus principal d'amorçage. Debian
utilise normalement le schéma sysvinit traditionnel à l’aide du paquet
sysv-rc
. Voir init
(8),
inittab
(5) et
« /usr/share/doc/sysv-rc/README.runlevels.gz
»
pour une explication exacte. Le processus d'amorçage principal effectue
essentiellement ce qui suit :
/etc/inittab
».
Le niveau de fonctionnement initial utilisé pour le mode multi-utilisateurs
est indiqué par le paramètre de démarrage
« init=
» du noyau ou par la ligne
« initdefault » du fichier
« /etc/inittab
». Le système Debian tel qu'il
est installé démarre au niveau de fonctionnement
2.
Tous les fichiers de scripts réels exécutés par le système init sont situés
dans le répertoire « /etc/init.d/
».
Chaque niveau de fonctionnement utilise un répertoire pour sa configuration, il possède la signification particulière décrite ci-dessous :
Tableau 3.4. Liste des niveaux de fonctionnement et description de leur utilisation
niveau de fonctionnement | répertoire | description de l’utilisation du niveau de fonctionnement (runlevel) |
---|---|---|
N
|
aucun |
niveau d'amorçage du système (NONE) (pas de répertoire
« /etc/rcN.d/ »)
|
0
|
/etc/rc0.d/
|
arrêter le système |
S
|
/etc/rcS.d/
|
mode utilisateur unique lors du démarrage (alias :
« s »)
|
1
|
/etc/rc1.d/
|
mode utilisateur unique commuté depuis le mode multi-utilisateurs |
2
|
/etc/rc2.d/
|
mode multi-utilisateurs |
3
|
/etc/rc3.d/
|
,, |
4
|
/etc/rc4.d/
|
,, |
5
|
/etc/rc5.d/
|
,, |
6
|
/etc/rc6.d/
|
redémarrer le système |
7
|
/etc/rc7.d/
|
mode multi-utilisateurs valable mais normalement non utilisé |
8
|
/etc/rc8.d/
|
,, |
9
|
/etc/rc9.d/
|
,, |
Vous pouvez aussi changer de niveau de fonctionnement depuis la console, par exemple 4 en faisant ce qui suit :
$ sudo telinit 4
Le système Debian n'assigne pas par avance de différence spéciale de signification entre les niveaux de fonctionnement compris entre de 2 et 5.. L’administrateur du système d'un système Debian peut modifier ce comportement. (C'est-à-dire que Debian n'est ni Red Hat Linux, ni Solaris de Sun Microsystems, ni HP-UX de Hewlett Packard, ni AIX d'IBM, ni …)
Le système Debian ne remplit pas les répertoires des niveaux de fonctionnement entre 7 et 9 lors de l’installation du paquet. Les variantes d’Unix traditionnelles n'utilisent pas ces niveaux de fonctionnement.
Dans Debian squeeze
, la dépendance basée sur l’ordre de
démarrage fournies par le paquet insserv
est utilisée en
remplacement de l’ordre alphabétique classique. la valeur
« CONCURRENCY
» dans «
/etc/default/rcS
» contrôle sont niveau de
concurrence, « none
» signifie qu’il n’y a pas
de concurrence, « startpar
» pour la
concurrence au sein d’un même numéro de séquence ou
« makefile
» pour une concurrence
complète. Voir
« /usr/share/doc/insserv/README.Debian
».
Le nom du lien symbolique dans chaque répertoire de niveau de fonctionnement
est de la la forme
« S<nombre_sur_2_digits><nom_origine>
»
ou
« K<nombre_sur_2_digits><nom_origine>
».
Le nombre_sur_2_digits est utilisé pour déterminer l’ordre dans lequel les
scripts seront lancés. « S
» signifie
« Start » (lancement) et « K
»
signifie « Kill » (tuer).
Avec « CONCURRENCY=none
», lorsque la commande
init
(8) ou telinit
(8) arrive au niveau
« <n> », elle exécute les scripts suivants :
/etc/rc<n>.d/
»
commençant par un « K
» sont exécutés dans
l’ordre alphabétique avec le paramètre unique
« stop
» (arrêt des services).
/etc/rc<n>.d/
»
commençant par un « S
» sont exécutés dans
l’ordre alphabétique avec le paramètre unique
« start
» (lancement des services).
Par exemple, si vous avez les liens
« S10sysklogd
» et
« S20exim4
» dans un répertoire de niveau de
fonctionnement, « S10sysklogd
» qui est lié
symboliquement à « ../init.d/sysklogd
» sera
lancé avant « S20exim4
» qui est lié
symboliquement à « ../init.d/exim4
».
Pour « CONCURRENCY=makefile
» (nouvelle valeur
par défaut), on utilise la dépendance du paquet définie dans les scripts
d’initialisation pour les séquencer.
Il n'est pas conseillé de faire des changements quelconques aux liens
symboliques se trouvant dans « /etc/rcS.d/
» à
moins que vous n'en sachiez davantage que le responsable du paquet.
Définissons, par exemple, définissons un niveau de fonctionnement du système comme Red Hat Linux de la manière suivante :
init
démarre le système au niveau 3 qui est la valeur par
défaut ;
init
ne démarre pas gdm
(1) aux niveaux
0,1,2,6 ;
init
démarre gdm
(1) aux niveaux
3,4,5 ;
Ceci peut être fait en éditant le fichier
« /etc/inittab
» afin de modifier les niveaux
de lancement et en utilisant des outils conviviaux de gestion des niveaux de
fonctionnement tels que sysv-rc-conf
ou
bum
pour éditer le niveau de fonctionnement. Si vous ne
devez utiliser que la ligne de commande, voici comment faire (après
l’installation par défaut du paquet gdm
et sa sélection
comme gestionnaire d'affichage).
# cd /etc/rc2.d ; mv S21gdm K21gdm # cd /etc ; perl -i -p -e 's/^id:.:/id:3:/' inittab
Veuillez noter que le fichier
« /etc/X11/default-display-manager
» est
vérifié lors du démarrage des démon de gestion d'affichage :
xdm
, gdm
, kdm
, et
wdm
.
Vous pouvez toujours lancer X depuis l’interpréteur de commandes de
n'importe quelle console avec la commande startx
(1).
Le paramètre par défaut de chacun des scripts d'initialisation de
« /etc/init.d/
» est donné par le fichier
correspondant se trouvant dans
« /etc/default/
» qui ne contient que des assignations de variables
d'environnement. Ce choix de nom de répertoire est spécifique au système
Debian. Il est en gros l’équivalent du répertoire
« /etc/sysconfig
» qu'on trouve dans Red Hat Linux et d'autres distributions. Par
exemple, « /etc/default/cron
» peut être
utilisé pour contrôler la manière dont fonctionne
« /etc/init.d/cron
».
Le fichier « /etc/default/rcS
» peut être
utilisé pour personnaliser les valeurs par défaut au moment du démarrage
demotd
(5), sulogin
(8), etc.
Si vous ne pouvez pas obtenir le comportement que vous souhaitez en modifiant ces variables, alors vous pouvez modifier les scripts init eux-mêmes. Ce sont des fichiers de configuration qui peuvent être édités par les administrateurs du système.
Le noyau conserve le nom de machine du
système. Le script d'initialisation du niveau de fonctionnement S qui est
lié symboliquement à
« /etc/init.d/hostname.sh
» définit le nom de
machine « hostname » au moment du démarrage (en utilisant la
commande hostname
) avec le nom qui est enregistré dans
« /etc/hostname
». Ce fichier ne devra
contenirque le nom de machine du système
et pas un nom de domaine pleinement qualifié.
Pour afficher le nom de la machine utilisée, lancez la commande
hostname
(1) sans paramètre.
Alors que le système de fichiers racine est monté par le noyau lors de son démarrage, les autres systèmes de fichiers sont montés dans le niveau de fonctionnement (runlevel) S à l’aide des scripts d'initialisation suivants :
`/etc/init.d/mountdevsubfs.sh
» pour les
systèmes de fichiers du noyau se trouvant en
« /proc
»,
« /sys
», etc.
`/etc/init.d/mountdevsubfs.sh
» pour les
systèmes de fichier virtuels de « /dev
»
`/etc/init.d/mountall.sh
» pour les systèmes
de fichiers normaux qui utilisent « /etc
/fstab
»
`/etc/init.d/mountnfs.sh
» pour les systèmes
de fichiers à accès par le réseau en utilisant
« /etc/fstab
»
Les options de montage du système de fichiers sont définies dans
« /etc/fstab
». Voir Section 9.3.5, « Optimisation du système de fichiers à l’aide des options de montage ».
Le montage effectif des systèmes de fichiers à accès par le réseau attendra le démarrage de l’interface réseau.
Une fois de tous les systèmes de fichiers montés, les fichiers temporaires
se trouvant dans « /tmp
»,
« /var/lock
» et
« /var/run
» sont effacés lors de chaque
démarrage du système.
Les interfaces réseau sont initialisées dans le niveau de fonctionnement S
par le script d'initialisation ayant un lien symbolique vers
« /etc/init.d/ifupdown-clean
» et
« /etc/init.d/ifupdown
». Voir Chapitre 5, Configuration du réseau pour la manière de les configurer.
De nombreux services réseau (voir Chapitre 6, Applications réseau)
sont directement démarrés en tant que démons sous le mode multi-utilisateurs
lors du démarrage du système par le script d'initialisation, par exemple
« /etc/rc2.d/S20exim4
» (pour RUNLEVEL=2) qui
est un lien symbolique vers
« /etc/init.d/exim4
».
Certains services réseau peuvent être démarrés à la demande en utilisant le
super-serveur inetd
(ou un équivalent). inetd
est lancé lors au démarrage du
système par « /etc/rc2.d/S20inetd
» (pour
RUNLEVEL=2) qui est un lien symbolique vers
« /etc/init.d/inetd
». Fondamentalement,
inetd
permet à un démon en cours de fonctionnement d'en
appeler plusieurs autres, ce qui réduit la charge du système.
Lorsqu'une requête pour un service arrive au super-serveur inetd
, le
protocole et le service sont identifiés par une recherche dans les bases de
données se trouvant dans « /etc/protocols
» et
« /etc/services
». inetd
recherche ensuite un service Internet normal dans la base de données
« /etc/inetd.conf
» ou un service basé sur
Open Network Computing
Remote Procedure Call (ONC RPC)/Sun RPC dans
« /etc/rpc.conf
».
Parfois, inetd
ne lance pas directement le serveur voulu
mais exécute le programme d'enveloppe du démon
TCP/IP tcpd
(8) avec, en paramètre dans
« /etc/inetd.conf
», le service demandé. Dans
ce cas, tcpd
lance le serveur approprié après avoir
enregistré la requête dans le journal et avoir fait quelques autres
vérifications à l’aide de « /etc/hosts.deny
»
et « /etc/hosts.allow
».
Afin d'assurer la sécurité du système, désactivez autant de services réseau que possible. Voir Section 4.6.3, « Restreindre l’accès à certains services du serveur ».
Voir inetd
(8), inetd.conf
(5),
protocols
(5), services
(5),
tcpd
(8), hosts_access
(5),
hosts_options
(5), rpcinfo
(8),
portmap
(8) et
« /usr/share/doc/portmap/portmapper.txt.gz
».
Les messages du système peuvent être personnalisés au moyen de
« /etc/syslog.conf
» à la fois pour le fichier
journal et pour l’affichage à l’écran. Voir syslogd
(8) et
syslog.conf
(5). Voir aussi Section 9.2.2, « Analyseur de journaux ».
Les messages du noyau peuvent être personnalisés au moyen de
« /etc/init.d/klogd
» à la fois pour le fichier
journal et l’affichage à l’écran. Positionnez « KLOGD='-c
3'
» dans ce fichier et lancez
« /etc/init.d/klogd restart
». Voir
klogd
(8).
Vous pouvez modifier directement le niveau d'erreur des messages de la manière suivante :
# dmesg -n3
Tableau 3.5. Liste des niveaux d'erreur du noyau
valeur du niveau d'erreur | nom du niveau d'erreur | signification |
---|---|---|
0 | KERN_EMERG | le système est inutilisable |
1 | KERN_ALERT | une action doit être entreprise immédiatement |
2 | KERN_CRIT | conditions critiques |
3 | KERN_ERR | conditions d'erreur |
4 | KERN_WARNING | conditions d'avertissement |
5 | KERN_NOTICE | condition normale mais significative |
6 | KERN_INFO | information |
7 | KERN_DEBUG | messages du niveau de débogage |
Pour le noyau Linux 2.6, le système
udev fournit un mécanisme de découverte et d'initialisation
automatiques du matériel (voir udev
(7)). Lors de la
découverte de chaque périphérique par le noyau, le système udev lance un
processus utilisateur qui utilise les informations provenant du système de
fichiers sysfs (voir Section 1.2.12, « procfs et sysfs »), charge les modules du noyau nécessaires pour
sa prise en charge en utilisant le programme modprobe
(8)
(voir Section 3.5.12, « Initialisation des modules du noyau ») et crée les nœuds
de périphériques en conséquences.
Si
« /lib/modules/<kernel-version>/modules.dep
»
n'a pas été proprement créé par depmod
(8) pour quelque
raison, les modules peuvent ne pas être chargés par le système udev comme on
le souhaiterait. Lancez « depmod -a
» pour
corriger ce problème.
Le nom des nœuds de périphériques peut être configuré par les fichiers de
règle de udev se trouvant dans
« /etc/udev/rules.d/
». Les règles actuelles
par défaut tendent à créer des noms générés dynamiquement ce qui donne des
noms de périphériques non statiques excepté pour les périphériques cd et
réseau. En ajoutant vos règles personnalisées semblables à celles existantes
pour les périphériques cd et réseau, vous pouvez aussi créer des noms de
périphériques statiques pour les autres périphériques comme les clés
USB. Voir « Écrire des règles
udev » ou
« /usr/share/doc/udev/writing_udev_rules/index.html
».
Comme le système udev est une cible quelque peu mouvante, je laisse les détails pour d'autres documentations et je ne donnerai ici qu'un minimum d'informations.
Les nœuds de périphériques n'ont pas besoin d'être statiques pour les règles
de montage se trouvant dans
« /etc/fstab
». Vous pouvez utiliser UUID à la place de leur nom de périphérique tel
que« /dev/sda
» pour monter les périphériques
. Voir Section 9.3.2, « Accès à une partition en utilisant l’UUID ».
Le programme modprobe
(8) nous permet de configurer,
depuis un processus utilisateur, un noyau Linux en cours d'exécution en
ajoutant ou en supprimant des modules du noyau. Le système udev (voir Section 3.5.11, « Le système udev ») en automatise l’appel afin d'aider à
l’initialisation du module du noyau.
Il existe des modules non liés au matériels et des modules qui pilotent des
éléments matériels particuliers comme les suivants qui demandent à être
pré-chargés en les déclarant dans le fichier
« /etc/modules
» (vois
modules
(5)).
iptables
(8), Section 5.9, « Infrastructure de netfilter ») ;
Les fichiers de configuration du programme modprobe
(8) se
trouvent dans le répertoire
« /etc/modprobes.d/
» comme c'est expliqué dans
modprobe.conf
(5). (Si vous souhaitez que certains modules
du noyau ne soient pas chargés automatiquement, vous pouvez les mettre en
liste noire dans le
fichier« /etc/modprobes.d/blacklist
»).
Le fichier
« /lib/modules/<version>/modules.dep
»
généré par le programme depmod
(8) décrit les dépendances
des modules utilisés par le programme modprobe
(8).
Si vous rencontrez des problèmes de chargement de modules lors du chargement
des modules au démarrage ou avec modprobe
(8),
« depmod -a
» peut résoudre ces problèmes en
reconstruisant « modules.dep
».
Le programme modinfo
(8) affiche des informations
concernant les modules du noyau.
Le programme lsmod
(8) formate de manière agréable le
contenu de « /proc/modules
», affichant quels
sont les modules du noyau actuellement chargés.
Vous pouvez identifier le matériel exact installé sur votre système. Voir Section 9.6.3, « Identification du matériel ».
Vous pouvez configurer le matériel au moment du démarrage pour activer les fonctionnalités désirées de ce matériel. Voir Section 9.6.4, « Configuration matérielle ».
Vous pouvez ajouter la prise en charge de votre périphérique en recompilant le noyau. Voir Section 9.7, « Le noyau ».
Lorsqu'une personne (ou un programme) demande l’accès au système, l’authentification confirme que l’identité est autorisée.
Des erreurs de configuration de PAM peuvent vous mettre à la porte de votre propre système. Vous devez avoir un CD de secours prêt ou une partition de démarrage de remplacement. Pour restaurer, démarrez le système depuis l’un de ces moyens de secours et corrigez les choses depuis là.
L’authentification normale d’Unix est fournie le module
pam_unix
(8) avec PAM (Pluggable Authentication
Modules : « Modules attachables d'authentification »)
. Il y a 3 fichiers de configuration importants, dont les entrées
sont séparées par des « :
», ce sont :
Tableau 4.1. 3 fichiers de configuration importants pour pam_unix
(8)
fichier | autorisation | utilisateur | groupe | description |
---|---|---|---|---|
/etc/passwd
|
-rw-r--r--
|
root
|
root
|
informations des comptes utilisateurs (assainie) |
/etc/shadow
|
-rw-r-----
|
root
|
shadow
|
informations sécurisées des comptes utilisateurs |
/etc/group
|
-rw-r--r--
|
root
|
root
|
informations des groupes |
« /etc/passwd
» contient ce qui suit :
... utilisateur1:x:1000:1000:Nom Utilisateur1,,,:/home/utilisateur1:/bin/bash utilisateur2:x:1001:1001:Nom Utilisateur2,,,:/home/utilisateur2:/bin/bash ...
Comme il est expliqué dans passwd
(5), les entrées de ce
fichier, séparées par des « :
», ont la
signification suivante :
La seconde entrée de « /etc/passwd
» était
autrefois utilisée comme entrée de mot de passe chiffré. Depuis
l’introduction de « /etc/shadow
», cette
entrée est utilisée comme entrée de spécification du mot de passe.
Tableau 4.2. Contenu de la seconde entrée de « /etc/passwd
»
contenu | signification |
---|---|
(vide) | compte sans mot de passe |
x |
le mot de passe chiffré se trouve dans
« /etc/shadow »
|
* | ce compte ne peut pas se connecter |
! | ce compte ne peut pas se connecter |
« /etc/shadow
» contient ceci :
... utilisateur1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7::: utilisateur2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7::: ...
Comme c'est expliqué dans shadow
(5), les différentes
entrées de ce fichier, séparées par des « :
»
ont les significations suivantes :
$1$
» du début
indique l’utilisation d'un chiffrement MD5. Le signe « * »
indique que le compte ne peut pas se connecter) ;
« /etc/group
» contient ce qui suit :
group1:x:20:utilisateur1,utilisateur2
Comme il est expliqué dans group
(5), les entrées de ce
fichier, séparées par des « :
», ont la
signification suivante :
« /etc/gshadow
» fournit les mêmes fonctions
que « /etc/shadow
» pour
« /etc/group
» mais n'est pas réellement
utilisé.
Le groupe d'appartenance réel d'un utilisateur peut être ajouté
dynamiquement si la ligne « auth optional
pam_group.so
» est ajoutée à
« /etc/pam.d/common-auth
» et défini dans
« /etc/security/group.conf
». Voir
pam_group
(8).
Le paquet base-passwd
contient une liste faisant autorité
d'utilisateurs et de groupes :
« /usr/share/doc/base-passwd/users-and-groups.html
».
Voici quelques commandes importantes pour gérer les informations des comptes :
Tableau 4.3. Liste des commandes servant à gérer les informations des comptes
commande | fonction |
---|---|
getent passwd <nom_utilisateur>
|
consulter les informations du compte
« <nom_utilisateur> »
|
getent shadow <nom_utilisateur>
|
consulter les informations cachées du compte
« <nom_utilisateur> »
|
getent group <nom_groupe>
|
consulter les informations du groupe « <nom_
groupe> »
|
passwd
|
gérer le mot de passe de ce compte |
passwd -e
|
définir un mot de passe à usage unique pour l’activation du compte |
chage
|
gérer les informations de durée de validité du mot de passe |
Vous pouvez avoir besoin des droits de l’administrateur pour certaines
fonctions. Voir crypt
(3) pour le chiffrement des mots de
passe et des données.
Sur les systèmes configurés avec PAM et NSS comme la machine alioth de Debian, le contenu des fichiers locaux
« /etc/passwd
»,
« /etc/group
» et
« /etc/shadow
» peut ne pas être utilisé de
manière active par le système. Le commandes ci-dessus restent valables même
sous un tel environnement.
Lors de la création d'un mot de passe à de l’installation de votre système
ou avec la commande passwd
(1), il vous faudra choisir un
bon mot de passe composé de 6 à 8
caractères, comprenant au moins un des caractères appartenant à l’ensemble
suivant conformément à passwd
(1) :
Ne pas choisir comme mot de passe des mots qui puissent être devinés.
Il y a des outils séparés permettant de créer des mots de passe chiffrés à partir d'une « semence ».
Tableau 4.4. Liste d'outils permettant de générer des mots de passe
paquet | popcon | taille | commande | fonction |
---|---|---|---|---|
whois
*
|
V:10, I:88 | 396 |
mkpasswd
|
frontal de la bibliothèque crypt (3) avec fonctionnalités
surabondantes
|
openssl *
|
V:56, I:91 | 2380 |
openssl passwd
|
calculer le hachage du mot de passe
(OpenSSL). passwd (1ssl)
|
De nombreux systèmes modernes semblable à Unix, comme le système Debian, fournissent les mécanismes PAM (Pluggable Authentication Modules) et NSS (Name Service Switch) pour la configuration du système par l’administrateur local. Leur rôle peut être résumé de la manière suivante :
ls
(1) et id
(1).
Ces systèmes PAM et NSS doivent être configurés de manière cohérente.
Les paquets importants des systèmes PAM et NSS sont les suivants :
Tableau 4.5. Liste des paquets importants des systèmes PAM et NNS
paquet | popcon | taille | description |
---|---|---|---|
libpam-modules *
|
V:88, I:99 | 1036 | PAM (« Pluggable Authentication Modules »), Modules attachables d'authentification (service de base) |
libpam-ldap *
|
V:2, I:4 | 408 | Modules attachables d'authentification permettant l’utilisation d'interfaces LDAP |
libpam-cracklib *
|
V:2, I:2 | 104 | Modules attachables d'authentification permettant la prise en compte de cracklib |
libpam-doc *
|
I:0.6 | 1208 | Modules attachables d'authentification (documentation en html et texte) |
libc6
*
|
V:97, I:99 | 10012 | bibliothèque GNU C Library : bibliothèques partagées qui fournissent aussi le service « Name Service Switch » |
glibc-doc *
|
I:3 | 2008 | bibliothèque GNU C : pages de manuel |
glibc-doc-reference *
|
I:1.4 | 12156 | bibliothèque GNU C : manuel de référence dans les formats info, pdf et html (non libre) |
libnss-mdns *
|
I:49 | 116 | module NSS pour la résolution des noms DNS Multicast |
libnss-ldap *
|
I:4 | 268 | module NSS pour l’utilisation de LDAP comme service de nommage |
libnss-ldapd *
|
V:0.18, I:0.5 | 144 |
module NSS pour l’utilisation de LDAP en tant que service de nommage
(nouveau compagnon de libnss-ldap )
|
libpam-doc
est essentiel à l’apprentissage de la
configuration de PAM.
glibc-doc-reference
est essentielle pour l’apprentissage
de la configuration de NSS.
Vous en trouverez une liste plus complète et actuelle avec la commande
« aptitude search
'libpam-|libnss-'
». L’acronyme NSS peut aussi signifier
« Network Security Service » qui est différent de « Name
Service Switch ».
PAM est la manière la plus élémentaire d'initialiser des variables d'environnement pour tous les programmes avec des valeurs par défaut valables pour l’ensemble du système.
Voici quelques fichiers de configuration importants auxquels PAM peut accéder :
Tableau 4.6. Liste des fichiers de configuration auxquels PAM accède
fichier de configuration | fonction |
---|---|
/etc/pam.d/<nom_programme>
|
définir la configuration de PAM pour le
« <nom_programme> », voir
pam (7) et pam.d (5)
|
/etc/nsswitch.conf
|
définir la configuration de NSS avec une entrée pour chaque service. Voir
nsswitch.conf (5)
|
/etc/nologin
|
limiter la connexion de l’utilisateur à l’aide du module
pam_nologin (8)
|
/etc/securetty
|
limiter l’accès de l’administrateur à certains tty à l’aide du module
pam_securetty (8)
|
/etc/security/access.conf
|
limiter les accès à l’aide du module pam_access (8)
|
/etc/security/group.conf
|
définir les limitations en fonction du groupe à l’aide du module
pam_group (8)
|
/etc/security/pam_env.conf
|
définir des variables d'environnement à l’aide du module
pam_env (8)
|
/etc/environment
|
définir des variables d'environnement supplémentaires à l’aide du module
pam_env (8) avec le paramètre
« readenv=1 »
|
/etc/default/locale
|
définir les paramètres linguistiques (« locale ») à l’aide du
module pam_env (8) avec le paramètre
« readenv=1 envfile=/etc/default/locale »
(Debian)
|
/etc/security/limits.conf
|
définir les limitations de ressources (ulimit, core, …) à l’aide du module
pam_linits (8)
|
/etc/security/time.conf
|
définir les restrictions de temps à l’aide du module
pam_time (8)
|
Les limitations dans la sélection des mots de passe est implémentée par les
modules PAM pam_unix
(8) et
pam_cracklib
(8). Ils peuvent être configurés à l’aide de
leurs paramètres.
Les noms de fichiers des modules PAM ont le suffixe
« .so
».
La gestion centralisée du système peut être mis en œuvre en utilisant le serveur centralisé LDAP Protocole léger d'accès aux répertoires (« Lightweight Directory Access Protocol ») pour administrer de nombreux systèmes semblables à Unix ou autres sur le réseau. Le logiciel OpenLDAP est l’implémentation à sources ouvertes du protocole LDAP
Sur un système Debian, le serveur LDAP fournit les informations de compte en
utilisant PAM et de NSS avec les paquets libpam-ldap
et
libnss-ldap
. Un certain nombre d'actions sont nécessaires
pour l’activer (je n'ai pas utilisé cette configuration et ce qui suit est
une information secondaire. Veuillez la lire dans ce contexte) :
slapd
(8) ;
modifiez les fichiers de configuration de PAM dans le répertoire
« /etc/pam.d/
» pour utiliser
« pam_ldap.so
» plutôt que le module par défaut
« pam_unix.so
» ;
/etc/pam_ldap.conf
» comme
fichier de configuration de libpam-ldap
et
«nbsp;/etc/pam_ldap.secret
» pour enregistrer le mot
de passe de root.
modifiez la configuration de NSS dans le fichier
« /etc/nsswitch.conf
» pour utiliser
« ldap
» plutôt que ce qui s'y trouve par
défaut (« compat
» ou
« file
») ;
/etc/libnss-ldap.conf
» comme
fichier de configuration de libnss-ldap
.
libpam-ldap
de manière à ce qu'il
utilise une connexion SSL (ou TLS) pour la
sécurité du mot de passe ;
libnss-ldap
de manière à ce qu'il
utilise une connexion SSL (ou TLS) afin
d'assurer l’intégrité des données au prix d'une surcharge du réseau
LDAP ;
nscd
(8) localement pour mettre en cache les résultats de
recherche de LDAP .
Voir les documentations dans pam_ldap.conf
(5) et
« /usr/share/doc/libpam-doc/html/
» qui sont
fournies par le paquet libpam-doc
et « info
libc 'Name Service Switch'
fournie par le paquet
glibc-doc
.
De manière similaire, vous pouvez mettre en œuvre des systèmes centralisés de remplacement avec d'autres méthodes :
C'est la célèbre phrase de Richard M. Stallman en bas de l’ancienne page
info su
. Ne pas s'inquiéter : la commande
su
actuelle de http://www.debian.org utilise PAM, on peut donc
restreindre l’accès de su
au groupe
root
en activant la ligne de
« /etc/pam.d/su
»comportant
« pam_wheel.so
».
L’installation du paquet libpam-cracklib
vous permet de
forcer des règles plus strictes concernant les mots de passe en mettant, par
exemple, les lignes suivantes dans
« /etc/pam.d/common-password
» :
Pour lenny
:
password required pam_cracklib.so retry=3 minlen=9 difok=3 password required pam_unix.so use_authtok nullok md5
Pour squeeze
:
password required pam_cracklib.so retry=3 minlen=9 difok=3 password [success=1 default=ignore] pam_unix.so use_authtok nullok md5 password requisite pam_deny.so password required pam_permit.so
Voir Section 9.5.15, « touche Alt-SysRq » pour restreindre la fonctionnalité de touche d'appel sécurisée (SAK) (« secure attention key ») du noyau.
sudo
(8) est un programme conçu pour permettre à un
administrateur système de donner des privilèges d'administration limités aux
utilisateurs et d'enregistrer dans un journal les actions de
l’administrateur (« root ». sudo
ne demande que
le mot de passe d'un utilisateur normal. Installez le paquet
sudo
et activez-le en définissant les options dans
« /etc/sudoers
». Voir l’exemple de
configuration dans
« /usr/share/doc/sudo/examples/sudoers
».
Mon utilisation de sudo
sur un système avec un seul
utilisateur (voir Section 1.1.12, « Configuration de sudo ») est destinée à me
protéger moi-même contre ma propre stupidité. Personnellement, je considère
que l’utilisation de sudo
est une meilleure alternative
que l’utilisation permanente du système depuis le compte de
l’administrateur. Par exemple, les modifications suivantes du propriétaire
de « <un_fichier>
» par
« <mon_nom>
» :
$ sudo chown <mon_nom> <un_fichier>
Bien sûr, si vous connaissez le mot de passe de root (comme beaucoup
d'utilisateurs de Debian qui ont installé eux-mêmes leur système), n'importe
quelle commande peut être lancée en tant qu'administrateur depuis un compte
utilisateur par « su -c
».
Security-Enhanced Linux (SELinux) est une infrastructure pour resserrer davantage le modèle des privilèges que le modèle de sécurité ordinaire des systèmes semblables à Unix avec les règles de contrôle d'accès obligatoire (MAC) (« mandatory access control »). La puissance de l’administrateur peut être restreinte sous certaines conditions.
Pour la sécurité du système, c'est une bonne idée de désactiver autant de programmes de serveurs que possible. Ceci devient critique pour les services par l’intermédiaire du réseau. Avoir des services réseau inutilisés, qu'ils soient activés directement en tant que démon ou par l’intermédiaire du programme super-serveur, est considéré comme un risque de sécurité.
De nombreux programmes, tels que sshd
(8), utilisent un
contrôle d'accès basé sur PAM. Il y a de nombreuses manières de restreindre
l’accès à certains serveurs de services :
/etc/default/<nom_programme>
» ;
/etc/inetd.conf
» pour le super-serveur ;
/etc/hosts.deny
» et
« /etc/hosts.allow
» pour l’enrobeur TCP, tcpd
(8) ;
/etc/rpc.conf
» pour Sun RPC ;
/etc/at.allow
» et
« /etc/at.deny
» pour
atd
(8) ;
/etc/cron.allow
» et
« /etc/cron.deny
» pour
crontab
(1) ;
Voir Section 3.5.3, « Exemple de gestion de niveau de fonctionnement », Section 3.5.4, « Paramètre par défaut de chaque script init », Section 4.5.1, « Fichiers de configuration auxquels accèdent PAM et NSS », Section 3.5.8, « Initialisation des services réseau » et Section 5.9, « Infrastructure de netfilter ».
Si vous avez des problèmes pour les accès à distance sur un système Debian
récent, commentez la ligne de configuration posant problème, comme
« ALL: PARANOID » de
« /etc/hosts.deny
» si elle existe. (Mais vous
devrez faire attention au risque de sécurité induit par ce type d'action).
Les informations données ici ne suffiront pas à remplir vos besoins de sécurité mais constituent un bon point de départ.
La couche de transport de nombreux services populaires communique les messages, y-compris les mots de passe d'authentification, en texte clair. C'est une très mauvaise idée de transmettre un mot de passe en texte clair dans la jungle d'Internet où il peut être intercepté. Vous pouvez faire tourner des services sur une couche de transport sécurisée « Sécurité de la couche de transport (« Transport Layer Security ») » (TLS) ou son prédécesseur « Secure Sockets Layer » (SSL) pour sécuriser par chiffrement de la communication dans son ensemble, y-compris le mot de passe.
Tableau 4.7. Liste des services et ports sûrs et non sûrs
nom de service non sûr | port | nom de service sûr | port |
---|---|---|---|
www (http) | 80 | https | 443 |
smtp (courrier électronique) | 25 | ssmtp (smtps) | 465 |
données ftp | 20 | données ftps | 989 |
ftp | 21 | ftps | 990 |
telnet | 23 | telnets | 992 |
imap2 | 143 | imaps | 993 |
pop3 | 110 | pop3s | 995 |
ldap | 389 | ldaps | 636 |
Le chiffrement coûte du temps CPU. Comme solution de remplacement pour économiser du temps CPU, vous pouvez continuer à effectuer les communications en texte clair tout en ne sécurisant que le mot de passe avec un protocole d'authentification sécurisé comme « Authenticated Post Office Protocol » (APOP) pour POP et « Challenge-Response Authentication Mechanism MD5 » (CRAM-MD5) pour SMTP et IMAP. (Depuis peu, pour envoyer des messages de courrier électronique au travers d'internet à votre serveur de courrier depuis votre client de courrier, il est devenu habituel d'utiliser le port 587 en remplacement du port SMTP 25 habituel pour soumettre le courrier afin d'éviter le blocage du port 25 par le fournisseur d'accès au réseau tout en vous authentifiant avec CRAM-MD5).
Le programme SSH, Shell sûr
(« Secure Shell ») permet une communication chiffrée sûre entre
deux machines qui ne soient pas « de confiance » au travers d'un
réseau non sûr avec une authentification sûre. Il est constitué du client
OpenSSH, de ssh
(1), et du
démon OpenSSH, sshd
(8). SSH peut être utilisé pour « tunneler » de manière sécurisée
un protocole de communications non sûr tel que POP et X au travers
d'Internet à l’aide de la fonctionnalité de transfert de port.
Le client essaie de s'authentifier en utilisant l’authentification basée sur l’hôte, une clé publique d'authentification, une authentification par question-réponse ou une authentification par mot de passe. L’utilisation d'une authentification par clé publique permet la connexion à distance sans mot de passe. Voir Section 6.9, « Le serveur et les utilitaires d'accès à distance (SSH) ».
Même si vous tournez avec des services sécurisés comme des serveurs Secure Shell (SSH) et Point-to-point tunneling protocol (PPTP), il reste des chance de break-ins en utilisant depuis Internet une attaque de force brute pour trouver le mot de passe, etc. L’utilisation d'une politique de parefeu (voir Section 5.9, « Infrastructure de netfilter ») conjointement avec les outils sûrs qui suivent peut améliorer la sécurité :
Tableau 4.8. Liste des outils fournissant des mesures de sécurité supplémentaires
paquet | popcon | taille | description |
---|---|---|---|
knockd *
|
V:0.15, I:0.3 | 164 |
démon knockd (1) et client konck (1)
légers de rituel d'ouverture de ports « port-knocking »
|
denyhosts *
|
V:2, I:2 | 356 | utilitaire pour aider les administrateurs système à contrecarrer les pirates par ssh |
fail2ban *
|
V:4, I:5 | 660 | bannir les IP qui provoque des erreurs d'authentification multiples |
libpam-shield *
|
V:0.01, I:0.05 | 104 | verrouiller les attaquants distants cherchant à deviner le mot de passe |
Afin d'éviter que des personnes accèdent à votre machine avec les privilèges de l’administrateur, vous devez prendre les mesures suivante :
Avec un accès physique au disque, réinitialiser le mot de passe est relativement facile en suivant les étapes suivantes :
/etc/passwd
» de la partition racine
et vider la seconde entrée du compte root
.
Si vous avez l’accès en édition au menu GRUB (voir Section 3.3, « Étage 2 : le chargeur initial »), avec
grub-rescue-pc
, il est encore plus simple d'effectuer les
étapes suivantes au moment du démarrage :
root=/dev/hda6 rw
init=/bin/sh
».
/etc/passwd
» et vider la seconde
entrée du compte root
.
L’interpréteur de commandes de l’administrateur est maintenant accessible sans mot de passe.
Une fois que quelqu'un a accès à l’interpréteur de commandes de
l’administrateur, il peut accéder à l’ensemble du système et en
réinitialiser tous les mots de passe. De plus, il peut compromettre le mot
de passe de n'importe quel utilisateur en utilisant des outils de cassage de
mots de passe par force brute tels que les paquets john
et crack
(voir Section 9.6.11, « Vérification de la sécurité et de l’intégrité du système »). Ces mots de passes cassés
peuvent permettre de compromettre d'autres systèmes.
La seule solution logicielle raisonnable pour éviter tout ça est d'utiliser
une partition racine (ou une partition
« /etc
») chiffrée par logiciel en utilisant
dm-crypt et initramfs (voir Section 9.4, « Astuces de chiffrement des données »). Vous aurez alors toujours besoin d'un
mot de passe pour vous connecter au système.
Pour un guide d'ordre général concernant le réseau sous GNU/Linux, lire le Guide de l’administrateur réseau de Linux (« Linux Network Administrators Guide »).
Passons en revue l’infrastructure de base du réseau sur un système Debian moderne.
Tableau 5.1. Liste des outils de configuration du réseau
paquets | popcon | taille | type | description |
---|---|---|---|---|
ifupdown *
|
V:60, I:99 | 228 | config::ifupdown | outil standard pour activer ou désactiver le réseau (spécifique à Debian) |
ifplugd *
|
V:0.4, I:0.9 | 244 | , , | gérer automatiquement le réseau filaire |
ifupdown-extra *
|
V:0.04, I:0.2 | 124 | , , |
script de test du réseau pour améliorer le paquet
« ifupdown »
|
ifmetric *
|
V:0.02, I:0.10 | 100 | , , | définir la métriques de routage d'une interface réseau |
guessnet *
|
V:0.07, I:0.3 | 516 | , , |
script de cartographie réseau améliorant le paquet
« ifupdown » par l’intermédiaire du fichier
« /etc/network/interfaces »
|
ifscheme *
|
V:0.03, I:0.08 | 132 | , , |
script de cartographie réseau pour améliorer le paquet
« ifupdown »
|
ifupdown-scripts-zg2 *
|
V:0.00, I:0.04 | 232 | , , | scripts d'interface de Zugschlus fournissant une méthode manuelle à ifupdown |
network-manager *
|
V:24, I:33 | 2628 | config::NM | NetworkManager (démon) : gère automatiquement le réseau |
network-manager-gnome *
|
V:17, I:29 | 5616 | , , | NetworkManager (frontal de GNOME) |
network-manager-kde *
|
V:2, I:3 | 264 | , , | NetworkManager (frontal de KDE) |
cnetworkmanager *
|
V:0.05, I:0.2 | 208 | , , | NetworkManager (client en ligne de commandes) |
wicd
*
|
V:0.5, I:2 | 88 | config::wicd | gestionnaire de réseau filaire ou sans fi (métapaquet) |
wicd-cli *
|
V:0.04, I:0.2 | 128 | , , | gestionnaire de réseau filaire ou sans fil (client en ligne de commandes) |
wicd-curses *
|
V:0.15, I:0.4 | 236 | , , | gestionnaire de réseau filaire ou sans fil (client Curses) |
wicd-daemon *
|
V:1.9, I:2 | 1780 | , , | gestionnaire de réseau filaire ou sans fil (démon) |
wicd-gtk *
|
V:1.6, I:2 | 772 | , , | gestionnaire de réseau filaire ou sans fil (client GTK+) |
iptables *
|
V:27, I:99 | 1316 | config::Netfilter | outils d'administration pour le filtrage des paquets et NAT (Netfilter) |
iproute *
|
V:41, I:88 | 1044 | config::iproute2 |
iproute2, IPv6 et autres configurations
avancées du réseau : ip (8),
tc (8), etc
|
ifrename *
|
V:0.2, I:0.6 | 236 | , , |
renommer une interface réseau en fonction de divers critères
statiques : ifrename (8)
|
ethtool *
|
V:4, I:13 | 208 | , , | afficher ou modifier les paramètres d'un périphérique ethernet |
iputils-ping *
|
V:36, I:99 | 96 | test::iproute2 | tester l’accessibilité d'une machine distance par nom de machine ou adresse IP (iproute2) |
iputils-arping *
|
V:0.6, I:6 | 36 | , , | tester l’accessibilité réseau d'une machine distante spécifiée par une adresse ARP |
iputils-tracepath *
|
V:0.4, I:2 | 72 | , , | tracer le chemin du réseau vers une machine distante |
net-tools *
|
V:70, I:99 | 1016 | config::net-tools |
boîte à outils réseau NET-3 (net-tools,
configuration réseau IPv4) : ifconfig (8), etc.
|
inetutils-ping *
|
V:0.03, I:0.12 | 296 | test::net-tools | tester l’accessibilité réseau d'une machine distante par nom de machine ou adresse IP (ancien, GNU) |
arping *
|
V:0.5, I:3 | 104 | , , | tester l’accessibilité réseau d'une machine distante spécifiée par une adresse ARP (ancien) |
traceroute *
|
V:13, I:99 | 192 | , , | tracer le chemin réseau vers une machine distante (ancien, console) |
dhcp3-client *
|
V:32, I:92 | 60 | config::low-level | client DHCP |
wpasupplicant *
|
V:28, I:39 | 828 | , , | client prenant en charge WPA et WPA2 (IEEE 802.11i) |
wireless-tools *
|
V:7, I:22 | 420 | , , | outils pour manipuler les « Extension Linux sans fil » (Linux Wireless Extensions) |
ppp
*
|
V:6, I:26 | 1016 | , , |
connexion PPP/PPPoE avec chat
|
pppoeconf *
|
V:0.4, I:3 | 344 | config::helper | assistant de configuration d'une connexion PPPoE |
pppconfig *
|
V:0.2, I:2 | 964 | , , |
assistant de configuration pour une connexion PPP avec
chat
|
wvdial *
|
V:0.5, I:2 | 416 | , , |
assistant de configuration pour une connexion PPP avec
wvdial et ppp
|
mtr-tiny *
|
V:2, I:26 | 120 | test::low-level | tracer le chemin réseau vers une machine distante (curses) |
mtr
*
|
V:0.7, I:3 | 180 | , , | tracer le chemin réseau vers une machine distante (curses et GTK+) |
gnome-nettool *
|
V:2, I:33 | 2848 | , , | outils pour des opérations d'informations habituelles sur le réseau (GNOME) |
nmap
*
|
V:6, I:31 | 7112 | , , | cartographie réseau / balayage de ports (Nmap, console) |
zenmap *
|
V:0.2, I:1.3 | 2400 | , , | cartographie réseau / balayage de ports (GTK+) |
knmap
*
|
V:0.10, I:0.6 | 712 | , , | cartographie réseau / balayage de ports (KDE) |
tcpdump *
|
V:3, I:24 | 1020 | , , | analyseur de trafic réseau (Tcpdump, console) |
wireshark *
|
V:1.4, I:9 | 2052 | , , | analyseur de trafic réseau (Wireshark, GTK+) |
tshark *
|
V:0.4, I:3 | 276 | , , | analyseur de trafic réseau (console) |
nagios3 *
|
V:1.0, I:1.8 | 32 | , , | système de surveillance et de gestion pour les machines, les services et les réseaux (Nagios) |
tcptrace *
|
V:0.05, I:0.4 | 436 | , , |
produit un résumé des connexions à partir d'une sortie de
tcpdump
|
snort
*
|
V:0.6, I:0.8 | 1260 | , , | système souple de détection d'intrusion par le réseau (Snort) |
ntop
*
|
V:1.2, I:2 | 11124 | , , | afficher l’utilisation du réseau dans le navigateur web |
dnsutils *
|
V:14, I:90 | 412 | , , |
clients réseau fournis par BIND :
nslookup (8), nsupdate (8),
dig (8)
|
dlint
*
|
V:0.4, I:6 | 96 | , , | vérifier les zones d'information DNS en utilisant des requêtes du serveur de noms |
dnstracer *
|
V:0.11, I:0.5 | 92 | , , | tracer une chaîne de serveurs DNS jusqu'à la source |
La désignation du nom de domaine est délicate pour l’utilisateur d'une station de travail normale de type PC. La station de travail de type PC peut être mobile, se déplaçant sur le réseau, ou située derrière un parefeu de type NAT, inaccessible depuis Internet. Dans de tels cas, il ne faudra pas que le nom de domaine soit un nom valide afin d'éviter les collisions de noms.
Lorsque vous utilisez un nom de domaine non valable, vous devez usurper le nom de domaine utilisé par certains programmes tels que le MTA afin qu’ils puissent fonctionner normalement. Voir Section 6.3.3, « Configuration de l’adresse de courriel ».
Selon la rfc2606,
« invalid
» semble être le choix à faire pour
le domaine de haut niveau (TLD)
pour construire des noms de domaine dont on est certain qu'ils ne seront pas
valable sur Internet.
Le protocole de découverte de réseau mDNS (Apple Bonjour et Apple Rendezvous, Avahi sur Debian) utilise <local> comme pseudo domaine de haut niveau. Microsoft semble aussi utiliser « local » comme TLD pour les réseaux locaux.
Si le service DNS sur votre réseau local utilise
« local
» comme TLD pour votre LAN, il peut
interférer avec mDNS.
D'après l’analyse des courriels que je reçois, d'autres choix courants de
TLD non valables semblent être « localdomain
»,
« lan
»,
« localnet
» ou
« home
»
La résolution du nom d'hôte est actuellement prise en charge aussi par le mécanisme NSS (Name Service Switch). Le flux de cette résolution est le suivant :
/etc/nsswitch.conf
» avec une
entrée comme « hosts: files dns
» donne l’ordre
de la résolution du nom d'hôte. (Ceci remplace l’ancienne fonctionnalité de
l’entrée « order
» dans
« /etc/host.conf
»).
files
est d'abord appelée. Si le nom d'hôte
est trouvé dans le fichier « /etc/hosts
», elle
retourne toutes les adresses valables qui y correspondent et quitte. (Le
fichier « /etc/host.conf
» contient
« multi on
»).
dns
est appelée. Si le nom d'hôte est trouvé
par une requête au Système de
noms de domaine Internet (DNS) (« Internet Domain Name
System ») identifié par le fichier
« /etc/resolv.conf
», elle retourne toutes les
adresses valables correspondantes et quitte.
Le fichier « /etc/hosts
» associe les adresses IP avec les
noms d'hôtes, il contient ce qui suit :
127.0.0.1 localhost 127.0.1.1 <nom_hote>.<nom_domaine> <nom_hote> # Les lignes suivantes servent pour les machines pouvant utiliser IPv6 ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
Ici, <nom_hote> correspond au propre nom de la machine défini dans le
fichier « /etc/hostname
». Ici, le
<nom_domaine> est le nom
de domaine pleinement qualifié (FQDN) de cette machine.
Pour <nom_domaine> d'un PC mobile dans FQDN (nom de domaine pleinement
qualifié) réel, vous pouvez prendre un TLD sûr et en erreur tel que
« lan
», « home
»,
« invalid
»,
« localdomain
»,
« none
» et
« private
».
« /etc/resolv.conf
» est un fichier statique si
le paquet resolvconf
n'est pas installé. S'il est
installé, c'est un lien symbolique. Dans tous les cas, il contient des
informations qui initialisent les routines du résolveur. Si le DNS est
trouvé à l’IP=« 192.168.11.1
», il contient ce
qui suit :
nameserver 192.168.11.1
Le paquet resolvconf
fait de ce
« /etc/resolv.conf
» un lien symbolique et gère
son contenu automatiquement par le script hook.
La résolution du nom de machine par le DNS Multicast (en utilisant Zeroconf encore appelé Apple Bonjour / Apple
Rendezvous), qui permet une résolution efficace des noms à l’aide de
programmes courants Unix/Linux dans le domaine mDNS ad-hoc
« local
», peut être fourni en installant le
paquet libnss-mdns
. Le fichier
« /etc/nsswitch.conf
» devra avoir une entrée
semblable à « hosts: files mdns4_minimal [NOTFOUND=return] dns
mdns4
» afin d'activer cette fonctionnalité.
Le nom de l’interface réseau, par exemple eth0
, est
assigné dans le noyau Linux à chaque matériel par le mécanisme
udev
de configuration de l’espace utilisateur (voir Section 3.5.11, « Le système udev »), lorsqu'il est trouvé. On appelle l’interface
réseau interface physique
(« physical interface ») dans ifup
(8) et
interfaces
(5).
De manière à ce que les interfaces réseau aient un nom homogène lors des
rédémarrages en utilisant l’adresse MAC,
etc., il existe un fichier d'enregistrement
« /etc/udev/rules.d/70-persistent-net.rules
».
Ce fichier est créé automatiquement par le programme
« /lib/udev/write_net_rules
», probablement
lancé par le fichier de règle
« persistent-net-generator.rules
». Vous pouvez
le modifier pour changer la règle de nommage.
En éditant le fichier de règles
« /etc/udev/rules.d/70-persistent-net.rules
»,
vous devrez conserver chaque règle sur une seule ligne et l’adresse MAC en minuscule. Par exemple, su vous
trouvez « Firewire device » et « PCI device » dans ce
fichier, vous voudrez probablement nommer eth0
le
« PCI device » et le configurer comme interface réseau primaire.
Un rappel des plages d'adresses IPv4 32 bits de chacune des classes réservées à l’utilisation sur un réseau local (LAN) par la rfc1918. Ces adresses garantissent qu'aucun conflit ne sera créé avec aucune des adresses présentes sur Internet proprement dit.
Tableau 5.2. Liste des plages d'adresses de réseau
Classe | adresses de réseau | masque de réseau | masque de réseau /bits | nombre de sous-réseaux |
---|---|---|---|---|
A | 10.x.x.x | 255.0.0.0 | /8 | 1 |
B | 172.16.x.x — 172.31.x.x | 255.255.0.0 | /16 | 16 |
C | 192.168.0.x — 192.168.255.x | 255.255.255.0 | /24 | 256 |
Si une de ces adresses est assignée à une machine, cette machine ne doit alors pas accéder directement à Internet mais passer par une passerelle qui agit en tant que serveur mandataire (« proxy ») pour les services individuels ou sinon effectuer une traduction d'adresse réseau (NAT) (« Network Address Translation ». Un routeur à large bande effectue en général la NAT pour l’environnement du LAN de l’utilisateur grand public.
La plupart des périphériques matériels sont pris en charge par le système Debian, il y a quelques périphériques de réseau qui exigent, pour les gérer, des pilotes matériels non libres selon DSFG. Veuillez consulter Section 9.7.8, « Pilotes de matériel non libres ».
Les systèmes Debian squeeze
peuvent gérer la connexion au
réseau à l’aide de démons tels que NetworkManager (NM) (paquet network-manager
et les paquets associés) ou Wicd (paquet wicd et
les paquets associés).
ifupdown
»
Ne pas utiliser ces outils de configuration automatique du réseau sur un serveur. Ils ont été prévus principalement pour les utilisateurs de système de bureau tournant sur des ordinateurs portables.
Ce outils moderne de configuration du réseau doivent être configurés
correctement afin d’éviter des conflits avec l’ancien paquet
ifupdown
et son fichier de configuration
« /etc/network/interfaces
».
Certaines fonctionnalités de ces outils de configuration automatique du
réseau peuvent souffrir de régressions. Ils ne sont pas aussi robustes que
l’ancien paquet ifupdown
. Consultez le BTS de network-manager et le BTS de wicd pour en savoir plus sur les problèmes
et les limitations actuels.
Les documentations officielles de NM et Wicd sous Debian sont fournies
respectivement par
« /usr/share/doc/network-manager/README.Debian
»
et « /usr/share/doc/wicd/README.Debian
».
Essentiellement, la onfiguration réseau pour l’ordinateur de bureau est faite de la manière suivante :
Rendez l’utilisateur du bureau, par exemple toto
, membre
du groupe « netdev
» à l’aide de la commande
suivante (vous pouvez aussi le faire automatiquement à l’aide de D-bus sous les environnements de bureau modernes comme
GNOME et KDE) :
$ sudo adduser toto netdev
Gardez la configuration de
« /etc/network/interfaces
» aussi simple que
possible comme ce qui suit :
auto lo iface lo inet loopback
Redémarrez NM ou Wicd de la manière suivante :
$ sudo /etc/init.d/network-manager restart
$ sudo /etc/init.d/wicd restart
Afin d'éviter les conflits avec ifupdown
, seules les
interfaces qui ne sont pas listées dans
« /etc/network/interfaces
» ou qui ont été
configurées avec « auto …
» ou
« allow-hotplug …
» et « iface …
inet dhcp
» (avec aucune autre option) sont gérées par NM.
Si vous désirez étendre les possibilités de configuration de NM, veuillez
récupérer les modules d’extension appropriés et les paquets supplémentaires
tels que network-manager-openconnect
,
network-manager-openvpn-gnome
,
network-manager-pptp-gnome
,
mobile-broadband-provider-info
,
gnome-bluetooth
, etc. Il en va de même pour ceux de Wicd.
Ces outils de configuration automatique peuvent ne pas être compatibles avec
des configurations ésotériques de l’ancien ifupdown
dans
« /etc/network/interfaces
» telles que celles
se trouvant en Section 5.5, « Configuration de base du réseau avec ifupdown (ancienne) » et Section 5.6, « Configuration réseau avancée avec ifupdown (ancienne) ».
Consultez le BTS de
network-manager et le BTS de wicd
pour les problèmes et les limitations actuels.
Lorsque la méthode décrite dans Section 5.2, « Configuration moderne de réseau pour l’ordinateur de bureau » ne suffit pas à vos besoins, vous pouvez utiliser les anciennes connexion au réseau et méthode de configuration qui combinent de nombreux outils simples.
L’ancienne connexion au réseau est spécifique pour chacune des méthodes (voir Section 5.4, « Méthode de connexion réseau (ancienne) »).
Il existe deux types de programmes de bas niveau pour la configuration du réseau sous un système Linux (voir Section 5.7.1, « Commandes Iproute2 »).
ifconfig
(8), …) provienne du système de réseau NET-3 de
Linux. La plupart d'entre-eux sont aujourd'hui obsolètes.
ip
(8), …) représentent le système actuel de gestion du
réseau sous Linux.
Bien que ces programmes de bas niveau soient puissants, ils sont lourds à utiliser. Des systèmes de haut niveau de configuration du système ont donc été créés.
Le paquet ifupdown
est le standard de fait pour un tel
système de configuration de haut niveau du réseau sur Debian. Il vous permet
d'activer un réseau en utilisant simplement, par exemple,
« ifup eth0
». Son fichier de configuration est
le fichier /etc/network/interfaces
» est son contenu
typique est le suivant :
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp
La paquet resolvconf
a été créé pour en complément au
système ifupdown
afin de prendre en charge une
reconfiguration en douceur de la résolution d'adresse du réseau en
automatisant la réécriture du fichier de configuration de la résolution
« /etc/resolv.conf
». Maintenant, la plupart
des paquets de Debian servant à la configuration du réseau sont modifiés
pour utiliser le paquet resolvconf
(voir
« /usr/share/doc/resolvconf/README.Debian
»).
Des scripts d'assistant au paquet ifupdown
comme
ifplugd
, guessnet
,
ifscheme
, etc. ont été créés pour automatiser la
configuration de l’environnement réseau comme dans le cas d'un PC mobile sur
un réseau local câblé. Ils sont relativement difficiles à utiliser mais
fonctionnent bien en conjonction avec une système
ifupdown
existant.
Elles sont expliquées en détails avec des exemples (voir Section 5.5, « Configuration de base du réseau avec ifupdown (ancienne) » et Section 5.6, « Configuration réseau avancée avec ifupdown (ancienne) »).
La méthode de test de connexion décrite dans cette section est destinée à
des buts de test. Elle n'est pas destinée à être directement utilisée pour
la connexion réseau de tous les jours. Vous êtes invité à l’utiliser par
l’intermédiaire de NM, Wicd, ou du paquet ifupdown
(voir
Section 5.2, « Configuration moderne de réseau pour l’ordinateur de bureau » et Section 5.5, « Configuration de base du réseau avec ifupdown (ancienne) »).
La connexion typique au réseau et le chemin de connexion pour un PC peuvent être résumés comme suit :
Tableau 5.3. Liste des méthodes de connexions réseau et des chemins de connexion
PC | méthode de connexion | chemin de connexion |
---|---|---|
Port série (ppp0 )
|
PPP | ⇔ modem ⇔ POTS ⇔ point d'accès réseau commuté ⇔ FAI |
Port ethernet (eth0 )
|
PPPoE/DHCP/Statique | ⇔ BB-modem ⇔ BB service ⇔ BB access point ⇔ FAI |
Port ethernet (eth0 )
|
DHCP/Statique | ⇔ LAN ⇔ routeur BB avec traduction d'adresse (NAT) (⇔ modem BB …) |
Voici un résumé des scripts de configuration de chaque méthode de connexion :
Tableau 5.4. Liste des configurations de connexions réseau
méthode de connexion | configuration | paquets(s) de support |
---|---|---|
PPP |
pppconfig pour créer un chat déterministe
|
pppconfig , ppp
|
PPP (alternative) |
wvdialconf pour créer un chat heuristique
|
ppp , wvdial
|
PPPoE |
pppoeconf pour créer un chat déterministe
|
pppoeconf , ppp
|
DHCP |
décrit dans « /etc/dhcp3/dhclient.conf »
|
dhcp3-client
|
IP statique (IPv4) |
décrit dans « /etc/network/interfaces »
|
net-tools
|
IP statique (IPv6) |
décrit dans « /etc/network/interfaces »
|
iproute
|
Les acronymes de connexion au réseau ont la signification suivante :
Tableau 5.5. Liste des acronymes de connexion au réseau
acronyme | signification |
---|---|
POTS | service téléphonique analogique classique (« plain old telephone service ») |
BB | large bande |
BB-service | par exemple, l’ADSL, la télévision pat câble ou les services sur fibre optique (FTTP) |
BB-modem | par exemple, le modem ADSL, le modem sur réseau câblé ou le terminal de réseau optique (ONT) |
LAN | réseau local (« local area network ») |
WAN | réseau étendu |
DHCP | protocole de configuration dynamique des machines (« dynamic host configuration protocol ») |
PPP | protocole point à point (« point to point protocol ») |
PPPoE | protocole point à point avec encapsulation ethernet |
FAI (« ISP ») | fournisseur d'accès à Internet |
Les services de connexion au réseau étendu (WAN) par l’intermédiaire du câble du réseau de télévision sont en général servis par DHCP ou PPPoE. Ceux qui sont connecté en ADSL et FTTP sont en général servis par PPPoE. Vous devrez consulter votre FAI afin de connaître les exigences exactes de configuration de la connexion WAN.
Lorsqu'un routeur large bande (« BB-router ») est utilisé pour créer un environnement de réseau local domestique, les PC sur le réseau local sont connectés au réseau étendu (WAN) par l’intermédiaire du routeur large bande par traduction d'adresse réseau (NAT). Dans ce cas, les interfaces réseau des PC sur le réseau local sont servies avec des adresses IP statiques ou par DHCP depuis le routeur large bande. Le routeur large bande, pour se connecter au réseau étendu, doit être configuré en suivant les instructions de votre FAI.
Le réseau moderne domestique ou pour une petite entreprise typique (réseau local, LAN) connecté au réseau étendu (« WAN ») (Internet) en utilisant un routeur à large bande grand public. Le réseau local derrière ce routeur est habituellement configuré par un serveur de protocole de configuration dynamique de l’hôte (DHCP) (« dynamic host configuration protocol ») tournant sur le routeur.
Installez simplement le paquet dhcp3-client
pour ethernet
servi par le protocole de
configuration dynamique de l’hôte (DHCP).
Il n'y a pas d'action spécifique nécessaire pour la configuration ethernet avec une adresse IP statique.
Le script de configuration pppconfig
configure la
connexion PPP de manière interactive en
sélectionnant simplement les éléments suivants :
Tableau 5.6. Liste des fichiers de configuration pour la connexion PPP avec pppconfig
fichier | fonction |
---|---|
/etc/ppp/peers/<nom_fai>
|
fichier de configuration spécifique à <nom_fai> créé par
pppconfig pour pppd
|
/etc/chatscripts/<nom_fai>
|
fichier de configuration spécifique à <nom_fai> créé par
pppconfig pour chat
|
/etc/ppp/options
|
paramètres généraux d'exécution de pppd
|
/etc/ppp/pap-secret
|
données d'authentification pour PAP (risque de sécurité) |
/etc/ppp/chap-secret
|
données d'authentification pour CHAP (plus sécurisé) |
La valeur « <nom_fai> » du champ
« provider
» est supposée si les commandes
pon
et poff
sont appelées sans
paramètre.
Vous pouvez tester la configuration de la manière suivant en utilisant des outils de configuration du réseau de bas niveau :
$ sudo pon <nom_fai> ... $ sudo poff <nom_fai>
Voir « /usr/share/doc/ppp/README.Debian.gz
».
Une approche différente de l’utilisation de pppd
(8) est
de le lancer depuis wvdial
(1) qui est fourni par le
paquet wvdial
. Plutôt que pppd
faisant
tourner chat
(8) pour numéroter et négocier la connexion,
wvdial
effectue la numérotation et la négociation
initiale puis démarre pppd
pour effectuer le reste.
Le script de configuration wvdialconf
configure la
connexion PPP de manière interactive en sélectionnant simplement ce qui
suit :
wvdial
réussit à réaliser la connexion dans la plupart
des cas et conserve automatiquement la liste des données d'authentification.
Tableau 5.7. Liste des fichiers de configuration pour une connexion PPP avec wvdialconf
fichier | fonction |
---|---|
/etc/ppp/peers/wvdial
|
fichier de configuration spécifique à wvdial créé par
wvdialconf pour pppd
|
/etc/wvdial.conf
|
fichier de configuration créé par wvdialconf
|
/etc/ppp/options
|
paramètres généraux d'exécution de pppd
|
/etc/ppp/pap-secret
|
données d'authentification pour PAP (risque de sécurité) |
/etc/ppp/chap-secret
|
données d'authentification pour CHAP (plus sécurisé) |
Vous pouvez tester la configuration de la manière suivant en utilisant des outils de configuration du réseau de bas niveau :
$ sudo wvdial ... $ sudo killall wvdial
Voir wvdial
(1) et wvdial.conf
(5).
Lorsque votre FAI vous propose une connexion avec PPPoE et que vous décidez
de connecter directement votre PC au WAN, le réseau de votre PC doit être
configuré avec PPPoE. PPPoE signifie « PPP over Ethernet » (PPP
encapsulé par ethernet). Le script de configuration
pppoeconf
configure la connexion PPPoE de manière
interactive.
Les fichiers de configuration sont les suivants :
Tableau 5.8. Liste des fichiers de configuration pour une connexion PPPoE avec pppoeconf
fichier | fonction |
---|---|
/etc/ppp/peers/fournisseur-accès-adsl
|
fichier de configuration spécifique à pppoe créé par
pppoeconf pour pppd
|
/etc/ppp/options
|
paramètres généraux d'exécution de pppd
|
/etc/ppp/pap-secret
|
données d'authentification pour PAP (risque de sécurité) |
/etc/ppp/chap-secret
|
données d'authentification pour CHAP (plus sécurisé) |
Vous pouvez tester la configuration de la manière suivant en utilisant des outils de configuration du réseau de bas niveau :
$ sudo /sbin/ifconfig eth0 up $ sudo pon fournisseur-accès-adsl ... $ sudo poff fournisseur-accès-adsl $ sudo /sbin/ifconfig eth0 down
Voir
« /usr/share/doc/pppoeconf/README.Debian
».
La configuration traditionnelle du réseau
TCP/IP sur un système Debian utilise le paquet
ifupdown
comme outil de haut niveau. Il y a deux cas
typiques :
resolvconf
et ce qui vous permettra changer facilement la
configuration de votre réseau (voir Section 5.5.4, « Interfaces réseau gérées par DHCP »).
resolvconf
et garder un système simple (see Section 5.5.5, « Interface réseau avec une adresse IP fixe »).
Ces méthodes traditionnelles de configuration sont assez utiles si vous désirez définir une configuration avancée (voir Section 5.5, « Configuration de base du réseau avec ifupdown (ancienne) »).
Le paquet ifupdown
fournit l’ossature standardisées pour
la configuration du réseau de haut niveau sur un système Debian. Dans cette
section, nous apprenons les bases de la configuration du réseau avec
ifupdown
avec une introduction simplifiée et de nombreux
exemples typiques.
Le paquet ifupdown
contient 2 commandes :
ifup
(8) et ifdown
(8). Elles offrent
une configuration de réseau de haut niveau à l’aide du fichier de
configuration « /etc/network/interfaces ».
Tableau 5.9. Liste des commandes de base de configuration du réseau avec ifupdown
commande | action |
---|---|
ifup eth0
|
activer l’interface réseau eth0 avec la configuration
eth0 si l’entrée « iface
eth0 » existe
|
ifdown eth0
|
désactiver l’interface réseau eth0 avec la
configurationeth0 si l’entrée « iface
eth0 »
|
Ne pas utiliser les outils de configuration de bas niveau tels que
ifconfig
(8) ni les commandes ip
(8)
pour configurer une interface se trouvant dans l’état actif (« up »).
Il n'y a pas de commande ifupdown
.
La syntaxe clé de « /etc/network/interfaces
»
telle qu'expliquée dans interfaces
(5) peut être résumée
comme suit :
Tableau 5.10. Liste des entrées de
« /etc/network/interfaces
»
entrée | signification |
---|---|
« auto <nom_interface> »
|
démarrer l’interface <nom_interface> lors du démarrage du système |
« allow-auto <nom_interface> »
|
, , |
« allow-hotplug <nom_interface> »
|
démarrer l’interface <nom_interface> lorsque le noyau détecte un événement « à chaud » depuis cette interface |
Les lignes qui commencent par « iface <nom_config>
… »
|
définissent la configuration de réseau <nom_config> |
Les lignes qui commencent par « mapping
<nom_interface_glob> »
|
définissent une valeur de correspondance de <nom_config> pour l’interface correspondant à <nom_interface> |
Une ligne commençant par le signe « # »
|
est traitée comme commentaire et ignorée (les commentaire de fin de ligne ne sont pas pris en charge) |
Une barre oblique inversée (« \ », « back
slash » en anglais) en fin de ligne
|
étend la configuration à la ligne suivante |
Les lignes commençant par l’entrée iface
ont la syntaxe
suivante :
iface <nom_config> <famille_adresse> <nom_méthode> <option1> <valeur1> <option2> <valeur2> ...
Pour la configuration de base, l’entrée de mapping
n'est pas utilisée si
vous utilisez le nom de l’interface réseau comme nom de configuration du
réseau (voir Section 5.6.5, « L’entrée « mapping » »).
Ne pas définir dans « /etc/network/interfaces
»
d'entrée « iface
» en double pour une interface
réseau
L’entrée de configuration suivante du fichier
« /etc/network/interfaces
» active l’interface
réseau « loopback » lo
lors du démarrage du
système (grâce à l’entrée auto
) :
auto lo iface lo inet loopback
Elle existe toujours dans le fichier
« /etc/network/interfaces
».
Après avoir préparé le système selon Section 5.4.1, « La connexion DHCP avec ethernet », l’interface réseau gérée
par le DHCP est configurée en créant l’entrée de configuration suivante dans
le fichier « /etc/network/interfaces
» :
allow-hotplug eth0 iface eth0 inet dhcp hostname "ma_machine"
Lorsque le noyau de Linux détecte l’interface physique
eth0
, l’entrée allow-hotplug
permet à
ifup
d'activer l’interface et l’entrée iface
demande à
ifup
d'utiliser DHCP pour configurer l’interface.
Une interface réseau avec une adresse IP fixe est configurée en créant de la
manière suivante une entrée de configuration du fichier
« /etc/network/interfaces
» :
allow-hotplug eth0 iface eth0 inet static address 192.168.11.100 netmask 255.255.255.0 broadcast 192.168.11.255 gateway 192.168.11.1 dns-domain lan dns-nameservers 192.168.11.1
Lorsque le noyau de Linux détecte l’interface physique
eth0
, l’entrée allow-hotplug
permet à
ifup
d'activer l’interface utiliser l’IP statique pour la
configurer.
Ici, je suppose ce qui suit :
192.168.11.0
-
192.168.11.255
192.168.11.1
192.168.11.100
resolvconf
: installé
lan
»
192.168.11.1
Si le paquet resolvconf
n'est pas installé, vous devrez
faire vous-même la configuration associée au DNS en éditant le fichier
« /etc/resolv.conf
» comme suit :
nameserver 192.168.11.1 domain lan
Les adresses IP utilisées dans l’exemple ci-dessus ne sont pas destinées à être recopiées littéralement. Vous devrez adapter les adresses IP à la configuration réelle de votre réseau.
Le réseau local sans fil (« wireless LAN ou WLAN ») permet une connexion sans fil à haute vitesse par une communication en spectre étalé « spread-spectrum » sur des bandes radio ne nécessitant pas de licence en utilisant un ensemble de normes appelées IEEE 802.11.
Les interfaces WLAN se comportent sensiblement de la même manière que les
interfaces ethernet normales mais elles demandent un identifiant de réseau
l’on doit fournir des données de clé de chiffrement lors de leur
initialisation. Leurs outils réseau de haut niveau sont exactement les mêmes
que pour les interfaces ethernet mais les noms des interfaces sont un peu
différents, comme eth1
, wlan0
,
ath0
, wifi0
, … selon les pilotes du
noyau utilisés.
Le périphérique wmaster0
est le périphérique-maître qui
est un périphérique interne utilisé uniquement par SoftMAC avec la nouvelle API mac80211 de Linux.
Voici quelques mot-clés à se souvenir pour le WLAN :
Tableau 5.11. Liste d'acronymes pour le WLAN
acronyme | en entier | signification |
---|---|---|
NWID | ID du réseau | ID du réseau sur 16 bits utilisées par les réseaux WaveLAN pre-802.11 (complètement dépassé) |
(E)SSID | Service Set Identifier (étendu) | nom de réseau des Points d'accès sans fil (AP) interconnectés pour former un réseau local sans fil 802.11, identifiant de domaine |
WEP, (WEP2) | Wired Equivalent Privacy (confidentialité équivalente à un réseau câblé) | première génération de norme de chiffrement sans fil sur 64 bits (128 bits) avec une clé sur 40 bits (dépassé) |
WPA | Wi-Fi Protected Access (Accès Wi-Fi protégé) | seconde génération de norme de chiffrement sans fil (la plus grande partie de 802.11i), compatible avec WEP |
WPA2 | Wi-Fi Protected Access 2 (Accès protégé Wi-FI 2) | troisième génération de norme de chiffrement sans fil (802.11i complète), non compatible avec WEP |
Le choix du protocole est normalement restreint par le routeur sans fil déployé.
Vous devrez installer le paquet wpasupplicant
afin de
prendre en compte le WLAN avec les nouveaux protocoles WPA/WPA2.
Dans le cas d'IP fournies par DHCP sur une
connexion WLAN, l’entrée du fichier
« /etc/network/interfaces
» doit être similaire
à la suivante :
allow-hotplug ath0 iface ath0 inet dhcp wpa-ssid zonemaison # la clé psk hexadécimale est encodée depuis une phrase de passe en texte clair wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
Voir
« /usr/share/doc/wpasupplicant/README.modes.gz
».
Vous devrez installer le paquet wireless-tools
pour
prendre en charge le WLAN avec l’ancien protocole WEP. (Votre routeur grand
public peut encore utiliser cette infrastructure non sûre mais c'est mieux
que rien).
Remarquez que le trafic réseau sur votre WLAN avec WEP peut être espionné par d'autres.
Dans le cas d'IP fournies par DHCP sur une
connexion WLAN, l’entrée du fichier
« /etc/network/interfaces
» doit être similaire
à la suivante :
allow-hotplug eth0 iface eth0 inet dhcp wireless-essid Maison wireless-key1 0123-4567-89ab-cdef wireless-key2 12345678 wireless-key3 s:mot_de_passe wireless-defaultkey 2 wireless-keymode open
Voir
« /usr/share/doc/wireless-tools/README.Debian
».
Vous devrez d'abord configurer la connexion PPP comme décrit précédemment
(voir Section 5.4.3, « La connexion PPP avec pppconfig »). Ensuite,
ajoutez dans le fichier
« /etc/network/interfaces
» une entrée pour le
périphérique PPP primaire ppp0
comme suit :
iface ppp0 inet ppp provider <nom_fai>
Vous devrez d'abord configurer la connexion PPP alternative avec
wvdial
comme décrit précédemment (voir Section 5.4.4, « Autre connexion PPP avec wvdialconf »). Ajoutez
ensuite dans le fichier
« /etc/network/interfaces
» une entrée pour le
périphérique primaire PPP ppp0
comme suit :
iface ppp0 inet wvdial
Pour le PC directement connecté au WAN et utilisant PPPoE, vous devez
configurer votre système pour une connexion PPPoE comme cela a été décrit
précédemment (voir Section 5.4.5, « La connexion PPPoE avec pppoeconf »). Ajoutez ensuite dans le
fichier « /etc/network/interfaces
» une entrée
pour le premier périphérique PPPoE eth0
comme suit :
allow-hotplug eth0 iface eth0 inet manual pre-up /sbin/ifconfig eth0 up up ifup ppp0=dsl down ifdown ppp0=dsl post-down /sbin/ifconfig eth0 down # Ce qui suit est utilisé uniquement de manière interne iface dsl inet ppp provider fournisseur-internet
Le fichier « /etc/network/run/ifstate
»
enregistre l’état désiré de la connexion
réseau pour toutes les interfaces réseau actuellement actives et gérées par
le paquet ifupdown
. Malheureusement, même si le système
ifupdown
échoue dans l’activation de l’interface comme
désiré, le fichier « /etc/network/run/ifstate
»
l’affichera comme active.
Si la sortie de la commande ifconfig
(8) d'une interface
n'a pas de ligne telle que la suivante, elle ne peut pas être utilisée en
tant qu'élément d'un réseau IPV4.
inet addr:192.168.11.2 Bcast:192.168.11.255 Mask:255.255.255.0
Pour un périphérique ethernet connecté en PPPoE, la sortie de la commande
ifconfig
(8) ne produit pas de ligne semblable à celle de
l’exemple ci-dessus.
Lorsque vous tentez de reconfigurer une interface, par exemple
eth0
, vous devez d'abord la désactiver par la commande
« sudo ifdown
eth0
». Ceci supprime l’entrée
eth0
du fichier
« /etc/network/run/ifstate
». (Ceci peut donner
quelques messages d'erreur si eth0
n'est pas active ou a
mal été configurée auparavant. Jusqu'à présent, il semble qu'il soit sûr de
le faire n'importe quand sur une simple station de travail n'ayant qu'un
seul utilisateur).
Vous pouvez maintenant réécrire le contenu du fichier
« /etc/network/interfaces
» selon vos besoins
pour reconfigurer l’interface réseau eth0
.
Ensuite, vous pourrez réactiver eth0
avec la commande
sudo ifup
eth0
».
Vous pouvez (ré)initialiser l’interface réseau simplement par
« sudo ifdown eth0;sudo ifup
eth0
».
Le paquet ifupdown-extra
fournit des tests de connexion
au réseau facile à utiliser avec le paquet ifupdown
.
network-test
(1) peut être utilisée depuis
l’interpréteur de commandes.
ifup
.
La commande network-test
vous libère de l’exécution
d'ennuyeuses commandes de bas niveau pour analyser les problèmes du réseau.
Les scripts automatiques sont installés dans
« /etc/network/*/
» et effectuent ce qui
suit :
/etc/network/routes
»
/var/log/syslog
»
L’enregistrement dans syslog est assez utile pour l’administration des problèmes de réseau sur un système distant.
Le comportement automatique du paquet ifupdown-extra
est
configurable par « /etc/default/network-test
»
Certaines de ces vérifications automatiques ralentissent un peu le démarrage
du système car elle prennent un certain temps à l’écoute des réponses ARP.
Les fonctionnalités du paquet ifupdown
peuvent être
améliorées au-delà de ce qui est décrit dans Section 5.5, « Configuration de base du réseau avec ifupdown (ancienne) » avec des
connaissances avancées.
Les fonctionnalités décrites ici sont entièrement optionnelles. Étant paresseux et minimaliste, je me suis rarement ennuyé à les utiliser.
Si vous n'êtes pas arrivé à établir une connexion réseau à l’aide des informations de Section 5.5, « Configuration de base du réseau avec ifupdown (ancienne) », vous ne ferez qu'empirer la situation en utilisant les informations qui suivent :
Le paquet ifplugd
est l’ancien outil de configuration
automatique du réseau, il ne peut gérer que les connexions ethernet. Il
permet de régler le problème des connexions et déconnexions des câbles
ethernet avec les PC mobiles, etc. Si vous avez installé NetworkManager ou Wicd (voir Section 5.2, « Configuration moderne de réseau pour l’ordinateur de bureau »), vous n'avez pas besoin
de ce paquet.
Ce paquet fait tourner un démon qui remplace
les fonctionnalités auto ou allow-hotplug (voir Tableau 5.10, « Liste des entrées de
« /etc/network/interfaces
» ») et qui active les interfaces lors de
leur connexion au réseau.
Voici comment utiliser le paquet ifplugd
pour le port
ethernet interne, par exemple, eth0
.
auto eth0
» ou
« allow-hotplug eth0
» de
« /etc/network/interfaces
»
iface eth0 inet …
» et
« mapping …
» de
« /etc/network/interfaces
»
ifplugd
.
sudo dpkg-reconfigure ifplugd
»
eth0
comme interface « statique devant être
surveillée par ifplugd ».
Le réseau fonctionne maintenant comme vous le désirez.
Lors de la mise sous tension ou lors de la découverte du matériel, l’interface est activée d'elle-même.
Les paramètres de la commande ifplugd
(8) peuvent définir
son comportement tel que le délai de reconfiguration des interfaces.
Le paquet ifmeric
nous permet de manipuler a posteriori
la métrique de routes même avec DHCP.
Ce qui suit permettra de rendre l’interface eth0
prioritaire sur l’interface wlan0
:
ifmetric
:
metric 0
» juste
en-dessous de la ligne « iface eth0 inet
dhcp
» :
metric 1
»
juste en-dessous de la ligne « iface wlan0 inet
dhcp
».
« metric 0 » indique la route de plus haute priorité et c'est
celle par défaut. La plus grande valeur de « metric » indique une
route de moindre priorité. L’adresse IP de l’interface active ayant la
valeur de « metric » la plus basse devient celle d'origine. Voir
ifmetric
(8).
Une seule interface ethernet physique peut être configurée en tant que de multiples interfaces virtuelles avec différentes adresses IP. Habituellement, le but est de connecter une interface à plusieurs sous-réseaux ayant des IP différentes. Par exemple, l’hébergement web virtuel basé sur l’IP avec une seule interface réseau est une application de ce type.
Supposons, par exemple, ce qui suit :
192.168.0.x/24
:
eth0
pour Internet :
192.168.0.1
avec l’interface
virtuelle eth0:0
pour le réseau local.
Les entrées suivantes de
« /etc/network/interfaces
» permettent de
configurer votre réseau :
iface eth0 inet dhcp metric 0 iface eth0:0 inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 metric 1
Bien que cet exemple de configuration avec traduction d'adresse réseau (NAT) en utilisant netfilter/iptables (voir Section 5.9, « Infrastructure de netfilter ») puisse fournir un routeur économique pour le réseau local avec une seule interface, il n'y a pas, avec votre configuration, de possibilité réelle de parefeu. Vous devriez utiliser deux interfaces physiques avec NAT afin de sécuriser le réseau local de ce qui provient d'Internet.
Le paquet ifupdown
fournit une configuration avancée du
réseau en utilisant le nom configuration
réseau et le nom interface
réseau. J'utilise une terminologie un peu différente de celle
utilisée dans ifup
(8) et
interfaces
(5).
Tableau 5.12. Terminologie des périphériques réseau
terminologie de la page de manuel | ma terminologie | exemple dans le texte suivant : | description |
---|---|---|---|
nom de l’interface physique | nom de l’interface réseau |
lo , eth0 ,
<nom_interface>
|
nom donné dans le noyau Linux (utilisant le mécanisme
udev )
|
nom de l’interface logique | nom de la configuration réseau |
config1 , config2 ,
<nom_config>
|
noms suivants iface
dans le fichier « /etc/network/interfaces »
|
Les commandes élémentaires de configuration du réseau se trouvant dans Section 5.5.1, « La syntaxe de commande simplifiée » exigent que le nom de la
configuration réseau de l’entrée
iface
corresponde au
nom de l’interface réseau dans le fichier
« /etc/network/interfaces
».
Les commandes avancées de configuration du réseau permettent de séparer de
la manière suivante le nom de la configuration
réseau et le nom de l’interface
réseau dans le fichier
« /etc/network/interfaces
» :
Tableau 5.13. Liste des commandes avancées de configuration du réseau par ifupdown
commande | action |
---|---|
ifup eth0=config1
|
activer une interface réseau eth0 avec la configuration
config1
|
ifdown eth0=config1
|
désactiver une interface réseau eth0 avec la
configuration config1
|
ifup eth0
|
activer une interface réseau eth0 avec la configuration
sélectionnée par l’entrée mapping
|
ifdown eth0
|
désactiver une interface réseau eth0 avec la
configuration sélectionnée par l’entrée
mapping
|
Nous avons sauté l’explication de l’entrée mapping
du fichier
« /etc/network/interfaces
» dans la Section 5.5.2, « Syntaxe de base de « /etc/network/interfaces » » pour éviter des
complications. Cette entrée possède la syntaxe suivante :
mapping <motif_nom_interface> script <nom_script> map <script_entrée1> map <script_entrée2> map ...
Ceci fournit une fonctionnalité avancée au fichier
« /etc/network/interfaces
» en automatisant le
choix de la configuration avec le script de « mapping » indiqué
par <nom_script>
.
Suivons l’exécution de ce qui suit :
$ sudo ifup eth0
Lorsque « <motif_nom_interface>
»
correspond à « eth0
», cette exécution lance
l’exécution de la commande suivante afin de configurer automatiquement
eth0
:
$ sudo ifup eth0=$(echo -e '<script_entrée1> \n <script_entrée2> \n ...' | <nom_script> eth0)
Ici, les lignes d'entrée du script contenant
« map
» sont optionnelles et peuvent être
répétées.
Le motif générique (glob) pour l’entrée mapping
fonctionne comme les
motifs génériques des noms de fichiers de l’interpréteur de commandes (voir
Section 1.5.6, « Motifs génériques (« glob ») de l’interpréteur de commandes »).
Voici comment commuter manuellement entre plusieurs configurations de réseau
sans réécrire le fichier
« /etc/network/interfaces
» comme dans Section 5.5.13, « Configuration réseau de base ».
Créez un unique fichier
« /etc/network/interfaces
» tel que le suivant
pour toutes les configurations des réseaux auxquels vous désirez
accéder :
auto lo iface lo inet loopback iface config1 inet dhcp hostname "ma_machine" iface config2 inet static address 192.168.11.100 netmask 255.255.255.0 broadcast 192.168.11.255 gateway 192.168.11.1 dns-domain lan dns-nameservers 192.168.11.1 iface pppoe inet manual pre-up /sbin/ifconfig eth0 up up ifup ppp0=dsl down ifdown ppp0=dsl post-down /sbin/ifconfig eth0 down # Ce qui suit n'est utilisé que de manière interne iface dsl inet ppp provider fai_adsl iface pots inet ppp provider fai
Vous remarquez que le nom de configuration de
réseau qui est l’élément suivant iface
n'utilise pas l’élément
pour le nom d'interface réseau. Notez
aussi qu'il n'y a pas d'entrée auto
ni d'entrée allow-hotplug
pour démarrer
automatiquement l’interface réseau eth0
sur événement.
Vous êtes maintenant prêt à commuter la configuration de votre réseau.
Déplaçons votre PC vers un réseau local servi par DHCP. Vous activez
l’interface réseau (l’interface physique)
eth0
en lui assignant le nom de configuration réseau (le nom de l’interface
logique) config1
de la manière suivante :
$ sudo ifup eth0=config1 Password: ...
L’interface eth0
est active, configurée par DHCP et
connectée au réseau local.
$ sudo ifdown eth0=config1 ...
L’interface eth0
est inactive est déconnectée du réseau
local.
Déplaçons vitre PC vers un réseau local servi par une adresse IP. Vous
activez l’interface réseau
eth0
en lui assignant le nom de configuration réseau config2
de
la manière suivante :
$ sudo ifup eth0=config2 ...
L’interface eth0
est active, configurée avec une IP
statique et connectée au réseau local. Les paramètres supplémentaires donnés
sous la forme dns-*
configurent le contenu de
« /etc/resolv.conf
». Ce fichier
« /etc/resolv.conf
» est mieux géré si le
paquet resolvconf
est installé.
$ sudo ifdown eth0=config2 ...
L’interface eth0
est de nouveau inactive et déconnectée
du réseau local.
Déplaçons votre PC sur le port d'un modem large bande connecté au service
par PPPoE. Vous activez l’interface
réseaueth0
en lui assignant le nom de
configuration réseau
pppoe
de la manière suivante :
$ sudo ifup eth0=pppoe ...
L’interface eth0
est active, configurée avec une
connexion PPPoE, directement vers le FAI.
$ sudo ifdown eth0=pppoe ...
L’interface eth0
est de nouveau désactivée et
déconnectée.
Déplaçons votre PC à un emplacement sans réseau local et sans modem large
bande mais avec un POTS et un modem (modem sur le réseau commuté). Vous
activez l’interface réseau
ppp0
en lui assignant le nom de configuration réseau pots
de la
manière suivante :
$ sudo ifup ppp0=pots ...
L’interface ppp0
est active et connectée à Internet par
PPP.
$ sudo ifdown ppp0=pots ...
L’interface ppp0
est inactive est déconnectée d'Internet.
Vous devriez vérifier l’état actuel de la configuration du réseau du système
ifupdown
dans le fichier
« /etc/network/run/ifstate
».
Il se peut que vous ayez besoin d'ajuster le nombre à la fin de
eth*
, ppp*
, etc. si vous avez
plusieurs interfaces réseau.
Le système ifupdown
lance automatiquement les scripts qui
sont installés dans « /etc/network/*/
» en
exportant les variables d'environnement vers les scripts.
Tableau 5.14. Liste des variables d'environnement passées par le système ifupdown
variable d'environnement | valeur passée |
---|---|
« $IFACE »
|
nom physique (nom d'interface) de l’interface en cours de traitement |
« $LOGICAL »
|
nom logique (nom de configuration) de l’interface en cours de traitement |
« $ADDRFAM »
|
<famille_d_adresses> de l’interface |
« $METHOD »
|
<nom_méthode> de l’interface. (par exemple « static ») |
« $MODE »
|
« » si lancé depuis ifup , « stop »
si lancé depuis ifdown
|
« $PHASE »
|
comme pour « $MODE » mais avec une plus faible
granularité permettant de distinguer les phases pre-up ,
post-up , pre-down et
post-down
|
« $VERBOSITY »
|
indique si « --verbose » a été
utilisé. Positionnée à 1 dans ce cas, à 0 sinon
|
« $PATH »
|
chemin de recherche de la commande :
« /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin »
|
« $IF_<OPTION> »
|
valeur de l’option correspondante de l’entrée iface
|
Ici, chaque variable d'environnement, « $IF_<OPTION>
», est créée à partir du nom de l’option correspondante
comme <option1> et <option2> en les préfixant avec
« $IF_
», et en convertissant la casse en
majuscules, en remplaçant les tirets (« - ») par des tirets
soulignés (« _ ») et en supprimant les caractères non
alphanumériques.
Voir Section 5.5.2, « Syntaxe de base de « /etc/network/interfaces » » pour <famille_adresse>, <nom_méthode>, <option1> et <option2>.
Le paquet ifupdown-extra
(voir Section 5.5.14, « La paquet ifupdown-extra ») utilise ces variables
d'environnement pour étendre les fonctionnalités du paquet
ifupdown
. Le paquet ifmetric
(voir
Section 5.6.2, « Le paquet ifmetric ») installe le script
« /etc/network/if-up.d/ifmetric
» qui définit
la métrique par l’intermédiaire de la variable
« $IF_METRIC
». Le paquet
guessnet
(voir Section 5.6.8, « Cartographie réseau avec guessnet »),
qui fournit une ossature simple et puissante pour la sélection automatique
de la configuration du réseau par le mécanisme de cartographie de réseau
(« mapping »), les utilise aussi.
Pour des exemples plus spécifiques de scripts personnalisés de configuration
du réseau en utilisant les variables d'environnement, vous pouvez consulter
les scripts d'exemples se trouvant dans
« /usr/share/doc/ifupdown/examples/*
» et les
scripts utilisés dans les paquets ifscheme
et
ifupdown-scripts-zg2
. Ces scripts supplémentaires ont des
fonctionnalités qui se chevauchent un peu avec les paquets de base
ifupdown-extra
et guessnet
. Si vous
installez ces scripts supplémentaires, vous devrez les personnaliser afin
d'éviter des interférences.
Plutôt que de choisir manuellement la configuration comme il est décrit dans la Section 5.6.6, « Configuration réseau commutable manuellement », vous pouvez utiliser le mécanisme de cartographie réseau décrit dans la Section 5.6.5, « L’entrée « mapping » » pour sélectionner automatiquement la configuration du réseau à l’aide de scripts personnalisés.
La commande guessnet-ifupdown
(8) fournie par le paquet
guessnet
est conçue pour être utilisée comme script de
cartographie réseau et fournit une infrastructure puissante pour améliorer
le système ifupdown
.
guessnet
pour chacune des
configurations de réseau de l’entrée iface
.
iface
donnant un résultat qui ne
soit pas en erreur comme configuration du réseau.
Cette double utilisation du fichier
« /etc/network/interfaces
» par le script de
mapping, guessnet-ifupdown
et l’infrastructure d'origine
de configuration du réseau, ifupdown
, n'a pas d'impact
négatif car les options de guessnet
n'exportent que des
variables d'environnement supplémentaires vers les scripts lancés par le
système ifupdown
. Voir
guessnet-ifupdown
(8) pour davantage d'informations.
Lorsqu'il est nécessaire d'avoir plusieurs lignes d'options de guessnet
dans
« /etc/network/interfaces
», utilisez les
lignes d'options commençant par guessnet1
, guessnet2
et ainsi de suite, car
le paquet ifupdown
n'autorise pas que les chaînes de
caractères de début des lignes d'options soient dupliquées.
Les commandes Iproute2 offrent des possibilités complètes de configuration de bas niveau du réseau. Voici une table de conversion des commandes obsolètes net-tools obsolètes vers les nouvelles commandes iproute2, etc.
Tableau 5.15. Table de conversion depuis les commandes obsolètes
net-tools
vers les nouvelles commandes
iproute2
net-tools obsolètes | nouveau iproute2, etc. | manipulation |
---|---|---|
ifconfig (8)
|
ip addr
|
adresse de protocole (IP ou IPv6) d'un périphérique |
route (8)
|
ip route
|
entrée de la table de routage |
arp (8)
|
ip neigh
|
entrée de cache ARP ou NDISC |
ipmaddr
|
ip maddr
|
adresse multicast |
iptunnel
|
ip tunnel
|
tunnel sur IP |
nameif (8)
|
ifrename (8)
|
nommer les interfaces réseau en se basant sur l’adresse MAC |
mii-tool (8)
|
ethtool (8)
|
paramétrage du périphérique ethernet |
Voir ip
(8) et Howto de la suite utilitaire
IPROUTE2.
Vous pouvez utiliser de manière sûre les commandes de réseau de bas niveau de la manière suivante car elles ne modifient pas la configuration du réseau :
Tableau 5.16. Liste des commande de réseau de bas niveau
commande | description |
---|---|
ifconfig
|
afficher l’état et l’adresse du lien des interfaces actives |
ip addr show
|
afficher l’état et l’adresse du lien des interfaces actives |
route -n
|
afficher toutes les tables de routage sous forme d'adresses numériques |
ip route show
|
afficher toutes les tables de routage sous forme d'adresses numériques |
arp
|
afficher le contenu actuel des tables de cache d'ARP |
ip neigh
|
afficher le contenu actuel des tables de cache d'ARP |
plog
|
afficher le journal du démon ppp |
ping yahoo.com
|
vérifier la connexion internet vers
« yahoo.com »
|
whois yahoo.com
|
vérifier qui a enregistré « yahoo.com » dans la
base de données des domaines
|
traceroute yahoo.com
|
tracer la connexion Internet vers « yahoo.com »
|
tracepath yahoo.com
|
tracer la connexion Internet vers « yahoo.com »
|
mtr yahoo.com
|
tracer la connexion Internet vers « yahoo.com »
(de manière répétitive)
|
dig [@dns-serveur.com] example.com [{a|mx|any}]
|
vérifier les enregistrements DNS de
« example.com » par
« dns-serveur.com » pour un enregistrement
« a », « mx » ou
« any »
|
iptables -L -n
|
vérifier le filtre de paquets |
netstat -a
|
rechercher tous les ports ouverts |
netstat -l --inet
|
rechercher les ports à l’écoute |
netstat -ln --tcp
|
rechercher les ports TCP à l’écoute (numérique) |
dlint example.com
|
vérifier les information de zone DNS de
« example.com »
|
Certains de ces outils de configuration du réseau se trouvent dans
« /sbin/
». Il vous faudra peut-être utiliser
le chemin complet vers la commande comme
« /sbin/ifconfig
» ou ajouter
« /sbin
» à la liste
« $PATH
» dans votre fichier
« ~/.bashrc
»
L’optimisation générique du réseau est en dehors des buts de cette documentation. Je ne parle que des sujets pertinents pour une connexion de l’utilisateur grand public.
Tableau 5.17. Liste des outils d'optimisation du réseau.
paquets | popcon | taille | description |
---|---|---|---|
iftop
*
|
V:1.3, I:7 | 72 | afficher l’utilisation de la bande passante d'une interface réseau |
iperf
*
|
V:0.5, I:3 | 200 | outil de mesure de la bande passante du protocole |
apt-spy *
|
V:0.17, I:1.7 | 204 |
écrire un fichier « /etc/apt/sources.list » en
fonction de tests de bande passante
|
ifstat *
|
V:0.2, I:1.2 | 88 | InterFace STATistics Monitoring (surveillance des statistiques de l’interface) |
bmon
*
|
V:0.2, I:0.9 | 188 | surveillance portable de la bande passante et estimation du débit |
ethstatus *
|
V:0.10, I:0.7 | 84 | script qui mesure rapidement le débit d"une interface réseau |
bing
*
|
V:0.08, I:0.6 | 96 | testeur de bande passante empirique et stochastique |
bwm-ng *
|
V:0.2, I:1.2 | 152 | moniteur de bande passante simple en mode console |
ethstats *
|
V:0.05, I:0.3 | 52 | moniteur de statistiques ethernet en mode console |
ipfm
*
|
V:0.04, I:0.19 | 156 | outil d'analyse de bande passante |
La valeur du Maximum Transmission
Unit (MTU) (Unité de transmission maximum) peut être déterminée
expérimentalement par ping
(8) avec l’option
« -M do
» qui envoie des paquets ICMP dont la
taille commence par 1500 (avec un décalage de 28 octets pour l’en-tête
IP+ICMP) et recherche la taille la plus grande sans fragmentation d'IP.
Essayez, par exemple, ce qui suit :
$ ping -c 1 -s $((1500-28)) -M do www.debian.org PING www.debian.org (194.109.137.218) 1472(1500) bytes of data. From 192.168.11.2 icmp_seq=1 Frag needed and DF set (mtu = 1454) --- www.debian.org ping statistics --- 0 packets transmitted, 0 received, +1 errors
Essayez 1454 à la place de 1500
Vous voyez que ping
(8) a réussi avec 1454.
Ce processus est la découverte du chemin
MTU (PMTU) (RFC1191) et la commande
tracepath
(8) peut l’automatiser.
L’exemple ci-dessus avec une valeur de PMTU de 1454 correspond à mon fournisseur FTTP précédent qui utilisait Asynchronous Transfer Mode (ATM) comme réseau fédérateur (« backbone ») et servait ses clients avec PPPoE. La valeur réelle de PMTU dépend de votre environnement, par exemple, 1500 avec mon nouveau fournisseur FTTP.
Tableau 5.18. Lignes directrices pour une valeur optimum de MTU
environnement de réseau | MTU | justification |
---|---|---|
Lien commuté (IP : PPP) | 576 | standard |
Lien ethernet (IP : DHCP ou fixe) | 1500 | standard et par défaut |
lien ethernet (IP : PPPoE) | 1492 (=1500-8) | 2 octets pour l’en-tête PPP et 6 octets pour l’en-tête PPPoE |
lien ethernet (épine dorsale de réseau du FAI : ATM, IP : DHCP ou fixe) | 1462 (=48*31-18-8) | spéculations de l’auteur : 18 pour l’en-tête ethernet, 8 pour le « trailer » SAR |
lien ethernet (réseau fédérateur du FAI : ATM, IP : PPPoE) | 1454 (=48*31-8-18-8) | voir une justification dans « Configuration optimum du MTU pour les connexions ADSL PPPoE » |
En plus de ces lignes directrices, vous devriez savoir ce qui suit :
Voici des exemples de définition de la valeur de MTU à partir de ses valeurs par défaut 1500 à 1454.
Pour le DHCP (voir Section 5.5.4, « Interfaces réseau gérées par DHCP »), vous pouvez
remplacer les lignes d'entrée iface
pertinentes du fichier
« /etc/network/interfaces
» avec ce qui
suit :
iface eth0 inet dhcp hostname "ma_machine" pre-up /sbin/ifconfig $IFACE mtu 1454
Pour une IP statique (voirSection 5.5.5, « Interface réseau avec une adresse IP fixe »), vous pouvez
remplacer les lignes d'entrées
'iface
'
pertinentes du fichier
« /etc/network/interfaces
» avec ce qui
suit :
iface eth0 inet static address 192.168.11.100 netmask 255.255.255.0 broadcast 192.168.11.255 gateway 192.168.11.1 mtu 1454 dns-domain lan dns-nameservers 192.168.11.1
Pour une connexion PPPoE directe (voir Section 5.4.5, « La connexion PPPoE avec pppoeconf »), vous pouvez remplacer la
ligne « mtu
» pertinente du fichier
« /etc/ppp/peers/dsl-provider
» par ce qui
suit :
mtu 1454
La tille maximum de segment (MSS : « maximum segment size ») est utilisée comme mesure de remplacement de la taille des paquets. La relation entre MSS et MTU est la suivante :
Les optimisations basées sur iptables
(8) (voir Section 5.9, « Infrastructure de netfilter ») peuvent limiter la taille des paquets
au MSS ce qui est utile pour le routeur. Voir "TCPMSS" dans
iptables
(8).
Le débit de TCP peut être maximisé en ajustant les paramètres de taille de tampon TCP comme cela est décrit dans « Guide de réglage de TCP » (« TCP Tuning Guide ») et « réglage de TCP » (« TCP tuning ») pour les réseaux WAN modernes de haut débit et de faible latence. À ce jour, les paramètres par défaut de Debian fonctionnent bien même lorsque mon réseau local est connecté par l’intermédiaire d'un service rapide sur fibre optique (FTTP) à 1Gb/s.
Netfilter fournit l’infrastructure pour un parefeu d'état (« stateful firewall ») et la traduction d'adresses réseau (NAT) (« network address translation ») avec des modules du noyau de Linux (voir Section 3.5.12, « Initialisation des modules du noyau »).
Tableau 5.19. Liste d'outils de parefeu
paquets | popcon | taille | description |
---|---|---|---|
iptables *
|
V:27, I:99 | 1316 | outils d'administration pour netfilter |
iptstate *
|
V:0.14, I:0.9 | 152 |
surveillance continue de l’état de netfilter (semblable à top (1))
|
shorewall-perl *
|
V:0.15, I:0.5 | 76 |
Shoreline Firewall, générateur de
fichier de configuration pour netfilter
(basé sur Perl, recommandé pour lenny )
|
shorewall-shell *
|
I:1.9 | 76 |
Shoreline Firewall, générateur de
fichier de configuration pour netfilter
(basé sur l’interpréteur de commandes, autre possibilité pour
lenny )
|
L’outil netfilter principal de l’espace
utilisateur est iptables
(8). Vous pouvez configurer
vous-même netfilter de manière interactive
depuis l’interpréteur de commandes, enregistrer son état avec
iptables-save
(8) et le restaurer par l’intermédiaire d'un
script d'init avec iptables-restore
(8) lors du
redémarrage du système.
Des scripts d'assistant tels que shorewall facilitent ce processus.
Voir les documentations se trouvant sur http://www.netfilter.org/documentation/
(ou dans « /usr/share/doc/iptables/html/
»).
Bien qu'elles aient été écrites pour Linux 2.4, la commande iptables
(8) et
la fonction netfilter du noyau s'appliquent toutes deux à la version
actuelle de LInux 2.6.
Après avoir établi une connexion réseau (voir Chapitre 5, Configuration du réseau), vous pouvez faire tourner diverses applications réseau.
Il y a de nombreux paquets de navigateurs web permettant d'accéder à des contenus distants avec le protocole de transfert hypertexte (« Hypertext Transfer Protocol (HTTP) »).
Tableau 6.1. Liste de navigateurs web
paquet | popcon | taille | type | description du navigateur web |
---|---|---|---|---|
iceweasel *
|
V:30, I:48 | 3761 | X | Mozilla Firefox démarqué |
iceape-browser *
|
V:1.4, I:2 | 35686 | , , | Mozilla, supprimé en raisons de problèmes de sécurité bug#505565 |
epiphany-browser *
|
V:13, I:34 | 1060 | , , | GNOME, Epiphany respectant HIG |
galeon *
|
V:0.9, I:1.4 | 1776 | , , | GNOME, Galeon, remplacé par Epiphany |
konqueror *
|
V:8, I:15 | 3584 | , , | KDE, Konqueror |
w3m
*
|
V:24, I:84 | 1992 | texte | w3m |
lynx
*
|
I:22 | 252 | , , | Lynx |
elinks *
|
V:2, I:5 | 1448 | , , | ELinks |
links
*
|
V:3, I:9 | 1380 | , , | Links (texte uniquement) |
links2 *
|
V:0.7, I:3 | 3288 | graphiques | Links (graphique en mode console sans X) |
Vous pouvez utiliser les chaînes d'URL spéciales suivantes pour confirmer le paramétrage de certain navigateurs :
about:
»
about:config
»
about:plugins
»
Debian propose de nombreux paquets de greffons libres pour les navigateurs dans la zone main qui peuvent gérer non seulement Java (plateforme logicielle) et Flash mais aussi les fichiers MPEG, MPEG2, MPEG4, DivX, Windows Media Video (.wmv), QuickTime (.mov), MP3 (.mp3), Ogg/Vorbis, les DVD, VCD, etc. Debian propose aussi, dans les zones contrib ou non-free, des paquets de programmes facilitant l’installation de greffons non libres pour les navigateurs.
Tableau 6.2. Liste des paquets de greffons pour les navigateurs
paquet | popcon | taille | zone | description |
---|---|---|---|---|
icedtea6-plugin *
|
V:0.9, I:1.6 | 272 | main | Greffon Java basé sur OpenJDK et IcedTea |
sun-java6-plugin *
|
I:10 | 100 | non-free | greffon Java pour Java SE 6 de Sun (uniquement pour i386) |
mozilla-plugin-gnash *
|
V:0.4, I:4 | 60 | main | greffon Flash basé sur Gnash |
flashplugin-nonfree *
|
V:1.3, I:15 | 132 | contrib | assistant à l’installation du greffon Flash pour installer le lecteur Flash d'Adobe (i386 et amd64 uniquement) |
mozilla-plugin-vlc *
|
V:3, I:4 | 128 | main | greffon multimédia basé sur VLC media player |
totem-mozilla *
|
V:20, I:34 | 544 | main | greffon multimédia basé sur Totem media player de GNOME |
gecko-mediaplayer *
|
V:0.6, I:0.8 | 724 | main | greffon multimédia basé sur (GNOME) MPlayer |
nspluginwrapper *
|
V:1.8, I:3 | 472 | contrib | un « enrobeur » permettant de faire tourner les greffons i386 de Netscape sur une architecture amd64 |
Bien que l’utilisation des paquets Debian ci-dessus soit plus facile, il est
toujours possible d'installer vous-même des greffons de navigateur en
installant les fichiers « *.so » dans les répertoires de
greffons, (par exemple,
« /usr/lib/iceweasel/plugins/
») et en
redémarrant le navigateur.
Certains sites web refusent les connexions en se basant sur la chaîne
« user-agent » de votre navigateur. Vous pouvez contourner cette
situation en usurpant la chaîne
user-agent. Vous pouvez le faire, par exemple, en ajoutant la ligne
suivante dans les fichiers de configuration de l’utilisateur tels que
« ~/.gnome2/epiphany/mozilla/epiphany/user.js
»
ou
« ~/.mozilla/firefox/*.default/user.js
» :
user_pref{"general.useragent.override","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"};
Vous pouvez aussi ajouter et réinitialiser cette variable en entrant l’URL
« about:config
» et en faisant un clic-droit
pour afficher son contenu.
Usurper la chaîne user-agent peut provoquer de mauvais effets de bord avec Java.
Si vous êtes sur le point de configurer le serveur de courrier pour échanger directement du courrier avec Internet, vous feriez mieux de lire ce document élémentaire.
Les exemples de configuration suivants ne sont valables que pour une station de travail mobile typique avec des connexions internet de type grand public.
De manière à limiter les problèmes de spam (courriels non désirés et non sollicités), de nombreux fournisseurs d'accès à Internet qui fournissent une connexion Internet pour le grand public mettent en place des contre-mesures.
Lors de la configuration de votre système de courrier électronique, ou lors de la résolution de problèmes de diffusion de courrier, vous devez tenir compte de ces nouvelles limitations.
À la lumière de cette situation hostile d'Internet, certains fournisseurs de service de courrier électronique comme Yahoo.com et Gmail.com offrent un service de courrier électronique sécurisé que l’on peut connecter depuis n'importe où sur Internet en utilisant Transport Layer Security (TLS) et sont prédécesseur, Secure Sockets Layer (SSL).
Il n'est pas réaliste de mettre en œuvre un serveur SMTP sur un réseau
grand-public pour envoyer de manière fiable le courrier électronique
directement vers une machine distante.. Il sera probablement rejeté. Vous
devez utiliser les services de smarthost services offerts par votre
fournisseur d'accès ou par un fournisseur de courrier électronique
indépendant. Pour faire simple, je supposerai, dans le texte qui suit, que
le smarthost situé à « smtp.hostname.dom
»,
exige SMTP AUTH, et utilise le port de
soumission de messages (587).
La configuration de courrier électronique la plus simple est que le courrier
électronique soit émis vers le smarthost du fournisseur d'accès et reçu du
serveur POP3 de ce fournisseur d'accès par le MUA (voir Section 6.4, « Agent de courrier électronique de l’utilisateur (« MUA ») ») lui-même. Ce type de configuration est
courant avec les MUA entièrement basés sur une interface graphique tels que
icedove
(1), evolution
(1), etc. Si vous
devez filtrer le courriel selon son type, vous utiliserez les fonctions de
filtrage du MUA. Dans ce cas, l’agent de transport du courrier (MTA) local
(voir Section 6.3, « Agent de transport de courrier électronique (« MTA ») ») n'aura que la
distribution locale à effectuer.
La configuration de courriel de remplacement est que le courriel soit envoyé
via un MTA local vers le smarthost du FAI et reçu du serveur POP3 du FAI par
le logiciel de récupération du courriel (voir Section 6.5, « Utilitaire de récupération et de rediffusion du courriel distant ») vers une boîte à
lettres locale. Si vous avez besoin de filtrer le courriel en fonction de
son type, vous pouvez utiliser un MDA (agent de distribution du courriel)
avec filtres (voir Section 6.6, « Agent de distribution du courriel (MDA) avec filtre »)
pour filtrer les courriels vers des boîtes à lettres séparées. Ce type de
configuration est populaire avec un simple MUA en mode console tel que
mutt
(1), gnus
(1), etc., bien que ce
soit possible avec n’importe quel MUA (voir Section 6.4, « Agent de courrier électronique de l’utilisateur (« MUA ») »). Dans ce cas, le MTA local (voir Section 6.3, « Agent de transport de courrier électronique (« MTA ») ») doit faire à la fois la diffusion
vers le smarthost et la diffusion locale). Comme les station de travail
mobiles n’ont pas de nom de domaine pleinement qualifié (FDQN) valable, vous
devez configurer le MTA local pour masquer et simuler le nom de courrier
local réel pour le courriel sortant afin d’éviter des erreurs de
distribution (voir Section 6.3.3, « Configuration de l’adresse de courriel »).
Vous pourrez avoir envie de configurer MUA/MDA afin d'utiliser Maildir pour stocker les messages de courrier électronique quelque part dans l’arborescence de votre répertoire personnel.
Pour une station de travail normale le choix habituel pour l’agent de
transport du courrier électronique (MTA) est soit le paquet
exim4-*
, soit postfix
. C’est vraiment
laissé à votre choix.
Tableau 6.3. Liste des paquets liés à l’agent de transport du courrier pour une station de travail
paquet | popcon | taille | description |
---|---|---|---|
exim4-daemon-light *
|
V:60, I:65 | 1104 | Agent de transport de courrier électronique Exim4 (MTA : par défaut de Debian) |
exim4-base *
|
V:62, I:68 | 1688 | Documentation d'Exim4 (texte) et fichiers communs |
exim4-doc-html *
|
I:0.6 | 3440 | Documentation d'Exim4 (html) |
exim4-doc-info *
|
I:0.3 | 556 | Documentation d'Exim4 (info) |
postfix *
|
V:18, I:20 | 3492 | Agent de transport de courrier électronique Postfix (MTA : remplacement) |
postfix-doc *
|
I:1.9 | 3420 | Documentation de Postfix (html+texte) |
sasl2-bin *
|
V:2, I:5 | 448 | Implémentation de l’API Cyrus SASL (complément à postfix pour SMTP AUTH) |
cyrus-sasl2-doc *
|
I:2 | 284 | Cyrus SASL - documentation |
Bien que le nombre de votes popcon d'exim4-*
semble
plusieurs fois plus populaire que celui de postfix
, ceci
ne signifie pas que postfix
n'est pas populaire avec les
développeurs de Debian. Le système de serveur de Debian utiliser à la fois
exim4
et postfix
. L’analyse des en-tête de courriels des
envois vers les listes de diffusion par les développeurs principaux de
Debian montrent aussi que ces deux MTA ont la même popularité.
Les paquets exim4-*
sont connus pour consommer très peut
de mémoire et d'avoir une configuration très souple. Le paquet
postfix
est connu pour être compact, rapide, simple et
sûr. Les deux sont livrés avec une large documentation, sont d'aussi bonne
qualité et ont une aussi bonne licence.
Il existe dans l’archive Debian de nombreux choix pour les paquets d'agents de transport du courrier électronique (MTA) avec des possibilités et des objectifs différents.
Tableau 6.4. Liste des choix de paquets Debian d'agent de transport du courrier électronique (MTA)
paquet | popcon | taille | possibilités et objectif |
---|---|---|---|
exim4-daemon-light *
|
V:60, I:65 | 1104 | complète |
postfix *
|
V:18, I:20 | 3492 | complète (sécurité) |
exim4-daemon-heavy *
|
V:1.7, I:1.9 | 1220 | complète (souple) |
sendmail-bin *
|
V:1.9, I:2 | 2052 | complète (uniquement lorsque vous serez déjà familiarisé) |
nullmailer *
|
V:0.7, I:0.8 | 436 | limitée, pas de courrier local |
ssmtp
*
|
V:1.2, I:1.7 | 0 | limitée, pas de courrier local |
courier-mta *
|
V:0.14, I:0.15 | 12316 | très complète (interface web, etc.) |
xmail
*
|
V:0.14, I:0.16 | 836 | légère |
masqmail *
|
V:0.04, I:0.05 | 624 | légère |
esmtp
*
|
V:0.09, I:0.2 | 172 | légère |
esmtp-run *
|
V:0.07, I:0.11 | 64 |
légère (extension de compatibilité avec sendmail vers
esmtp )
|
msmtp
*
|
V:0.3, I:0.8 | 340 | légère |
msmtp-mta *
|
V:0.11, I:0.15 | 32 |
légère (extension de compatibilité avec sendmail vers
msmtp )
|
Pour le courrier d'Internet par l’intermédiaire d'un smarthost, vous
(re)configurerez les paquets exim4-*
comme suit :
$ sudo /etc/init.d/exim4 stop $ sudo dpkg-reconfigure exim4-config
Choisir « envoi via relais (« smarthost ») - réception SMTP ou fetchmail » : pour « Configuration du serveur de courriel ».
Définir « Nom de courriel su système » à sa valeur par défaut qui est le nom pleinement qualifié (FQDN, voir Section 5.1.2, « Résolution du nom d'hôte »).
Définir « Liste d'adresses IP où Exim sera en attente de connexions SMTP entrantes » à sa valeur par défaut qui est « 127.0.0.1 ; ::1 ».
Supprimer le contenu de « Autres destinations dont le courriel doit être accepté ».
Supprimer le contenu de « Machines à relayer ».
Définir « Nom réseau ou adresse IP du système « smarthost » » à « smtp.hostname.dom:587 ».
Sélectionner « <Non> » pour « Faut-il cacher le nom
local de courriel dans les courriels sortants ? ». (Utiliser
plutôt « /etc/email-addresses
» comme dans
Section 6.3.3, « Configuration de l’adresse de courriel »).
Donner à « Faut-il optimiser les requêtes DNS (connexion à la demande)) ? » l’une des réponses suivantes :
Définir « Méthode de distribution du courrier local : » à « Format « mbox » dans /var/mail ».
Sélectionner « Oui » pour « Faut-il séparer la configuration dans plusieurs fichiers ? ».
Créer les entrées de mots de passe pour le smarthost en éditant
« /etc/exim4/passwd.client
».
$ sudo vim /etc/exim4/passwd.client ... $ cat /etc/exim4/passwd.client ^smtp.*\.nommachine\.dom:nomutilisateur@nommachine.dom:motdepasse
Lancer exim4
par la commande suivante :
$ sudo /etc/init.d/exim4 start
Le nom de machine dans
« /etc/exim4/passwd.client
» ne doit pas être
un alias. Vérifiez le nom de machine réel comme suit :
$ host smtp.hostname.dom smtp.hostname.dom is an alias for smtp99.hostname.dom. smtp99.hostname.dom has address 123.234.123.89
J'utilise une expression rationnelle dans
« /etc/exim4/passwd.client
» pour contourner le
problème d'alias. SMTP AUTH fonctionne probablement même dans le cas où le
FAI déplace la machine pointée par l’alias.
Vous devez exécuter update-exim4.conf
(8) après avoir mis
à jour manuellement les fichiers de configuration exim4
se trouvant dans « /etc/exim4/
».
Le lancement d'exim4
est long si on a choisi
« Non » (valeur par défaut) à la demande « Faut-il optimiser
les requêtes DNS (connexion à la demande) ? » lors de la
configuration debconf et que le système n'est pas connecté à Internet lors du démarrage.
Veuillez lire le guide officiel se trouvant à
« /usr/share/doc/exim4-base/README.Debian.gz
»
et update-exim4.conf
(8).
Le fichier de personnalisation local
« /etc/exim4/exim4.conf.localmacros
» peut être
créé pour définir les MACROs. Par exemple, le service de courrier
électronique de Yahoo requiert
« MAIN_TLS_ENABLE = true
» et
« AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = yes
».
Si vous recherchez un MTA léger qui respecte
« /etc/aliases
» pour votre PC de bureau, vous
devriez envisager de configurer exim4
(8) avec
« QUEUERUNNER='queueonly'
»,
« QUEUERUNNER='nodaemon'
», etc. dans
« /etc/default/exim4
».
Pour utiliser le courrier électronique d'Internet par l’intermédiaire d'un smarthost, vous devrez d'abord lire la documentation postfix et les pages de manuel importantes.
Tableau 6.5. Liste des pages de manuel importantes de postfix
commande | fonction |
---|---|
postfix (1)
|
Programme de contrôle de postfix |
postconf (1)
|
Utilitaire de configuration de postfix |
postconf (5)
|
Paramètres de configuration de postfix |
postmap (1)
|
Maintenance des table de consultation de postfix |
postalias (1)
|
Maintenance de la base de données des alias de postfix |
Vous (re)configurez les paquets postfix
et
sasl2-bin
comme suit :
$ sudo /etc/init.d/postfix stop $ sudo dpkg-reconfigure postfix
Choisir « Internet avec smarthost ».
Définissez « machine de relais SMTP (blanc pour aucun): » à
« [smtp.hostname.dom]:587
» et configurez-le de
la manière suivante :
$ sudo postconf -e 'smtp_sender_dependent_authentication = yes' $ sudo postconf -e 'smtp_sasl_auth_enable = yes' $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' $ sudo postconf -e 'smtp_sasl_type = cyrus' $ sudo vim /etc/postfix/sasl_passwd
Créez les entrées de mots de passe pour le smarthost
$ cat /etc/postfix/sasl_passwd [smtp.hostname.dom]:587 nomutilisateur:motdepasse $ sudo postmap hush:/etc/postfix/sasl_passwd
Lancez postfix
comme suit :
$ sudo /etc/init.d/postfix start
Ici, l’utilisation de « [
» et
« ]
» dans le dialogue de
dpkg-reconfigure
et
« /etc/postfix/sasl_passwd
» permet de
s'assurer de ne pas vérifier l’enregistrement MX mais d'utiliser directement
le nom exact de la machine indiquée. Voir « Enabling SASL
authentication in the Postfix SMTP client » dans
« usr/share/doc/postfix/html/SASL_README.html
».
Il existe plusieurs fichiers de configuration de l’adresse de courriel pour l’acheminement du courriel, sa diffusion et les agents d'utilisateur.
Tableau 6.6. Liste des fichiers de configuration liés aux adresses de courriel
fichier | fonction | application |
---|---|---|
/etc/mailname
|
nom de machine par défaut pour le courrier (sortant) |
Spécifique à Debian, mailname (5)
|
/etc/email-addresses
|
usurpation du nom de machine pour le courriel sortant | Spécifique à exim (8),
exim4-config_files (5)
|
/etc/postfix/generic
|
usurpation du nom de machine pour le courriel sortant | Spécifique à postfix (1) specific, activé après
l’exécution de la commande postmap (1).
|
/etc/aliases
|
alias du nom de compte pour le courrier entrant |
général, activé après l’exécution de la commande
newaliases (1).
|
Le nom de courriel ( mailname »
dans le fichier « /etc/mailname
» est
habituellement un nom de domaine entièrement qualifié (FQDN) qui est résolu
vers l’une des adresses IP de la machine. Pour les stations de travail
mobiles qui n'ont pas de nom de machine pouvant être résolu par une adresse
IP, définissez ce mailname à la valeur
donnée par « hostname -f
». (C'est un choix sûr
et qui fonctionne à la fois avec exim4-*
et
postfix
.)
Le contenu de « /etc/mailname
» est utilisé par
de nombreux programmes autres que les MTA pour définir leur comportement par
défaut. Pour mutt
, définissezles variables
« hostname
» et
« from
» dans le fichier
~/muttrc
pour passer outre la valeur de mailname. Pour les programmes du paquets
devscripts
, comme bts
(1) et
dch
(1), exportez les variables d'environnement
« $DEBFULLNAME
» et
« $DEBEMAIL
» afin de passer outre cette
définition.
Le paquet popularity-contest
envoie normalement un
courriel depuis le compte de l’administrateur avec un nom de domaine
pleinement qualifié (FDQN). Vous devez définir MAILFROM
dans /etc/popularity-contest.conf
comme c’est décrit dans
le fichier
/usr/share/popularity-contest/default.conf
. Sinon, votre
courriel sera rejeté par le serveur SMTP sur « smarthost » Bien
que ce soit fastidieux, cette approche et plus sûre que la réécriture par le
MTA de l’adresse source pour tous les courriels en provenance de
l’administrateur (« root ») et devrait être utilisé pour les
autres démons et les scripts des tâches planifiées (« cron ».
Lors de la définition de mailname avec la
valeur donnée par « hostname -f
», l’usurpation
de l’adresse source du courrier par le MTA peut être réalisée par
l’intermédiaire :
/etc/email-addresses
»
pourexim4
(8) comme expliqué dans
exim4-config_files
(5)
/etc/postfix/generic
» pour
postfix
(1) comme expliqué dans
generic
(5)
Pour postfix
, les étapes suivantes sont
nécessaires :
# postmap hash:/etc/postfix/generic # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic' # postfix reload
Vous pouvez tester la configuration de l’adresse de courriel de la manière suivante :
exim
(8) avec les options -brw, -bf, -bF, -bV,
…
postmap
(1) avec l’option -q
Il existe, avec Exim, un certain nombre de programmes utilitaires tels
qu'exiqgrep
(8) et exipick
(8). Voir
« dpkg -L exim4-base|grep man8/
» pour les
commandes disponibles.
Il y a quelques opérations de base du MTA. Certaines peuvent être effectuées
à l’aide de l’interface de compatibilité avec
sendmail
(1).
Tableau 6.7. Liste des opération de base du MTA
commande exim | commande postfix | description |
---|---|---|
sendmail
|
sendmail
|
lire les courriels depuis l’entrée standard et les classer pour la diffusion
(-bm )
|
mailq
|
mailq
|
afficher la file d'attente des courriels avec leur état et leur identifiant
de file d'attente (« queue ID ») (-bp )
|
newaliases
|
newaliases
|
initialiser la base de données des alias (-I )
|
exim4 -q
|
postqueue -f
|
supprimer les courriels en attente (-q )
|
exim4 -qf
|
postsuper -r ALL deferred; postqueue -f
|
supprimer tous les courriels |
exim4 -qff
|
postsuper -r ALL; postqueue -f
|
supprimer tous les courriels gelés |
exim4 -Mg queue_id
|
postsuper -h queue_id
|
geler un message d'après son identifiant de file d'attente |
exim4 -Mrm queue_id
|
postsuper -d queue_id
|
supprimer un message d'après son identifiant de file d'attente |
N/A |
postsuper -d ALL
|
supprimer tous les messages. |
Ce peut être une bonne idée de supprimer tous les messages à l’aide d'un
script placé dans « /etc/ppp/ip-up.d/*
».
Si vous vous abonnez à une liste de diffusion relative à Debian, ce peut
être une bonne idée d'utiliser un MUA tel que mutt
ou
gnus
qui sont le standard de fait pour le participant et
sont connus pour se comporter comme on le souhaite.
Tableau 6.8. Liste d'agents de courrier électronique de l’utilisateur (MUA)
paquet | popcon | taille | type |
---|---|---|---|
iceweasel *
|
V:30, I:48 | 3761 | programme X avec une interface graphique (version démarquée de Mozilla Firefox) |
evolution *
|
V:16, I:34 | 4724 | programme X avec une interface graphique (fait partie d'une suite « groupware ») |
icedove *
|
V:8, I:12 | 38864 | programme X avec une interface graphique (version démarquée de Mozilla Thunderbird) |
mutt
*
|
V:26, I:83 | 6004 |
programme de terminal en mode caractère, probablement utilisé avec
vim
|
gnus
*
|
V:0.06, I:0.3 | 6453 |
programme de terminal en mode caractères sous (x)emacs
|
Configurez « ~/.muttrc
» comme suit afin
d'utiliser mutt
comme agent utilisateur de courrier
électronique (MUA) en conjonction avec vim
.
# # Fichier de configuration de l’utilisateur pour prendre le pas sur /etc/Muttrc # # modifier l'adresse électronique d'origine set use_from set hostname=example.dom set from="Prénom Nom <prenom-nom@example.dom>" set signature="~/.signature" # vim : « gq » pour reformater les citations set editor="vim -c 'set tw=72 et ft=mail’" # « mutt » utilise Inbox, alors que « mutt -y » donne la liste des boîtes de messagerie set mbox_type=Maildir # utiliser le format Maildir de qmail pour créer les mbox set mbox=~/Mail # conserver toutes les boîtes de messagerie dans $HOME/Mail/ set spoolfile=+Inbox # message délivré vers $HOME/Mail/Inbox set record=+Outbox # sauvegarder les messages envoyés vers $HOME/Mail/Outbox set postponed=+Postponed # garder les messages ajournés dans $HOME/Mail/postponed set move=no # ne pas déplacer les messages lus de Inbox vers mbox set quit=ask-yes # ne pas quitter avec seulement « q » set delete=yes # toujours effacer sans confirmation à la fin set fcc_clear # garder les messages envoyés non chiffrés # boîtes de messagerie dans Maildir (mise à jour automatique) mailboxes `cd ~/Mail; /bin/ls -1|sed -e 's/^/+/' | tr "\n" " "` unmailboxes Maillog *.ev-summary ## par défaut #set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s" ## index des enfilades avec expéditeurs (quand elles sont cachées) set index_format="%4C %Z %{%b %d} %-15.15n %?M?(#%03M)&(%4l)? %s" ## par défaut #set folder_format="%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f" ## simplement les noms de dossier set folder_format="%2C %t %N %f"
Ajoutez ce qui suit dans « /etc/mailcap
» ou
« ~/.mailcap
» afin d'afficher le courriel en
HTML et les attachements en ligne de documents MS Word.
text/html; lynx -force_html %s; needsterminal; application/msword; /usr/bin/antiword '%s'; copiousoutput; description="Microsoft Word Text"; nametemplate=%s.doc
Mutt peut être utilisé comme client IMAP et
comme convertisseur de format de boîtes à lettres. Vous pouvez marquer les
messages avec « t
", "T
»,
etc. Ces messages marqués peuvent être copiés avec
« ;C
» entre différentes boîtes à lettres et
supprimés à l’aide de « ;d
» en une seule
action.
Bien que fetchmail
(1) ait été le standard de fait pour la
récupération du courriel sur GNU/Linux, l’auteur préfère maintenant
getmail
(1). Si vous désirez rejeter du courriel avant de
le télécharger pour économiser de la bande passante,
mailfilter
ou mpop
peuvent être
utiles. Quelques soient les utilitaires de récupération du courrier
électronique utilisés, c'est une bonne idée de configurer le système afin de
diffuser les courriels récupérés à un MDA, tel que
maildrop
, par l’intermédiaire d'un tube.
Tableau 6.9. Listes des utilitaires de récupération et de rediffusion du courriel
paquet | popcon | taille | description |
---|---|---|---|
fetchmail *
|
V:2, I:5 | 2588 | récupération du courriel (POP3, APOP, IMAP) (ancien) |
getmail4 *
|
V:0.3, I:0.9 | 668 | récupération du courriel (POP3, IMAP4 et SDPS) (simple, sûr et fiable) |
mailfilter *
|
V:0.00, I:0.07 | 332 | récupération du courriel (POP3) avec une possibilité de filtrage par expressions rationnelles |
mpop
*
|
V:0.01, I:0.08 | 324 | récupération du courriel (POP3) et MDA avec possibilité de filtrage |
La configuration de getmail
(1) est décrite dans la documentation de getmail. voici ma
configuration permettant l’accès à plusieurs comptes POP3 en tant
qu'utilisateur.
Créez « /usr/local/bin/getmails
» comme
suit :
#!/bin/sh set -e if [ -f $HOME/.getmail/running ]; then echo "getmail est déjà en fonctionnement... (dans le cas contraire, supprimer $HOME/.getmail/running)" >&2 pgrep -l "getmai[l]" exit 1 else echo "getmail n'a pas tourné... " >&2 fi if [ -f $HOME/.getmail/stop ]; then echo "ne pas lancer getmail ... (dans le cas contraire, supprimer $HOME/.getmail/stop)" >&2 exit fi if [ "x$1" = "x-l" ]; then exit fi rcfiles="/usr/bin/getmail" for fichier in $HOME/.getmail/config/* ; do rcfiles="$rcfiles --rcfile $fichier" done date -u > $HOME/.getmail/running eval "$rcfiles $@" rm $HOME/.getmail/running
Configurez-le comme suit :
$ sudo chmod 755 /usr/local/bin/getmails $ mkdir -m 0700 $HOME/.getmail $ mkdir -m 0700 $HOME/.getmail/config $ mkdir -m 0700 $HOME/.getmail/log
Créez les fichiers de configuration
« $HOME/.getmail/config/pop3_name
» pour chacun
des comptes POP3 comme suit :
[retriever] type = SimplePOP3SSLRetriever server = pop.example.com username = nom_pop3@example.com password = secret [destination] type = MDA_external path = /usr/bin/maildrop unixfrom = True [options] verbose = 0 delete = True delivered_to = False message_log = ~/.getmail/log/nom_pop3.log
Configurez-le comme suit :
$ chmod 0600 $HOME/.getmail/config/*
Programmez « /usr/local/bin/getmails
» pour
qu'il soit lancé toutes les 15 minutes avec cron
(8) en
exécutant « sudo crontab -e -u
<nom_utilisateur>
» et en ajoutant l’entrée cron de
l’utilisateur suivante :
5,20,35,50 * * * * /usr/local/bin/getmails --quiet
Les problèmes d'accès POP3 peuvent ne pas venir de
getmail
. Certains services POP3 gratuits courants violent
le protocole POP3 et leur filtre de SPAM peut ne pas être parfait. Par
exemple, ils peuvent effacer les messages juste après la commande RETR et
avant de recevoir la commande DELE et peuvent mettre en quarantaines des
messages dans la boîte à lettres des Spam. Vous pourrez minimiser les
dommages en les configurant de manière à archiver les messages ayant été
accédés et non de les supprimer. Voir aussi « Certains courriels n'ont pas été
téléchargés ».
La plupart des programmes de MTA tels que postfix
et
exim4
fonctionnent comme des MDA (agent de distribution
du courriel, « mail delivery agent »). Il existe des MDA
spécialisés ayant des possibilités de filtrage.
Bien que procmail
(1) ait été le standard de fait comme
MDA sous GNU/Linux, l’auteur préfère maintenant
maildrop
(1). Quelque soit l’utilitaire de filtrage
utilisé, c'est une bonne idée que de configurer le système pour distribuer
le courriel filtrée vers une Maildir de
style qmail.
Tableau 6.10. Liste de MDA avec filtrage
paquet | popcon | taille | description |
---|---|---|---|
procmail *
|
V:19, I:84 | 368 | MDA avec filtrage (ancien) |
mailagent *
|
V:0.3, I:5 | 1692 | MDA avec filtre en Perl |
maildrop *
|
V:0.3, I:0.8 | 1000 | MDA avec langage de filtrage structuré |
la configuration de maildrop
(1) est décrite dans la
documentation de
maildropfilter. Voici un exemple de configuration pour
« $HOME/.mailfilter
» :
# Configuration locale MAILROOT="$HOME/Mail" # configurer conformément au contenu de /etc/mailname MAILHOST="example.dom" logfile $HOME/.maildroplog # les règles sont faites pour que la dernière valeur prenne le pas sur la précédente. # messages de liste de diffusion ? if ( /^Precedence:.*list/:h || /^Precedence:.*bulk/:h ) { # règles pour les messages de liste de diffusion # boîte à lettres par défaut pour les messages de liste de diffusion MAILBOX="Inbox-list" # boîte à lettres par défaut pour les messages de debian.org if ( /^(Sender|Resent-From|Resent-Sender): .*debian.org/:h ) { MAILBOX="service.debian.org" } # boîte à lettres par défaut pour les messages de bugs.debian.org (BTS) if ( /^(Sender|Resent-From|Resent-sender): .*@bugs.debian.org/:h ) { MAILBOX="bugs.debian.org" } # boîte à lettres pour chaque liste de diffusion proprement configurée avec « List-Id: truc » ou « List-Id: ...<truc.bidule> » if ( /^List-Id: ([^<]*<)?([^<>]*)>?/:h ) { MAILBOX="$MATCH2" } } else { # règles pour les messages ne provenant pas de liste de diffusion # boîte à lettres de courrier entrant par défaut MAILBOX="Inbox-unusual" # local mails if ( /Envelope-to: .*@$MAILHOST/:h ) { MAILBOX="Inbox-local" } # Messages en HTML (99% d'indésirables) if ( /DOCTYPE html/:b ||\ /^Content-Type: text\/html/ ) { MAILBOX="Inbox-html" } # règle de liste noire pour les indésirables if ( /^X-Advertisement/:h ||\ /^Subject:.*BUSINESS PROPOSAL/:h ||\ /^Subject:.*URGENT.*ASISSTANCE/:h ||\ /^Subject: *I NEED YOUR ASSISTANCE/:h ) { MAILBOX="Inbox-trash" } # règle de liste blanche pour les messages normaux if ( /^From: .*@debian.org/:h ||\ /^(Sender|Resent-From|Resent-Sender): .*debian.org/:h ||\ /^Subject: .*(debian|bug|PATCH)/:h ) { MAILBOX="Inbox" } # règle de liste blanche pour les messages relatifs au BTS if ( /^Subject: .*Bug#.*/:h ||\ /^(To|Cc): .*@bugs.debian.org/:h ) { MAILBOX="bugs.debian.org" } # règle de liste blanche pour les messages « getmails » de cron if ( /^Subject: Cron .*getmails/:h ) { MAILBOX="Inbox-getmails" } } # vérifier l'existence de $MAILBOX `test -d $MAILROOT/$MAILBOX` if ( $RETURNCODE == 1 ) { # créer la boîte à lettres au format maildir pour $MAILBOX `maildirmake $MAILROOT/$MAILBOX` } # délivrer vers le répertoire maildir $MAILBOX to "$MAILROOT/$MAILBOX/" exit
À l’inverse de procmail
, maildrop
ne
crée pas automatiquement les répertoires maildir manquants. Vous devez les
créer vous-même à l’avance en utilisant maildirmake
(1)
comme cela a été fait pour
« $HOME/.mailfilter
» dans l’exemple.
Voici une configuration équivalente avec
« $HOME/.procmailrc
» pour
procmail
(1) :
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/Inbox/ LOGFILE=$MAILDIR/Maillog # courriel qui apparaissent clairement mauvais : les mettre dans X-trash et quitter :0 * 1^0 ^X-Advertisement * 1^0 ^Subject:.*BUSINESS PROPOSAL * 1^0 ^Subject:.*URGENT.*ASISSTANCE * 1^0 ^Subject: *I NEED YOUR ASSISTANCE X-trash/ # Diffusion des messages des listes de diffusion :0 * 1^0 ^Precedence:.*list * 1^0 ^Precedence:.*bulk * 1^0 ^List- * 1^0 ^X-Distribution:.*bulk { :0 * 1^0 ^Return-path:.*debian-devel-admin@debian.or.jp jp-debian-devel/ :0 * ^Resent-Sender.*debian-user-request@lists.debian.org debian-user/ :0 * ^Resent-Sender.*debian-devel-request@lists.debian.org debian-devel/ :0 * ^Resent-Sender.*debian-announce-request@lists.debian.org debian-announce :0 mailing-list/ } :0 Inbox/
Vous devrez distribuer vous-même les courriels se trouvant des les boîtes à
lettres de votre répertoire personnel depuis
« /var/mail/<nom_utilisateur>
» si votre
répertoire personnel est plein et que procmail
(1)
échoue. Après avoir fait de la place sur le disque dans votre répertoire
personnel, lancez ce qui suit :
# /etc/init.d/${MAILDAEMON} stop # formail -s procmail </var/mail/<nom_utilisateur> # /etc/init.d/${MAILDAEMON} start
Si vous voulez faire tourner un serveur privés sur votre réseau local, vous pouvez envisager de faire tourner un serveur POP3 / IMAP4 pour la distribution du courrier électronique aux clients du réseau local.
Tableau 6.11. Liste de serveurs POP3/IMAP4
paquet | popcon | taille | type | description |
---|---|---|---|---|
qpopper *
|
V:1.1, I:4 | 636 | POP3 | serveur BSD POP3 amélioré Qualcomm |
courier-pop *
|
V:1.6, I:2 | 244 | POP3 | serveur de courriel Courier - serveur POP3 (format maildir uniquement) |
ipopd
*
|
V:0.10, I:0.18 | 212 | POP3 | serveur PO2 et PO3 de l’Université de Washington |
cyrus-pop3d-2.2 *
|
V:0.18, I:0.3 | 852 | POP3 | système de courrier Cyrus (prise en charge de POP3) |
xmail
*
|
V:0.14, I:0.16 | 836 | POP3 | serveur de courrier ESMTP/POP3 |
courier-imap *
|
V:2, I:3 | 1624 | IMAP | serveur de courriel Courier - serveur IMAP (format maildir uniquement) |
uw-imapd *
|
V:0.7, I:4 | 280 | IMAP | serveur IMAP de l’Université de Washington |
cyrus-imapd-2.2 *
|
V:0.4, I:0.6 | 2632 | IMAP | système de courrier Cyrus (prise en charge d'IMAP) |
Sur l’ancien système « Unix-like x ; le standard était démon d'impression BSD. Comme le format d'impression standard du logiciel libre est PostScript sur les systèmes semblables à Unix, certains systèmes de filtres ont été utilisés conjointement à Ghostscript afin de permettre l’impression sur des imprimante qui ne soient pas PostScript .
Récemment, le système commun d'impression sous UNIX (« Common UNIX Printing System (CUPS) ») est devenu le nouveau standard de fait. CUPS utilise le Protocole d'impression Internet (« Internet Printing Protocol (IPP) »). IPP est maintenant pris en charge par d'autres systèmes d'exploitation comme Windows XP et Mac OS X, il est devenu le nouveau standard cross-plateforme de fait pour l’impression à distance avec des possibilités de communications bi-directionnelles.
Le format de données imprimables standard pour une application sur le système Debian est PostScript (PS) qui est un langage de description de page. Les données au format PS sont passées à l’interpréteur Ghostscript PostScript afin de produire les données imprimables spécifiques à l’imprimante. Voir Section 11.3.1, « Ghostscript ».
Grâce à la fonctionnalité d'auto-conversion dépendante du format du fichier
du système CUPS, passer simplement les données à la commande
lpr
devrait créer la sortie imprimable souhaitée. (Dans
CUPS, lpr
peut être activé en installant la paquet
cups-bsd
).
Le système Debian possède certains paquets notables de serveurs et d'utilitaires d'impression :
Tableau 6.12. Liste des serveurs et utilitaires d'impression.
paquet | popcon | taille | port | description |
---|---|---|---|---|
lpr
*
|
V:2, I:2 | 440 | imprimante (515) | BSD lpr/lpd (démon d'impression) |
lprng
*
|
V:0.6, I:1.3 | 2904 | , , | , , (Amélioré) |
cups
*
|
V:33, I:44 | 15540 | IPP (631) | Serveur Internet d'impression CUPS |
cups-client *
|
V:17, I:46 | 908 | , , |
commandes d'impression System
V pour CUPS : lp (1),
lpstat (1), lpoptions (1),
cancel (1), lpmove (8),
lpinfo (8), lpadmin (8), …
|
cups-bsd *
|
V:7, I:41 | 420 | , , |
commandes d'impression BSD pour
CUPS : lpr (1), lpq (1),
lprm (1), lpc (8)
|
cups-driver-gutenprint *
|
V:12, I:38 | 1212 | Non applicable | pilotes d'impression pour CUPS |
Vous pouvez configurer le système CUPS en pointant votre navigateur web sur « http://localhost:631/ ».
SSH, le « Secure SHell », est
la manière sûre de se connecter au
travers d'Internet. Une version libre de SSH, appelée OpenSSH, est disponible sous Debian sous forme des
paquets openssh-client
et
openssh-server
.
Tableau 6.13. Liste des serveurs et des utilitaires d'accès à distance
paquet | popcon | taille | outil | description |
---|---|---|---|---|
openssh-client *
|
V:52, I:99 | 2104 |
ssh (1)
|
client de l’interpréteur de commandes sécurisé |
openssh-server *
|
V:70, I:83 | 700 |
sshd (8)
|
serveur de l’interpréteur de commandes sécurisé |
ssh-askpass-fullscreen *
|
V:0.08, I:0.4 | 92 |
ssh-askpass-fullscreen (1)
|
demande à l’utilisateur une phrase de passe pour ssh-add (GNOME2) |
ssh-askpass *
|
V:0.7, I:5 | 156 |
ssh-askpass (1)
|
demande à l’utilisateur une phrase de passe pour ssh-add (X natif) |
Voir Section 4.7.3, « Mesures de sécurité supplémentaires pour Internet » si votre serveur SSH est accessible depuis Internet.
Utilisez le programme screen
(1) pour qu'un processus de
l’interpréteur de commandes distant survive à une interruption de la
connexion (voir Section 9.1, « Le programme screen »).
Il ne faut pas que
« /etc/ssh/sshd_not_to_be_run
» soit présent si
l’on souhaite faire tourner le serveur OpenSSH.
SSH possède deux protocoles d'identification :
Tableau 6.14. Liste des protocoles et méthodes d'authentification SSH
Protocole SSH | Méthode SSH | description |
---|---|---|
SSH-1 |
« RSAAuthentication »
|
authentification de l’utilisateur basée sur une clé d'identité RSA |
, , |
« RhostsAuthentication »
|
authentification de l’hôte basée sur
« .rhosts » (non sûre, désactivée)
|
, , |
« RhostsRSAAuthentication »
|
authentification de l’hôte basée sur
« .rhosts » combinée avec clé d'hôte RSA
(désactivée)
|
, , |
« ChallengeResponseAuthentication »
|
authentification par « challenge-response » RSA |
, , |
« PasswordAuthentication »
|
authentification basée sur un mot de passe |
SSH-2 |
« PubkeyAuthentication »
|
authentification de l’utilisateur basée sur une clé publique |
, , |
« HostbasedAuthentication »
|
authentification de la machine basée sur
« ~/.rhosts » ou
« /etc/hosts.equiv » combiné une
authentification par la clé publique de la machine (désactivée)
|
, , |
« ChallengeResponseAuthentication »
|
authentification par « challenge-response » |
, , |
« PasswordAuthentication »
|
authentification basée sur un mot de passe |
Faites attention à ces différences si vous utilisez un système autre que Debian.
Voir « /usr/share/doc/ssh/README.Debian.gz
",
ssh
(1), sshd
(8),
ssh-agent
(1), et ssh-keygen
(1) pour
davantage d'informations.
Les fichiers suivants sont les fichiers de configuration importants :
Tableau 6.15. Liste des fichiers de configuration de SSH
fichier de configuration | description du fichier de configuration |
---|---|
/etc/ssh/ssh_config
|
valeurs par défauts des paramètres du client SSH, voir
ssh_config (5).
|
/etc/ssh/sshd_config
|
valeurs par défauts des paramètres du serveur SSH, voir
sshd_config (5).
|
~/.ssh/authorized_keys
|
clés publiques SSH par défaut utilisées pour se connecter à ce compte sur ce serveur SSH |
~/.ssh/identity
|
clé secrète SSH-1 RSA de l’utilisateur |
~/.ssh/id_rsa
|
clé secrète SSH-2 RSA de l’utilisateur |
~/.ssh/id_dsa
|
clé secrète SSH-2 DSA de l’utilisateur |
Voir ssh-keygen
(1), ssh-add
(1) et
ssh-agent
(1) pour la manière d'utiliser les clés
publiques et secrètes de SSH.
Assurez-vous de la validité de la configuration en testant la connexion. En
cas de problème, utilisez « ssh -v
».
Vous pouvez changer la phrase de passe pour chiffrer les clés secrètes SSH
plus tard avec « ssh-keygen -p
».
Vous pouvez ajouter des options aux entrées de
« ~/.ssh/authorized_keys
» afin de limiter les
accès à certaines machines et les commandes autorisées. Voir
sshd
(8) pour davantage d'informations.
Ce qui suit permettra de démarrer un connexion ssh
(1)
depuis un client :
Tableau 6.16. Liste d'exemples de démarrage du client SSH
commande | description |
---|---|
ssh nomutilisateur@nommachine..domaine.ext
|
connexion avec le mode par défaut |
ssh -v nomutilisateur@nommachine..domaine.ext
|
connexion avec le mode par défaut et les messages de débogage |
ssh -1 nomutilisateur@nommachine..domaine.ext
|
forcer la connexion avec SSH version 1 |
ssh -1 -o RSAAuthentication=no -l
nomutilisateur@nommachine..domaine.ext
|
forcer l’utilisation d'un mot de passe avec SSH version 1 |
ssh -o PreferredAuthentications=password -l
nomutilisateur@nommachine.domaine.ext
|
forcer l’utilisation d'un mot de passe avec SSH version 2 |
Si vous utilisez le même nom d'utilisateur sur la machine locale et la
machine distante, il n'est pas nécessaire d'entrer
« nomutilisateur@
». Même si vous utilisez un
nom d'utilisateur différent sur la machine locale et la machine distante,
vous pouvez l’éliminer en utilisant
« ~/.ssh/config
». Pour le service Debian Alioth avec le nom de
compte « toto-guest
», vous devrez configurer
« ~/.ssh/config
» afin qu'il contienne ce qui
suit :
Host alioth.debian.org svn.debian.org git.debian.org User toto-guest
Pour l’utilisateur, ssh
(1) fonctionne comme un
telnet
(1) intelligent et plus sûr. À l’opposé de la
commande telnet
, la commande ssh
ne se
lance pas sur le caractère d'échappement de telnet
(valeur initiale par défaut Ctrl-]).
Pour mettre en place un tube pour se connecter au port 25 du
serveur-distant
depuis le port 4025 de
localhost
, et au port 110 du
serveur-distant
depuis le port 4110 de
localhost
au travers de ssh
, exécutez
ce qui suit sur la machine locale :
# ssh -q -L 4025:serveur-distant:25 4110:serveur-distant:110 nomutilisateur@serveur-distant
C'est une manière sécurisée d'effectuer une connexion à des serveurs SMTP /
POP3 par Internet. Définissez l’entrée
« AllowTcpForwarding
» à
« yes
» dans
« /etc/ssh/sshd_config
» sur la machine
distante.
On peut éviter de devoir se souvenir des mots de passe des systèmes distants
en utilisant « RSAAuthentication
» (protocole
SSH-1) ou « PubkeyAuthentication
» (protocole
SSH-2).
Sur le système distant, définissez les entrées respectives suivantes :
« RSAAuthentication yes
»
ou« PubkeyAuthentication yes
» dans
« /etc/ssh/sshd_config
».
Générez ensuite localement les clés d'identification et installez la clé publique sur le système distant en faisant ce qui suit :
RSAAuthentication
» : clé RSA pour SSH-1
(obsolète parce qu'il a été remplacé).
$ ssh-keygen $ cat .ssh/identity.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
PubkeyAuthentication
» : clé RSA pour
SSH-2
$ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
PubkeyAuthentication
» : clé DSA pour
SSH-2 (obsolète parce qu'elle est lente).
$ ssh-keygen -t dsa $ cat .ssh/id_dsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
L’utilisation de clés DSA pour SSH-2 est obsolète parce que la clé est plus courte et lente. Il n'y a plus de raison de contourner le brevet de RSA en utilisant DSA parce qu'il est arrivé en fin de validité. DSA signifie Digital Signature Algorithm (Algorithme de signature numérique) et il est lent. Voir aussi DSA-1571-1.
Pour que « HostbasedAuthentication
» fonctionne
avec SSH-2, vous devez définir les paramètres de
« HostbasedAuthentication
» à
« yes
» à la fois dans le fichier
« /etc/ssh/sshd_config
» sur la machine serveur
et dans le fichier « /etc/ssh/ssh_config
» ou
« ~/.ssh/config
» sur la machine client.
Il existe quelques clients SSH libres disponibles pour d'autres plateformes.
Tableau 6.17. Liste des clients SSH libres pour d'autres plateformes
environnement | programme SSH libre |
---|---|
Windows | puTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) (GPL) |
Windows (cygwin) | SSH sous cygwin (http://www.cygwin.com/) (GPL) |
Macintosh Classic | macSSH (http://www.macssh.com/) (GPL) |
Mac OS X |
OpenSSH ; utilise ssh dans l’application Terminal
(GPL)
|
Il est plus sûr de protéger les clés secrètes de votre authentification SSH
avec une phrase de passe. Si la phrase de passe n'a pas été définie,
utilisez « ssh-keygen -p
» pour le faire.
Placez votre clé publique SSH (par exemple
« ~/.ssh/id_rsa.pub
») dans
« ~/.ssh/authorized_keys
» sur la machine
distante en utilisant une connexion basée sur un mot de passe comme décrit
ci-dessus.
$ ssh-agent bash $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/<nom_utilisateur>/.ssh/id_rsa: Identity added: /home/<nom_utilisateur>/.ssh/id_rsa (/home/<nom_utilisateur>/.ssh/id_rsa)
Il n'y a plus besoin de mot de passe distant, à partir de maintenant, pour la commande suivante :
$ scp toto <utilisateur>@remote.host:toto
Pressez ^D pour quitter la session de l’agent ssh.
Pour le serveur X, le script de démarrage normal de Debian exécute
ssh-agent
comme processus-père. Vous n'aurez donc à
exécuter ssh-add
qu'une seule fois. Pour davantage
d'informations, veuillez lire ssh-agent
(1) et
ssh-add
(1).
Vous devez protéger le processus qui effectue « shutdown -h
now
» (voir Section 1.1.8, « Comment arrêter le système ») de
l’arrêt de SSH en utilisant la commande at
(1) (voir Section 9.5.13, « Planifier des tâches qui s'exécutent une fois ») comme suit :
# echo "shutdown -h now" | at now
Lancer « shutdown -h now
» dans une
sessionscreen
(1) (voir Section 9.1, « Le programme screen ») est une autre manière d'effectuer la même
chose.
Si vous rencontrez des problèmes, vérifiez les permissions des fichiers de
configuration et lancez ssh
avec l’option
« -v
».
Utilisez l’option « -P
» si vous êtes
administrateur et que vous rencontrez des problèmes avec un pare-feu. Cela
évite l’utilisation des ports 1 — 1023 du serveur.
Si les connexions ssh
vers un site distant s'arrêtent
subitement de fonctionner, cela peut être suite à des bidouilles de
l’administrateur, le plus probablement un changement de
« host_key
» pendant une maintenance du
système. Après s'être assuré que c'est bien le cas et que personne n'essaie
de se faire passer pour la machine distante par une habile bidouille, on
peut se reconnecter en supprimant sur la machine locale l’entrée
« host_key
» de
« ~/.ssh/known_hosts
».
Voici d'autres serveurs d'applications réseau :
Tableau 6.18. Liste d'autres serveurs d'applications réseau
paquet | popcon | taille | protocole | description |
---|---|---|---|---|
telnetd *
|
V:0.4, I:1.1 | 156 | TELNET | Serveur TELNET |
telnetd-ssl *
|
V:0.10, I:0.3 | 152 | , , | , , (prise en charge de SSL) |
nfs-kernel-server *
|
V:12, I:21 | 412 | NFS | Partage de fichiers Unix |
samba
*
|
V:18, I:31 | 23096 | SMB | Partage de fichiers et d'imprimantes Windows |
netatalk *
|
V:5, I:9 | 3428 | ATP | Partage de fichiers et d'imprimantes Apple/Mac (AppleTalk) |
proftpd-basic *
|
V:6, I:7 | 4064 | FTP | Téléchargement généraliste de fichiers |
wu-ftpd *
|
V:0.4, I:0.6 | 820 | , , | , , |
apache2-mpm-prefork *
|
V:38, I:42 | 68 | HTTP | Serveur Web généraliste |
apache2-mpm-worker *
|
V:6, I:7 | 68 | , , | , , |
squid
*
|
V:6, I:7 | 1848 | , , | Serveur mandataire (proxy) web généraliste |
squid3 *
|
V:1.5, I:1.8 | 3600 | , , | , , |
slpd
*
|
V:0.14, I:0.2 | 180 | SLP | Serveur OpenSLP en tant que serveur LDAP |
bind9
*
|
V:10, I:17 | 1080 | DNS | adresses IP des autres machines |
dhcp3-server *
|
V:5, I:10 | 64 | DHCP | adresse IP du client lui-même |
Le protocole « Common Internet File System Protocol » (CIFS) est le même protocole que Server Message Block (SMB), il est largement utilisé par Microsoft Windows.
L’utilisation d'un serveur mandataire tel que squid
est
bien plus efficace pour économiser de la bande passante que l’utilisation
d'un serveur miroir local comportant tout le contenu de l’archive Debian.
Voici d'autres clients d'applications réseau :
Tableau 6.19. Liste de clients d'applications réseau
paquet | popcon | taille | protocole | description |
---|---|---|---|---|
netcat *
|
I:28 | 36 | TCP/IP | couteau de l’armée Suisse pour TCP/IP |
openssl *
|
V:56, I:91 | 2380 | SSL | binaire Secure Socket Layer (SSL) et outils de chiffrement associés |
stunnel4 *
|
V:0.6, I:2 | 512 | , , | enrobeur SSL universel |
telnet *
|
V:13, I:89 | 200 | TELNET | Client TELNET |
telnet-ssl *
|
V:0.2, I:1.1 | 208 | , , | , , (prise en charge de SSL) |
nfs-common *
|
V:49, I:81 | 660 | NFS | Partage de fichiers Unix |
smbclient *
|
V:6, I:35 | 45200 | SMB | Client de partage de fichiers et imprimantes MS Windows |
smbfs
*
|
V:5, I:24 | 56 | , , | commande de montage et de démontage de fichiers MS Windows distants |
ftp
*
|
V:9, I:85 | 168 | FTP | Client FTP |
lftp
*
|
V:1.3, I:6 | 1876 | , , | , , |
ncftp
*
|
V:1.4, I:7 | 1276 | , , | client FTP plein écran |
wget
*
|
V:33, I:99 | 2364 | HTTP et FTP | téléchargement web |
curl
*
|
V:7, I:23 | 352 | , , | , , |
bind9-host *
|
V:43, I:91 | 188 | DNS |
host (1) de bind9, « Priority:
standard »
|
dnsutils *
|
V:14, I:90 | 412 | , , |
dig (1) de bind, « Priority:
standard »
|
dhcp3-client *
|
V:32, I:92 | 60 | DHCP | obtenir une adresse IP |
ldap-utils *
|
V:2, I:7 | 672 | LDAP | obtenir des données d'un serveur LDAP |
Le programme telnet
permet la connexion manuelle aux
démons du système et leur diagnostic.
Pour tester le service POP3 brut, essayez ce qui suit :
$ telnet mail.nom_isp.net pop3
Pour tester le service POP3 ayant TLS/SSL activé de certains fournisseurs d’accès
Internet, vous devrez avoir un client telnet
ayant
TLS/SSL activé en utilisant l’un des paquets telnet-ssl
ou openssl
.
$ telnet -z ssl pop.gmail.com 995
$ openssl s_client -connect pop.gmail.com:995
Les RFC suivantes proposent les connaissances nécessaires pour chaque démon :
Tableau 6.20. Liste des RFC courantes
RFC | description |
---|---|
rfc1939 et rfc2449 | service POP3 |
rfc3501 | service IMAP4 |
rfc2821 (rfc821) | service SMTP |
rfc2822 (rfc822) | Format de fichier de courrier électronique |
rfc2045 | Extensions multifonctions du courrier Internet « Multipurpose Internet Mail Extensions (MIME) » |
rfc819 | service DNS |
rfc2616 | service HTTP |
rfc2396 | définition d'une URI |
L’utilisation des ports est décrite dans
« /etc/services
».
Le système X Window d'un système Debian est basé sur les sources de X.Org. En juillet 2009, ce sont les versions X11R7.1 (etch), X11R7.3 (lenny), X11R7.3 (squeeze) et X11R7.4 (sid).
Il existe certains paquets (ou métapaquets) prévus pour faciliter l’installation.
Tableau 7.1. Liste des (méta)paquets clés pour X Window
(méta)paquet | popcon | taille | description |
---|---|---|---|
xorg
*
|
I:43 | 80 | bibliothèques X, un serveur X, un jeu de polices et un groupe de clients et d'utilitaires X de base (méta-paquet) |
xserver-xorg *
|
V:30, I:51 | 228 | suite complète de serveurs X avec leur configuration |
xbase-clients *
|
V:3, I:47 | 132 | assortiment de clients X divers |
x11-common *
|
V:41, I:92 | 568 | infrastructure de système de fichiers pour le système X Window |
xorg-docs *
|
I:6 | 1956 | diverses documentations pour la suite logicielle X.Org |
menu
*
|
V:28, I:52 | 2060 | créer le menu Debian avec toutes les applications prenant en charge un menu |
gksu
*
|
V:23, I:46 | 540 |
frontal Gtk+ à su (1) ou sudo (8)
|
menu-xdg *
|
I:47 | 76 | convertir la structure de menus de Debian vers la structure de menus xdg de freedesktop.org |
xdg-utils *
|
V:16, I:46 | 300 | utilitaires pour intégrer l’environnement de bureau fourni par freedesktop.org |
gnome-desktop-environment *
|
I:29 | 44 | environnement de bureau standard GNOME (méta-paquet) |
kde-standard *
|
I:3 | 36 | cœur de l’environnement de bureau KDE (méta-paquet) |
xfce4
*
|
I:4 | 40 | environnement de bureau léger Xfce (méta-paquet) |
lxde-core *
|
I:2 | 36 | environnement de bureau léger LXDE (méta-paquet) |
fluxbox *
|
V:0.9, I:2 | 4424 | Fluxbox : paquet pour un gestionnaire X window hautement configurable et faible consommateur de ressources |
Pour les bases de X, veuillez vous référer à X
(7),
the LDP XWindow-User-HOWTO.
Un environnement de bureau est habituellement constitué de la combinaison d'un gestionnaire X Window, d'un gestionnaire de fichiers et d'une suite compatible de programmes utilitaires.
Vous pouvez configurer un environnement de
bureau complet tel que GNOME, KDE, Xfce ou LXDE depuis le menu des tâches
d'aptitude
.
Sous les environnements Debian unstable
et
testing
, le menu Tâches peut être désynchronisé de l’état
des dernières transitions des paquets. Dans une telle situation, vous
devrez, afin d'éviter des conflits de paquets, désélectionner certains
paquets ou méta-paquets du menu des tâches
d'aptitude
. Lors de la désélection de paquets ou de
méta-paquets, vous devrez sélectionner vous-même certains paquets qui
fournissent leurs dépendances afin d'éviter qu'ils ne soient automatiquement
supprimés.
Vous pouvez aussi mettre en place manuellement un environnement simple n'ayant qu'un gestionnaire X Window comme Fluxbox.
Voir gestionnaires de fenêtres pour X pour un guide du gestionnaire de fenêtres X et de l’environnement de bureau.
Le système de menus Debian fournit
une interface aux programmes qu'ils soient en mode texte ou orientés X avec
update-menus
(1) du paquet menu
. Chaque
paquet installe ses données de menu dans le répertoire
« /usr/share/menu/
». Voir
« /usr/share/menu/README
».
Chaque paquet conforme au système de menu xdg du système Freedesktop.org
installe ses données de menu fournies par
« *.desktop
» dans
« /usr/share/applications/
». Les
environnements de bureau modernes conformes au standard Freedesktop.org
utilisent ces données afin de créer leur menu à l’aide du paquet
xdg-utils
. Voir
« /usr/share/doc/xdg-utils/README
».
Afin d'accéder au menu Debian traditionnel depuis l’environnement de bureau
GNOME, vous devez installer le paquet menu-xdg
,
cliquez« Système » → « Préférence » → « Menu
principal » et cochez la case correspondant à « Debian ».
Vous pouvez faire la même chose avec d'autres environnements de bureau modernes conformes à la norme Freedesktop.org.
Les système X Window est activé sous forme de la combinaison d'un programme serveur et d'un programme client. La signification des mots server et client comparés aux mots local et distant demande ici une attention particulière.
Tableau 7.2. Liste de terminologie client/serveur
type | description |
---|---|
serveur X | programme tournant sur une machine locale connectée aux périphériques d'affichage et de saisie de l’utilisateur. |
client X | programme tournant sur une machine distante qui traite des données et dialogue avec le serveur X. |
serveur d'applications | programme tournant sur une machine distante qui traite des données et dialogue avec les clients. |
client d'applications | programme tournant sur une machine locale connectée aux périphériques d'affichage et de saisie de l’utilisateur. |
Voir xorg
(1) pour des informations concernant le serveur
X.
Le serveur X (post-lenny
) a été réécrit pour utiliser
davantage pour sa configuration les d'informations venant des services
standards du système d'exploitation comme HAL et
D-bus que celles venant de
« /etc/X11/xorg.conf
». Le contenu de
« /etc/X11/xorg.conf
» diminue donc. Vous
pourrez avoir besoin de contourner des problèmes
transitoires du serveur X.
Ce qui suit (re)configurera un serveur X en créant un nouveau fichier
« /etc/X11/xorg.conf
» utilisant
dexconf
(1) :
# dpkg-reconfigure --priority=low x11-common # dpkg-reconfigure --priority=low xserver-xorg
Si vous avez édité vous-même ce fichier
« /etc/X11/xorg.conf
» mais que vous souhaitez
qu'il soit de nouveau mis à jour automatiquement, lancez la commande
suivante :
# sudo dpkg-reconfigure -phigh xserver-xorg
Veuillez vérifier soigneusement que votre configuration X est conforme aux spécifications de votre moniteur. Pour les moniteurs à tube de grande taille, c'est une bonne idée de définir un taux de rafraîchissement aussi élevé que votre moniteur peut le supporter (85 Hz est excellent, 75 Hz est bon) afin de réduire le scintillement. Pour les moniteurs à cristaux liquides, le taux de rafraîchissement plus faible (60 Hz) convient habituellement bien en raison de son temps de réponse qui est plus lent.
Attention à ne pas utiliser un taux de rafraîchissement trop élevé qui peut entraîner une défaillance matérielle fatale à votre moniteur.
Il y a plusieurs manière de faire accepter au « serveur X » (côté affichage) les connexions en provenance d'un « client X » (côté application).
Tableau 7.3. Liste des méthodes de connexion au serveur X
méthode | paquet | popcon | taille | utilisateur | chiffrement | pertinence de l’utilisation |
---|---|---|---|---|---|---|
commande xhost
|
xbase-clients *
|
V:3, I:47 | 132 | non vérifié | non | obsolète |
Commande xauth
|
xbase-clients *
|
V:3, I:47 | 132 | vérifié | non | Connexion locale par un tube |
Commande ssh -X
|
openssh-client *
|
V:52, I:99 | 2104 | vérifié | oui | Connexion à distante par le réseau |
Gestionnaire d'affichage de GNOME |
gdm
*
|
V:22, I:33 | 16548 | vérifié | non (XDMCP) | Connexion locale par un tube |
Gestionnaire d'affichage de KDE |
kdm
*
|
V:8, I:11 | 5510 | vérifié | non (XDMCP) | Connexion locale par un tube |
Gestionnaire d'affichage de X |
xdm
*
|
V:0.7, I:1.8 | 780 | vérifié | non (XDMCP) | Connexion locale par un tube |
Gestionnaire d'affichage WindowMaker |
wdm
*
|
V:24, I:84 | 1992 | vérifié | non (XDMCP) | Connexion locale par un tube |
Gestionnaire d'affichage LTSP |
ldm
*
|
V:0.02, I:0.09 | 392 | vérifié | oui | connexion réseau distante par SSH (client léger) |
Ne pas utiliser, pour la connexion X, de connexion TCP/IP distante sur un réseau
non sécurisé à moins que vous n'ayez une
très bonne raison de le faire telle que l’utilisation du chiffrement. Une
socket de connexion TCP/IP sans chiffrement est susceptible d'une attaque d'espionnage, elle est désactivée par
défaut sur le système Debian. Utilisez « ssh
-X
».
Ne pas utiliser non plus de connexion XDMCP sur un réseau non sécurisé. Il envoie des données UDP/IP sans chiffrement et susceptible d'une attaque d'espionnage.
Vous pouvez prendre le risque d'activer
une connexion TCP/IP distante en définissant
« DisallowTCP=false
» dans
« /etc/gdm/gdm.conf
» pour passer outre
« /usr/share/gdm/defaults.conf
» et en
supprimant « -nolisten
» des lignes trouvées
par « find /etc/X11 -type f -print0 | xargs -0 grep
nolisten
», si vous êtes dans un environnement entièrement
sécurisé.
LTSP signifie Projet de serveur de terminal Linux (« Linux Terminal Server Project »).
Le système X Window est habituellement démarré en tant que session X qui est la combinaison d'un serveur X et de la connexions de clients X. Pour le système de bureau normal, les deux tournent sur la station de travail.
La session X peut être démarrée par :
startx
lancée depuis la ligne de
commande ;
*dm
démarré à la fin du script de
démarrage du répertoire « /etc/rc?.d/
»
(« ?
» correspond au niveau de fonctionnement).
Le script de démarrage des démons de gestion d'affichage examine d'abord le
contenu du fichier
« /etc/X11/default-display-manager
» avant leur
exécution proprement dite. Ceci permet de s'assurer qu'un seul programme
démon X display manager est activé.
Voir Section 8.3.5, « Paramètre linguistique spécifique sous X Window » pour les variables d'environnement initiales du gestionnaire d'affichage X.
Essentiellement, tous ces programmes exécutent le script
« /etc/X11/Xsession
". Ensuite,, le script
« /etc/X11/Xsession
» effectue une action de
type run-parts
(8) pour exécuter les scripts se trouvant
dans le répertoire « /etc/X11/Xsession.d/
». Le
premier programme trouve, dans l’ordre suivant, est exécuté à l’aide de la
commande « exec
» intégrée :
/etc/X11/Xsession
» par le gestionnaire
d'affichage X, s'il est défini ;
~/.xsession
» ou
« ~/.Xsession
», s'il est défini ;
/usr/bin/x-session-manager
», si
elle est définie ;
/usr/bin/x-window-manager
», si
elle est définie ;
/usr/bin/x-terminal-emulator
»,
si elle est définie.
Ce processus est affecté par le contenu de
« /etc/X11/Xsession.options
». Les programmes
exacts vers lesquelles pointent les commandes
« /usr/bin/x-*
» sont déterminés par le système
d'alternatives de Debian et sont modifiés par
« update-alternatives --config
x-session-manager
», etc.
gdm
(1) vous permet de sélectionner le type de session (ou
d'environnement de bureau : Section 7.2, « Configurer l’environnement de bureau »), la langue (ou
« locale » : Section 8.3, « Les paramètres linguistiques (« locale ») ») de la session X
depuis son menu. Il conserve les valeurs par défaut dans
« ~/.dmrc
» sous la forme suivante :
[Desktop] Session=default Language=fr_FR.UTF-8
Sur un système où « /etc/X11/Xsession.options
»
contient une ligne « allow-user-xsession
sans
caractère « #
» la précédant, tout utilisateur
qui définit « ~/.xsession
» ou
« ~/.Xsession
» peut personnaliser l’action de
« /etc/X11/Xsession
» en passant outre le code
du système. La dernière commande dans le fichier
« ~/.xsession
» devrait toujours être de la
forme « exec
un_gestionnaire_de_fenêtre_ou_de_session
» afin de démarrer
vos gestionnaires favoris de fenêtres et de session X.
Voici de nouvelles méthodes de configuration de la session X sans complètement outrepasser le code système comme ci-dessus :
gdm
peut sélectionner une
session particulière et la définir comme paramètre de
« /etc/X11/Xsession
» ;
~/.xsessionrc
» est exécuté dans
le cadre du processus de démarrage (indépendant du bureau) ;
~/.gnomerc
» est exécuté dans le
cadre du processus de démarrage (bureau GNOME uniquement) ;
~/.gnome2/session
», etc.
L’utilisation de « ssh -X
» active une
connexion sécurisée entre le serveur X local et une application sur un
serveur distant.
Si vous désirez éviter l’option « -X
» de la
ligne de commandes, définissez à « yes
» les
entrées « X11Forwarding
» de
« /etc/ssh/sshd_config
» sur la machine
distante,
Démarrez le serveur X sur la station locale.
Ouvrez un xterm
sur la machine locale.
Lancez ssh
(1) pour établir une connexion avec un site
distant comme suit :
utilisateur_local @ localhost $ ssh -q -X -l nom_utilisateur@machine_distante.domaine Password:
Lancez comme suit une application X, par exemple
« gimp
» sur le site distant :
nom_utilisateur @ machine_distante $ gimp &
Cette méthode permet l’affichage du client X distant comme s'il était connecté par une socket UNIX locale.
La sécurisation du terminal X par Internet, qui affiche localement un
environnement de bureau qui tourne entièrement de manière distante, peut
être facilement réalisée en utilisant des paquets spécialisés tels que
ldm
. Votre machine locale devient un client léger
sécurisé du serveur d'applications connecté par SSH.
Si vous désirez une fonctionnalité semblable avec votre gestionnaire
d'affichage normal gdm
, créez un script exécutable de
l’interpréteur de commandes dans
« /usr/local/bin/ssh-session
» comme le
suivant :
#!/bin/sh -e # Basé sur gdm-ssh-session dans gdm source (GPL) ZENITY=$(type -p zenity) TARGETHOST=$($ZENITY --width=600 \ --title "Machine à connecter" --entry \ --text "Entrez le nom de la machine sur laquelle vous désirez vous connecté en tant que utilisateur@machine.dom:") TARGETSESSION=$($ZENITY --width=600 --height=400 \ --title "Nom de la session distante" --list --radiolist --text "Sélectionnez une entrée" \ --column " " --column "Session" --column "description" --print-column 2 \ TRUE "/etc/X11/Xsession" "Debian" \ FALSE "/etc/X11/xinit/Xclients" "RH variants" \ FALSE "gnome-session" "GNOME session" \ FALSE "xterm" "Safe choice" \ FALSE "rxvt" "Safe choice" \ FALSE "gnome-terminal" "Safe choice") echo "Connecting to "$TARGETHOST" with $TARGETSESSION" /usr/bin/ssh -A -X -T -n "$TARGETHOST" "$TARGETSESSION" #SSH_ASKPASS=/usr/bin/ssh-askpass /usr/bin/ssh -A -X -T -n "$TARGETHOST" "$TARGETSESSION"
Ajoutez ce qui suit à
« /etc/dm/Sessions/ssh.desktop
».
[Desktop Entry] Encoding=UTF-8 Name=SSH Comment=Cette session vous connecte à une machine distante en utilisant ssh Exec=/usr/local/bin/ssh-session Type=Application
Fontconfig 2.0 a été créé en 2002 pour
fournir une bibliothèque indépendante de la distribution destinée à
configurer et personnaliser l’accès aux polices. Debian, pour les versions
ultérieures à squeeze
utilise Fontconfig 2.0 pour la configuration de ses
polices.
La prise en compte des polices dans le système X Window peut être résumée comme suit :
Ancien système de gestion des polices côté serveur X
Système de prise en charge moderne des polices côté client X
fonts.conf
(5) pour sa configuration.
Tableau 7.4. Table de paquets prenant en charge les systèmes de polices de X Window
paquet | popcon | taille | description |
---|---|---|---|
xfonts-utils *
|
V:23, I:71 | 516 | Programmes utilitaires des polices du système X Window |
libxft2 *
|
V:44, I:74 | 148 | Xft, bibliothèque permettant de connecter des applications X avec la bibliothèque de tramage des polices FreeType |
libfreetype6 *
|
V:58, I:87 | 740 | Bibliothèque de tramage des polices FreeType 2.0 |
fontconfig *
|
V:21, I:73 | 472 | Fontconfig, bibliothèque générique de configuration des polices — binaires de gestion |
fontconfig-config *
|
I:81 | 440 | Fontconfig, bibliothèque générique de configuration des polices — données de configuration |
Vous pouvez vérifier les informations de configuration des polices comme suit :
xset q
» pour le chemin des police X11 de
base
fc-match
» pour la police par défaut de
fontconfig
fc-list
» pour les polices disponibles de
fontconfig
« Unicode et le Pingouin » (« The Penguin and Unicode ») est un bon aperçu du système X Window moderne. D'autres documentations se trouvant à http://unifont.org/ devraient fournir de bonnes informations sur les polices Unicode, les logiciels fonctionnant avec Unicode, l’internationalisation et les problèmes d'utilisation d'Unicode sur les systèmes d'exploitationfree/libre/open source (FLOSS).
Il y a deux types principaux de polices de caractères pour ordinateurs.
Alors que le redimensionnement des polices bitmap donne des images hachées, le redimensionnement des polices par traits et contours donne des images lisses.
Les polices bitmap sur le système Debian sont habituellement fournie sous
forme de fichiers de police X11 pcf
bitmap compressés ayant l’extension de nom de fichier
« .pcf.gz
».
Les polices de type contour sur les système Debian sont fournies de la manière suivante :
.pfb
»
(fichier binaire de police) et « .afm
»
(fichier de métrique de la police).
.ttf
».
OpenType est prévu pour se substituer à la fois à TrueType et PostScript Type 1.
Tableau 7.5. Table de correspondance des polices PostScript Type 1
paquet de police | popcon | taille | police sans-sérif | police sérif | police monospace | source de la police |
---|---|---|---|---|---|---|
PostScript | N/A | N/A | Helvetica | Times | Courier | Adobe |
gsfonts * | V:18, I:66 | 4632 | Nimbus Sans L | Nimbus Roman No9 L | Nimbus Mono L | URW (taille compatible avec Adobe) |
gsfonts-x11 * | I:30 | 116 | Nimbus Sans L | Nimbus Roman No9 L | Nimbus Mono L | gestion des polices X avec polices PostScript Type 1. |
t1-cyrillic * | I:1.9 | 5008 | Helvetian libre | Times libre | Courier libre | URW étendu (taille compatible avec Adobe) |
lmodern * | V:2, I:16 | 45644 | LMSans* | LMRoman* | LMTypewriter* | PostScript redimensionnable et polices OpenType basées sur « Computer Modern » (venant de TeX) |
Tableau 7.6. Table de correspondance des polices TrueType
paquet de police | popcon | taille | police sans-sérif | police sérif | police monospace | source de la police |
---|---|---|---|---|---|---|
ttf-mscorefonts-installer * | I:11 | 200 | Arial | Times New Roman | Courier New | Microsoft (taille compatible avec Adobe) (Ceci installe des données non-libres) |
ttf-liberation * | I:43 | 1724 | Liberation Sans | Liberation Serif | Liberation Mono | Projet de polices Liberation (taille compatible avec Microsoft) |
ttf-freefont * | V:10, I:26 | 4204 | FreeSans | FreeSerif | FreeMono | GNU freefont (taille compatible avec Microsoft) |
ttf-dejavu * | I:77 | 68 | DejaVu Sans | DejaVu Serif | DejaVu Sans Mono | DejaVu, Bitstream Vera avec couverture Unicode |
ttf-dejavu-core * | I:72 | 2592 | DejaVu Sans | DejaVu Serif | DejaVu Sans Mono | DejaVu, Bitstream Vera avec couverture Unicode (sans, sans-bold, serif, serif-bold, mono, mono-bold) |
ttf-dejavu-extra * | I:69 | 5788 | N/A | N/A | N/A | DejaVu, Bitstream Vera avec couverture Unicode (oblique, italic, bold-oblique, bold-italic, condensed) |
ttf-unifont * | I:4 | 16060 | N/A | N/A | unifont | GNU Unifont, avec tous les codes de caractères imprimables d'« Unicode 5.1 Basic Multilingual Plane (BMP) » (Plan de base multilingue Unicode 5.1) |
Les polices DejaVu sont basées sur un sur-ensemble des polices Bitstream Vera
aptitude
(8) peut vous aider à trouver facilement de
nouvelles polices de caractères.
~Gmade-of::data:font
»
~nxfonts-
»
~nttf-
»
Comme les polices libres sont quelque peu limitées, l’installation ou le partage de certaines polices TrueType commerciales est possible pour les utilisateur de Debian. De manière à faciliter ce processus pour l’utilisateur, certains paquets pratiques ont été créés.
ttf-mathematica4.1
ttf-mscorefonts-installer
Vous obtiendrez une vraiment bonne sélection de polices TrueType en acceptant de contaminer votre système Libre avec des polices non libres.
Voici quelques points ciblés sur les polices de caractères CJK.
Tableau 7.7. Table de mots-clés utilisés dans les noms de polices CJK afin d'indiquer les types de polices
type de police | nom de police Japonaise | nom de police chinoise | nom de police coréenne |
---|---|---|---|
sans-sérif | gothic, ゴチック | hei, gothic | dodum, gulim, gothic |
serif | mincho, 明朝 | song, ming | batang |
Un nom de police tel que « VL PGothic » avec « P » est une police proportionnelle correspondant à la police de largeur fixe « VL Gothic ».
Par exemple, la table de code Shift_JIS comporte 7070 caractères. Ils peuvent être regroupés de la manière suivante :
Les caractères sur deux octets occupent une largeur double sur les consoles
qui utilisent des polices CJK de largeur fixe. Afin de s'accommoder d'une
telle situation, le fichier Hanzi
Bitmap Font (HBF) File ayant l’extension de nom de fichier
« .hbf
» peut être mis en œuvre pour les
polices comportant des caractère sur un ou sur deux octets.
Afin d'économiser la place prise par les fichiers de polices TrueType, on peut utiliser un fichier de collection
de polices TrueType ayant l’extension du nom
de fichier « .ttc
».
Afin de couvrir un espace de code de caractères compliqué, la police CID à
clé PostScript Type 1 est utilisée avec
des fichiers CMap qui commencent par « %!PS-Adobe-3.0
Resource-CMap
». Ceci est rarement utilisé pour l’affichage X
normal mais est utilisé pour le rendu PDF, etc. (voir Section 7.7.2, « Applications utilitaires pour X »).
Des glyphes multiples sont attendus de
certains points du code Unicode en raison de
l’unification Han. Parmi les plus
ennuyeux se trouvent « U+3001 IDEOGRAPHIC COMMA » et « U+3002
IDEOGRAPHIC FULL STOP » dont la position des caractères diffère selon
les pays CJK. La priorité de configuration des polices japono-centrées sur
les chinoises en utilisant « ~/.fonts.conf
»
devrait apaiser l’esprit des Japonais.
Voici une liste des application de bureautique de base (OO signifie OpenOffice.org) :
Tableau 7.8. Liste des applications de bureautique que base pour X
paquet | popcon | taille du paquet | type | description |
---|---|---|---|---|
openoffice.org-writer *
|
V:21, I:41 | 26892 | OO | traitement de texte |
openoffice.org-calc *
|
V:21, I:40 | 20524 | OO | feuille de calcul |
openoffice.org-impress *
|
V:18, I:40 | 4208 | OO | présentation |
openoffice.org-base *
|
V:16, I:39 | 10708 | OO | gestion de base de données |
openoffice.org-draw *
|
V:18, I:40 | 10720 | OO | éditeur de graphiques vectoriels (draw) |
openoffice.org-math *
|
V:17, I:40 | 2712 | OO | éditeur d'équations et de formules mathématiques |
abiword *
|
V:6, I:10 | 4776 | GNOME | traitement de texte |
gnumeric *
|
V:5, I:11 | 7860 | GNOME | feuille de calcul |
gimp
*
|
V:12, I:44 | 13560 | GTK | éditeur de graphiques en champs de bits (« bitmap ») (paint) |
inkscape *
|
V:15, I:32 | 87436 | GNOME | éditeur de graphiques vectoriels (draw) |
dia-gnome *
|
V:1.4, I:2 | 576 | GNOME | éditeur d'organigrammes et de diagrammes |
planner *
|
V:0.4, I:4 | 6704 | GNOME | gestion de projets |
kword
*
|
V:0.6, I:1.5 | 5334 | KDE | traitement de texte |
kspread *
|
V:0.6, I:1.6 | 8792 | KDE | feuille de calcul |
kpresenter *
|
V:0.5, I:1.3 | 2877 | KDE | présentation |
kexi
*
|
V:0.2, I:1.6 | 7625 | KDE | gestion de base de données |
karbon *
|
V:0.6, I:1.4 | 2403 | KDE | éditeur de graphiques vectoriels (draw) |
krita
*
|
V:0.6, I:1.6 | 11822 | KDE | éditeur de graphiques en champs de bits (« bitmap ») (paint) |
kchart *
|
V:0.8, I:1.9 | 2503 | KDE | programme de dessin de graphes et d'organigrammes |
kformula *
|
V:0.4, I:1.3 | 2065 | KDE | éditeur d'équations et de formules mathématiques |
kplato *
|
V:0.15, I:1.4 | 5978 | KDE | gestion de projets |
Voici une liste d'applications de base qui ont attiré mon attention :
Tableau 7.9. Liste d'applications utilitaires de base pour X
paquet | popcon | taille du paquet | type | description |
---|---|---|---|---|
evince *
|
V:26, I:38 | 1116 | GNOME | afficheur de documents (pdf) |
okular *
|
V:4, I:6 | 3408 | KDE | afficheur de documents (pdf) |
evolution *
|
V:16, I:34 | 4724 | GNOME | Gestion d'informations personnelles (logiciel de travail collaboratif et courriel) |
kontact *
|
V:1.3, I:8 | 1326 | KDE | Gestion d'informations personnelles (logiciel de travail collaboratif et courriel) |
scribus *
|
V:0.5, I:3 | 26888 | KDE | éditeur de mise en page de bureau |
glabels *
|
V:0.16, I:0.7 | 1148 | GNOME | éditeur d'étiquettes |
kbarcode *
|
V:0.05, I:0.3 | 2180 | KDE | application d'impression d'étiquettes et de codes à barres |
gnucash *
|
V:0.7, I:2 | 5748 | GNOME | gestion financière personnelle |
homebank *
|
V:0.09, I:0.4 | 1092 | GTK | gestion financière personnelle |
kmymoney2 *
|
V:0.06, I:0.5 | 144 | KDE | gestion financière personnelle |
xsane
*
|
V:5, I:36 | 748 | GTK | interface pour dispositifs de numérisation (scanner) |
Le paquet poppler-data
(précédemment non libre, voir
Section 11.3.1, « Ghostscript ») doit être installé pour
qu'evince
et okular
puissent afficher
des documents CJK PDF qui utilisent des données Cmap (Section 7.6.3, « Polices CJK »).
L’installation de logiciels tels que scribus
(KDE) sous
l’environnement de bureau GNOME est acceptable puisqu'il n'existe pas de
fonctionnalité équivalente sous l’environnement de bureau de
GNOME. Cependant, l’installation de nombreux paquets ayant les mêmes
fonctionnalités pollue votre menu.
xmodmap
(1) est un utilitaire permettant de modifier les
cartographies de clavier et l’affectation des boutons de la souris sous le
système X Window. Afin d'obtenir le code de
touche (« keycode »), lancez xev
(1)
sous X et pressez les touches. Afin d'obtenir la signification de symbole de touche (« keysym »), regardez
la définition de la MACRO dans le fichier
« /usr/include/X11/keysymdef.h
» (paquet
x11proto-core-dev
). Toutes les
instructions« #define
» de ce fichier ont des
noms préfixés par « XK_
» suivi des noms de
symbole de touche (« keysym »).
La plupart des programmes clients X traditionnels, tels que
xterm
(1), peuvent être démarré avec un ensemble d'options
en ligne de commande afin de préciser leur géométrie, les polices et
l’affichage.
Ils utilisent aussi la base de données de ressources X afin de configurer
leur aspect. Les valeurs par défaut des ressources X pour l’ensemble du
système se trouvent dans
« /etc/X11/Xresources/*
» et les valeurs par
défaut de leurs applications dans
« /etc/X11/app-defaults/*
». Utilisez ces
paramètres comme points de départ.
Le fichier « ~/.Xresources
» est utilisé pour
enregistrer les spécifications de ressources de l’utilisateur. Ce fichier
est automatiquement fusionné avec les ressources X par défaut lors de la
connexion. Pour effectuer des modifications à ces définitions et les rendre
immédiatement effectives, fusionnez-les dans la base de données à l’aide de
la commande suivante :
$ xrdb -merge ~/.Xresources
Voir x
(7) et xrdb
(1).
Vous pourrez tout apprendre ce qui concerne xterm
(1) sur
http://dickey.his.com/xterm/xterm.faq.html.
Ne lancez jamais le gestionnaire de session ou d'affichage X avec le compte
de l’administrateur en entrant root
à l’invite d'un
gestionnaire d'affichage comme gdm
, même si vous prévoyez
d'effectuer des tâches administratives car ceci est considéré comme non sûr,
L’ensemble de l’architecture de X est considérée comme non sûre si elle
tourne avec le compte de l’administrateur. Vous devez toujours avoir le
niveau de privilège le plus bas possible, comme avec un compte normal.
Une manière simple de faire tourner un client X particulier, par exemple
« toto
» en tant que rot est d'utiliser
sudo
(8) etc. de la manière suivante :
$ sudo toto &
$ sudo -s # toto &
$ gksu toto &
$ ssh -X root@localhost # toto &
N'utiliser ssh
(1) que dans ce but est un gaspillage de
ressources.
De manière à ce que le client X puisse se connecter au serveur X, veuillez noter ce qui suit :
$XAUTHORITY
» et
« $DISPLAY
» de l’ancien utilisateur doivent
être copiées dans celles du nouvel utilisateur.
$XAUTHORITY
».
Le paquet gksu
(popcon : V:23, I:46) est un paquet
spécialisé de l’interface graphique GTK+ permettant d'obtenir les privilèges
de l’administrateur. Il peut être configuré pour utiliser
su
(1) ou sudo
(8) en tant que programme
de support selon la valeur de la clé
« /apps/gksu/sudo-mode
» de gconf. Vous pouvez
éditer la clé de gconf en utilisant gconf-editor
(1)
(menu : « Applications » → « Outils système » →
« Éditeur de configuration »).
Le multilinguisme (M17N) ou la gestion de la langue natale (« Native Language Support ») d'un logiciel applicatif est réalisé en deux étapes :
Il y a 17, 18, ou 10 lettres entre « m » et « n », « i » et « n » ou « l » et « n » dans « multilingualization », « internationalization » et « localization » ce qui correspond à M17N, I18N, et L10N.
Des logiciels modernes, tels que GNOME et KDE, gèrent le multilinguisme. Ils
sont internationalisés en les faisant gérer les données UTF-8 et localisés en leur donnant les messages
traduits par l’intermédiaire de l’infrastructure
gettext
(1). Les messages traduits peuvent être offerts
sous forme de paquets de localisation séparés. Il sont simplement
sélectionnés en donnant la valeur du paramètres linguistique approprié à des
variables d'environnement pertinentes.
La représentation la plus simple d'un texte de données est l’ASCII qui suffit à l’anglais et utilise moins de 127 caractères (qui peuvent être représentés avec 7 bits). De manière à pouvoir prendre en compte bien plus de caractères pour l’internationalisation, de nombreux systèmes de codage des caractères ont été inventés. Le système moderne et préféré est UTF-8 qui peut prendre en charge tous les caractères connus des êtres humains (voir Section 8.3.1, « Bases du codage »).
Voir Introduction à i18n pour davantage d'informations.
La prise en charge du matériel international est activée par des données de configuration du matériel localisées.
Le système Debian peut être configuré pour travailler avec de nombreuses configurations de claviers internationaux.
Tableau 8.1. Liste des méthodes de reconfiguration du clavier :
environnement | commande |
---|---|
console LInux |
dpkg-reconfigure --priority=low console-data
|
X Window |
dpkg-reconfigure --priority=low xserver-xorg
|
Ceci prend en compte l’entrée au clavier des caractères accentués de nombreuses langues européennes avec leurs fonctions de touches mortes. Pour les langues asiatiques, il faut une gestion plus compliquée de la méthode d'entrée telles que IBus qui sera discutée ci-après.
La configuration de l’entrée multilingue du système Debian est simplifiée
par l’utilisation de la famille de paquets IBus
avec le paquet im-config
. La liste des paquets IBus est
la suivante :
Tableau 8.2. Liste des méthodes d'entrées prises en charge par iBus
paquet | popcon | taille | paramètres linguistiques pris en charge |
---|---|---|---|
ibus * | V:0.2, I:0.2 | 4220 | infrastructure de méthode d’entrée utilisant dbus |
ibus-anthy * | V:0.04, I:0.10 | 684 | Japonais |
ibus-skk * | V:0.00, I:0.03 | 404 | , , |
ibus-pinyin * | V:0.06, I:0.09 | 1184 | Chinois (pour zh_CN) |
ibus-chewing * | V:0.01, I:0.02 | 252 | , , (pour zh_TW) |
ibus-hangul * | V:0.01, I:0.03 | 216 | Coréen |
ibus-table * | V:0.05, I:0.10 | 680 | moteur de tables pour iBus |
ibus-table-thai * | I:0.00 | 156 160 | Thaï |
ibus-unikey * | V:0.00, I:0.00 | 316 | Vietnamien |
ibus-m17n * | V:0.02, I:0.05 | 180 | Multilingue : Indic, Arabe et autres |
La méthode kinput2 et d'autres méthodes d’entrée dépendant des paramètres linguistiques asiatiques classiques existent encore mais ne sont pas recommandées avec l’environnement X UTF-8 moderne. Les chaînes d’outils SCIM et uim sont une approche légèrement plus ancienne de méthode d'entrée internationale de l’environnement X UTF-8 moderne..
J'ai trouvé très utile la méthode d'entrée japonaise lancée depuis un
environnement anglais (« en_US.UTF-8
»). Voici
comment j’ai procédé avec iBus.
ibus-anthy
avec ses paquets recommandés comme im-config
.
im-config
» depuis l’interpréteur de
commande de l’utilisateur et sélectionnez
« ibus
».
im-config
».
Veuillez noter ce qui suit :
im-config
(8) se comporte différemment selon que la
commande est exécutée depuis le compte de l’administrateur ou non.
im-config
(8) active la meilleure méthode de saisie sur le
système par défaut sans intervention de l'utilisateur.
im-config
(8) est désactivée par défaut pour éviter de
l'encombrer.
Si vous désirez effectuer une entrée sans passer par XIM, définissez la
valeur de « $XMODIFIERS
» à « none »
lors du lancement d'un programme. Ceci peut être le cas si vous utilisez
l’infrastructure d'entrée japonaise egg
sous
emacs
(1). Depuis l’interpréteur de commandes, lancez ce
qui suit :
$ XMODIFIERS=none emacs
Pour ajuster la commande exécutée par le menu Debian, placez la
configuration personnalisée dans « /etc/menu/
»
en suivant la méthode décrite dans
« /usr/share/doc/menu/html
».
La console Linux ne peut afficher qu'un nombre restreint de
caractères. (Vous devrez avoir un programme de terminal particulier tels que
jfbterm
(1) pour afficher les langues non-européennes sur
des consoles autres que la console X).
Le système X Window peut afficher tous les caractères UTF-8 dès que les données de polices de caractères existent. (Le codage des données de police d'origine est pris en charge par le système X Window de manière transparente pour l’utilisateur).
Ce qui suit met l’accent sur les paramètres linguistiques pour les
applications tournant sous l’environnement X Window lancé par
gdm
(1).
La variable d'environnement « LANG=xx_YY.ZZZZ
»
définit les paramètres linguistiques avec le code de langue
« xx
», le code de pays
« yy
» et le codage
« ZZZZ
» (voir Section 1.5.2, « Variable « $LANG
» »).
Le système Debian actuel définit normalement les paramètres linguistiques
avec « LANG=xx_YY.UTF-8
». Ceci utilise le
codage UTF-8 avec le jeu de caractèresUnicode. Ce système de codage UTF-8 est un système de code multi-octets qui utilise
intelligemment les éléments du code. Les données ASCII, qui sont uniquement constituées de code sur 7
bits, sont toujours des données UTF-8 valables qui ne comportent qu'un octet
par caractère.
Le système Debian précédent définissait habituellement les paramètres
linguistiques avec « LANG=C
» ou
« LANG=xx_YY
» (sans
« .UTF-8
»).
LANG=C
» ou
« LANG=POSIX
».
LANG=xx_YY
».
Le système de codage traditionnel actuel utilisé pour
« LANG=xx_YY
» peut être identifié en vérifiant
« /usr/share/i18n/SUPPORTED
». Par exemple,
« en_US
» utilise le codage
« ISO-8859-1
» et
« fr_FR@euro
» utilise le codage
« ISO-8859-15
.
Pour la signification des valeurs de codage, voir Tableau 11.2, « Liste de valeurs de codage et leur utilisation ».
Le codage UTF-8 est le codage moderne et sage pour I18N, il permet la représentation des caractères Unicode, c'est-à-dire de pratiquement tous les caractères humains connus, UTF signifie Format de transformation Unicode (« Unicode Transformation Format »).
Je recommande l’utilisation de paramètres linguistiques UTF-8 pour votre bureau, par exemple
« LANG=fr_FR.UTF-8
». La première partie du
paramètre linguistique (« locale ») détermine comment les messages
seront présentés par les applications. Par exemple,
gedit
(1) (éditeur de texte pour le Bureau GNOME ) avec le
paramètre de langue « LANG=fr_FR.UTF-8
» peut
afficher et éditer des données textuelles avec des caractères chinois tout
en présentant les menus en français, dans la mesure où les polices et les
méthodes d'entrée sont installées.
Je recommande aussi de ne définir que la variable d'environnement
« $LANG
», je ne vois pas beaucoup d'avantages
à définir une combinaison compliquée de variables
« LC_*
» (voir locale
(1))
avec les paramètres linguistiques UTF-8.
Même le texte anglais en texte brut peut contenir des caractères non-ASCII, par exemple les marques de citations gauche et droite ne sont pas disponibles en ASCII.
“texte entre doubles marques de citation” ‘texte entre simples marques de citation’
Lorsque le texte brut ASCII est converti en UTF-8, il a exactement le même contenu et la même taille que le texte original en ASCII. Il n'y a donc rien à perdre en mettant en œuvre des paramètres régionaux UTF-8.
Certains programmes utilisent davantage de mémoire lors de l’utilisation de I18N. Ceci parce qu'ils sont codés avec l’utilisation interne d'UTF-32(UCS4) pour la prise en compte d'Unicode afin d'optimiser la vitesse, ils utilisent 4 octets pour chaque caractère ASCII indépendamment de la « locale » sélectionnée. De nouveau, il n'y a rien à perdre en mettant en œuvre des paramètres linguistiques UTF-8.
Les anciens systèmes de codage propriétaires non UTF-8 tendent à avoir une différence mineure mais ennuyeuse pour certains caractères tels que les caractères graphiques pour de nombreux pays. La mise en œuvre du système UTF-8 sur les systèmes d'exploitation modernes a pratiquement résolu ces problèmes de codage conflictuels.
Pour accéder à un paramètre linguistique particulier, les données de
paramètres linguistiques doivent être compilées dans la base de données des
paramètres linguistiques. (Le système Debian n'est pas distribué avec tous les paramètres
linguistiques précompilés à moins que vous n'ayez installé le paquet
locales-all
). La liste complète des paramètres
linguistiques pris en charge pour être compilés se trouve dans
« /usr/share/i18n/SUPPORTED
». On y trouve la
liste de tous les noms des « locale ». La commande ci-après
affiche la liste de tous les paramètres linguistiques UTF-8 déjà compilés
sous forme binaire :
$ locale -a | grep utf8
L’exécution de la commande suivante va reconfigurer le paquet
locales
:
# dpkg-reconfigure locales
Ce processus se déroule en trois étapes :
/etc/defaults/locale
» pour une
utilisation par PAM (voir Section 4.5, « PAM et NSS »).
La liste des paramètres linguistiques disponible devra comporter
« fr_FR.UTF-8
» et toutes les langues
intéressantes avec « UTF-8
».
Pour l’anglais des USA, le paramètre linguistique recommandés est
« en_US.UTF-8
». Pour les autres langues,
assurez-vous de bien choisir une valeur avec
« UTF-8
» (NdT : prendre
« de_FR.UTF-8
» pour la langue française en
France) . Les caractères internationaux sont tous pris en charge par l’un
quelconque de ces paramétrage.
Bien que le paramètre linguistique « C
»
utilise des messages en anglais, il ne prend en compte que les caractères
ASCII.
La valeur de la variable d'environnement
« $LANG
» est définie et modifiée par de
nombreuses applications.
login
(1) pour les programmes de console locale de Linux
ssh
(1)
pour les programmes de la console distante
gdm
(1) pour tous les programmes X
~/.xsessionrc
» pour tous les programmes X
(fonctionnalité de lenny
)
~/.bashrc
», pour tous les programmes de
console
C'est une bonne idée de définir les paramètres linguistiques par défaut pour
l’ensemble du système à « en_US.UTF-8
» pour un
maximum de compatibilité.
Vous pouvez choisir vos paramètres linguistiques spécifiques sous X Window indépendamment de leur valeur par défaut valable pour l’ensemble du système en utilisant une personnalisation de PAM (voir Section 4.5, « PAM et NSS ») comme suit :.
Cet environnement devrait vous apporter la meilleure expérience d'environnement de bureau stable. Vous avez accès à un terminal en mode caractères fonctionnel avec des messages lisibles même lorsque le système X Window ne fonctionne pas. Ceci devient essentiel pour des langues qui utilisent des caractères non romains tels que le chinois, le japonais et le coréen.
Il peut exister une autre manière comme l’amélioration du paquet de gestion
de session de X mais veuillez lire ce qui suit qui est la méthode générique
et basique pour définir les paramètres linguistiques. Pour
gdm
(1), je sais que l’on peut sélectionner la
« locale » de la session X par l’intermédiaire de son memu.
La ligne suivante définit l’emplacement du fichier de l’environnement de
langue dans le fichier de configuration de PAM, tels que
« /etc/pam.d/gdm
» :
auth required pam_env.so read_env=1 envfile=/etc/default/locale
Modifiez-la avec ce qui suit :
auth required pam_env.so read_env=1 envfile=/etc/default/locale-x
Pour le japonais, créez un fichier
« /etc/defaults/locale-gdm
» avec les
permissions « -rw-r--r-- 1 root root
» et
contenant ce qui suit :
LANG="ja_JP.UTF-8"
Conservez le fichier « /etc/defaults/locale
»
suivant par défaut pour les autre programmes :
LANG="en_US.UTF-8"
C'est la technique la plus générique de personnaliser les paramètres
linguistiques et faire que la fenêtre du menu de sélection de
gdm
(1) lui-même soit affichée dans la bonne langue.
Pour ce cas, vous pouvez aussi simplement modifier les paramètres
linguistiques en utilisant le fichier
« ~/.xsessionrc
».
Pour les échanges de données entre plateformes (voir Section 10.1.10, « Périphériques d'enregistrement amovibles »), il vous faudra peut-être monter
certains systèmes de fichiers ayant un codage particulier. Par exemple,
, la commande mount
(8) pour un système de fichiers vfat suppose que l’on
utilise CP437 si on l’utilise sans option. Vous
devrez fournir les options explicites à mount pour utiliser des noms de
fichiers codés en UTF-8 ou en CP932.
Lors du montage automatique d'un clé USB pouvant être branchée à chaud sur un environnement de bureau moderne comme GNOME, vous pouvezindiquer ces options de montage avec un clic-droit sur l’icône du bureau. Cliquez l’onglet « Drive », cliquez « Paramètres » pour l’étendre et entrez « utf8 » dans « Options de montage ». La prochaine fois que vous monterez cette clé mémoire, le montage avec UTF-8 sera activé.
Si vous êtes en train de mettre à jour le système ou de déplacer des disques depuis un ancien système qui n'était pas UTF-8, les noms de fichiers avec des caractères non-ASCII peuvent être codées avec des codages historiques et obsolètes tels que ISO-8859-1 ou eucJP. Veuillez consulter l’aide des outils de conversion de texte pour les convertir en UTF-8. VoirSection 11.1, « Outils de conversion de données textuelles ».
Samba utilise Unicode pour les clients les plus
récents (Windows NT, 200x, XP) mais utilise par défaut CP850 pour des clients plus anciens (DOS and Windows
9x/Me). Cette valeur par défaut pour les anciens clients peut être modifiée
en utilisant « dos charset
» dans le fichier
« /etc/samba/smb.conf
», par exemple,
avecCP932 pour le japonais.
Il existe des traductions de nombreux messages et documents affichés par le système Debian, comme les message d'erreur, la sortie standard des programmes,les menus et la pages de manuel. La GNU gettext(1) command tool chain est utilisé comme outil de base pour la plupart des activités de traduction.
aptitude
(8) affiche sous « Tâches » →
« Localisation » une liste de paquets binaires utiles qui ajoutent
les traductions de messages aux applications et fournissent de la
documentation traduite.
Vous pouvez, par exemple, obtenir les messages traduits pour une page de
manuel en installant le paquet
manpages-<LANG>
. Pour lire la page de manuel de
<nom_programme> en italien depuis
« /usr/share/man/it/
», lancez le programme de
la manière suivante :
LANG=it_IT.UTF-8 man <nom_programme>
L’ordre de tri des caractères avec sort
(1) est affecté
par le choix de la langue des paramètres linguistiques. Les paramètres
linguistiques espagnol et anglais effectuent le tri de manière différente.
Le format de la date de ls
(1) est affecté par les
paramètres linguistiques . Le format de la date de « LANG=C ls
-l
» et « LANG=en_US.UTF-8
»
sont différents (voir Section 9.2.5, « Affichage personnalisé de la date et de l’heure »).
La ponctuation des nombres est différente selon les paramètres
linguistiques.Par exemple, avec les paramètres linguistiques anglais, Mille
un est affiché la forme « 1,000.1
» alors
qu'avec les paramètres linguistiques
« 1.000,1
». Vous pouvez voir cette différence
dans un programme de feuille de calculs.
Je décris ici les astuces de base pour configurer et gérer les systèmes, la plupart depuis la console.
screen
(1) est un outil très utile pour ceux qui accèdent
à un site distant par l’intermédiaire d'une connexion non fiable ou
intermittente car il gère les interruptions de connexion au réseau.
Tableau 9.1. Liste de programmes gérant les interruptions de connexion au réseau
paquet | popcon | taille | description |
---|---|---|---|
screen *
|
V:11, I:34 | 952 | multiplexeur de terminal avec une émulation de terminal VT100/ANSI |
screen
(1) ne permet pas uniquement de faire tourner
plusieurs processus dans une fenêtre de terminal, mais aussi à un processus de l’interpréteur de commandes distant de survivre à
d'éventuelles interruptions de la connexion. Voici un scénario
typique de screen
(1) :
screen
sur une seule console ;
screen
créées avec ^A c
(« Ctrl-A » suivi de « c ») ;
screen
à
l’autre avec ^A n
(« Ctrl-A » suivi de
« n ») ;
vous pouvez détacher la session
screen
par différentes méthodes :
^A d
(« Ctrl-A » suivi de
« d ») et en quittant manuellement la connexion distante :
^A DD
(« Ctrl-A » suivi de
« DD ») pour détacher screen
et vous
déconnecter.
screen
avec « screen
-r
» ;
screen
réattache
magiquement toutes les fenêtres screen
précédentes avec
tous les programmes qui y tournent.
Avec screen
, vous pouvez économiser des frais de
connexion pour les connexions limitées, telles que les connexion commutées
ou par paquets, parce que vous laissez un processus actif alors que vous
êtes déconnecté. Vous pouvez le ré-attacher plus tard, lorsque vous vous
reconnectez.
Dans une session screen
, toutes les entrées clavier sont
envoyées vers votre fenêtre actuelle sauf les séquences de touche de
commande. Toutes les séquences de touche de commande
screen
sont entrées par ^A
(« Ctrl-A ») suivi d'un seule touche [plus les paramètres]. Voici
celles dont il est important de se souvenir.
Tableau 9.2. Liste des raccourcis clavier de screen
affectation | signification |
---|---|
^A ?
|
afficher l’aide de screen (afficher les raccourcis clavier) |
^A c
|
créer une nouvelle fenêtre et basculer vers celle-ci |
^A n
|
aller à la fenêtre suivante |
^A p
|
aller à la fenêtre précédente |
^A 0
|
aller à la fenêtre 0 |
^A 1
|
aller à la fenêtre 1 |
^A w
|
afficher la liste des fenêtres |
^A a
|
envoyer un Ctrl-A à la fenêtre actuelle en tant qu'entrée clavier |
^A h
|
écrire dans un fichier une copie de la fenêtre actuelle |
^A H
|
commencer et finir l’enregistrement de la fenêtre en cours vers un fichier |
^A ^X
|
verrouiller le terminal (protégé par un mot de passe) |
^A d
|
détacher la session screen du terminal |
^A DD
|
détacher la session screen et se déconnecter |
Voir screen
(1) pour davantage d'informations.
De nombreux programmes enregistrent leur activité dans le répertoire
« /var/log/
».
klogd
(8)
syslogd
(8)
Voir Section 3.5.9, « Messages du système » et Section 3.5.10, « Messages du noyau ».
Voici les principaux analyseurs de journaux
(« ~Gsecurity::log-analyzer
» dans
aptitude
(8)).
Tableau 9.3. Liste des analyseurs de journaux système
paquet | popcon | taille | description |
---|---|---|---|
logwatch *
|
V:3, I:3 | 2592 | analyseur de journal avec une sortie sympathique en Perl |
fail2ban *
|
V:4, I:5 | 660 | bannir les IP qui provoque des erreurs d'authentification multiples |
analog *
|
V:1.0, I:16 | 4520 | analyseur des journaux du serveur web |
awstats *
|
V:1.8, I:3 | 5200 | analyseur des journaux du serveur web puissant ayant de nombreuses fonctionnalités |
sarg
*
|
V:1.9, I:2 | 644 | générateur de rapport d'analyse de squid |
pflogsumm *
|
V:0.3, I:0.7 | 160 | résumer les entrée de journal de postfix |
syslog-summary *
|
V:0.2, I:0.9 | 84 | résumer le contenu du fichier journal syslog |
lire
*
|
V:0.15, I:0.17 | 5304 | analyseur de journaux et générateur de rapports ayant de nombreuses fonctionnalités |
fwlogwatch *
|
V:0.10, I:0.2 | 440 | analyseur des journaux du parefeu |
squidview *
|
V:0.11, I:0.6 | 244 | surveiller et analyser les fichiers access.log de squid |
visitors *
|
V:0.09, I:0.3 | 228 | analyseur de journaux rapide pour le serveur web |
swatch *
|
V:0.06, I:0.2 | 112 | visualisateur de fichier journal avec correspondance d'expressions rationnelles, mise en évidence et « hooks » |
crm114 *
|
V:0.06, I:0.18 | 1300 | analyseur et filtre de données diverses, dont les pourriels (CRM114) |
icmpinfo *
|
V:0.04, I:0.2 | 84 | interpréter les messages ICMP |
CRM114 fournit une architecture de language pour écrire des filtres fuzzy avec la bibliothèque d'expressions rationnelles TRE. Un de ses utilisation courante est le filtrage des pourriels mais il peut aussi être utiliser pour l’analyse de journaux.
La simple utilisation de script
(1) (voir Section 1.4.9, « Enregistrer les actions de l’interpréteur de commandes ») pour enregistrer l’activité de
l’interpréteur de commandes produit un fichier avec des caractères de
contrôle. Ceci peut être évité en utilisant col
(1) comme
suit :
$ script Script started, file is typescript
faites quelque chose... et pressez Ctrl-D
pour quitter
script
.
$ col -bx <typescript >fichier_propre $ vim fichier_propre
si vous n'avez pas script
(par exemple pendant le
processus d'amorçage dans l’initramfs), vous pouvez alors utiliser ce qui
suit :
$ sh -i 2>&1 | tee typescript
Certains émulateurs de teminaux X
tels que
gnome-terminal
peuvent faire de l’enregistrement. Il
faudra peut-être augmenter la taille du tampon de lignes pour le défilement
vers l’arrière.
Vous pouvez utiliser screen
(1) avec « ^A
H
» (voir Section 9.1.2, « Raccourcis clavier de la commande screen ») pour effectuer des
enregistrement de la console.
Vous pouvez utiliser emacs
(1) avec « M-x
shell
», « M-x eshell
» ou
« M-x term
» pour effectuer l’enregistrement de
la console. Vous pourrez ensuite utiliser « C-x
C-w
» pour enregistrer le tampon dans un fichier.
Bien que des outils de visualisation de texte (« pager » tels que
more
(1) et less
(1) (voir Section 1.4.5, « Le visualisateur de fichiers ») et des outils personnalisés de mise en évidence et
de formatage (voir Section 11.1.8, « Mettre en évidence et formater des données en texte brut ») peuvent afficher
des données textuelles de manière agréable, les éditeurs généraliste (voir
Section 1.4.6, « L’éditeur de texte ») sont plus souples et paramétrables.
Pour vim
(1) et ses alias de visualisation de texte
view
(1), « :set hls
» active
la recherche avec mise en évidence.
Le format par défaut de la date et de l’heure de la commande
« "ls -l
» dépend des paramètres régionaux (voir la valeur en Section 1.2.6, « Horodatage »). La variable « $LANG
»
est d'abord visée, elle peut être surchargée par la variable
« $LC_TIME
».
Le format réel de l’affichage pour chaque paramètre linguistique dépend de
la version de la bibliothèque C standard (paquet libc6
)
utilisée. Par exemple, les différentes versions de Debian ont des valeurs
par défaut différentes.
Si vous désirez vraiment personnaliser ce format d'affichage de la date et
de l’heure plus loin que ne le fait locale, vous pouvez définir la valeur de style d'heure avec le paramètre
« --time-style
» ou par la valeur de
« $TIME_STYLE
» (voir ls
(1),
date
(1), « info coreutils 'ls
invocation'
»).
Tableau 9.4. Exemples d'affichage de la date et de l’heure pour la commande
« ls -l
» avec lenny
valeur de style pour l’heure | locale | affichage de la date et l’heure |
---|---|---|
iso
|
any |
01-19 00:15
|
long-iso
|
any |
2009-01-19 00:15
|
full-iso
|
any |
2009-01-19 00:15:16.000000000 +0900
|
locale
|
C
|
Jan 19 00:15
|
locale
|
en_US.UTF-8
|
2009-01-19 00:15
|
locale
|
es_ES.UTF-8
|
ene 19 00:15
|
+%d.%m.%y %H:%M
|
any |
19.01.09 00:15
|
+%d.%b.%y %H:%M
|
C ou en_US.UTF-8
|
19.Jan.09 00:15
|
+%d.%b.%y %H:%M
|
es_ES.UTF-8
|
19.ene.09 00:15
|
Vous pouvez éviter d'entrer des options longues sur la lignes de commande en
utilisant les alias des commandes, par exemple « alias ls='ls
--time-style=+%d.%m.%y\ %H:%M'
» (voir Section 1.5.9, « Alias de commande »).
ISO 8601 est suivie pour ces formats iso.
L’écho de l’interpréteur de commandes sur la plupart des terminaux peut être
colorisé en utilisant le code ANSI
d'échappement (voir
« /usr/share/doc/xterm/ctlseqs.txt.gz
»).
Essayez, par exemple, ce qui suit :
$ ROUGE=$(printf "\x1b[31m") $ NORMAL=$(printf "\x1b[0m") $ INVERSE=$(printf "\x1b[7m") $ echo "${ROUGE}TEXTE-ROUGE${NORMAL} ${INVERSE}TEXTE-INVERSE${NORMAL}"
Les commandes colorisées sont pratique pour examiner la sortie d'une
commande dans l’environnement interactif. J'inclus ce qui suit dans mon
fichier « ~/.bashrc
».
if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l’ alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always' alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l’ alias la='ls -A' fi
L’utilisation d'alias réserve les effets de couleurs à l’utilisation
interactives des commandes. Il a l’avantage sur l’exportation de la variable
d'environnement « export
GREP_OPTIONS='--color=auto'
» car la couleur peut être
affichée avec des programmes de visualisation (« pager » tels que
less
(1). Si vous souhaitez supprimer la couleur lors du
tubage (« piping » à destination d'autres programmes, utilisez
plutôt « --color=auto
» dans l’exemple
ci-dessus pour « ~/.bashrc
».
Vous pouvez désactiver ces alias dans l’environnement interactif en appelant
l’interpréteur de commande par « TERM=dumb
bash
».
Vous pouvez enregistrer l’activité de l’éditeur pour des répétitions complexes.
Pour Vim, de la manière suivante :
qa
» : démarre l’enregistrement des
caractères entrés dans le registre appelé
« a
».
q
» : termine l’enregistrement des
caractères entrés.
@a
» : exécute le contenu du registre
« a
».
Pour Emacs, de la manière suivante :
C-x (
» : commencer la définition d
'une macro clavier.
C-x )
» : terminer la définition d'une
macro clavier.
C-x e
» : exécuter une macro clavier.
Il existe plusieurs manières d'enregistrer l’image graphique d'une
application X, y-compris un affichage xterm
.
Tableau 9.5. Liste des outils de manipulation d'images
paquet | popcon | taille | commande |
---|---|---|---|
xbase-clients *
|
V:3, I:47 | 132 |
xwd (1)
|
gimp
*
|
V:12, I:44 | 13560 | Interface graphique du menu |
imagemagick *
|
V:13, I:35 | 268 |
import (1)
|
scrot
*
|
V:0.3, I:1.4 | 80 |
scrot (1)
|
Il existe des outils spécialisés pour enregistrer les modifications de la configuration avec l’aide du système DVCS.
Tableau 9.6. Liste de paquets pour enregistrer un historique de configuration dans VCS
paquet | popcon | taille | description |
---|---|---|---|
etckeeper *
|
V:1.0, I:1.5 | 376 | enregistrer les fichiers de configuration et leurs méta-données avec Git (par défaut), Mercurial ou Bazaar (nouveau) |
changetrack *
|
V:0.07, I:0.09 | 152 | enregistrer les fichiers de configuration avec RCS (ancien) |
Je recommande l’utilisation avec git
(1) du paquet
etckeeper
, il met l’ensemble de
« /etc
» sous le contrôle de VCS. Son guide
d'installation et un tutoriel se trouvent dans
« /usr/share/doc/etckeeper/README.gz
».
Essentiellement, l’exécution de « sudo etckeeper
init
» initialise le dépôt git pour
« /etc
» exactement comme le processus décrit
dans Section 10.9.5, « Git pour l’enregistrement de l’historique de la configuration » mais avec
quelques scripts automatiques (« hook ») permettant une
configuration plus approfondie.
Alors que vous effectuez des modifications de votre configuration, vous
pouvez aussi utiliser git
(1) normalement pour
l’enregistrer. Il enregistre parfaitement les modifications chaque fois que
vous lancez des commandes de gestion de paquet.
Vous pouvez parcourir l’historique des modifications de
« /etc
» en exécutant « sudo
GIT_DIR=/etc/.git gitk
» avec une vue claire des nouveaux
paquets installés et les changements de version des paquets.
Démarrer votre système avec un CD autonome de Linux ou avec un CD de l’installateur debian en mode secours (rescue) vous facilite la reconfiguration de l’enregistrement des données sur votre disque de démarrage. Voir aussi Section 10.3, « Les données binaires ».
Bien que fdisk
(8) ait été considéré comme un standard
pour la configuration de la partition du disque
dur, il mérite une certaine attention. « Données de partition
du disque », « table de partition » et « Étiquette de
disque » sont tous des synonymes.
La plupart des PC utilisent le principe de l’Enregistrement Maître de démarrage (MBR) (« Master Boot Record ») pour enregistrer les données de partition du disque sur le premier secteur, c'est-à-dire, le secteur 0 LBA (512 octets).
Certains PC récent avec une Extensible Firmware Interface (EFI), ce qui comprend les Macs basés sur Intel, utilisent un principe de GUID Partition Table (GPT) pour enregistrer les données de partitionnement du disque ailleurs que sur le premier secteur.
Alors que fdisk
(8) a été l’outil standard de
partitionnement de disque, parted
(8) le remplace
maintenant.
Tableau 9.7. Listes de paquets de gestion de la partition du disque
paquet | popcon | taille | GPT | description |
---|---|---|---|---|
util-linux *
|
V:91, I:99 | 2216 | Non supporté |
divers utilitaires systèmes dont fdisk (8)
etcfdisk (8)
|
parted *
|
V:1.0, I:9 | 236 | Supporté | programme GNU de redimensionnement des partitions Parted |
gparted *
|
V:3, I:31 | 4548 | Supporté |
éditeur de partitions de GNOME basé sur libparted
|
qtparted *
|
V:0.10, I:0.9 | NOT_FOUND | Supporté |
éditeur de partitions de KDE basé sur libparted
|
gptsync *
|
V:0.01, I:0.18 | 72 | Supporté | synchronise une table de partition MBR classique avec une table GPT |
kpartx *
|
V:1.0, I:1.8 | 132 | Supporté | programme pour créer des mappages de périphériques pour les partitions |
Bien que parted
(8) prétend pouvoir créer et
redimensionner aussi les systèmes de fichiers, il est plus sûr de toucher à
ces choses-là en utilisant des outils spécialisés et bien maintenus tels que
mkfs
(8) (mkfs.msdos
(8),
mkfs.ext2
(8), mkfs.ext3
(8), …) et
resize2fs
(8).
De manière à passer de GPT à MBR, il vous fait d'abord effacer les premier blocs du
disque directement (voir Section 10.3.6, « Effacer le contenu d'un fichier ») et
utiliser « parted /dev/sdx mklabel gpt
» ou
« parted /dev/sdx mklabel msdos
» afin de le
mettre en place. Vous remarquerez que « msdos
»
est utilisé ici pour MBR.
Bien que le reconfiguration de votre partition ou l’ordre d'activation des supports d'enregistrement amovibles puisse conduire à des noms de partitions différents, vous pouvez y accéder de manière homogène. Ceci vous aidera aussi si vous avez plusieurs disques et que votre BIOS ne leur donne pas toujours le même nom de périphérique.
mount
(8) avec l’option
« -U
» peut monter un périphérique en mode bloc
en utilisant l’UUID plutôt que son nom de
fichier de périphérique comme « /dev/sda3
».
/etc/fstab
» (voir
fstab
(5)) peut utiliser l’UUID.
Vous pouvez tester l’UUID d'un périphérique
spécial en mode bloc avec blkid
(8).
Les nœuds de périphériques comme les supports d'enregistrement amovibles peuvent être rendus statiques en utilisant, si besoin, des règles udev. Voir Section 3.5.11, « Le système udev ».
Pour le système de fichiers ext3, le paquet
e2fsprogs
fournit les éléments suivants :
Les commandes mkfs
(8) et fsck
(8) font
partie du paquet e2fsprogs
en tant que frontal à de
nombreux programmes dépendant du système de fichiers
(mkfs.fstype
etfsck.fstype
). Pour le
système de fichiers ext3, il y a
mkfs.ext3
(8) et fsck.ext3
(8) (ils sont
liés par un lien dur à mke2fs
(8)
ete2fsck
(8)).
Des commandes semblables sont disponibles pour chaque système de fichiers pris en charge par Linux.
Tableau 9.8. Liste des paquets de gestion des systèmes de fichiers
paquet | popcon | taille | description |
---|---|---|---|
e2fsprogs *
|
V:60, I:99 | 1924 | utilitaires pour les systèmes de fichiers ext2/ext3/ext4 |
reiserfsprogs *
|
V:2, I:8 | 1200 | utilitaire pour le système de fichiers Reiserfs |
dosfstools *
|
V:3, I:31 | 192 | utilitaire pour le système de fichiers FAT (Microsoft :MS-DOS, Windows) |
xfsprogs *
|
V:2, I:10 | 3272 | utilitaire pour le système de fichiers XFS (SGI : IRIX) |
ntfsprogs *
|
V:3, I:20 | 676 | utilitaire pour le système de fichiers NTFS (Microsoft : Windows NT, …) |
jfsutils *
|
V:0.5, I:2 | 1112 | utilitaire pour le système de fichiers JFS (IBM : AIX, OS/2) |
reiser4progs *
|
V:0.09, I:0.7 | 1264 | utilitaire pour le système de fichiers Reiser4 |
hfsprogs *
|
V:0.06, I:0.8 | 316 | utilitaire pour les systèmes de fichiers HFS et HFS Plus (Apple : Mac OS) |
btrfs-tools *
|
V:0.3, I:0.6 | 1288 | utilitaire pour le système de fichiers btrfs |
zerofree *
|
V:0.10, I:0.7 | 56 | programme pour mettre à zéro les blocs libres des systèmes de fichiers ext2/3 |
Le système de fichiers ext3 est le système de
fichiers par défaut du système Linux et il est fortement recommandé de
l’utiliser à moins que vous n'ayez des raisons spécifiques de ne pas le
faire. Après le noyau Linux 2.6.30 (Debian squeeze
), le
système de fichiers ext4 sera disponible et
devrait être le système de fichiers par défaut d'un système Linux. Le
système de fichiers par défaut pour le système Linux après ext4 devrait être btrfs.
Vous rencontrez peut-être quelques limitations avec ext4 parce qu'il est récent. Par exemple vous devrez avoir un noyau de Linux 2.6.30 si vous désirez redimensionner une partition ext4.
Certains outils permettent l’accès au système de fichiers sans prise en charge par le noyau Linux (voir Section 10.3.2, « Manipulation des fichiers sans monter le disque »).
La commande mkfs
(8) permet de créer un système de
fichiers sur un système Linux. La commande fsck
(8) permet
de vérifier l’intégrité du système de fichiers et de le réparer sur un
système Linux.
En général, il n'est pas sûr de faire tourner fsck
sur un
système de fichiers monté.
Vous trouverez les résultats de la commande fsck
(8)
lancée depuis le script de démarrage dans
« /var/log/fsck/
».
Utilisez « shutdown -F -r now
» pour forcer
l’exécution sûre de la commande fsck
(8) sur tous les
systèmes de fichiers, y compris le système de fichiers racine lors du
redémarrage. Voir la page de manuel shutdown
(8) pour
davantage d'informations.
Les performances et les caractéristiques d'un système de fichiers peuvent
être optimisées à l’aide des options de montage utilisées (voir
fstab
(5) et mount
(8)). Les principales
options sont les suivantes :
defaults
» implique les options par
défaut :
« rw,suid,dev,exec,auto,nouser,async
»
(général)
noatime
» ou
« relatime
» sont très efficace pour accélérer
la vitesse de lecture (général).
user
» permet à un utilisateur
normal de monter le système de fichiers. Cette option implique la
combinaison d'option « noexec,nosuid,nodev
»
(général, utilisée pour les CD et les disquettes)
noexec,nodev,nosuid
» est utilisée pour
améliorer la sécurité (général).
noauto
» limite le montage
uniquement à une opération explicite (général).
data=journal
» pour ext3fs peut
améliorer l’intégrité des données lors d'une panne de courant, elle
s'accompagne d'une légère baisse de la vitesse d'écriture.
Vous devez donner au noyau le paramètre de démarrage (voir Section 3.3, « Étage 2 : le chargeur initial »), par exemple
« rootflags=data=journal
» afin de mettre en
œuvre pour le système de fichiers racine un mode de journalisation autre que
celui par défaut. Pour lenny
, le mode de journalisation
par défaut est « rootflags=data=ordered
». Pour
squeeze
, il s'agit de
« rootflags=data=writeback
».
Les caractéristiques du système de fichiers peuvent être optimisées par
l’intermédiaire de son superbloc en utilisant la commande
tune2fs
(8).
sudo tune2fs -l /dev/hda1
»
affiche le contenu du superbloc du système de fichiers situé sur
« /dev/hda1
».
sudo tune2fs -c 50 /dev/hda1
»
modifie la fréquence des vérifications du système de fichiers (exécution de
fsck
lors du démarrage) à 50 démarrages sur
« /dev/hda1
».
sudo tune2fs -j
/dev/hda1
» ajoute la possibilité de journalisation au
système de fichiers, c'est-à-dire la conversion de système de fichiers de
ext2 vers ext3 sur
« /dev/hda1
». (Effectuez ceci sur un système
de fichier non monté).
sudo tune2fs -O extents,uninit_bg,dir_index
/dev/hda1 && fsck -pf /dev/hda1
» le convertit de
ext3 vers ext4 sur
« /dev/hda1
». (À effectuer sur un système de
fichiers non monté).
La conversion du système de fichier du périphérique de démarrage vers le système de fichiers ext4 doit être évitée jusqu'à ce que le système d'amorçage GRUB prennent correctement en charge le système de fichiers ext4 et que la version de noyau installée soit plus récente que 2.6.30.
Veuillez vérifier votre matériel et lire la page de manuel
hdparam
(8) avant de jouer avec la configuration de vos
disques durs parce que ce peut être assez dangereux pour l’intégrité des
données.
Vous pouvez tester la vitesse de lecture d'un disque dur, par exemple
« /dev/hda
» par « hdparm -tT
/dev/hda
». Vous pouvez accélérer certains disques (E)IDE
avec « hdparm -q -c3 -d1 -u1 -m16 /dev/hda
» en
activant la prise en charge des E/S 32 bits (« (E)IDE 32-bit I/O
support »), en positionnant l’indicateur d'utilisation de dma
« using_dma flag », en positionnant l’indicateur de démasquage des
interruptions (« interrupt-unmask flag ») et en positionnant les
E/S multiples sur 15 secteurs (« multiple 16 sector I/O »)
(dangereux !).
Vous pouvez tester la fonctionnalité de cache d'un disque dur, par exemple
« /dev/sda
» par « hdparm -W
/dev/sda
». Vous pouvez désactiver le cache en écriture avec
« hdparm -W 0 /dev/sda
».
Vous pouvez réussir à lire un CD-ROM vraiment mal pressé sur un lecteur de
CD-ROM moderne rapide en le ralentissant avec « setcd -x
2
».
Vous pouvez surveiller et enregistrer les disques durs conformes à SMART à l’aide du démon smartd
(8).
smartmontools
.
Identifiez vos disques durs en en affichant la liste avec
df
(1).
/dev/hda
».
Contrôlez la sortie de « smartctl -a /dev/hda
»
pour voir si la fonctionnalité SMART est
effectivement activée.
smartctl -s on -a
/dev/hda
».
Autorisez le fonctionnement du démon smartd
(8) par
l’action suivante :
start_smartd=yes
» dans le
fichier « /etc/default/smartmontools
» ;
smartd
(8) avec « sudo
/etc/init.d/smartmontools restart
».
Le démon smartd
(8) peut être personnalisé par
l’intermédiaire du fichier /etc/smartd.conf
y compris la
manière d'être informé des avertissements.
Les partitions créées sur le gestionnaire de volumes logiques (LVM) (« Logical Volume Manager ») (fonctionnalité de Linux) au moment de l’installation peuvent être facilement redimensionnées en y concaténant des extensions (« extents ») ou en en tronquant les extensions sur plusieurs périphériques de stockage sans reconfiguration majeure du système.
Le déploiement du système LVM actuel peut dégrader la robustesse aux corruptions du système de fichiers offert par les systèmes de fichiers journalisés tels que ext3fs à moins que les performances du système ne soient sacrifiées en désactivant le cache d'écriture des disques durs.
Si vous avez une partition vide (par exemple
« /dev/sdx
»), vous pouvez la formater avec
mkfs.ext3
(1) et la monter
(« mount
(8) ») sur un répertoire où vous avez
besoin de davantage d'espace (vous devrez copier les données d'origine).
$ sudo mv répertoire-travail ancien-répertoire $ sudo mkfs.ext3 /dev/sdx $ sudo mount -t ext3 /dev/sdx répertoire-travail $ sudo cp -a ancien-répertoire/* répertoire-travail $ sudo rm -rf ancien-répertoire
Vous pouvez aussi monter un fichier image de disque vide (voir Section 10.2.5, « Réaliser le fichier image d'un disque vide ») en tant que périphérique de rebouclage (voir Section 10.2.3, « Monter le fichier image dur disque »). L’utilisation réelle du disque croît avec les données réellement enregistrées.
Si vous avez un répertoire vide (par exemple,
« /path/to/emp-dir
») dans une autre partition
avec de l’espace disponible, vous pouvez créer un lien symbolique vers ce
répertoire avec ln
(8).
$ sudo mv répertoire-travail ancien-répertoire $ sudo mkdir -p /chemin/vers/répertoire-temporaire $ sudo ln -sf /chemin/vers/répertoire-temporaire répertoire-travail $ sudo cp -a ancien-répertoire/* répertoire-travail $ sudo rm -rf ancien-répertoire
Certains logiciels peuvent ne pas bien fonctionner avec des « liens symboliques vers un répertoire ».
Si vous avez de l’espace disponible dans une autre partition (par exemple
« /chemin/vers/
»), vous pouvez y créer un
répertoire et empiler cela vers un répertoire où vous avez besoin de place
avec aufs.
$ sudo mv répertoire-travail ancien-répertoire $ sudo mkdir répertoire-travail $ sudo mkdir -p /chemin/vers/répertoire/temporaire $ sudo mount -t aufs -o br:/chemin/vers/répertoire/temporaire:ancien-répertoire none répertoire-travail
L’utilisation de aufs pour le stockage de données à long terme n'est pas une bonne idée car il est en cours de développement et les modifications de sa conceptions peuvent poser des problèmes.
Avec un accès physique à votre PC, n'importe qui peut facilement obtenir les privilèges de l’administrateur et accéder à tous les fichiers de votre PC (voir Section 4.7.4, « sécuriser le mot de passe de l’administrateur »). Ceci signifie qu'un système mot de passe de connexion ne permet pas de sécuriser vos données personnelles ou sensibles en cas de vol de votre PC. Vous devez déployer des technologies de chiffrements des données pour assurer cette protection. Bien que GNU privacy guard (voir Section 10.4, « Infrastructure de sécurité des données ») puisse chiffrer des fichiers, il demande quelques efforts de la part de l’utilisateur.
dm-crypt et eCryptfs facilitent de manière native le chiffrement automatique des données par l’intermédiaire de modules du noyau de Linux avec un minimum d'efforts de la part de l’utilisateur.
Tableau 9.9. Liste d'utilitaires de chiffrement des données
paquet | popcon | taille | description |
---|---|---|---|
cryptsetup *
|
V:3, I:5 | 1172 | utilitaires pour chiffrer un périphérique en mode bloc (dm-crypt / LUKS) |
cryptmount *
|
V:0.2, I:0.5 | 360 | utilitaires pour chiffrer un périphérique en mode bloc (dm-crypt / LUKS), l’accent étant mis sur le montage et le démontage par un utilisateur normal |
ecryptfs-utils *
|
V:0.2, I:0.3 | 416 | utilitaires pour systèmes de fichiers empilés (« stackable » chiffrés (eCryptfs) |
Dm-crypt est un système de fichiers chiffré qui utilise device-mapper. Device-mapper effectue le « mapping » d'un périphérique en mode bloc sur un autre.
eCryptfs est un autre système de fichiers chiffré utilisant un système de fichier empilables. Un système de fichiers empilables s'empile lui-même par dessus un répertoire existant d'un système de fichiers monté.
Le chiffrement des données a un coût en matière de temps CPU, etc. Veuillez comparer ses avantages à son coût.
Le système Debian dans son ensemble peut être installé sur un disque chiffré par l’installateur debian (lenny ou plus récent) en utilisant dm-crypt/LUKS et initramfs.
Voir Section 10.4, « Infrastructure de sécurité des données » pour un utilitaire de chiffrement de l’espace utilisateur : GNU Privacy Guard.
Vous pouvez chiffrer le contenu des périphériques de masse amovible, par
exemple, une clé g. USB memory stick sur
« /dev/sdx
» en utilisant dm-crypt/LUKS. Il suffit
de le formater de la manière suivantes :
# badblocks -c 10240 -s -w -t random -v /dev/sdx # shred -v -n 1 /dev/sdx # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup luksOpen /dev/sdx1 sdx1 ... # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2008-10-04 18:44 control brw-rw---- 1 root disk 254, 0 2008-10-04 23:55 sdx1 # mkfs.vfat /dev/mapper/sdx1 ... # cryptsetup luksClose sdx1
Il peut alors être monté simplement comme un périphérique normal sur
« /media/<disk_label>
» à l’exception de
la demande de mot de passe (voir Section 10.1.10, « Périphériques d'enregistrement amovibles ») sous un environnement de bureau
moderne tel que GNOME en utilisant gnome-mount
(1). La
différence est que toutes les données qui y seront écrites seront
chiffrées. Vous pouvez aussi formater le support dans un format différent,
par exemple ext3 avec « mkfs.ext3 /dev/sdx1
».
Si vous êtes vraiment paranoïaque en ce qui concerne la sécurité des données, vous pourrez réécrire par dessus plusieurs fois dans l’exemple ci-dessus. Cette opération est cependant très exigeante en temps.
Supposons que votre « /etc/fstab
» d'origine
comporte ce qui suit :
/dev/sda7 swap sw 0 0
Vous pouvez chiffrer la partition d'échange en utilisant dm-crypt par ce qui suit :
# aptitude install cryptsetup # swapoff -a # echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab # perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab # /etc/init.d/cryptdisks restart ... # swapon -a
Vous pouvez chiffrer automatiquement les fichiers se trouvant sous
« ~/Private/
» en utilisant eCryptfs et le paquet
ecryptfs-utils
.
ecryptfs-setup-private
(1) et configurez
« ~/Private/
» en suivant les invites.
~/Private/
» en lançant
ecryptfs-mount-private
(1).
Déplacez les fichiers de données sensibles vers
« ~/Private/
» et faites les liens symboliques
à la demande.
~/.fetchmailrc
»,
« ~/.ssh/identity
»,
« ~/.ssh/id_rsa
»,
« »~/.ssh/id_dsa
» et d'autres fichiers ayant
« go-rwx
»
Déplacez les répertoires ayant des données sensibles vers un sous-répertoire
de « ~/Private/
» et faites les liens
symboliques nécessaires.
~/.gnupg
» et d'autres
répertoires avec « go-rwx
»
~/Desktop/Private/
» vers
« ~/Private/
» pour faciliter les opérations du
bureau.
~/Private/
» en lançant
ecryptfs-umount-private
(1).
~/Private/
» à l’aide de
« ecryptfs-mount-private
» lorsque vous avez
besoin de vos données chiffrées.
Comme eCryptfs ne chiffre que sélectivement
les fichiers sensibles, son coût en matière de ressources système est bien
moindre que l’utilisation de dm-crypt sur
l’ensemble du système de fichiers racine ou sur le périphérique
« /home
». Il ne demande aucun effort
particulier sur l’allocation de l’espace disque mais ne peut conserver la
confidentialité de toutes les méta-données du système de fichiers.
Si vous utilisez votre mot de passe de connexion pour envelopper les clés de chiffrement, vous pouvez automatiser le montage de eCryptfs par PAM (Pluggable Authentication Modules).
Insérez la ligne suivante juste avant
« pam_permit.so
» dans
« /etc/pam.d/common-auth
» :
auth required pam_ecryptfs.so unwrap
Insérez la ligne suivante en tant que toute dernière ligne de
« /etc/pam.d/common-session
:
session optional pam_ecryptfs.so unwrap
Insérez la ligne suivante comme première ligne active de
« /etc/pam.d/common-password
:
password required pam_ecryptfs.so
C'est assez pratique.
Les erreurs de configuration de PAM peuvent vous interdire l’accès à votre propre système. Voir Chapitre 4, Authentification.
Si vous utilisez votre mot de passe de connexion pour encapsuler les clés de chiffrement, vos données chiffrées sont aussi sûre que l’est votre mot de passe de connexion (voir Section 4.3, « Mot de passe de qualité »). À moins que vous ne preniez le soin de définir un mot de passe fort, vos données encourent un risque lorsque quelqu'un lance un logiciel de casse de mots de passe après avoir volé votre ordinateur (voir Section 4.7.4, « sécuriser le mot de passe de l’administrateur »).
L’activité des programmes peut être surveillée et contrôlée à l’aide d'outils spécialisés.
Tableau 9.10. Liste des outils de surveillance et de contrôle de l’activité des programmes
paquet | popcon | taille | description |
---|---|---|---|
coreutils *
|
V:92, I:99 | 13828 |
nice (1) : lancer un programme avec une priorité
d'ordonnancement modifiée
|
bsdutils *
|
V:77, I:99 | 196 |
renice (1) : modifier la priorité d'ordonnancement
d'un programme en cours d'exécution
|
procps *
|
V:86, I:99 | 772 |
utilitaires du système de fichiers
« /proc » : ps (1),
top (1), kill (1),
watch (1), …
|
psmisc *
|
V:47, I:88 | 716 |
utilitaires du système de fichiers
« /proc » : killall (1),
fuser (1), peekfd (1),
pstree (1)
|
time
*
|
V:6, I:84 | 152 |
time (1) : lancer un programme qui indique
l’utilisation des ressources du système en fonction du temps
|
sysstat *
|
V:4, I:9 | 872 |
sar (1), iostat (1),
mpstat (1), … : outils de mesure des performances du
système pour Linux
|
isag
*
|
V:0.07, I:0.4 | 152 | Générateur interactif de graphes de l’activité système pour sysstat |
lsof
*
|
V:16, I:90 | 444 |
lsof (8) : afficher la liste des fichiers ouverts par
un processus en cours d'utilisation en utilisant l’option
« -p
|
strace *
|
V:5, I:39 | 396 |
strace (1) : tracer les appels système et les signaux
|
ltrace *
|
V:0.3, I:2 | 188 |
ltrace (1) : tracer les appels de bibliothèque
|
xtrace *
|
V:0.02, I:0.18 | 372 |
xtrace (1) : tracer la communication entre un client
X11 et le serveur
|
powertop *
|
V:0.7, I:12 | 524 |
powertop (1) : information concernant la puissance
électrique utilisée sur les portables basés sur Intel
|
cron
*
|
V:91, I:99 | 240 |
faire tourner des processus en arrière plan selon un calendrier depuis le
démon cron (8)
|
anacron *
|
V:41, I:44 | 120 | ordonnanceur de type cron pour les systèmes qui ne tournent pas 24 heures sur 24 |
at
*
|
V:50, I:83 | 220 |
at (1) ou batch (1) : lancer un
travail à une heure déterminée ou en dessous d'un niveau de charge donné
|
Le paquet procps
fournit des fonctions très basiques de
surveillance, de contrôle et de lancement des activités du programme. Vous
devriez toutes les apprendre.
Afficher la durée du processus indiqué dans la commande.
# time une_commande >/dev/null real 0m0.035s # temps horloge (temps réel écoulé) user 0m0.000s # temps en mode utilisateur sys 0m0.020s # temps en mode noyau
Une valeur de politesse (« nice » est utilisée pour contrôler la priorité d'ordonnancement du processus.
Tableau 9.11. Liste des valeurs de politesse pour la priorité d'ordonnancement
valeur de politesse | priorité d'ordonnancement |
---|---|
19 | la plus base priorité d'un processus (poli) |
0 | très haute priorité de processus pour un utilisateur |
-20 | très haute priorité d'un processus pour root (non poli) |
# nice -19 top # très poli # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # très rapide
Parfois, une valeur extrême de politesse (« nice ») fait plus de mal que de bien au système. Utilisez cette commande avec précautions.
La commande ps
(1) sous Debian comporte à la fois les
fonctionnalités de BSD et de SystemV, elle aide à identifier l’activité des
processus de manière statique.
Tableau 9.12. Liste des styles de la commande ps
style | commande typique | fonction |
---|---|---|
BSD |
ps aux
|
afficher %CPU %MEM |
System V |
ps -efH
|
afficher le PPID |
Les processus fils zombies (« defunct ») peuvent être tués par
l’identifiant de processus de leur paren identifié dans la champ
« PPID
»
La commande pstree
(1) affiche une arborescence des
processus.
top
(1) sous Debian a de riches fonctionnalités et aide à
identifier de manière dynamique quels sont les processus qui ont une
activité curieuse.
Tableau 9.13. Liste des commandes pour top
touche de commande | description de la réponse |
---|---|
h ou ?
|
afficher l’aide |
f
|
définir / réinitialiser le champ |
o
|
réordonner les champ affichés |
F
|
définir le champ-clé pour le tri |
k
|
tuer un processus |
r
|
modifier la politesse d'un processus |
q
|
quitter la commande top .
|
Vous pouvez afficher la liste des fichiers ouverts par un processus avec un identifiant de processus (PID), par exemple de 1 en faisant ce qui suit :
$ sudo lsof -p 1
PID=1 est habituellement le programme init
.
Vous pouvez tracer l’activité d'un programme avec
strace
(1), ltrace
(1) ou
xtrace
(1) pour les appels système, les appels
bibliothèque ou la communication entre le serveur et le client X11.
Vous pouvez tracer les appels système de la commande ls
de la manière suivante :
$ sudo strace ls
Vous pouvez aussi identifier les processus qui utilisent des fichiers par
fuser
(1), par exemple pour
« /var/log/mail.log
» en faisant ce qui
suit :
$ sudo fuser -v /var/log/mail.log USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... syslogd
Vous voyez que le fichier « /var/log/mail.log
»
est ouvert en écriture par la commande syslogd
(8).
Vous pouvez aussi identifier le processus qui utilisent des sockets par
fuser
(1), par exemple, pour
« smtp/tcp
» par ce qui suit :
$ sudo fuser -v smtp/tcp USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4
Vous savez maintenant que exim4
(8) tourne sur votre
système pour gérer les connexions TCP du port
SMTP (25).
watch
(1) execute un programme de manière répétitive avec
un intervalle constant tout en affichant sa sortie en plein écran.
$ watch w
Ceci permet d'afficher, mis à jour toutes les deux secondes, qui est connecté au système.
Il existe plusieurs manières de répéter une boucle de commande entre des
fichiers correspondant à une condition, par exemple, correspondant au motif
« glob » « *.ext
».
for x in *.ext; do if [ -f "$x"]; then commande "$x" ; fi; done
find
(1) et de
xargs
(1) :
find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 commande
find
(1) avec l’option
« -exec
» avec une commande :
find . -type f -maxdepth 1 -name '*.ext' -exec commande '{}' \;
find
(1) avec l’option
« -exec
» avec un court script de
l’interpréteur :
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "commande '{}' && echo 'succès'" \;
Les exemple ci-dessus ont été écrits afin d'assurer une prise en compte
correcte de noms de fichiers étranges tels que ceux qui comportent des
espaces. Voir Section 10.1.5, « Idiomes pour la sélection de fichiers » pour une
utilisation avancée de find
(1).
Vous pouvez définir le lancement d'un processus depuis l’interface utilisateur graphique (GUI).
Sous l’environnement de bureau GNOME, un programme peut être lancé avec les paramètres corrects par un double-clic sur l’icône de lancement, par glisser-déposer de l’icône d'un fichier sur l’icône du lanceur ou par le menu « Ouvrir avec... » que l’on obtient par un clic droit sur l’icône d'un fichier. KDE peut aussi faire la même chose.
Voici un exemple sous GNOME pour créer une icône de lanceur pour
mc
(1) lancé dans gnome-terminal
(1).
Créez un programme exécutable « mc-term
» en
effectuant ce qui suit :
# cat >/usr/local/bin/mc-term <<EOF #!/bin/sh gnome-terminal -e "mc \$1" EOF # chmod 755 /usr/local/bin/mc-term
Créez un lanceur sur le bureau comme suit :
Créer un
lanceur…
» ;
Application
» ;
mc
» ;
mc-term
%f
» ;
Créez une association « ouvrir avec » comme suit :
Ouvrir
avec une autre application …
» :
mc-term %f
».
Le lanceur est un fichier de « ~/Desktop
»
ayant l’extension « .desktop
».
Certains programmes lancent automatiquement d'autres programmes. Voici des points-clés pour la personnalisation de ce processus :
Menu de configuration des applications :
mc
(1) :
« /etc/mc/mc.ext
»
$BROWSER
»,
« $EDITOR
»,
« $VISUAL
» et
« $PAGER
» (voir eviron
(7))
update-alternatives
(8) pour des programmes
tels que « editor
»,
« view
»,
« x-www-browser
»,
« gnome-www-browser
» et
« www-browser
» (voir Section 1.4.7, « Définir un éditeur de texte par défaut »)
~/.mailcap
» et
« /etc/mailcap
» qui associe un type MIME avec un programme (voir
mailcap
(5))
~/.mime.types
» et
« /etc/mime.types
» qui associe l’extension du
nom de fichier avec un type MIME (voir
run-mailcap
(1))
update-mime
(8) met à jour le fichier
≤ /etc/mailcap
» en utilisant le fichier
« /etc/mailcap.order
» (voir
mailcap.order
(5)).
Le paquet debianutils
fournit
sensible-browser
(1),
sensible-editor
(1), et
sensible-pager
(1) qui prennent des décisions raisonnables
concernant l’éditeur, le visualisateur, le navigateur à appeler
respectivement. Je vous recommande de lire ces scripts de l’interpréteur de
commandes.
De façon à faire tourner une application de console telle que
mutt
sous X en tant qu'application préférée, vous devriez
créer une application X comme suit et définir
« /usr/local/bin/mutt-term
» comme étant votre
application préférée à lancer comme il est décrit :
# cat /usr/local/bin/mutt-term <<EOF #!/bin/sh gnome-terminal -e "mutt \$@" EOF chmod 755 /usr/local/bin/mutt-term
Utilisez kill
(1) pour tuer (ou envoyer un signal à) un
processus avec son identifiant de processus.
Utilisez killall
(1) ou pkill
(1) pour
faire la même chose avec le nom de commande du processus et d'autres
attributs.
Tableau 9.14. Liste des signaux couramment utilisés avec la commande kill
valeur du signal | nom du signal | fonction |
---|---|---|
1 | HUP | redémarrer le démon |
15 | TERM | tuer normalement |
9 | KILL | tuer « dur » |
Exécutez de la manière suivante la commande at
(1) pour
planifier un travail qui s'exécute une fois
$ echo 'command -args'| at 3:40 monday
Utilisez cron
(8) pour planifier des tâches qui
s'exécutent régulièrement. Voir crontab
(1) et
crontab
(5).
Si vous êtes membre du groupe crontab
, vous pouvez
planifier le lancement des processus en tant qu'utilisateur normal, par
exemple toto
en créant un fichier
crontab
(5) file comme
« /var/spool/cron/crontabs/toto
» avec la
commande « crontab -e
».
Voici un exemple de fichier crontab
(5).
# utilise /bin/sh pour exécuter les commandes, quoi que dise /etc/passwd SHELL=/bin/sh # envoie un courrier électronique à Paul contenant tous les résultats, # quelle que soit la personne à qui appartienne la crontab MAILTO=paul # Minute Heure JourDuMois Mois JourDeLaSemaine commande # est exécuté à 00:05 chaque jour 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # est exécuté à 14:15 le 1e de chaque mois -- le résultat est envoyé à Paul # par courrier électronique 15 14 1 * * $HOME/bin/monthly # est exécuté à 22:00 chaque jour de la semaine(1-5), ennuie Joe. # % pour une nouvelle ligne, dernier % pour cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every sunday" # est exécuté à 03:40 le premier lundi de chaque mois 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
Sur un système qui ne tourne pas en permanence, installez le paquet
anacron
afin de planifier les tâches périodiques à des
intervalles particulier dès que le temps de fonctionnement
« uptime » de la machine le permet. Voir
anacron
(8) et anacrontab
(5).
Vous pouvez lancer périodiquement les scripts de maintenance planifiée du
système,depuis le compte de l’administrateur en les plaçant dans
« /etc/cron.hourly/
»,
« /etc/cron.daily/
»,
« /etc/cron.weekly/
» ou
« /etc/cron.monthly/
». L"échéancier
d'exécution de ces scripts peut être personnalisé dans
« /etc/crontab
» et
« /etc/anacrontab
».
Une assurance contre le mauvais fonctionnement du système est fournie par l’option de compilation du noyau « Magic SysRq key » (touche SAK) qui est maintenant une valeur par défaut pour les noyaux de Debian. Presser Alt-SysRq (NDT : Alt-Sys ou Alt-Impr écran sur un clavier français) suivi par une des touches suivantes permet de reprendre par magie le contrôle du système.
Tableau 9.15. Listes des touches de commande SAK (« Secure attention keys »)
touche suivant Alt-Sys | description de l’action |
---|---|
r
|
restaurer le clavier depuis le mode raw (brut)à après un plantage de X |
0
|
changer le niveau de journalisation de la console à 0 afin de réduire les messages d'erreurs |
k
|
kill (tuer) tous les processus sur la console virtuelle actuelle |
e
|
envoyer un SIGTERM à tous les processus,
sauf init (8)
|
i
|
envoyer un SIGKILL à tous les processus,
sauf init (8)
|
s
|
synchroniser tous les systèmes de fichiers montés |
u
|
remonter en lecture seule tous les systèmes de fichiers montés (umount) |
b
|
reboot (redémarrer) le système sans effectuer de synchronisation ni de démontage |
La combinaison de « Alt-Sys s », « Alt-Sys u » et « Alt-Sys r » permet de se tirer de situation vraiment désastreuses.
Voir
« /usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz
».
la fonctionnalité Alt-SysRq peut être considérée comme un risque de sécurité
permettant à des utilisateurs d'accéder à des fonctions ayant le privilège
de l’administrateur. Placer « echo 0
>/proc/sys/kernel/sysrq
» dans
« /etc/rc.local
» ou
« kernel.sysrq = 0
» dans
« /etc/sysctl.conf
» désactive la
fonctionnalité Alt-SysRq.
Depuis un terminal SSH, etc., vous pouvez utiliser la fonctionnalité
Alt-SysRq en écrivant ver
« /proc/sysrq-trigger
». Par exemple;,
« echo s > /proc/sysrq-trigger; echo u >
/proc/sysrq-trigger
» depuis l’invite de l’interpréteur de
commandes de l’administrateur syncs
(synchronise) et umount (démonte) tous
les systèmes de fichiers montés.
Vous pouvez rechercher qui se trouve sur le système par les commandes suivantes :
who
(1) affiche qui est connecté.
w
(1) affiche qui est connecté et ce qu'il font.
last
(1) affiche une liste des derniers utilisateurs
connectés.
lastb
(1) affiche une liste des utilisateurs s'étant mal
connectés.
« /var/run/utmp
»,
« /var/log/wtmp
» et
« /var/run/utmp
» maintiennent ces information
de l’utilisateur. Voir login
(1) et
utmp
(5).
Vous pouvez envoyer un message à toutes les personnes connectée au système
avec wall
(1) en faisant ce qui suit :
$ echo "Nous allons arrêter le système dans une heure" | wall
Pour les périphériques similaires à PCI (AGP, PCI-Express,
CardBus, ExpressCard, etc.), lspci
(8)
(probablement avec l’option « -nn
») est un bon
point de départ pour l’identification du matériel
Vous pouvez aussi identifier le matériel en lisant le contenue de
« /proc/bus/pci/devices
» ou en parcourant
l’arborescence de répertoires se trouvant sous
« /sys/bus/pci
» (voir Section 1.2.12, « procfs et sysfs »).
Tableau 9.16. Listes des outils d'identification du matériel
paquet | popcon | taille | description |
---|---|---|---|
pciutils *
|
V:15, I:92 | 908 |
utilitaires PCI de Linux : lspci (8)
|
usbutils *
|
V:38, I:97 | 604 |
utilitaires USB de Linux : lsusb (8)
|
pcmciautils *
|
V:0.8, I:13 | 100 |
utilitaires PCMCIA pour Linux 2.6 : pccardctl (8)
|
scsitools *
|
V:0.18, I:1.1 | 484 |
collection d'outils pour la gestion des périphériques SCSI :
lsscsi (8)
|
pnputils *
|
V:0.01, I:0.16 | 108 |
Utilitaires BIOS Plug and Play : lspnp (8)
|
procinfo *
|
V:0.3, I:3 | 164 |
informations sur le systèmes obtenue dans
« /proc » :lsdev (8)
|
lshw
*
|
V:1.2, I:7 | 604 |
informations concernant la configuration matérielle :
lshw (1)
|
discover *
|
V:2, I:15 | 120 |
système d'identification du matériel : discover (8)
|
Bien que la plupart de la configuration du matériel puisse être gérée au moyen des outils graphiques qui accompagnent les environnement de bureau graphiques modernes comme GNOME et KDE, c'est une bonne idée de connaître certaines méthodes de base permettant de le configurer.
Tableau 9.17. Liste des outils de configuration du matériel
paquet | popcon | taille | description |
---|---|---|---|
hal
*
|
V:37, I:49 | 1668 |
Couche d'abstraction matériel (HAL) : lshal (1)
|
console-tools *
|
V:47, I:84 | 956 | Police de la console Linux et utilitaires de table de caractères |
x11-xserver-utils *
|
V:34, I:51 | 544 |
utilitaires pour le serveur X server : xset (1),
xmodmap (1)
|
acpid
*
|
V:51, I:91 | 208 | démon servant à gérer les événements délivrés par l’Interface avancée de gestion de la configuration et de l’alimentation ACPI (« Advanced Configuration and Power Interface ») |
acpi
*
|
V:4, I:35 | 92 | utilitaire d'affichage des informations des périphériques ACPI |
apmd
*
|
V:1.2, I:11 | 252 | démon de gestion es événements délivrés par la gestion avancée de l’alimentation APM (« Advanced Power Management ») |
noflushd *
|
V:0.04, I:0.09 | 248 | démon permettant d'arrêter la rotation des disques durs inactifs |
sleepd *
|
V:0.07, I:0.09 | 148 | démon permettant de mettre un ordinateur portable en veille lorsqu'il est inactif |
hdparm *
|
V:11, I:38 | 304 | optimisation de l’accès aux disques durs (voir Section 9.3.7, « Optimisation du disque dur ») |
smartmontools *
|
V:7, I:23 | 1076 | contrôler et surveiller les systèmes de stockage en utilisant S.M.A.R.T. |
setserial *
|
V:1.5, I:3 | 180 | collection d'outils pour gérer les ports série |
memtest86+ *
|
V:0.5, I:5 | 652 | collection d'outils pour gérer la mémoire physique |
scsitools *
|
V:0.18, I:1.1 | 484 | collection d'outils pour gérer le matériel SCSI |
tpconfig *
|
V:0.3, I:0.5 | 220 | utilitaire pour configurer les pavés tactiles (touchpad) |
setcd
*
|
V:0.06, I:0.3 | 28 | optimisation de l’accès au lecteur de CD |
big-cursor *
|
I:0.16 | 68 | curseurs de souris plus grands pour X |
Ici, ACPI est une infrastructure de gestion de l’alimentation électrique du système plus récente qu'APM.
La gestion de la fréquence d'horloge des processeurs modernes est gérée par
des modules du noyaux tels que acpi_cpufreq
.
Ce qui suit permet de définir l’heure du système et du matériel à MM/DD hh:mm, CCYY :
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Sur un système Debian l’heure est normalement affichée en heure locale mais l’heure système et matérielle utilisent habituellement l’heure TU(GMT).
Si l’heure matérielle (BIOS) est réglée en TU, modifiez le réglage pour
« UTC=yes
» dans le fichier
« /etc/default/rcS
».
Si vous désirez ajuster l’heure de votre système par l’intermédiaire du
réseau, vous pouvez envisager l’utilisation du service NTP avec un paquet tel que ntp
,
ntpdate
ou chrony
.
Voir ce qui suit :
ntp-doc
ntptrace
(8) du paquet ntp
peut tracer
une chaîne de serveurs NTP jusqu'à la source primaire.
Il y a plusieurs composants pour configurer la console en mode caractères et
les fonctionnalités du système ncurses
(3).
/etc/terminfo/*/*
»
(terminfo
(5))
$TERM
»(term
(7))
setterm
(1), stty
(1),
tic
(1) et toe
(1)
Si l’entrée terminfo
pour xterm
ne
fonctionne pas avec un xterm
non Debian, modifiez votre
type de terminal dans « $TERM
» de
« xterm
» pour une version version limitée en
fonctionnalités comme « xterm-r6
» lorsque
vous-vous connectez à distance à un système Debian. Voir
« /usr/share/doc/libncurses5/FAQ
» pour
davantage d'informations. « dumb
» est le plus
petit dénominateur commun pour « $TERM
».
Les pilotes de périphériques des cartes sons pour les versions actuelles de Linux 2.6 sont fournies par Advanced Linux Sound Architecture (ALSA). ALSA fournit un mode d'émulation du système Open Sound System (OSS) précédent pour des raisons de compatibilité.
Lancez « dpkg-reconfigure linux-sound-base
»
pour indiquer au système de son d'utiliser ALSA en mettant en liste noire
les modules du noyau. À moins que vous n'ayez un matériel très récent pour
le son, l’infrastructure udev devrait pouvoir configurer votre système de
son.
Utilisez « cat /dev/urandom > /dev/audio
»
ou speaker-test
(1) pour tester les hauts-parleurs. (^C
pour arrêter)
Si vous n'arrivez pas à obtenir de sons, il est possible que votre
haut-parleur soit connecté à une sortie muette (« muted »). Les
système de son modernes ont de nombreuses
sorties. alsamixer
(1) du paquet
alsa-utils
est pratique pour configurer les paramètres de
volume et d'état muet..
Les logiciels applicatifs peuvent être configurés pour non seulement pour accéder au périphériques sonores directement mais aussi pour y accéder par l’intermédiaire d'un système de serveur de son.
Tableau 9.18. Liste des paquets son
paquet | popcon | taille | description |
---|---|---|---|
linux-sound-base *
|
V:39, I:49 | 132 | paquet de base pour les systèmes de son ALSA et OSS |
alsa-base *
|
V:2, I:48 | 500 | Fichiers de configuration du pilote ALSA |
alsa-utils *
|
V:34, I:48 | 1984 | utilitaires de configuration et d'utilisation d'ALSA |
oss-compat *
|
V:28, I:33 | 60 |
Compatibilité OSS sous ALSA évitant les erreurs « /dev/dsp not
found »
|
esound-common *
|
V:19, I:56 | 232 | Enlightened Sound Daemon (ESD) fichiers communs (Enlightenment et GNOME) |
esound *
|
V:0.6, I:6 | 80 | Enlightened Sound Daemon (ESD) serveur (Enlightenment et GNOME) |
esound-clients *
|
V:7, I:20 | 188 | Enlightened Sound Daemon (ESD) client (Enlightenment et GNOME) |
libesd0 *
|
V:32, I:55 | 84 | Enlightened Sound Daemon (ESD) bibliothèque (Enlightenment et GNOME) |
arts
*
|
I:7 | 40 | Serveur aRts (KDE) |
libarts1c2a *
|
V:13, I:23 | 5968 | Bibliothèque aRts (KDE) |
libartsc0 *
|
V:10, I:32 | 48 | Bibliothèque aRts (KDE) |
jackd
*
|
V:0.8, I:3 | 32 | serveur du kit de connexion audio JACK. (JACK) (faible latence) |
libjack0 *
|
V:1.3, I:33 | 164 | bibliothèque du kit de connexion JACK. (JACK) (faible latence) |
nas
*
|
V:0.14, I:0.2 | 328 | serveur du système audio réseau (NAS) |
libaudio2 *
|
V:26, I:46 | 200 | bibliothèque du serveur audio réseau (NAS) |
pulseaudio *
|
V:3, I:5 | 4052 | serveur PulseAudio, remplaçant d'ESD |
libpulse0 *
|
V:15, I:36 | 792 | PulseAudio bibliothèque du client, remplace ESD |
libgstreamer0.10-0 *
|
V:30, I:51 | 3368 | GStreamer : moteur de son de GNOME |
libxine1 *
|
V:5, I:27 | 36 | xine : ancien moteur de son de KDE |
libphonon4 *
|
I:16 | 572 | Phonon : nouveau moteur de son de KDE |
Il y a habituellement un moteur de son commun pour chacun des environnements de bureau les plus courants. Chaque moteur de son utilisé par l’application peut choisir de se connecter à un serveur de son différent.
Pour désactiver l’écran de veille, utilisez les commandes suivantes :
Tableau 9.19. Liste des commandes pour désactiver l’économiseur d'écran
environnement | commande |
---|---|
Console Linux |
setterm -powersave off
|
Système X Window (couper l’économiseur d'écran) |
xset s off
|
X Window (désactive dpms) |
xset -dpms
|
X Window (interface de configuration graphique et économiseur d'écran) |
xscreensaver-command -prefs
|
On peut toujours débrancher le haut-parleur du PC pour désactiver les
bips. La suppression du module du noyau pcspkr
le fait
pour vous.
Ce qui suit évite que le programme readline
(3) utilisé
parbash
(1) ne bippe lors d'un
« \a
» (ASCII=7).
$ echo "set bell-style none">> ~/.inputrc
Le message de démarrage du noyau dans
« /var/log/dmesg
» donne exactement la taille
de la mémoire disponible.
free
(1) et top
(1) affichent des
informations concernant les ressources mémoire sur le système actif.
$ grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572
Ne vous inquiétez pas de la taille importante de
« used
» et ce la petite taille de
« free
» sur la ligne
« Mem:
», mais lisez ce qui se trouve sous
celle-ci (675404 et 321780 dans l’exemple ci-dessous) et détendez-vous.
Pour mon MacBook avec 1Go=1048576k DRAM (la mémoire vidéo en prend une partie), je peux voir ce qui suit :
Tableau 9.20. Taille mémoire affichée
affiché | taille |
---|---|
Taille totale dans dmesg | 1016784k = 1Go - 31792k |
Libre dans dmesg | 990528k |
Total sous l’interpréteur de commandes | 997184k |
Libre sous l’interpréteur de commandes | 20256k (mais réellement 321780k) |
Une mauvaise maintenance du système peut rendre votre système vulnérable à une attaque externe.
Pour la vérification de la sécurité et de l’intégrité du système, vous pouvez démarrer avec ce qui suit :
debsums
, voir debsums
(1) et
Section 2.5.2, « Fichier « Release » de plus haut niveau et authenticité ».
chkrootkit
, voir
chkrootkit
(1).
clamav
, voir
clamscan
(1) et freahclam
(1).
Tableau 9.21. Liste d'outils pour la vérification et la sécurité et de l’intégrité du système
paquet | popcon | taille | description |
---|---|---|---|
logcheck *
|
V:3, I:3 | 152 | démon pour poster à l’administrateur les anomalies des fichiers journaux du système |
debsums *
|
V:2, I:3 | 320 | utilitaire pour vérifier les fichiers des paquets installés d'après leur somme de contrôle MD5 |
chkrootkit *
|
V:2, I:6 | 808 | détecteur de rootkit. |
clamav *
|
V:2, I:11 | 616 | utilitaire anti-virus pour Unix ‑ interface en ligne de commandes. |
tiger
*
|
V:0.8, I:1.0 | 3148 | signale les vulnérabilités du système pour la sécurité |
tripwire *
|
V:0.6, I:0.7 | 9456 | vérificateur d'intégrité des fichiers et répertoires |
john
*
|
V:0.7, I:2 | 532 | outils de casse des mots de passe actifs |
aide
*
|
V:0.2, I:0.4 | 1213 | Environnement avancé de détection d'intrusion (« Advanced Intrusion Detection Environment ») - bibliothèque statique |
bastille *
|
V:0.12, I:0.4 | 1960 | outil de renforcement de la sécurité |
integrit *
|
V:0.08, I:0.16 | 440 | programme de vérification de l’intégrité des fichiers |
crack
*
|
V:0.03, I:0.2 | 204 | programme pour deviner les mots de passe |
Voici un script simple pour rechercher des fichiers typiques ayant des permissions incorrectes d'écriture pour tout le monde.
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
Comme me paquet debsums
utilise des somme de contrôle
MD5 enregistrées de manière statique, on ne peut
pas lui faire entièrement confiance comme outil d'audit de la sécurité du
contre des attaques malveillantes.
Debian distribue des noyaux Linux modulaires sous forme de paquets pour les architectures prises en compte.
Le noyau Linux 2.6 possède quelques fonctionnalités remarquable comparé à 2.4.
ide-scsi
.
iptable
du noyau.
De nombreuses fonctionnalité du noyau peuvent être configurées par l’intermédiaire de paramètres du noyau de la manière suivante :
syscrl
(8) lors du
fonctionnement du système pour ceux auxquels on a accès par l’intermédiaire
de sysfs (voir Section 1.2.12, « procfs et sysfs »)
modprobe
(8) lors de l’activation d'un module (voir Section 10.2.3, « Monter le fichier image dur disque »)
Voir « kernel-parameters.txt(.gz)
» et d'autres
documents en rapport dans la documentation du noyau de Linux
(« /usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*
»)
fournie par le paquet linux-doc-2.6.*
.
La plupart des programmes normaux n'ont
pas besoin des en-têtes du noyau et peuvent de fait être cassés si vous les
utilisez directement pour la compilation. Il devront être compilés avec les
en-têtes se trouvant dans
« /usr/include/linux
» et
« /usr/include/asm
» qui sont fournis, sur les
systèmes Debian, par le paquet libc6-dev
(créé à partir
du paquet source glibc
).
Pour compiler certains programmes spécifiques au noyau, comme les modules du
noyau, à partir de sources externes et le démon de montage automatique
(amd
), vous devez inclure dans votre ligne de commandes
un chemin vers les en-têtes du noyau correspondants, par exemple
« -I/usr/src/linux-version-particulière/include/
».module-assistant
(8)
(ou sa forme abrégée m-a
) aide les utilisateur à
construire et à installer facilement des paquets de modules pour un ou
plusieurs noyaux personnalisés.
Debian a sa propre manière de compiler le noyau et les modules associés.
Tableau 9.22. Liste des paquets-clés à installer pour la compilation du noyau sur un système Debian
paquet | popcon | taille | description |
---|---|---|---|
build-essential *
|
I:47 | 48 |
paquets essentiels pour la construction de paquets Debian :
make , gcc , …
|
bzip2
*
|
V:51, I:79 | 132 | utilitaires de compression et de décompression des fichiers bz2 |
libncurses5-dev *
|
V:4, I:25 | 6900 | bibliothèques de développement et documentations pour ncurses |
git
*
|
V:5, I:17 | 10632 | git :: système distribué de contrôle de version utilisé par le noyau de Linux |
fakeroot *
|
V:4, I:32 | 444 | fournit l’environnement fakeroot pour construire le paquet sans être administrateur (« root ») |
initramfs-tools *
|
V:49, I:98 | 468 | outil pou construire une image mémoire initiale (« initramds ») (spécifique à Debian) |
kernel-package *
|
V:1.5, I:14 | 2316 | outil pour construire les paquets du noyau de Linux (spécifique à Debian) |
module-assistant *
|
V:2, I:18 | 568 | outil pour aider à la construction des paquets de modules (spécifique à Debian) |
dkms
*
|
V:6, I:9 | 468 | prise en charge dynamique des modules du noyau (dynamic kernel module support : DKMS) (générique) |
devscripts *
|
V:2, I:11 | 1696 | scripts d'assistance pour un responsable de paquet Debian (spécifique à Debian) |
linux-tree-2.6.*
|
N/A | N/A | méta-paquet de l’arborescence des source de Linux (spécifique à Debian) |
Si vous utilisez un initrd
in Section 3.3, « Étage 2 : le chargeur initial », veuillez lire les informations
correspondantes dans initramfs-tools
(8),
update-initramfs
(8), mkinitramfs
(8)
and initramfs.conf
(5).
Ne mettez pas de liens symboliques vers le répertoire de l’arborescence des
source (par exemple « /usr/src/linux*
») depuis
« /usr/include/linux
» et
« /usr/include/asm
» lors de la compilation des
sources du noyau de Linux. (Certains documents périmés le suggèrent).
Lors de la compilation du dernier noyau de Linux sous un système Debian
stable
, l’utilisation des derniers outils rétroportés
depuis la distribution Debian unstable
peuvent être
nécessaires.
Le gestionnaire de modules
dynamique du noyau (« dynamic kernel module support
(DKMS) » est une nouvelle architecture indépendant de la
distribution conçue pour permettre la mise à jour de modules individuels du
noyau sans modifier l’ensemble du noyau. Ceci sera approuvé pour la
maintenance des modules externes à l’arborescence du noyau pour
squeeze
. Ceci rend aussi très facile la reconstruction
des modules après la mise à jour des noyaux.
La méthode standard de Debian pour compiler les sources du noyau pourcréer
un paquet du noyau personnalisé utilise make-kpkg
(1). La
documentation officielle se trouve dans (en fin de)
« /usr/share/doc/kernel-package/README.gz
».
Voir kernel-pkg.conf
(5) et
kernel-img.conf
(5) pour la personnalisation.
Voici un exemple pour un système amd64.
# aptitude install linux-tree-<version> $ cd /usr/src $ tar -xjvf linux-source-<version>.tar.bz2 $ cd linux-source-<version> $ cp /boot/config-<oldversion> .config $ make menuconfig ... $ make-kpkg clean $ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=rev.01 kernel_image modules_image $ cd .. # dpkg -i linux-image*.deb
Redémarrez avec le nouveau noyau par « shutdown -r
now
».
Lorsque vous envisagez de créer un noyau non modulaire compilé uniquement
pour une machine, lancez make-kpkg
sans l’option
« --initrd
» car on n'utilise pas
d'initrd. L’appel de « make oldconfig
» et
« make dep
» n'est pas nécessaire car
make-kpkg kernel_image
» les appelle.
La méthode standard de Debian pour créer et installer un paquet de modules
personnalisé pour un paquet de noyau personnalisé utilise
module-assistant
(8) et module-source packages. Par
exemple, ce qui suit construit la paquet du module de noyau
unionfs
et l’installe :
$ sudo aptitude install module-assistant ... $ sudo aptitude install unionfs-source unionfs-tools unionfs-utils $ sudo m-a update $ sudo m-a prepare $ sudo m-a auto-install unionfs ... $ sudo apt-get autoremove
Vous pouvez toujours construire le noyau Linux depuis des sources d'origine avec la méthode classique. Vous devez prendre en charge vous-même les détails de la configuration du système.
$ cd /usr/src $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<version>.tar.bz2 $ tar -xjvf linux-<version>.tar.bz2 $ cd linux-<version> $ cp /boot/config-<version> .config $ make menuconfig ... $ make dep; make bzImage $ make modules # cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<version> # make modules_install # depmod -a # update-initramfs -c -k <version>
Configurez le chargeur initial comme suit :
/etc/lilo.conf
» et lancez
« /sbin/lilo
» si vous utilisez
lilo
.
/boot/grub/menu.lst
» si vous utilisez
grub
.
Redémarrez avec le nouveau noyau par « shutdown -r
now
».
La plupart des pilotes de matériel sont disponibles sous forme de logiciel libre et font partie du système Debian, il vous faudra peut-être charger quelques pilotes externes non libres pour prendre en charge certains matériels, tel un Winmodem, sur votre système.
Consulter les ressources pertinentes :
L’utilisation d'un système virtualisé nous permet de faire tourner simultanément plusieurs instances du système sur une plateforme unique.
Il a plusieurs paquets associés à la virtualization l’émulation du système sous Debian au-delà d'un simple chroot. Certains paquets vous facilitent la mise en place d'un tel système.
Tableau 9.23. Liste des outils de virtualisation
paquet | popcon | taille | description |
---|---|---|---|
schroot *
|
V:1.0, I:1.6 | 2460 | outil spécialisé pour l’exécution d'un paquet binaire de Debian dans un chroot |
sbuild *
|
V:0.11, I:0.3 | 428 | outil pour construire des paquets binaires de Debian depuis les sources Debian |
pbuilder *
|
V:0.5, I:2 | 1192 | constructeur personnel de paquets pour des paquets Debian |
debootstrap *
|
V:1.6, I:12 | 268 | amorcer un système Debian de base (écrit en sh) |
cdebootstrap *
|
V:0.3, I:2 | 116 | amorcer le système Debian (écrit en C) |
rootstrap *
|
V:0.02, I:0.17 | 156 | outil pour construire des images d'un système de fichiers de Linux complet |
virt-manager *
|
V:0.5, I:1.6 | 5908 | Gestionnaire de machine virtuelle : application du gestionnaire de bureau pour la gestion des machines virtuelles |
libvirt-bin *
|
V:1.4, I:2 | 2240 | programmes pour la bibliothèque libvirt |
user-mode-linux *
|
V:0.07, I:0.3 | 20540 | User-mode Linux (noyau) |
bochs
*
|
V:0.05, I:0.3 | 3280 | Bochs :: émulateur PC IA-32 |
qemu
*
|
V:0.6, I:6 | 460 | QEMU : émulateur de processeur générique rapide |
qemu-system *
|
V:2, I:3 | 38196 | QEMU : binaires pour l’émulation d'un système complet |
qemu-user *
|
V:0.3, I:3 | 16716 | QEMU : binaires pour l’émulation en mode utilisateur |
qemu-utils *
|
V:0.4, I:3 | 756 | QEMU : utilitaires |
qemu-kvm *
|
V:1.3, I:2 | 4308 | KVM : virtualisation complète sur les plateformes x86 ayant une virtualisation assistée par le matériel |
virtualbox-ose *
|
V:2, I:4 | 31728 | VirtualBox : solution de virtualisation x86 sur i386 et amd64 |
xen-tools *
|
V:0.2, I:1.9 | 1236 | outil pour gérer le serveur virtuel XEN de debian |
wine
*
|
V:1.7, I:13 | 96 | Wine : implémentation de l’API Windows (suite standard) |
dosbox *
|
V:0.5, I:2 | 2460 | DOSBox : émulateur x86 emulator avec graphisme Tandy/Herc/CGA/EGA/VGA/SVGA, son et DOS |
dosemu *
|
V:0.2, I:1.2 | 5940 | DOSEMU : l’émulateur DOS de Linux |
vzctl
*
|
V:0.7, I:1.1 | 1056 | OpenVZ solution de virtualisation de serveur - outils de contrôle |
vzquota *
|
V:0.7, I:1.2 | 204 | OpenVZ solution de virtualisation de serveur - outils de quota |
lxc
*
|
V:0.05, I:0.2 | 744 | Conteneurs Linux outils de l’espace utilisateur |
Voir l’article de Wikipedia Comparaison de machines pour plateforme virtuelle pour une comparaison détaillées entre les différentes solutions de plateformes de virtualisation.
Certaines fonctionnalités décrites ici ne sont disponibles que dans
squeeze
.
Les noyaux par défaut de Debian prennent en charge KVM depuis lenny
.
La virtualisation met en œuvre plusieurs étapes :
Créer un système de fichiers vide (une arborescence de fichiers ou une image disque).
mkdir -p
/path/to/chroot
».
dd
(1)
(voir Section 10.2.1, « Créer le fichier image du disque » et Section 10.2.5, « Réaliser le fichier image d'un disque vide »).
qemu-img
(1) peut être utilisé pour créer et convertir des
fichiers d'image disque pris en charge par QEMU.
Monter l’image disque dans le système de fichiers avec
mount
(8) (optionnel).
Peupler le système de fichiers cible avec les données requises.
debootstrap
et
cdebootstrap
facilitent ce processus (voir Section 9.8.4, « Système protégé (chroot) »).
Lancer un programme dans l’environnement virtualisé.
Pour le fichier image disque brut, voir Section 8.3, « Les paramètres linguistiques (« locale ») ».
Pour d’autre fichiers d’images disques virtuels, vous pouvez utiliser
qemu-nbd
(8) pour les exporter en utilisant le protocole
network block device et en les
montant à l’aide du module nbd
du noyau.
qemu-nbd
(8) gère les formats de disques pris en compte
par QEMU : QEMU
gère les formats de disques suivants raw, qcow2, qcow, vmdk,
vdi, bochs, cow
(user-mode Linux copy-on-write), parallels,
dmg, cloop, vpc, vvfat (VFAT virtuelle) et host_device.
Le network block device peut gérer
des partitions de la même manière que le périphérique de rebouclage (« loop
device » (voir Section 10.2.3, « Monter le fichier image dur disque »). Vous pouvez monter la première
partition de « disk.img
» de la manière
suivante :
# modprobe nbd max_part=16 # qemu-nbd -v -c /dev/nbd0 disk.img ... # mkdir /mnt/part1 # mount /dev/nbd0p1 /mnt/part1
Vous ne pouvez exporter que la première partition de
« disk.img
» en utilisant l’option
« -P 1
» de qemu-nbd
(8).
chroot
(8) propose la plupart des moyen simple de faire
tourner simultanément plusieurs instances de l’environnement GNU/Linux sur
un même système sans redémarrer.
Les exemple ci-dessous supposent que le système père et le système chroot partagent tous les deux la même architecture de CPU.
Vous pouvez apprendre comment configurer et utiliser
chroot
(8) en lançant le programme
pbuilder
(8) sous script
(1) comme
suit :
$ sudo mkdir /sid-root $ sudo pbuilder --create --no-targz --debug --buildplace /sid-root
Vous pouvez voir comment debootstrap
(8) ou
cdebootstrap
(1) installent les données du système pour
l’environnement sid
sous
« /sid-root
».
debootstrap
(8) ou cdebootstrap
(1) sont
utilisés pour installer Debian avec
l’installateur Debian. Ils peuvent aussi être utilisés pour installer Debian
sur un système sans utiliser de disque d'installation de Debian, mais en
provenance d'une autre distribution GNU/Linux.
$ sudo pbuilder --login --no-targz --debug --buildplace /sid-root
Vous pouvez voir ci-après comment un shell système tournant sous
l’environnement sid
est créé :
« /etc/hosts
»,
« /etc/hostname
»,
« /etc/resolv.conf
»)
/proc
»
/dev/pts
»
/usr/sbin/policy-rc.d
» qui existe
toujours avec 101
chroot /sid-root bin/bash -c 'exec -a -bash
bin/bash'
»
Certains programmes sous chroot peuvent demander l’accès à davantage de
fichiers du système parent pour fonctionner que ceux que fournit
pbuilder
. Par exemple, on peut avoir besoin de monter
liés (« bind-mount ») ou de copier
« /sys
»,
« /etc/passwd
»,
« /etc/group
»,
« /var/run/utmp
»,
« /var/log/wtmp
», etc.
Le fichier « /usr/sbin/policy-rc.d
» évite que
des programmes démons ne soient démarrés automatiquement sur le système
Debian. Voir
« /usr/share/doc/sysv-rc/README.policy-rc.d.gz
».
Les buts d'origine du paquet spécialisé d'environnement protégé (chroot)
pbuilder
est de construire une système protégé et de
construire un paquet depuis cet environnement. C'est le système idéal à
utiliser pour vérifier que les dépendances de construction d'un paquet sont
correctes et pour s'assurer que les dépendances de construction erronées ou
non nécessaires n'existent pas dans le paquet résultant.
De même, le paquet schroot
peut vous donner une l’idée de
faire tourner un système chroot i386
sous le système
parent amd64
.
Je vous recommande d’utiliser QEMU ou VirtualBox sur un système Debian
stable
afin de faire tourner des système de bureau
multiples en utilisant la virtualisation. Ceci vous permet de lancer
des application de bureau de Debian unstable
et
testing
sans les risques qui leur sont habituellement
associés.
Comme QEMU pur est très lent, il est recommandé de l’accélérer avec KVM lorsque le sysètme hôte le prend en charge.
L’image disque virtuelle « virtdisk.qcow2
» qui
contient le système Debian system pour QEMU peut
être crée en utilisant debian-installer: Small CDs de la
manière suivante :
$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso $ qemu-img create -f qcow2 virtdisk.qcow2 5G $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256 ...
Vous trouverez des astuces supplémentaires sur le wiki Debian : QEMU.
VirtualBox est fourni avec des outils ayant une interface graphique Qt et est assez intuitive. Son interface graphique et ses outils en ligne de commandes sont expliqués dans le Manuel de l’utilisateur de VirtualBox et le Manuel de l’utilisateur VirtualBox (PDF).
Faire tourner d’autres distributions de GNU/Linux comme Ubuntu et Fedra sous une virtualisation est une bonne manière d’en étudier les astuces de configuration. D’autres systèmes d’exploitation propriétaires peuvent aussi tourner de manière agréable sous la virtualisation GNU/Linux.
Des outils et astuces pour gérer les données binaires et de texte sur le système sont décrits.
Il ne faut pas accéder de manière non coordonnée en écriture à des
périphériques et des fichiers à haut trafic depuis différents processus pour
éviter une compétition d’accès (« race
condition ». Pour l’éviter, on peut utiliser les mécanismes de
verrouillage de fichier (« File
locking » en utilisant flock
(1).
La sécurité des données et leur partage contrôlé présentent plusieurs aspects.
Ceci peut être réalisé avec certaines combinaisons d'outils
Voici un résumé des outils d'archivage et de compression disponible sur le système Debian :
Tableau 10.1. Liste des outils d'archivage et de compression
paquet | popcon | taille | commande | extension | commentaire |
---|---|---|---|---|---|
tar
*
|
V:61, I:99 | 2660 |
tar (1)
|
.tar
|
archiveur standard (standard de fait) |
cpio
*
|
V:41, I:99 | 920 |
cpio (1)
|
.cpio
|
archiveur de style Unix System V, utiliser avec find (1)
|
binutils *
|
V:58, I:74 | 11996 |
ar (1)
|
.ar
|
archiveur pour la création de bibliothèques statiques |
fastjar *
|
V:7, I:31 | 216 |
fastjar (1)
|
.jar
|
archiveur pour Java (semblable à zip) |
pax
*
|
V:1.5, I:6 | 172 |
pax (1)
|
.pax
|
nouvel archiveur standard POSIX, compromis entre tar et
cpio
|
afio
*
|
V:0.3, I:1.7 | 240 |
afio (1)
|
.afio
|
cpio étendu avec compression par fichier, etc.
|
gzip
*
|
V:91, I:99 | 284 |
gzip (1), zcat (1), …
|
.gz
|
utilitaire de compression GNU LZ77 (standard de fait) |
bzip2
*
|
V:51, I:79 | 132 |
bzip2 (1), bzcat (1), …
|
.bz2
|
utilitaire de transformée
par tri de blocs de Burrows-Wheeler block-sorting permettant un taux
de compression plus élevé que gzip (1) (plus lent que
gzip avec une syntaxe similaire)
|
lzma
*
|
V:8, I:80 | 172 |
lzma (1)
|
.lzma
|
utilitaire de compression LZMA avec un plus haut
taux de compression que gzip (1) (obsolète)
|
xz-utils *
|
V:5, I:26 | 460 |
xz (1), xzdec (1), …
|
.xz
|
utilitaire de compression XZ avec un plus haut
taux de compression que bzip2 (1) (plus lent
quegzip mais plus rapide que bzip2 ; le
remplacement pour LZMA utilitaire de
compression)
|
p7zip
*
|
V:2, I:23 | 1052 |
7zr (1), p7zip (1)
|
.7z
|
archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA) |
p7zip-full *
|
V:14, I:26 | 3612 |
7z (1), 7za (1)
|
.7z
|
archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA et autres) |
lzop
*
|
V:0.7, I:6 | 144 |
lzop (1)
|
.lzo
|
utilitaire de compression LZO avec de plus hautes
vitesses de compression et de décompression que gzip (1)
(plus faible taux de compression que gzip avec une
syntaxe similaire)
|
zip
*
|
V:8, I:52 | 632 |
zip (1)
|
.zip
|
InfoZIP : outil d'archive et de compression DOS |
unzip
*
|
V:24, I:69 | 408 |
unzip (1)
|
.zip
|
InfoZIP : outil de désarchivage et de décompression DOS |
Ne positionnez par la variable « $TAPE
» à
moins que vous ne sachiez à quoi vous attendre. Elle modifie le comportement
de tar
(1).
L’archive tar
(1) utilise l’extension de fichier
« .tgz
» ou
« .tar.gz
».
L’archive tar
(1) utilise l’extension de fichier
« .txz
» ou
« .tar.xz
».
La méthode de compression habituelle des outils FOSS tels que tar
(1) a été modifiée
de la manière suivante : gzip
→
bzip2
→ xz
cp
(1), scp
(1) et
tar
(1) peuvent avoir certaines limitations pour des
fichiers spéciaux. cpio
(1) et afio
(1)
sont plus souples.
cpio
(1) et afio
(1) sont conçus pour
être utilisés avec find
(1) et d'autre commandes et sont
adaptés à la création de scripts de sauvegarde car la partie correspondant à
la sélection de fichier du script peut être testée indépendamment.
afio
(1) compresse chaque fichier de l’archive. Ceci rend
afio
bien plus sûr envers la corruption de fichiers que
les archives tar
ou cpio
qui sont
compressées globalement et en fait le meilleur
moteur d'archive pour les scripts de sauvegarde.
La structure interne des fichiers de données d'OpenOffice sont des fichiers
« .jar
».
Voici un résumé d'outils simple de copie et de sauvegarde sur le système Debian system :
Tableau 10.2. Liste des outils de copie et de synchronisation
paquet | popcon | taille | outil | fonction |
---|---|---|---|---|
coreutils *
|
V:92, I:99 | 13828 | GNU cp | copier localement des fichiers et répertoires (« -a » pour récursif) |
openssh-client *
|
V:52, I:99 | 2104 | scp |
copier à distance des fichiers et des répertoires (client,
« -r » pour récursif)
|
openssh-server *
|
V:70, I:83 | 700 | sshd | copier à distance des fichiers et des répertoires (serveur distant) |
rsync
*
|
V:19, I:52 | 704 | - | synchronisation et sauvegarde distantes unidirectionnelles |
unison *
|
V:0.9, I:3 | 1816 | - | synchronisation et sauvegarde distantes bidirectionnelles |
Copier des fichiers avec rsync
(8) offres des
fonctionnalités plus riches que les autres méthodes.
--exclude
» et
« --exclude-from
» sont semblables à celles de
tar
(1)
L’exécution du script bkup
mentionné dans Section 10.1.9, « Un script de copie pour la sauvegarde des données » avec l’option
« -gl
» sous cron
(8)
fournira une fonctionnalité très semblable à dumpfs
de
Plan9 pour l’archivage des données statiques.
Les outils de système de contrôle de version (VCS) de Tableau 10.16, « Liste d'outils pour les systèmes de contrôle de version » peuvent fonctionner comme outils de synchronisation et de copie multi-voies.
Voici quelques manières d'archiver et de désarchiver le contenu entier du
répertoire « ./source
» en utilisant différents
outils.
GNU tar
(1) :
$ tar cvzf archive.tar.gz ./source $ tar xvzf archive.tar.gz
cpio
(1) :
$ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; gzip archive.cpio $ zcat archive.cpio.gz | cpio -i
afio
(1) :
$ find ./source -xdev -print0 | afio -ovZ0 archive.afio $ afio -ivZ archive.afio
Voici quelques manières d'archiver et de désarchiver le contenu entier du
répertoire « ./source
» en utilisant différents
outils.
./source
» →
répertoire « /dest
»
./source
» de la machine locale → répertoire
« /dest
» situé sur la machine
« user@host.dom
»
rsync
(8):
# cd ./source; rsync -av . /dest # cd ./source; rsync -av . user@host.dom:/dest
Vous pouvez, en remplacement, utiliser la syntaxe « un slash en fin du répertoire source ».
# rsync -av ./source/ /dest # rsync -av ./source/ user@host.dom:/dest
GNU cp
(1) et openSSH scp
(1) :
# cd ./source; cp -a . /dest # cd ./source; scp -pr . user@host.dom:/dest
GNU tar
(1) :
# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - ) # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'
cpio
(1) :
# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest
afio
(1) :
# cd ./source; find . -print0 | afio -pv0a /dest
Vous pouvez remplacer « .
» par
« foo
» dans tous les exemples comportant
« .
» pour copier les fichiers du répertoire
« ./source/foo
» vers le répertoire
« /dest/foo
».
Vous pouvez remplacer « .
» par le chemin
absolu « /chemin/vers/source/toto
» dans tous
les exemples comportant « .
» pour éviter
« cd ./source;
». Ceci permet de copier les
fichiers vers différents emplacements selon les outils utilisés de la
manière suivante :
/dest/foo
": rsync
(8), GNU
cp
(1), et scp
(1)
/dest/path/to/source/foo
": GNU
tar
(1), cpio
(1), et
afio
(1)
rsync
(8) et GNU cp
(1) possèdent
l’option « -u
» pour sauter les fichier qui
sont plus récent sur la destination.
find
(1) est utilisé pour la sélection de fichiers pour
les commandes d'archive et de copie (voir Section 10.1.3, « Idiomes pour les archive » et Section 10.1.4, « Idiomes pour la copie ») ou pour xargs
(1)
(voirSection 9.5.9, « Répéter une commande en bouclant entre des fichiers »). Ceci peut
être amélioré en utilisant ces paramètres de commande.
La syntaxe de base de find
(1) peut être résumée comme
suit :
-o
» entre les éléments conditionnels) a une
plus faible priorité que le « ET
logique » (indiqué par « -a
» ou rien
entre éléments conditionnels).
!
» avant un élément conditionnel) a une
priorité plus élevée que le « ET
logique ».
-prune
» retourne toujours un VRAI logique et, si c'est un répertoire, la
recherche de fichier est arrêtée au-delà de ce point.
-name
» correspond à la base du nom de
fichier avec les motifs génériques de l’interpréteur de commandes (voit
Section 1.5.6, « Motifs génériques (« glob ») de l’interpréteur de commandes ») mais il correspond aussi à son
« .
» de début avec des méta-caractères comme
« *
» et
« ?
». (Nouvelle fonctionnalité POSIX)
-regex
» correspond au chemin complet par
défaut dans le style BRE emacs (voir
Section 1.6.2, « Expressions rationnelles »).
-size
» correspond au fichier en se basant
sur la taille du fichier (valeur précédée de
« +
» pour plus grand et précédée de
« -
» pour plus petit)
-newer
» correspond au fichier plus récent
que celui indiqué comme paramètre.
-print0
» retourne toujours la valeur logique
VRAI et affiche sur la sortie standard le
nom de fichier en entier (terminé par le
caractère null).
find
(1) est souvent utilisé dans un style idiomatique
comme ce qui suit :
# find /path/to \ -xdev -regextype posix-extended \ -type f -regex ".*\.afio|.*~" -prune -o \ -type d -regex ".*/\.git" -prune -o \ -type f -size +99M -prune -o \ -type f -newer /chemin/vers/horodatage -print0
Ceci signifie que l’on doit effectuer les actions suivantes :
/chemin/vers
» ;
.*\.afio
» ou
« .*~
» de la recherche en arrêtant le
traitement ;
.*/\.git
» de la recherche en arrêtant le
traitement ;
/chemin/vers/horodatage
».
Remarquez l’utilisation idiomatique de « -prune
-o
» pour exclure les fichiers dans l’exemple ci-dessus.
Pur les systèmes Unix-like autre que Debian,
certaines options peuvent ne pas être prises en compte par
find
(1). Dans un tel cas, essayez d'adapter la méthode de
correspondance et remplacez « -print0
» par
« -print
». Vous devrez aussi ajuster les
commandes associées.
Nous savons tous que les ordinateurs sont parfois victimes de pannes ou que des erreurs humaines provoquent des dommages au système et auxdonnées. Les opérations de sauvegarde et de restauration sont les parties essentielles d'une administration système réussie. Vous serez victime, un jour ou l’autre, de tous les modes de défaillance possibles.
Mettez en place un système de sauvegardes simple et faites une sauvegarde fréquente de votre système. Avoir des données de sauvegarde est plus important que la qualité technique de votre méthode de sauvegarde.
Il y a 3 facteurs-clé qui permettent de définir une méthode pratique de sauvegarde et de restauration.
Ce qu'il faut sauvegarder et restaurer :
~/
» ;
/var/
» (sauf
« /var/cache/
»,
« /var/run/
» et
« /var/tmp/
») :
/etc/
» ;
/usr/local/
» ou
« /opt/
» ;
Comment sauvegarder et restaurer :
Risques et coûts :
Comme pour l’enregistrement sécurisé de données, les données doivent se trouver de préférences sur différentes partitions de disque ou sur des disques différents ou des machines différentes afin de résister à une corruption du système de fichiers. Les données importantes seront, de préférence écrites sur des supports à écriture unique tels que les CD/DVD-R afin de prévenir l’écrasement accidentel des données. (Voir Section 10.3, « Les données binaires » pour la manière d'écrire sur le support d'enregistrement depuis la ligne de commandes de l’interpréteur. L’interface graphique de l’environnement de bureau GNOME vous donne une accès facile depuis le menu : « Places→CD/DVD Creator :»)
Il faudra peut-être arrêter certains démons d'applications comme le MTA (voir Section 6.3, « Agent de transport de courrier électronique (« MTA ») ») lors de la sauvegarde des données.
Vous devez prendre des précautions supplémentaires lors de la sauvegarde et
de la restauration des fichiers de données relatifs à l’identité comme
« /etc/ssh/ssh_host_dsa_key
»,
« /etc/ssh/ssh_host_rsa_key
»,
« ~/.gnupg/*
»,
« ~/.ssh/*
»,
« /etc/passwd
»,
« /etc/shadow
»,
« /etc/fetchmailrc
»,
« popularity-contest.conf
»,
« /etc/ppp/pap-secrets
» et
« /etc/exim4/passwd.client
». Certaines de ces
données ne peuvent pas être recréées en entrant la même chaîne de
caractères d'entrée sur le système.
Si vous faites tourner une tâche programmée (« cron » en tant que
processus d'utilisateur, vous devrez restaurer les fichiers de
« /var/spool/cron/crontabs
» et redémarrer
cron
(8). Voir Section 9.5.14, « Planifier des tâches qui s'exécutent régulièrement » pour cron
(8) et
crontab
(1).
Voici une liste d'utilitaires de sauvegarde notables disponibles sur le système Debian :
Tableau 10.3. Liste de suites d'utilitaires de sauvegarde
paquet | popcon | taille | description |
---|---|---|---|
rdiff-backup *
|
V:1.4, I:3 | 804 | sauvegarde incrémentale (distante) |
dump
*
|
V:0.4, I:1.5 | 716 |
BSD 4.4 dump (8) et
restore (8) pour les systèmes de fichiers ext2/ext3
|
xfsdump *
|
V:0.3, I:1.9 | 628 |
sauvegarder et restaurer avec xfsdump (8) et
xfsrestore (8) pour le système de fichiers XFS sous GNU/Linux et IRIX
|
backupninja *
|
V:0.5, I:0.6 | 452 | système de sauvegarde meta-backup léger et extensible |
mondo
*
|
V:0.11, I:0.5 | 1168 | Mondo Rescue : suite de sauvegarde pour la restauration d'un désastre |
sbackup *
|
V:0.05, I:0.16 | 488 | suite de sauvegarde simple pour le bureau GNOME |
keep
*
|
V:0.13, I:0.3 | 1232 | système de sauvegarde pour KDE |
bacula-common *
|
V:1.3, I:2 | 1404 | Bacula : sauvegarde, restauration et vérification par le réseau - fichiers commun de support |
bacula-client *
|
I:0.9 | 84 | Bacula : sauvegarde, restauration et vérification par le réseau - méta-paquet du client |
bacula-console *
|
V:0.3, I:1.2 | 184 | Bacula : sauvegarde, restauration et vérification par le réseau - console en mode texte |
bacula-server *
|
I:0.5 | 84 | Bacula : sauvegarde, restauration et vérification par le réseau - méta-paquet du serveur |
amanda-common *
|
V:0.4, I:0.8 | 6924 | Amanda : Advanced Maryland Automatic Network Disk Archiver (Libs). (Archiveur de disque par le réseau de Maryland avancé et automatique. |
amanda-client *
|
V:0.4, I:0.8 | 748 | Amanda : Advanced Maryland Automatic Network Disk Archiver (Client) |
amanda-server *
|
V:0.11, I:0.3 | 916 | Amanda : Advanced Maryland Automatic Network Disk Archiver (Serveur) |
backuppc *
|
V:0.8, I:1.0 | 2460 | BackupPC est un système de hautes performances pour effectuer la sauvegarde de PC au niveau de l’entreprise (basé sur disques) |
backup-manager *
|
V:0.4, I:0.6 | 672 | outil de sauvegarde en ligne de commandes |
backup2l *
|
V:0.2, I:0.3 | 152 | outil de sauvegarde et restauration de faible maintenance pur des support pouvant être montés (basé sur disque) |
Les outils de sauvegarde ont chacun des objectifs particuliers.
sbackup
et keep
fournissent une
interface graphique facile pour les utilisateurs de bureau afin
d'effectuerdes sauvegardes régulières des données de l’utilisateur. Une
fonction équivalente peut être réalisée par un simple script (Section 10.1.8, « Script d'exemple pour la sauvegarde du système ») et
cron
(8).
Les outils de base décrits dans Section 10.1.1, « Outils d'archivage et de compression » et Section 10.1.2, « Outils de copie et de synchronisation » peuvent être utilisés pour faciliter la sauvegarde du système au moyen de scripts personnalisés. De tels scripts peuvent être améliorés comme suit :
rdiff-backup
permet les sauvegardes
incrémentales (distantes) ;
dump
facilite l’archivage et la restauration
d'un système de fichier entier de manière incrémentale et efficace.
Voir les fichiers dans « /usr/share/doc/dump/
»
et « « Est-ce que dump est
vraiment obsolète ? » pour en savoir plus sur le paquet
dump
.
Pour un système de bureau personnel Debian sur lequel tourne la version
unstable
, je n'ai besoin de protéger que les données
personnelles et les données critiques. Je réinstalle cependant le système
une fois par an. Je ne vois donc aucune raison de sauvegarder l’ensemble du
système ou d'installer un utilitaire de sauvegarde ayant des fonctionnalités
avancées.
J'utilise un simple script pour réaliser des archives de sauvegarde et les graver sur CD/DVD en utilisant une interface graphique. Voici un exemple de script pour ce faire :
#!/bin/sh -e # Copyright (C) 2007-2008 Osamu Aoki <osamu@debian.org>, Public Domain BUUID=1000; USER=osamu # UID and name of a user who accesses backup files BUDIR="/var/backups" XDIR0=".+/Mail|.+/Desktop" XDIR1=".+/\.thumbnails|.+/\.?Trash|.+/\.?[cC]ache|.+/\.gvfs|.+/sessions" XDIR2=".+/CVS|.+/\.git|.+/\.svn|.+/Downloads|.+/Archive|.+/Checkout|.+/tmp" XSFX=".+\.iso|.+\.tgz|.+\.tar\.gz|.+\.tar\.bz2|.+\.afio|.+\.tmp|.+\.swp|.+~" SIZE="+99M" DATE=$(date --utc +"%Y%m%d-%H%M") [ -d "$BUDIR" ] || mkdir -p "BUDIR" umask 077 dpkg --get-selections \* > /var/lib/dpkg/dpkg-selections.list debconf-get-selections > /var/cache/debconf/debconf-selections { find /etc /usr/local /opt /var/lib/dpkg/dpkg-selections.list \ /var/cache/debconf/debconf-selections -xdev -print0 find /home/$USER /root -xdev -regextype posix-extended \ -type d -regex "$XDIR0|$XDIR1" -prune -o -type f -regex "$XSFX" -prune -o \ -type f -size "$SIZE" -prune -o -print0 find /home/$USER/Mail/Inbox /home/$USER/Mail/Outbox -print0 find /home/$USER/Desktop -xdev -regextype posix-extended \ -type d -regex "$XDIR2" -prune -o -type f -regex "$XSFX" -prune -o \ -type f -size "$SIZE" -prune -o -print0 } | cpio -ov --null -O $BUDIR/BU$DATE.cpio chown $BUUID $BUDIR/BU$DATE.cpio touch $BUDIR/backup.stamp
Ceci est destiné à être un script d'exemple exécuté avec le compte de l’administrateur.
Vous devrez le modifier et l’exécuter comme suit :
find … -print0
» par
« find … -newer $BUDIR/backup.stamp -print0
»
afin d'effectuer des sauvegardes incrémentales ;
scp
(1) ou rsync
(1) ou gravez-les sur
CD/DVD pour plus de sécurité (j'utilise l’interface graphique du bureau
GNOME pour graver les CD/DVD. Voir Section 12.1.8, « Exemple de script avec zenity » pour une redondance
supplémentaire).
Faites simple !
Vous pouvez récupérer les données de configuration de debconf avec
« debconf-set-selections debconf-selections
»
et les données de sélection de dpkg avec « dpkg
--set-selection <dpkg-selections.list
".
Pour les données se trouvant sous l’arborescence d'un répertoire, une copie
avec « cp -a
» permet une sauvegarde normale.
Pour un gros ensemble de données statiques ne devant pas être réécrites se
trouvant dans une arborescence de répertoires telle que celle se trouvant
sous le répertoire
« /var/cache/apt/packages/
», les liens durs
avec « cp -al
» fournit une alternative à la
sauvegarde normale avec une utilisation efficace de l’espace disque.
Voici un script de copie, que j'ai appelé bkup
, destiné à
la sauvegarde de donnée. Ce script copies tous les fichiers (non-VCS) du
répertoire actuel vers le répertoire daté du répertoire parent ou sur une
machine distante.
#!/bin/sh -e # Copyright (C) 2007-2008 Osamu Aoki <osamu@debian.org>, Public Domain fdot(){ find . -type d \( -iname ".?*" -o -iname "CVS" \) -prune -o -print0;} fall(){ find . -print0;} mkdircd(){ mkdir -p "$1";chmod 700 "$1";cd "$1">/dev/null;} FIND="fdot";OPT="-a";MODE="CPIOP";HOST="localhost";EXTP="$(hostname -f)" BKUP="$(basename $(pwd)).bkup";TIME="$(date +%Y%m%d-%H%M%S)";BU="$BKUP/$TIME" while getopts gcCsStrlLaAxe:h:T f; do case $f in g) MODE="GNUCP";; # cp (GNU) c) MODE="CPIOP";; # cpio -p C) MODE="CPIOI";; # cpio -i s) MODE="CPIOSSH";; # cpio/ssh S) MODE="AFIOSSH";; # afio/ssh t) MODE="TARSSH";; # tar/ssh r) MODE="RSYNCSSH";; # rsync/ssh l) OPT="-alv";; # hardlink (GNU cp) L) OPT="-av";; # copy (GNU cp) a) FIND="fall";; # find all A) FIND="fdot";; # find non CVS/ .???/ x) set -x;; # trace e) EXTP="${OPTARG}";; # hostname -f h) HOST="${OPTARG}";; # user@remotehost.example.com T) MODE="TEST";; # test find mode \?) echo "use -x for trace." esac; done shift $(expr $OPTIND - 1) if [ $# -gt 0 ]; then for x in $@; do cp $OPT $x $x.$TIME; done elif [ $MODE = GNUCP ]; then mkdir -p "../$BU";chmod 700 "../$BU";cp $OPT . "../$BU/" elif [ $MODE = CPIOP ]; then mkdir -p "../$BU";chmod 700 "../$BU" $FIND|cpio --null --sparse -pvd ../$BU elif [ $MODE = CPIOI ]; then $FIND|cpio -ov --null | ( mkdircd "../$BU"&&cpio -i ) elif [ $MODE = CPIOSSH ]; then $FIND|cpio -ov --null|ssh -C $HOST "( mkdircd \"$EXTP/$BU\"&&cpio -i )" elif [ $MODE = AFIOSSH ]; then $FIND|afio -ov -0 -|ssh -C $HOST "( mkdircd \"$EXTP/$BU\"&&afio -i - )" elif [ $MODE = TARSSH ]; then (tar cvf - . )|ssh -C $HOST "( mkdircd \"$EXTP/$BU\"&& tar xvfp - )" elif [ $MODE = RSYNCSSH ]; then rsync -rlpt ./ "${HOST}:${EXTP}-${BKUP}-${TIME}" else echo "Any other idea to backup?" $FIND |xargs -0 -n 1 echo fi
Ceci est destiné à être un exemple de commandes. Veuillez lire le script et le modifier vous-même avant de l’utiliser.
J'ai installé ce bkup
dans mon répertoire
« /usr/local/bin/
». J'utilise cette commande
bkup
, sans aucune option, depuis mon répertoire de
travail lorsque j'ai besoin d'un instantané temporaire de sauvegarde.
Pour faire un instantané historique d'une arborescence de fichiers sources
ou d'une arborescence de fichiers de configuration, il est plus facile et
efficace d'utiliser git
(7) (voirSection 10.9.5, « Git pour l’enregistrement de l’historique de la configuration »).
Les périphériques d'enregistrement amovibles peuvent être l’un quelconque de ceux qui suivent :
Sur un environnement de bureau moderne tel que GNOME, ces périphériques
amovibles peuvent être montés automatiquement par un utilisateur normal,en
utilisant gnome-mount
(1).
Le point de montage sous GNOME est choisi avec le nom
« /media/<disk_label>
», il peut être
personnalisé en faisant ce qui suit :
mlabel
(1) pour le système de fichiers FAT ;
genisoimage
(1) avec l’option
« -V
» pour le système de fichiers
ISO9660 ;
tune2fs
(1) avec l’option
« -L
» pour le système de fichiers ext2/ext3.
Le montage automatique sous les environnements de bureau modernes ne se
produit que lorsque ces périphériques amovibles ne se trouvent pas dans
« /etc/fstab
».
Si de mauvaises options posent des problèmes, effacez les paramètres
associés dans « /system/storage/
» via
« gconf-editor
(1).
Tableau 10.4. Liste de paquets permettant à un utilisateur normal de monter des
périphériques amovibles sans qu'il y ait une entrée correspondante dans
« /etc/fstab
»
paquet | popcon | taille | description |
---|---|---|---|
gnome-mount *
|
V:15, I:28 | NOT_FOUND | enrobeur pour le (dé)montage et l’éjection de périphériques de stockage (utilisé par GNOME) |
pmount *
|
V:4, I:19 | 548 | monter les périphériques amovibles en tant qu'utilisateur normal (utilisé par KDE) |
cryptmount *
|
V:0.2, I:0.5 | 360 | Gestion et montage en mode utilisateur de systèmes de fichiers chiffrés |
usbmount *
|
V:0.4, I:1.4 | 112 | monter et démonter automatiquement des périphériques de stockage USB |
Lors du partage de données avec d'autres système à l’aide de périphériques de stockage amovibles, vous devez les formatez avec un système de fichiers pris en charge par les deux systèmes. Voici une liste de choix de systèmes de fichiers :
Tableau 10.5. Liste de choix de systèmes de fichiers pour des périphériques amovibles avec des scénarios typiques d'utilisation
système de fichiers | description d'un scénario typique d'utilisation |
---|---|
FAT12 | partage de données sur disquettes entre plateformes (<32Mio) |
FAT16 | partage entre plateformes de données sur des périphériques semblables à des disques durs de faible capacité (<2Gio) |
FAT32 | partage entre plateformes de données sur périphériques semblables à des disques durs de grande capacité (<8Tio, pris en charge par plus récent que MS Windows95 OSR2) |
NTFS | partage entre palateformes de données sur périphériques semblables à des disques durs de grande capacité (pris en charge de manière native par MS Windows NT et versions plus récentes; et pris en charge par NTFS-3G par l’intermédiaire de FUSE sous Linux) |
ISO9660 | partage entre plateformes de données sur CD-R et DVD+/-R |
UDF | écriture incrémentale de CD-R et de DVD+/-R (nouveau) |
système de fichiers MINIX | enregistrement efficace en matière d'espace disque de fichiers de données unix sur disquette |
système de fichiers ext2 | partage de données sur disque dur avec les anciens systèmes Linux |
système de fichiers ext3 | partage de données sur disque dur avec les systèmes Linux actuels (système de fichiers journalisé) |
Voir Section 9.4.1, « Chiffrement des disques amovibles à l’aide de dm-crypt/LUKS » pour le partage de données entre plateformes en utilisant le chiffrement au niveau du périphérique.
Le système de fichiers FAT est pris en charge par la plupart des systèmes d'exploitation modernes et est assez utile dans le but d'échanger des données par l’intermédiaire de supports du type disque dur amovible.
Pour le formatage de périphériques de type disque dur amovible pour l’échange de données entre plateformes avec un système de fichiers FAT, ce qui suit peut être le choix sûr :
les partitionner avec fdisk
(8),
cfdisk
(8) ou parted
(8) (voir Section 9.3.1, « Configuration de la partition du disque ») en une seule partition primaire
et la marquer comme suit :
formater la partition primaire avec mkfs.vfat
(8) comme
suit :
/dev/sda1
», pour la FAT16
-F 32 /dev/sda1
», pour la FAT32
Lors de l’utilisation des systèmes de fichiers FAT ou ISO9660 pour le partage de données ce qui suit sera une précaution sûre :
tar
(1), cpio
(1) ou
afio
(1) afin de conserver les noms de fichiers longs, les
permissions de fichiers d'origine d’Unix et les informations de
propriétaire.
split
(1) afin de le protéger contre les
limitations de taille de fichier.
La taille maximum d'un fichier FAT, par conception, est de (2^32 -
1) octets = (4GiB - 1 octet)
. Pour certaines applications sur le
système 32 bits plus ancien, la taille maximum était même plus faible
(2^31 - 1) octets = (2Gio - 1 octet)
. Debian nesouffre
pas de ce dernier problème.
Microsoft lui-même ne recommande pas l’utilisation de FAT pour des disques ou des partitions de plus de 200 Mo. Microsoft met en avant ces limitations comme une utilisation inefficace de l’espace disque dans leur « Overview of FAT, HPFS, and NTFS File Systems ». Bien sûr, on peut normalement utiliser le système de fichiers ext3 pour Linux.
Pour davantage d'informations sur les systèmes de fichiers et les accès aux systèmes de fichiers, veuillez consulter « Filesystems HOWTO ».
Lors du partage de données avec d'autres systèmes au travers du réseau, vous devrez utiliser un service commun. Voici quelques éléments :
Tableau 10.6. Liste des services réseau à choisir avec le scénario typique d'utilisation
service réseau | description d'un scénario typique d'utilisation |
---|---|
SMB/CIFS système de fichiers monté avec Samba |
partage de fichiers par l’intermédiaire de « Microsoft Windows
Network », voir smb.conf (5) et Le HOWTO et guide de référence
officiel de Samba 3.2. ou le paquet samba-doc
|
système de fichiers monté au travers du réseau NFS avec le noyau Linux |
partager des fichiers par « Unix/Linux Network », voir
exports (5) et Linux
NFS-HOWTO
|
service HTTP | partager des fichiers entre client et serveur web |
service HTTPS | partager des fichiers entre le client et le serveur web avec un chiffrement Secure Sockets Layer (SSL) ou Transport Layer Security (TLS) |
service FTP | partager des fichiers entre serveur et client FTP |
Bien que ces systèmes de fichiers montés au travers du réseau et les méthodes de transfert au travers du réseau soient assez pratiques pour partager des données, elles peuvent être non sûres. Leur connexion réseau doit être sécurisée par ce qui suit :
voir aussi Section 6.10, « Autres serveurs d'applications réseau » et Section 6.11, « Autres clients d'applications réseau ».
Lors du choix d'un support d'enregistrement de données informatiques destiné à l’archivage de données importantes, il faut faire attention à leurs limitations. Pour des petites sauvegardes de données personnelles, j'utilise des CD-R et des DVD-R provenant d'une grande marque et je les range dans un endroit frais, à l’ombre, sec et propre. (Les support d'archive sur bande semblent être populaires pour les utilisations professionnelles).
Un coffre-fort anti-feu est destiné aux documents sur papier. La plupart des support de stockage de données informatiques ont une tolérance en température inférieure à celle du papier. J'utilise en général plusieurs copies chiffrées stockées dans différents endroits sûrs..
Durées de vie optimistes des moyens d'archivage trouvées sur le net (la plupart à partir d'informations des constructeurs).
Ceci ne prend pas en compte les défaillances mécaniques dues aux manipulations, etc.
Nombre de cycles d'écriture optimistes des moyens d'archivage trouvées sur le net (la plupart à partir d'informations des constructeurs).
Ces chiffres de durée de vie et de nombre de cycles ne devront pas être utilisés pour des décisions concernant l’enregistrement de données critiques. Veuillez consulter les informations spécifiques au produit fournies par le constructeur.
Comme les CD/DVD-R et le papier n'ont qu'un cycle d'écriture de 1, ils évitent de manière inhérente le risque de perte de données par écrasement. C'est un avantage :!
Si vous devez faire des sauvegardes fréquentes et rapide d'un gros volume de données, un disque dur sur une liaison réseau à haute vitesse peut être la seule option réaliste.
Nous discutons ici des manipulations sur l’image disque. Voir aussi Section 9.3, « Astuces relatives au stockage des données ».
Le fichier image du disque, « disk.img
» d'un
périphérique non monté, par exemple, le second périphérique SCSI
« /dev/sdb
» peut être créé en utilisant
cp
(1) ou dd
(1) par ce qui suit :
# cp /dev/sdb disque.img # dd if=/dev/sdb of=disque.img
L’image disque du master boot record
(MBR) (secteur principal d'amorçage) (voirSection 9.3.1, « Configuration de la partition du disque ») qui se trouve sur le premier
secteur du disque primaire IDE peut être faite en utilisant
dd
(1) comme suit :
# dd if=/dev/hda of=mbr.img bs=512 count=1 # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
mbr.img
» : MBR avec la table des
partitions
mbr-nopart.img
» : MBR sans la table des
partitions
part.img
» : table de partition du MBR
seul
Si vous avez un périphérique SCSI (y-compris les nouveaux disque de type
serial ATA) comme disque d'amorçage, remplacez
« /dev/hda
» avec
« /dev/sda
».
Si vous réalisez une image d'une partition de disque du disque d'origine,
remplacez « /dev/hda
» par
« /dev/hda1
», etc.
Le fichier image du disque « disk.img
» peut
être écrit vers un disque non monté, par exemple le second disque SCSI
« /dev/sdb
» avec la taille correspondante par
ce qui suit :
# dd if=disk.img of=/dev/sdb
De la même manière, le fichier image de la partition du disque,
« partition.img
» peut être écrit sur une
partition non montée, par exemple, la première partition du second disque
SCSI « /dev/sdb1
» avec la taille
correspondante comme suit :
# dd if=partition.img of=/dev/sdb1
L’image disque « partition.img
», qui contient
une partition image unique, peut être monté et démonter en utilisant le
périphérique de rebouclage (loop device)
de la manière suivante :
# losetup -v -f partition.img Loop device is /dev/loop0 # mkdir -p /mnt/loop0 # mount -t auto /dev/loop0 /mnt/loop0 ...hack...hack...hack # umount /dev/loop0 # losetup -d /dev/loop0
Ceci peut être simplifié de la manière suivante :
# mkdir -p /mnt/loop0 # mount -t auto -o loop partition.img /mnt/loop0 ...hack...hack...hack # umount partition.img
Chaque partition de l’image disque « disk.img
»
contenant plusieurs partitions peut être monté en utilisant le périphérique de rebouclage (loop device). Comme,
par défaut, le périphérique de rebouclage ne gère par par partitions, il
faut le réinitialiser de la manière suivante :
# modinfo -p loop # verify kernel capability max_part:Maximum number of partitions per loop device max_loop:Maximum number of loop devices # losetup -a # verify nothing using the loop device # rmmod loop # modprobe loop max_part=16
Maintenant, le périphérique de rebouclage peut gérer jusqu’à 16 partitions.
# losetup -v -f disk.img Loop device is /dev/loop0 # fdisk -l /dev/loop0 Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x452b6464 Device Boot Start End Blocks Id System /dev/loop0p1 1 600 4819468+ 83 Linux /dev/loop0p2 601 652 417690 83 Linux # mkdir -p /mnt/loop0p1 # mount -t ext3 /dev/loop0p1 /mnt/loop0p1 # mkdir -p /mnt/loop0p2 # mount -t ext3 /dev/loop0p2 /mnt/loop0p2 ...hack...hack...hack # umount /dev/loop0p1 # umount /dev/loop0p2 # losetup -d /dev/loop0
En remplacement, des effets similaires peuvent être obtenus en utilisant les
périphériques device mapper créés par
kpartx
(8) du paquet kpartx
de la
manière suivante :
# kpartx -a -v disk.img ... # mkdir -p /mnt/loop0p2 # mount -t ext3 /dev/mapper/loop0p2 /mnt/loop0p2 ... ...hack...hack...hack # umount /dev/mapper/loop0p2 ... # kpartx -d /mnt/loop0
Vous pouvez monter une partition unique d'une telle image de disque avec le périphérique de rebouclage en utilisant un décalage pour sauter le MBR ou autre. Mais ceci est susceptible d'induire des erreurs.
Un fichier image disque « disk.img
» peut être
nettoyé de tous les fichiers supprimés pour donner une image propre
« new.img
» de la manière suivante :
# mkdir old; mkdir new # mount -t auto -o loop disk.img old # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G # mount -t auto -o loop new.img new # cd old # cp -a --sparse=always ./ ../new/ # cd .. # umount new.img # umount disk.img
Si « disk.img
» est un système de fichier ext2
ou ext3, vous pouvez aussi utiliser zerofree
(8) du paquet
zerofree
de la manière suivante :
# losetup -f -v disk.img Loop device is /dev/loop3 # zerofree /dev/loop3 # cp --sparse=always disk.img new.img
Le fichier image du disque vide « sparse
», qui
pourra s'étendre jusqu'à 5Gio peut être faite en utilisant
dd
(1) et mke2fs
(8) comme suit :
$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G
Vous pouvez créer un système de fichiers ext3 sur cette image disque
« disk.img
» en utilisant le périphérique de rebouclage (loop device) de la
manière suivante :
# losetup -f -v disk.img Loop device is /dev/loop1 # mkfs.ext3 /dev/loop1 ...hack...hack...hack # losetup -d /dev/loop1 $ du --apparent-size -h disk.img 5.0G disk.img $ du -h disk.img 83M disk.img
Pour « disk.img
», sa taille de fichier de 5.0
Gio et son utilisation disque est uniquement de 83Mio. Cette discordance est
possible car ext2fs sait maintenir un fichier sparse.
L’utilisation réelle sur le disque du fichier sparse croît au fur et à mesure qu'on y écrit des données .
En utilisant des opérations similaires sur les périphériques créés par
loop device ou les périphériques device mapper comme dans Section 10.2.3, « Monter le fichier image dur disque », vous pouvez partitionner cette
image disque « disk.img
» en utilisant
parted
(8) ou fdisk
(8), et y créer un
système de fichiers en utilisant mkfs.ext3
(8),
mkswap
(8), etc.
On peut faire le fichier image ISO9660,
« cd.iso
», depuis l’arborescence de répertoire
source située à « répertoire_source
», en
utilisant genisoimage
(1) fourni parcdrkit de la manière suivante :
# genisoimage -r -J -T -V volume_id -o cd.iso répertoire_source
De la même manière, on peut créer le fichier image ISO9660 amorçable
« cdboot.iso
» depuis une arborescence comme
celle de debian-installer
située en
« source_directory
», de la manière
suivante :
# genisoimage -r -o cdboot.iso -V volume_id \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table répertoire_source
Ici, le chargeur d'amorçage Isolinux (voir Section 3.3, « Étage 2 : le chargeur initial ») est utilisé pour l’amorçage.
Vous pouvez calculer la valeur de la somme md5 (md5sum) et construire des image ISO9660 directement depuis un lecteur de CD-ROM de la manière suivante :
$ isoinfo -d -i /dev/cdrom CD-ROM is in ISO 9660 format ... Logical block size is: 2048 Volume size is: 23150592 ... # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
Vous devrez prendre garde à éviter le bogue de lecture anticipée du système de fichiers ISO9660 de Linux comme ci-dessus afin d’obtenir les résultats corrects.
Un DVD n'est qu'un gros CD pour wodim
(1) qui est fourni
par cdrkit.
Vous pouvez rechercher un périphérique utilisable comme suit :
# wodim --devices
Le CD-R vierge est alors inséré dans le graveur de CD et le fichier image
ISO9660 « cd.iso
» est écrit vers le
périphérique, par exemple; « /dev/hda
» en
utilisant wodim
(1) de la manière suivante :
# wodim -v -eject dev=/dev/hda cd.iso
Si un CD-RW est utilisé à la place d'un CD-R, faites alors ce qui suit :
# wodim -v -eject blank=fast dev=/dev/hda cd.iso
Si votre système de bureau monte automatiquement les CD, démontez-le par la
commande « sudo unmount /dev/hda
» avant
d'utiliser wodim
(1).
Si « cd.iso
» contient une image ISO9660, ce
qui suit permet alors de le monter manuellement sur
« /cdrom
» :
# mount -t iso9660 -o ro,loop cd.iso /cdrom
Les systèmes de bureau modernes montent automatiquement les supports amovibles (voir Section 10.1.10, « Périphériques d'enregistrement amovibles »).
Sous allons ici discuter aussi de la manipulation directe des données binaires sur le support d'enregistrement. Voir Section 9.3, « Astuces relatives au stockage des données ».
La méthode la plus basique de visualiser des données binaires est d'utiliser
la commande « od -t x1
».
Tableau 10.7. Liste des paquets permettant de visualiser et d'éditer des données binaires
paquet | popcon | taille | description |
---|---|---|---|
coreutils *
|
V:92, I:99 | 13828 |
paquet de base utilisant od (1) pour vider des fichiers
(HEX, ASCII, OCTAL, …)
|
bsdmainutils *
|
V:81, I:99 | 768 |
paquets utilitaires qui utilisent hd (1) pour vider les
fichiers (HEX, ASCII, OCTAL, …)
|
hexedit *
|
V:0.3, I:1.9 | 108 | éditeurs et visualisateurs binaires (HEX, ASCII) |
bless
*
|
V:0.08, I:0.3 | 1232 | éditeur hexadécimal complet (GNOME) |
okteta *
|
V:0.4, I:3 | 2528 | éditeur hexadécimal complet (KDE4) |
ncurses-hexedit *
|
V:0.07, I:0.5 | 192 | éditeur et visualisateur binaire (HEX, ASCII, EBCDIC) |
lde
*
|
V:0.04, I:0.3 | 992 | Linux Disk Editor (Éditeur Disque Linux) |
beav
*
|
V:0.03, I:0.3 | 164 | éditeur et visualisateur binaire (HEX, ASCII, EBCDIC, OCTAL, ...) |
hex
*
|
V:0.01, I:0.09 | 84 | outil de vidage hexadécimal (prend en charge les codes japonais sur 2 octets) |
HEX is used as an acronym for hexadecimal format with radix 16. OCTAL is for octal format with radix 8. ASCII pour Code américain standard pour l’échange d'informations (« American Standard Code for Information Interchange ») c'est-à-dire le code pour texte normal en anglais. EBCDIC signifie Code d'échange étendu décimal codé binaire (« Extended Binary Coded Decimal Interchange Code »), il est utilisé avec par les systèmes d'exploitation des mainframe IBM.
Il existe des outils permettant de lire et d'écrire des fichier sans avoir à monter le disque.
Les systèmes s'appuyant sur le RAID logiciel offert par le noyau Linux permettent une redondance des données au niveau du système de fichiers du noyau afin d'obtenir un haut niveau de fiabilité du système de stockage.
Il existe aussi des outils pour ajouter des données de redondance aux fichiers au niveau du programme applicatif permettant d'obtenir de hauts niveau de fiabilité de stockage.
Tableau 10.9. Liste d'outils pour ajouter des données de redondance aux fichiers
paquet | popcon | taille | description |
---|---|---|---|
par2
*
|
V:0.5, I:1.7 | 272 | Parity Archive Volume Set, pour vérifier et réparer des fichiers |
dvdisaster *
|
V:0.14, I:0.7 | 1388 | protection des supports CD et DVD contre les pertes de données, les rayures et le vieillissement |
dvbackup *
|
V:0.01, I:0.09 | 544 |
outil de sauvegarde utilisant des caméscopes MiniDV (fournissant
rsbep (1))
|
vdmfec *
|
V:0.00, I:0.02 | 88 | récupération de blocs en utilisant une correction d'erreur vers l’avant (« Forward Error Correction ») |
Il y a des outils pour la récupération des données et l’analyse par autopsie.
Tableau 10.10. Liste de paquets pour pour la récupération de données et l’analyse par autopsie
paquet | popcon | taille | description |
---|---|---|---|
testdisk *
|
V:0.3, I:3 | 4620 | utilitaires pour l’examen de partitions et la récupération de disque |
magicrescue *
|
V:0.07, I:0.5 | 344 | utilitaire pour la récupération de fichiers et de recherchedes octets magiques |
scalpel *
|
V:0.03, I:0.2 | 124 | récupérateur de fichiers sobre de haute performance |
myrescue *
|
V:0.02, I:0.18 | 84 | récupérer des données depuis des disques endommagés |
recover *
|
V:0.07, I:0.6 | 104 | utilitaire pour récupérer des fichiers effacés d'un système de fichiers ext2 |
e2undel *
|
V:0.07, I:0.5 | 244 | utilitaire pour récupérer des fichiers effacés d'un système de fichiers ext2 |
ext3grep *
|
V:0.08, I:0.6 | 300 | outil pour aider à la récupération de fichiers effacés sur un système de fichiers ext3 |
scrounge-ntfs *
|
V:0.03, I:0.4 | 80 | programme de récupération de données pour les systèmes de fichiers NTFS |
gzrt
*
|
V:0.01, I:0.12 | 68 | boîte à outils de récupération gzip |
sleuthkit *
|
V:0.13, I:0.7 | 540 | outil pour autopsie (« forensics analysis« ». (Sleuthkit) |
autopsy *
|
V:0.07, I:0.4 | 1372 | interface graphique à SleuthKit |
foremost *
|
V:0.11, I:0.8 | 140 | application d'autopsie pour la récupération de données |
guymager *
|
V:0.00, I:0.02 | 688 | outil de création d'image d'autopsie basée sur Qt |
tct
*
|
V:0.03, I:0.2 | 604 | utilitaires relatifs aux autopsies |
dcfldd *
|
V:0.03, I:0.2 | 124 |
version améliorée de dd pour les autopsie et la sécurité
|
rdd
*
|
V:0.01, I:0.11 | 200 | programme de copie pour autopsie |
Lorsque les données ont un volume trop important pour pouvoir être sauvegardée dans un seul fichier, vous pouvez en sauvegarder le contenu après l’avoir éclaté en morceaux de, par exemple, 2000Mio et réassembler ces morceaux par la suite sous la forme du fichier d'origine.
$ split -b 2000m gros_fichier $ cat x* >gros_fichier
Assurez-vous ne pas pas avoir de nom de fichier commençant par
« x
» afin d'éviter des plantages de nom.
Pour effacer le contenu d'un fichier comme, par exemple, un fichier journal,
n'utilisez pas la commande rm
(1) pour supprimer le
fichier et recréer ensuite un fichier vide parce qu'on peut encore accéder
au fichier dans l’intervalle entre les commandes. Voici est la manière sûre
d'effacer le contenu d'un fichier :
$ :>fichier_a_effacer
Les commandes suivantes créent des fichiers factices ou vides.
$ dd if=/dev/zero of=5kb.file bs=1k count=5 $ dd if=/dev/urandom of=7mb.file bs=1M count=7 $ touch zero.file $ : > alwayszero.file
Vous obtiendrez les fichiers suivants :
5kb.file
» avec 5K de zéros ;
7mb.file
» avec 7Mo de données
aléatoires ;
zero.file
» devrait être un fichier de 0
octet. S'il existait, son mtime
est mis à jour alors que
son contenu et sa taille sont conservés ;
alwayszero.file
fait toujours 0 octet. S'il
existait son mtime
est mis à jour et son contenu vidé.
Il existe plusieurs manière d'effacer complètement les données d'un
périphérique semblable à disque dur, par exemple, une clé USB se trouvant en
« /dev/sda
».
Vérifiez d'abord l’emplacement de votre clé USB avec
mount
(8) avant d'exécuter ces commandes. Le périphérique
pointé par « /dev/sda
» peut être le disque dur
SCSI ou un disque dur SATA sur lequel se trouve l’ensemble de votre système.
Effacer tout le contenu du disque en réinitialisant toutes les données à 0 avec la commande suivante :
# dd if=/dev/zero of=/dev/sda
Tout effacer en écrasant les données existantes par des données aléatoires par la commande suivante :
# dd if=/dev/urandom of=/dev/sda
Effacer de manière très efficace toutes les données en les écrasant avec des données aléatoires par la commande suivante :
# shred -v -n 1 /dev/sda
Comme dd
(1) est disponible depuis l’interpréteur de
commandes de nombreux CD amorçables de Linux tels que le CD de
l’installateur Debian, vous pouvez effacer complètement votre système
installé en lançant la commande d'effacement du disque du disque dur du
système, par exemple, « /dev/hda
»,
« /dev/sda
», etc. depuis un tel support,
Une zone inutilisée du disque dur (ou d’une clé mémoire USB), par
ex. « /devsdb1
» peut encore contenir les
données effacées elles-mêmes puisque elle ne sont que déliées du système de
fichiers. Elles peuvent être nettoyées en les surchargeant.
# mount -t auto /dev/sdb1 /mnt/foo # cd /mnt/foo # dd if=/dev/zero of=junk dd: writing to `junk': No space left on device ... # sync # umount /dev/sdb1
Ceci est en général suffisamment bon pour votre clé mémoire USB. Mais ce n’est pas parfait. La plupart des noms des fichiers effacés et leurs attributs peut être cachés et restés dans le système de fichiers.
Même si vous avez accidentellement supprimé un fichier, tant que ce fichier est en cours d'utilisation par une application quelconque, (en mode lecture ou écriture); il est possible de récupérer un tel fichier.
Essayez, par exemple, ce qui suit :
$ echo toto > titi $ less titi $ ps aux | grep ' less[ ]' bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less titi $ rm titi $ ls -l /proc/4775/fd | grep titi lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/titi (deleted) $ cat /proc/4775/fd/4 >titi $ ls -l -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 titi $ cat titir toto
Exécutez sur une autre terminal (lorsque vous avez le paquet
lsof
installé) comme suit
$ ls -li titi 2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 titi $ lsof |grep titi|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/titi $ rm titi $ lsof |grep titi|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/titi (deleted) $ cat /proc/4775/fd/4 >titi $ ls -li titi 2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 titi $ cat titi toto
Les fichiers ayant des liens durs peuvent être identifiés par
« ls -li
».
$ ls -li total 0 2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 titi 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 tutu 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 toto
« tutu
» et
« toto
» ont tous les deux un nombre de liens
égal à "« 2 » (>1), ce qui indique qu'ils ont des liens
durs. Leurs numéros d'inodes communs sont
« 2738404 ». Ceci signifie qu'ils représentent le même fichier
liés par un lien dur. Si vous n'arrivez pas à trouver de fichiers liés par
des liens durs, vous pouvez les rechercher par
inode, par exemple « 2738404 », de la manière
suivante :
# find /chemin/vers/point/de/montage -xdev -inum 2738404
L’infrastructure de sécurité des données est fournie par la combinaison d'un outil de chiffrement des données, d'un outil de condensé de messages et d'un outil de signature.
Tableau 10.11. Liste es outils d'une infrastructure de sécurité des données
commande | paquet | popcon | taille | description |
---|---|---|---|---|
gpg (1)
|
gnupg
*
|
V:43, I:99 | 5288 | GNU Privacy Guard - outil de signature et de chiffrement OpenPGP |
N/A |
gnupg-doc *
|
I:1.1 | 4124 | documentation de GNU Privacy Guard |
gpgv (1)
|
gpgv
*
|
V:59, I:99 | 436 | GNU Privacy Guard - outil de vérification de signature |
paperkey (1)
|
paperkey *
|
V:0.01, I:0.10 | 88 | n'extraire que l’information secrète de clés secrètes OpenPGP |
cryptsetup (8), …
|
cryptsetup *
|
V:3, I:5 | 1172 | utilitaires pour périphérique en mode bloc dm-crypto prenant en charge le chiffrement LUKS |
ecryptfs (7), …
|
ecryptfs-utils *
|
V:0.2, I:0.3 | 416 | utilitaires pour le chiffrement de systèmes de fichiers empilés ecryptfs |
md5sum (1)
|
coreutils *
|
V:92, I:99 | 13828 | calculer et vérifier un condensé MD5 de message |
sha1sum (1)
|
coreutils *
|
V:92, I:99 | 13828 | calculer et vérifier un condensé SHA1 de message |
openssl (1ssl)
|
openssl *
|
V:56, I:91 | 2380 |
calculer un condensé de message avec « openssl
dgst » (OpenSSL)
|
Voir Section 9.4, « Astuces de chiffrement des données » sur dm-crypto et ecryptfs qui implémente l’infrastructure de chiffrement automatique des données par l’intermédiaire de modules du noyau de Linux.
Voici les commandes de GNU Privacy Guard pour la gestion de base des clés :
Tableau 10.12. Liste des commandes de GNU Privacy Guard pour la gestion des clés
commande | description |
---|---|
gpg --gen-key
|
générer une nouvelle clé |
gpg --gen-revoke ID_de_mon_utilisateur
|
générer une clé de révocation pour ID_de_mon_utilisateur |
gpg --edit-key ID_utilisateur
|
éditer la clé de manière interactive, « help » pour obtenir de l’aide |
gpg -o fichier --exports
|
exporter toutes les clés vers fichier |
gpg --imports fichier
|
importer toutes les clés depuis fichier |
gpg --send-keys ID_utilisateur
|
envoyer la clé de ID_utilisateur vers le serveur de clés |
gpg --recv-keys ID_utilisateur
|
recevoir la clé de ID_utilisateur du serveur de clés |
gpg --list-keys ID_utilisateur
|
afficher la liste des clés de ID_utilisateur |
gpg --list-sigs ID_utilisateur
|
afficher la liste des signatures de ID_utilisateur |
gpg --check-sigs ID_utilisateur
|
vérifier la signature de ID_utilisateur |
gpg --fingerprint ID_utilisateur
|
vérifier l’empreinte de ID_utilisateur |
gpg --refresh-keys
|
mettre à jour le porte-clé local |
Voici la signification du code de confiance
Tableau 10.13. Liste de la signification des codes de confiance
code | description de la confiance |
---|---|
-
|
pas de confiance d'utilisateur assignée / pas encore calculée |
e
|
échec du calcul de la confiance |
q
|
pas assez d'informations pour le calcul |
n
|
ne jamais faire confiance à cette clé |
m
|
confiance marginale |
f
|
confiance complète |
u
|
confiance ultime |
Ce qui suit permet de charger ma clé
« 1DD8D791
» vers le serveur de clé populaire
« hkp://keys.gnupg.net
» :
$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791
Une bonne configuration de serveur de clés dans
« ~/.gnupg/gpg.conf
» (ou à l’ancien
emplacement « ~/.gnupg/options
») contient ce
qui suit :
keyserver hkp://keys.gnupg.net
Ce qui suit obtient les clés inconnues du serveur de clés :
$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\ cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys
Il y avait un bogue dans OpenPGP
Public Key Server (pre version 0.9.6) qui corrompais les clés ayant
plus de 2 sous-clés. Le paquet du serveur gnupg
(>1.2.1-2) peut gérer ces sous-clés corrompues. Voir
gpg
(1) sous
l’option« --repair-pks-subkey-bug
».
Voici des exemples d'utilisation des commandes de GNU Privacy Guard sur des fichiers :
Tableau 10.14. Liste des commandes de GNU Privacy Guard sur des fichiers
commande | description |
---|---|
gpg -a -s fichier
|
signer fichier dans le fichier ASCII blindé fichier.asc |
gpg --armor --sign fichier
|
, , |
gpg --clearsign fichier
|
signer un fichier en clair |
gpg --clearsign fichier|mail truc@example.org
|
envoyer un message signé en clair à truc@example.org
|
gpg --clearsign --not-dash-escaped fichier_rustine
|
signer en clair fichier_rustine |
gpg --verify fichier
|
vérifier fichier signé en texte clair |
gpg -o fichier.sig -b fichier
|
créer une signature détachée |
gpg -o fichier.sig --detach-sig fichier
|
, , |
gpg --verify fichier.sig fichier
|
vérifier fichier avec fichier.sig |
gpg -o fichier_chiffré.gpg -r nom -e fichier
|
chiffrement par clé publique destiné au « nom » depuis un le « fichier » vers « fichier_chiffré.gpg » |
gpg -o fichier_chiffré.gpg --recipient nom --encrypt
fichier
|
, , |
gpg -o fichier_chiffré.asc -a -r nom -e fichier
|
chiffrement par clé publique destiné au « nom » depuis le « fichier » vers le fichier ASCII blindé « fichier_chiffré.asc » |
gpg -o fichier_chiffré.gpg -c fichier
|
chiffrement symétrique depuis « fichier » vers « fichier_chiffré.gpg » |
gpg -o fichier_chiffré.gpg --symmetric fichier
|
, , |
gpg -o fichier_chiffré.asc -a -c fichier
|
chiffrement symétrique prévu destiné au « nom » depuis le fichier ASCII blindé fichier_chiffré.asc |
gpg -o fichier -d fichier_crypt.gpg -r nom
|
déchiffrement |
gpg -o fichier --decrypt fichier_chiffré.gpg
|
, , |
Ajoutez ce qui suit à « ~/.muttrc
» afin
d'éviter que GnuPG qui est lent ne démarre automatiquement, tout en
permettant sont utilisation en entrant « S
»
depuis l’index du menu :
macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no
Le greffon gnupg
vous permet de lancer GnuPG de manière
transparente pour les fichiers ayant l’extension
« .gpg
», « .asc
»
et « .ppg
».
# aptitude install vim-scripts vim-addon-manager $ vim-addons install gnupg
md5sum
(1) fournit un utilitaire permettant de créé un
fichier de résumé en utilisant la méthode se trouvant dans rfc1321 et en l’utilisant pour vérifier chaque
fichier qu'il contient.
$ md5sum toto titi >tutu.md5 $ cat tut.md5 d3b07384d113edec49eaa6238ad5ff00 toto c157a79031e1c40f85931829bc5fc552 titi $ md5sum -c tutu.md5 toto: OK titi: OK
Le calcule de somme de contrôle MD5 consomme moins de ressources CPU que celle utilisée pour le chiffrage des signature en utilisant GNU Privacy Guard (GnuPG). Habituellement, pour s'assurer de l’intégrité des données, seul le résumé de plus haut niveau est signé par chiffrement.
Il existe de nombreux outils pour fusionner du code source. Les commandes qui suivent ont attiré mon attention :
Tableau 10.15. Liste d'outils destinés à fusionner du code source
commande | paquet | popcon | taille | description |
---|---|---|---|---|
diff (1)
|
diff
*
|
V:68, I:85 | 36 | comparer des fichier ligne à ligne |
diff3 (1)
|
diff
*
|
V:68, I:85 | 36 | comparer et fusionner trois fichiers ligne par ligne |
vimdiff (1)
|
vim
*
|
V:15, I:33 | 1792 | comparer deux fichiers côte à côte dans vim |
patch (1)
|
patch
*
|
V:10, I:92 | 244 | appliquer un fichier de différence (« diff ») à un original |
dpatch (1)
|
dpatch *
|
V:1.4, I:11 | 344 | gérer une série de rustines (patches) pour les paquets Debian |
diffstat (1)
|
diffstat *
|
V:2, I:15 | 92 | afficher un histogramme des modifications apportées par le fichier de différences |
combinediff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | créer une rustine (patch) cumulative à partir de deux rustines incrémentales |
dehtmldiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | extraire un fichier de différence d'une page HTML |
filterdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | extraire ou exclure des différences d'un fichier de différences |
fixcvsdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 |
corriger les fichiers de différences créés par CVS que
patch (1) interprète mal
|
flipdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | échanger l’ordre de deux rustines |
grepdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | afficher quels sont les fichiers modifiés par une rustine correspondant un une expression rationnelle |
interdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | afficher les différences entre deux fichiers de différence unifiés |
lsdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | afficher quels sont les fichiers modifiés par une rustine |
recountdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | recalculer les nombres et les décalages dans un contexte unifié de fichiers de différences |
rediff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | corriger les décalages et les nombres d'un fichier de différence édité manuellement |
splitdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | séparer les rustines incrémentales |
unwrapdiff (1)
|
patchutils *
|
V:1.8, I:14 | 292 | réparer les correctifs dont les mots ont été coupés |
wiggle (1)
|
wiggle *
|
V:0.01, I:0.11 | 232 | appliquer les rustines rejetées |
quilt (1)
|
quilt
*
|
V:1.5, I:9 | 872 | gérer une série de rustines |
meld (1)
|
meld
*
|
V:0.7, I:2 | 2576 | comparer et fusionner des fichiers (GTK) |
xxdiff (1)
|
xxdiff *
|
V:0.2, I:1.3 | 1352 | comparer et fusionner des fichiers (X natif) |
dirdiff (1)
|
dirdiff *
|
V:0.08, I:0.6 | 224 | afficher les différences et fusionner les modifications entre deux arbres de répertoires |
docdiff (1)
|
docdiff *
|
V:0.01, I:0.14 | 688 | comparer deux fichier mot par mot ou caractère par caractère |
imediff2 (1)
|
imediff2 *
|
V:0.02, I:0.10 | 76 | outil en plein écran pour fusionner dans les deux sens |
makepatch (1)
|
makepatch *
|
V:0.01, I:0.17 | 148 | créer des fichiers de rustines étendues |
applypatch (1)
|
makepatch *
|
V:0.01, I:0.17 | 148 | appliquer des fichiers de rustines étendues |
wdiff (1)
|
wdiff
*
|
V:1.6, I:14 | 1024 | afficher les différences de mots entre deux fichiers texte |
Suivez une des procédures suivantes pour extraire les différences entre deux
fichiers sources et créer un fichier de différences unifiées
« fichier.patch0
» ou
« fichier.patch1
» selon l’emplacement du
fichier.
$ diff -u fichier.ancien fichier.nouveau > fichier.patch0 $ diff -u ancien/fichier.nouveau/fichier > fichier.patch1
Le fichier de différence (« diff » (encore appelé fichier « patch » ou rustine) est utilisé pour envoyer une mise à jour de programme. Celui qui reçoit applique cette mise à jour à un autre fichier de la manière suivante :
$ patch -p0 fichier < fichier.patch0 $ patch -p1 fichier < fichier.patch1
Voici un résumé des systèmes de contrôle de version (VCS) sur le système Debian.
Si vous débutez avec les systèmes VCS, vous devriez commencer votre apprentissage avec Git, dont la popularité croît rapidement.
Tableau 10.16. Liste d'outils pour les systèmes de contrôle de version
paquet | popcon | taille | outil | type du VCS | commentaire |
---|---|---|---|---|---|
cssc
*
|
V:0.00, I:0.04 | 2240 | CSSC | local | clone de SCCS Unix (obsolète) |
rcs
*
|
V:1.3, I:7 | 772 | RCS | local | « SCCS Unix en mieux » |
cvs
*
|
V:3, I:21 | 3660 | CVS | distant | standard précédent de VCS distant |
subversion *
|
V:10, I:31 | 4288 | Subversion | distant | « CVS en mieux », de fait le nouveau standard de VCS distant |
git
*
|
V:5, I:17 | 10632 | Git | distribué | DVCS rapide en C (utilisé par le noyau de Linux et d'autres) |
mercurial *
|
V:1.8, I:6 | 368 | Mercurial | distribué | DVCS en Python avec un peut de C |
bzr
*
|
V:1.1, I:3 | 16220 | Bazaar | distribué |
DVCS influencé par tla écrit en Python (utilisé par
Ubuntu)
|
darcs
*
|
V:0.19, I:1.4 | 9504 | Darcs | distribué | DVCS avec une algèbre intelligente des patches (lent) |
tla
*
|
V:0.17, I:1.4 | 932 | GNU arch | distribué | DVCS principalement de Tom Lord (Historique) |
monotone *
|
V:0.04, I:0.3 | 5272 | Monotone | distribué | DVCS en C++ |
tkcvs
*
|
V:0.08, I:0.4 | 2476 | CVS, … | distant | Interface graphique d'affichage d'une arborescence de dépôt VCS (CVS, Subversion, RCS) |
gitk
*
|
V:0.8, I:4 | 900 | Git | distribué | Interface graphique d'affichage d'une arborescence de dépôt VCS (Git) |
VCS est parfois appelé système de contrôle de révision (RCS), ou gestion de configuration logicielle (SCM).
Un VCS distribué comme Git est, de nos jours, l’outil de choix. CVS etSubversion peuvent continuer à être utiles pour se joindre à certaines activités existantes sur les logiciels libres.
Debian fournit des services de VCS libres depuis le service Debian Alioth. Il prend en charge pratiquement tous les VCS. Sa documentation se trouve sur http://wiki.debian.org/Alioth .
Le paquet git
était les « GNU Interactive
Tools » (Outils interactifs GNU) et le paquet
git-core
était le DVCS dans lenny
.
Il existe quelques bases pour la création d'un accès à une archive VCS.
umask 002
» (voir Section 1.2.4, « Contrôle des permissions pour les fichiers nouvellement créés : umask »)
Voici une comparaison très simplifiée des commandes natives de VCS destinées à donner une vue d'ensemble. La séquences commandes typique peut demander des options et des paramètres.
Tableau 10.17. Comparaison des commandes natives de VCS
CVS | Subversion | Git | fonction |
---|---|---|---|
cvs init
|
svn create
|
git init
|
créer le dépôt (local) |
cvs login
|
- | - | se connecter au dépôt distant |
cvs co
|
svn co
|
git clone
|
vérifiez le dépôt distant comme arborescence de travail |
cvs up
|
svn up
|
git pull
|
mettre à jour l’arborescence de travail depuis le dépôt distant |
cvs add
|
svn add
|
git add .
|
ajouter des fichiers de l’arborescence de travail vers le VCS |
cvs rm
|
svn rm
|
git rm
|
supprimer du VCS des fichiers de l’arborescence de travail |
cvs ci
|
svn ci
|
- | déposer des modification au dépôt distant |
- | - |
git commit -a
|
déposer des modification sur le dépôt local |
- | - |
git push
|
mettre à jour le dépôt distant à l’aide du dépôt local |
cvs status
|
svn status
|
git status
|
afficher l’état de l’arborescence de travail d'après le VCS |
cvs diff
|
svn diff
|
git diff
|
diff <dépôt_de_référence> <arborescence_de_travail> |
- | - |
git repack -a -d; git prune
|
réempaqueter le dépôt local en un seul paquet |
tkcvs
|
tkcvs
|
gitk
|
Interface graphique d'affichage de l’arborescence d'un dépôt VCS |
L’appel d'une sous-commande git
directement avec
« git-xyz
» depuis la ligne de commandes est
devenu obsolète depuis début 2006.
Des outils avec interface graphique comme tkcvs
(1) et
gitk
(1) vous seront d'une aide appréciable pour le suivi
de l’historique de révision des fichiers. L’interface Web fournies par de
nombreuses archives publiques pour parcourir leurs dépôts est assez utile
aussi.
Git peut travailler directement avec différents dépôts VCS tels que ceux
proposés par CVS et Subversion et il fournit un dépôt local pour les
modifications locales à l’aide des paquets git-cvs
et
git-svn
. Voir git pour les
utilisateurs de CVS et Section 10.9.4, « Git pour le dépôt Subversion ».
Git possède des commandes qui n'ont pas d'équivalent dans CVS ni Subversion : « fetch », « rebase », « cherry-pick », …
Voir ce qui suit :
cvs
(1)
/usr/share/doc/cvs/html-cvsclient
»
/usr/share/doc/cvs/html-info
»
/usr/share/doc/cvsbook
»
info cvs
»
La configuration suivante permet de ne faire des dépôts
(« commit ») vers le dépôt du CVS que par les membres du groupe
« src
» et l’administration du CVS que par un
membre du groupe « staff
», réduisant ainsi la
chance de se détruire soi-même.
# cd /var/lib; umask 002; mkdir cvs # export CVSROOT=/srv/cvs/projet # cd $CVSROOT # chown root:src . # chmod 2775 . # cvs -d $CVSROOT init # cd CVSROOT # chown -R root:staff . # chmod 2775 . # touch val-tags # chmod 664 history val-tags # chown root:src history val-tags
Vous pouvez restreindre la création d'un nouveau projet en modifiant le
propriétaire du répertoire « $CVSROOT
» pour
« root:staff
» et ses permissions à
« 3775
».
La variable « $CVSROOT
» pointe vers le dépôt
par défaut. Ce qui suit définit « $CVSROOT
»
pour l’accès local :
$ export CVSROOT=/srv/cvs/project
De nombreux serveurs CVS d'accès public fournissent un accès distant en
lecture avec le nom de compte « anonymous
» par
l’intermédiaire du service pserver. Par exemple, le contenu du site web
Debian est maintenu par l’intermédiaire du projet webwml sous le CVS du service alioth de
Debian. Ce qui suit permet de configurer
« $CVSROOT
» pour un accès distant à ce dépôt
CVS :
$ export CVSROOT=:pserver:anonymous@cvs.alioth.debian.org:/cvsroot/webwml $ cvs login
Comme pserver est sujet à des attaques d'espionnage et peu sûr, l’accès en écriture est habituellement désactivé par les administrateurs du serveur.
Ce qui suit définit « $CVS_RSH
» et
» $CVSROOT
» pour l’accès distant avec SSH au
dépôt CVS du projet webwml :
$ export CVS_RSH=ssh $ export CVSROOT=:ext:account@cvs.alioth.debian.org:/cvs/webwml
Vous pouvez aussi utiliser une clé publique d'authentification pour SSH, ce qui élimine l’invite à distance pour l’entrée du mot de passe.
Créez un nouvel emplacement d'arborescence locale des sources dans
« ~/chemin/vers/module1
» par la commande
suivante :
$ mkdir -p ~/chemin/vers/module1; cd ~/chemin/vers/module1
Mettez des fichiers dans la nouvelles arborescence locale de sources se
trouvant en « ~/chemin/vers/module1
».
Importez-les vers CVS avec les paramètres suivants :
module1
»
Branche-principale
» (étiquette
pour toute la branche)
Version-initiale
» (étiquette
pour une version spécifique)
$ cd ~/chemin/vers/module1 $ cvs import -m "Start module1" module1 Branche-principale Version-initiale $ rm -Rf . # optionnel
CVS n'écrase pas un fichier du dépôt actuel mais le remplace par un
autre. La permission en écriture vers le répertoire du dépôt est donc
critique. Lancez ce qui suit, pour chaque nouveau module de
« module1
» dans le dépôt à
« /srv/cvs/projet
», afin de vous assurer, si
nécessaire, que cette condition est remplie :
# cd /srv/cvs/projet # chown -R root:src module1 # chmod -R ug+rwX module1 # chmod 2775 module1
Voici un exemple de flux de travail typique utilisant CVS.
Vérifiez tous les modules disponibles du projet CVS pointé par
« $CVSROOT
» comme suit :
$ cvs rls CVSROOT module1 module2 ...
Récupérez le « module1
» depuis son répertoire
par défaut « ./module1
» de la manière
suivante :
$ cd ~/path/to $ cvs co module1 $ cd module1
Effectuez les modifications de contenu au besoin.
Vérifiez les modifications par un équivalent de « diff -u
[repository] [local]
» de la manière suivante :
$ cvs diff -u
Vous-vous apercevez que vous avez cassé sévèrement un fichier appelé
« fichier_à_restaurer
» mais que les autres
fichiers sont corrects.
Écrasez le fichier « fichier_à_restaurer
» avec
une copie propre venant du CVS de la manière suivante :
$ cvs up -C fichier_à_restaurer
Enregistrez l’arborescence source locale vers le CVS comme suit :
$ cvs ci -m "Décrire les modifications"
Créez et ajoutez le fichier
« fichier_à_ajouter
» au CVS comme suit :
$ vi fichier_à_ajouter $ cvs add fichier_à_ajouter $ cvs ci -m "Ajout de fichier_à_ajouter"
Fusionnez la dernière version depuis le CVS comme suit :
$ cvs up -d
Recherchez les lignes commençant par « C
filename
» qui indiquent des modifications en conflit.
Recherchez du code non modifié dans
« .#nom_fichier.version
».
Recherchez « <<<<<<<
» et
« >>>>>>>
» dans les
fichiers qui indiquent des conflits de modifications.
Au besoin, éditez les fichiers pour résoudre les conflits.
Ajoutez l’étiquette de version (« release tag« »)
« Version-1
» comme suit :
$ cvs ci -m "dernière proposition pour Version-1" $ cvs tag Version-1
Poursuivez l’édition.
Supprimez l’étiquette de version « Version-1
»
comme suit :
$ cvs tag -d Version-1
Vérifiez les modifications du CVS comme suit :
$ cvs ci -m "vraiment la dernière proposition pour Version-1"
Ajoutez de nouveau, de la manière suivante, l’étiquette
« Version-1
» à HEAD de « main » du
CVS mis à jour :
$ cvs tag Version-1
Créez une branche avec une étiquette de branche « collante »
Version-initiale-corrections-de-bogues
» depuis la
version d'origine pointée par l’étiquette
« Version-initiale
» et exportez-la vers le
répertoire ~/chemin/vers/ancien
» comme suit :
$ cvs rtag -b -r Version-initiale Version-initiale-corrections-de-bogues module1 $ cd ~/chemin/vers $ cvs co -r Version-initiale-corrections-de-bogues -d ancien module1 $ cd ancien
Utilisez -D 2005-12-20
» (format de date
ISO 8601) plutôt que « -r
Version-initiale
» pour indiquer une date particulière comme
point de branche.
Travaillez sur cette arborescence locale possédant l’étiquette
« collante »
« Version-initiale-corrections-de-bogues
» qui
est basée sur la version d'origine.
Travaillez vous-même sur cette branche... jusqu'à ce que quelqu'un d'autre
rejoigne cette branche
« Version-initiale-corrections-de-bogues
».
Synchronisez les fichiers modifiés par d'autres sur cette branche, en créant de nouveaux répertoires si nécessaire, de la manière suivante :
$ cvs up -d
Au besoin, éditez les fichiers pour résoudre les conflits.
Vérifiez les modifications du CVS comme suit :
$ cvs ci -m "checked into this branch"
Mettez à jour l’arborescence locale depuis HEAD de main en supprimant
l’étiquette collante (« sticky tag »)
(« -A
») et sans expansion de mots-clés
(« -kk
») comme suit :
$ cvs up -d -kk -A
Mettez à jour l’arborescence locale (contenu = HEAD de main) en fusionnant
depuis la branche
« Version-initiale-corrections-de-bogues
» et
sans expansion des mots-clés en faisant ce qui suit :
$ cvs up -d -kk -j Version-initiale-corrections-de-bogues
Corrigez les conflits avec l’éditeur.
Vérifiez les modifications du CVS comme suit :
$ cvs ci -m "Version-initiale-corrections-de-bogues fusionnée"
Réalisez une archive de la manière suivante :
$ cd .. $ mv ancien ancien-module1-corrections_bogues $ tar -cvzf ancien-module1-corrections_bogues.tar.gz ancien-module1-corrections_bogues $ rm -rf ancien-module1-corrections_bogues
La commande « cvs up
» peut prendre l’option
« -d
» pour créer de nouveaux répertoires et
l’option « -P
» pour supprimer les répertoires
vides.
Vous pouvez ne vérifier qu'un sous-répertoire de
« module1
» en indiquant son nom comme, par
exemple, « cvs co module1/sous-répertoire
».
Tableau 10.18. Options importantes des commandes CVS (à utiliser comme
premier(s)paramètre(s) à cvs
(1))
option | signification |
---|---|
-n
|
simulation, pas d'effet |
-t
|
afficher les messages montrant les étapes des actions de cvs |
Pour obtenir les derniers fichiers du CVS, utilisez
« tomorrow
» comme suit :
$ cvs ex -D tomorrow nom_module
Ajoutez l’alias « mx
» à un projet CVS (serveur
local) de la manière suivante :
$ export CVSROOT=/srv/cvs/projet $ cvs co CVSROOT/modules $ cd CVSROOT $ echo "mx -a module1" >>modules $ cvs ci -m "mx est maintenant un alias de module1" $ cvs release -d .
Vous pouvez maintenant vérifier « module1
»
(alias : « mx
») depuis le CVS vers le
répertoire « new
» de la manière
suivante :
$ cvs co -d nouveau mx $ cd nouveau
Afin de pouvoir effectuer la procédure précédente, vous devrez avoir les permissions d'accès aux fichier appropriées.
Lorsque vous vérifiez des fichiers du CVS, leur bit d'autorisation en exécution est conservé.
Si vous rencontrez des problèmes de droits d'exécution avec un fichier
récupéré, par exemple « nom_fichier
»,
modifiez-en les permissions dans le répertoire correspondant du dépôt CVS
par ce qui suit afin de corriger ce problème :
# chmod ugo-x nom_de_fichier
Subversion est un système de contrôle de version de génération récente qui remplace l’ancien CVS. Il en possède la plupart des fonctionnalités à l’exception des étiquettes et des branches.
Vous devrez installer les paquets subversion
,
libapache2-svn
et subversion-tools
pour mettre en place un serveur Subversion.
Actuellement, le paquet subversion
ne configure pas le
dépôt, on doit donc le faire manuellement. Un emplacement possible pour le
dépôt se trouve en « /srv/svn/projet
».
Créez un répertoire de la manière suivante :
# mkdir -p /srv/svn/projet
Créez la base de données du dépôt comme suit :
# svnadmin create /srv/svn/projet
Si vous n'avez accès au dépôt de Subversion que par un serveur Apache2, il vous suffira de ne rendre le dépôt accessible en écriture que par le serveur WWW de la manière suivante :
# chown -R www-data:www-data /srv/svn/projet
Ajouter (ou décommenter) ce qui suit dans
« /etc/apache2/mods-available/dav_svn.conf
»
afin de permettre l’accès au dépôt avec une authentification de
l’utilisateur.
<Location /projet> DAV svn SVNPath /srv/svn/projet AuthType Basic AuthName "Dépôt subversion" AuthUserFile /etc/subversion/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
Créer un fichier d'authentification des utilisateurs avec la commande suivante :
# htpasswd2 -c /etc/subversion/passwd nom_utilisateur
Redémarrez Apache2.
Votre nouveau dépôt Subversion est accessible à l’URL
« http://localhost/projet
» et
« http://example.com/projet
» depuis
svn
(1) (en supposant que l’URL du serveur web est
« http://example.com/
»).
Ce qui suit configure le dépôt Subversion pour un accès local par un groupe,
projet
, par exemple :
# chmod 2775 /srv/svn/projet # chown -R root:src /srv/svn/projet # chmod -R ug+rwX /srv/svn/projet
Votre nouveau dépôt Subversion est accessible aux utilisateurs locaux
appartenant au groupe projet
à l’URL
« file:///localhost/srv/svn/projet
» ou
« file:///srv/svn/projet
» depuis
svn
(1) . Vous devrez lancer des commandes comme
svn
, svnserve
,
svnlook
et svnadmin
avec
« umask 002
» afin de permettre l’accès au
groupe.
Un dépôt Subversion accessible à un groupe se trouve pour SSH à l’URL
« example.com:/srv/svn/projet
», vous pouvez y
accéder avec svn
(1) à l’URL
« svn+ssh://example.com:/srv/svn/projet
".
Afin de compenser le manque de branches et d'étiquettes, de nombreux projets utilisent une arborescence de répertoires semblable à la suivante pour Subversion :
----- module1 | |-- branches | |-- tags | | |-- version-1.0 | | `-- version-2.0 | | | `-- trunk | |-- fichier1 | |-- fichier2 | `-- fichier3 | `-- module2
Vous devez utiliser la commande « svn copy …
»
pour marquer les branches et les étiquettes. Ceci permet de s'assurer que
Subversion enregistre correctement l’historique de modification des fichiers
et économise l’espace disque.
Créez un nouvel emplacement d'arborescence locale des sources dans
« ~/chemin/vers/module1
» par la commande
suivante :
$ mkdir -p ~/chemin/vers/module1; cd ~/chemin/vers/module1
Mettez des fichiers dans la nouvelles arborescence locale de sources se
trouvant en « ~/chemin/vers/module1
».
Importez-le dans Subversion avec les paramètres suivants :
module1
»
file:///srv/svn/projet
»
module1/trunk
»
module1/tags/Version-initiale
»
$ cd ~/chemin/vers/module1 $ svn import file:///srv/svn/projet/module1/trunk -m "Lancement module1" $ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Version-initiale
Ou encore, comme suit :
$ svn import ~/chemin/vers/module1 file:///srv/svn/projet/module1/trunk -m "Lancement module1" $ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Version-initiale
Vous pouvez remplacer des formats d'URL comme
« file:///…
» par d'autres formats d'URL comme
« http://…
» et
« svn+ssh://…
».
Voici un exemple typique de flux de travail utilisant Subversion avec son client natif.
Les commandes du client proposées par le paquet git-svn
peuvent proposer un mode d’utilisation de remplacement pour Subversion en
utilisant la commande git
. Voir Section 10.9.4, « Git pour le dépôt Subversion ».
Vérifiez de la manière suivante tous les modules disponibles depuis le
projet pointé par l’URL
« file:///srv/svn/projet
» :
$ svn list file:///srv/svn/projet module1 module2 ...
Récupérez « module1/trunk
» dans un répertoire
« module1
» comme suit :
$ cd ~/chemin/vers $ svn co file:///srv/svn/projet/module1/trunk module1 $ cd module1
Effectuez les modifications de contenu au besoin.
Vérifiez les modifications par un équivalent de « diff -u
[repository] [local]
» de la manière suivante :
$ svn diff
Vous-vous apercevez que vous avez cassé sévèrement un fichier appelé
« fichier_à_restaurer
» mais que les autres
fichiers sont corrects.
Écrasez le fichier « fichier_a_annuler
» avec
une nouvelle copie propre depuis Subversion comme suit :
$ svn revert fichier_a_annuler
Enregistrez l’arbre local des sources mis à jour vers Subversion comme suit :
$ svn ci -m "Décrire les modifications"
Créez et ajoutez le fichier
« fichier_a_ajouter
» dans Subversion comme
suit :
$ vi fichier_a_ajouter $ svn add fichier_a_ajouter $ svn ci -m "fichier_a_ajouter ajouté"
Fusionnez la dernière version depuis Subversion comme suit :
$ svn up
Recherchez les lignes commençant par « C
filename
» qui indiquent des modifications en conflit.
Recherchez le code non modifié, par exemple
« nom_fichier.r6
»,
« nom_fichier.r9
» et
« nom_fichier.mien
».
Recherchez « <<<<<<<
» et
« >>>>>>>
» dans les
fichiers qui indiquent des conflits de modifications.
Au besoin, éditez les fichiers pour résoudre les conflits.
Ajoutez l’étiquette de version (« release tag« »)
« Version-1
» comme suit :
$ svn ci -m "dernier « commit » pour la Release-1" $ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Release-1
Poursuivez l’édition.
Supprimez l’étiquette de version « Version-1
»
comme suit :
$ svn rm file:///srv/svn/projet/module1/tags/Release-1
Récupérez les modifications depuis Subversion comme suit :
$ svn ci -m "vraiment le dernier commit pour Release-1"
Ajoutez de nouveau la balise « Version-1
»
depuis la version mise à jour de HEAD de trunk de Subversion comme
suit :
$ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Version-1
Créez une branche dont le chemin est
« module1/branches/Release-initial-bugfixes
»
depuis la version initiale pointée par le chemin
« module1/tags/Release-initial
» et
récupérez-le vers le répertoire
« ~/chemin/vers/ancien
» comme suit :
$ svn cp file:///srv/svn/projet/module1/tags/Version-initiale file:///srv/svn/projet/module1/branches/Version-initale-corrections-de-bogues $ cd ~/chemin/vers $ svn co file:///srv/svn/projet/module1/branches/Version-initiale-corrections-de-bogues ancien $ cd ancien
Utilisez « module1/trunk@{2005-12-20}
» (format
de date ISO 8601) plutôt que
« module1/tags/Release-initial
» pour indiquer
une date particulière comme point de branche.
Travaillez sur cet arbre de sources local pointant vers la branche
« Version-initiale-corrections-de-bogues
» qui
est basée sur la version initiale.
Travaillez vous-même sur cette branche... jusqu'à ce que quelqu'un d'autre
rejoigne cette branche
« Version-initiale-corrections-de-bogues
».
Effectuez la synchronisation avec les fichiers de cette branche modifiés par d'autres comme suit :
$ svn up
Au besoin, éditez les fichiers pour résoudre les conflits.
Récupérez les modifications depuis Subversion comme suit :
$ svn ci -m "récupérés dans cette branche"
Mettez à jour l’arborescence local avec HEAD de trunk de la manière suivante :
$ svn switch file:///srv/svn/projet/module1/trunk
Mettez à jour l’arborescence locale (contenu = HEAD de trunk) en fusionnant
depuis la branche
« Version-initiale-corrections-de-bogues
» par
ce qui suit :
$ svn merge file:///srv/svn/projet/module1/branches/Version-initiale-corrections-de-bogues
Corrigez les conflits avec l’éditeur.
Récupérez les modifications depuis Subversion comme suit :
$ svn ci -m "Version-initiale-corrections-de-bogues fusionnée"
Réalisez une archive de la manière suivante :
$ cd .. $ mv ancien ancien-module1-corrections_bogues $ tar -cvzf ancien-module1-corrections_bogues.tar.gz ancien-module1-corrections_bogues $ rm -rf ancien-module1-corrections_bogues
Vous pouvez remplacer des formats d'URL comme
« file:///…
» par d'autres formats d'URL comme
« http://…
» et
« svn+ssh://…
».
Vous pouvez ne vérifier (« checkout ») qu'un sous-répertoire de
« module1
» en indiquant son nom comme, par
exemple, « svn co
file:///srv/svn/projet/module1/trunk/sous-répertoire
module1/sous-répertoire
», etc.
Tableau 10.19. Options importantes des commandes de Subversion (à utiliser comme premier(s)
paramètre(s) de svn
(1))
option | signification |
---|---|
--dry-run
|
simulation, pas d'effet |
-v
|
affichage détaillé des messages de l’activité de svn |
Git peut tout faire; à la fois pour la gestion du code source local et distant. Ceci signifie que vous pouvez enregistrer les modifications de code source sans avoir besoin d'une connexion réseau avec le dépôt distant.
Vous pourrez définir certains éléments de configuration globaux, comme votre
nom et votre adresse de courriel utilisée par Git, dans
« ~/.gitconfig
» de la manière suivante :
$ git config --global nom.utilisateur "Prénom Nom" $ git config --global nom-utilisateur.email votre-nom@example.com
Si vous avez l’habitude d'utiliser les commandes de CVS ou de Subversion, vous pourrez définir certains alias de commandes comme suit :
$ git config --global alias.ci "commit -a" $ git config --global alias.co checkout
Vous pouvez vérifier votre configuration globale comme de la manière suivante :
$ git config --global --list
Voir ce qui suit :
/usr/share/doc/git-doc/git.html
)
/usr/share/doc/git-doc/user-manual.html
)
/usr/share/doc/git-doc/gittutorial.html
)
/usr/share/doc/git-doc/gittutorial-2.html
)
/usr/share/doc/git-doc/everyday.html
)
git pour les utilisateurs de CVS
« git for CVS users »
(/usr/share/doc/git-doc/gitcvs-migration.html
)
Autres ressources git disponible sur le web
/usr/share/doc/gitmagic/html/index.html
)
Les commandes git-gui
(1) et gitk
(1)
rendent très facile l’utilisation de Git.
Ne pas utiliser d'espaces dans la chaîne de balise même si certains outils
comme gitk
(1) vous permettent de le faire. Cela peut
perturber d'autres commandes de git
.
Même si votre source amont utilise un VCS différent, c'est une bonne idée
d'utiliser git
(1) pour l’activité locale parce qu'il vous
permet de gérer votre copie locale de l’arborescence des sources sans
connexion réseau amont. Voici quelques paquets et commandes utilisés avec
git
(1).
Tableau 10.20. Liste des paquets et des commandes relatifs à git
commande | paquet | popcon | taille | description |
---|---|---|---|---|
N/A |
git-doc *
|
I:3 | 7436 | Documentation officielle de git |
N/A |
gitmagic *
|
I:0.3 | 920 | « Git Magic », le guide le plus facile à comprendre pour Git |
git (7)
|
git
*
|
V:5, I:17 | 10632 | Git, système de contrôle de version rapide, évolutif et distribué |
gitk (1)
|
gitk
*
|
V:0.8, I:4 | 900 | Interface graphique de navigateur de dép Git avec historique |
git-gui (1)
|
git-gui *
|
V:0.3, I:2 | 1612 | Interface graphique pour Git (pas d'historique) |
git-svnimport (1)
|
git-svn *
|
V:0.5, I:3 | 552 | importer des données venant de Subversion dans Git |
git-svn (1)
|
git-svn *
|
V:0.5, I:3 | 552 | fournit un fonctionnement bidirectionnel entre Subversion et Git |
git-cvsimport (1)
|
git-cvs *
|
V:0.17, I:1.6 | 676 | importer des données venant de CVS dans Git |
git-cvsexportcommit (1)
|
git-cvs *
|
V:0.17, I:1.6 | 676 | exporter une proposition (« commit ») récupéré de Git vers un CVS |
git-cvsserver (1)
|
git-cvs *
|
V:0.17, I:1.6 | 676 | émulateur de serveur CVS pour Git |
git-send-email (1)
|
git-email *
|
V:0.12, I:1.7 | 404 | envoyer une série de rustines sous forme de courriel à partir de Git |
stg (1)
|
stgit
*
|
V:0.07, I:0.7 | 1864 | quilt par-dessus git (Python) |
git-buildpackage (1)
|
git-buildpackage *
|
V:0.2, I:1.1 | 596 | automatise la mise en paquet Debian avec Git |
guilt (7)
|
guilt
*
|
V:0.01, I:0.11 | 336 | quilt par-dessus git (SH/AWK/SED/…) |
Avec git
(1), vous travaillez sur une branche locale avec
de nombreuses commit et vous utilisez quelque chose comme
« git rebase -i master
» pour réorganiser plus
tard l’historique des modifications. Ceci vous permet de faire des
modifications propre de l’historique. Voir git-rebase
(1)
et git-cherry-pick
(1).
Si vous désirez retrouver un répertoire propre sans perdre l’état actuel du
répertoire de travail, vous pouvez utiliser « git
stash
». Voir git-stash
(1).
Un dépôt Subversion en
« svn+ssh://svn.example.org/project/module/trunk
» peut
être extrait vers un dépôt Git local en « ./dest
» puis
renvoyé vers le dépôt subversion. Par exemple :
$ git svn clone -s -rHEAD svn+ssh://svn.example.org/project dest $ cd dest ... effectuer des modifications $ git commit -a ... travailler encore avec git $ git svn dcommit
L’utilisation de « rHEAD
» nous permet d’éviter
de devoir cloner l’ensemble du contenu de l’historique du dépôt Subversion.
Vous pouvez enregistrer vous-même un historique chronologique de la
configuration en utilisant les outils Git. Voici
un exemple simple, pour vous exercer, d'enregistrement du contenu de
« /etc/apt/
».
$ cd /etc/apt/ $ sudo git init $ sudo chmod 700 .git $ sudo git add . $ sudo git commit -a
Dépôt (« commit ») d'une configuration avec sa description
Effectuez les modifications dans les fichiers de configuration.
$ cd /etc/apt/ $ sudo git commit -a
Déposez (« commit ») la configuration avec sa description et retournez à vos occupations habituelles.
$ cd /etc/apt/ $ sudo gitk --all
Vous avez avec vous l’historique complet de la configuration.
sudo
(8) est nécessaire pour travailler avec n'importe
quelles permissions sur les données de configuration. Pour les données de
configuration de l’utilisateur, sudo
peut être omis.
La commande « chmod 700 .git
» de l’exemple
ci-dessus est nécessaire pour protéger les données de l’archive d'un accès
en écriture non autorisé.
Pour une configuration plus complète de l’enregistrement de l’historique de
configuration, voyez le paquet etckeeper
package :
Section 9.2.10, « Enregistrer les modifications dans des fichiers de configuration ».
Description des outils et astuces pour convertir différents formats de données sur un système Debian.
Les outils basés sur des standards sont de très bonne qualité mais la prise en charge des formats propriétaires est limités.
Mes yeux ont été attirés par les paquets suivants de conversions de données textuelles :
Tableau 11.1. Liste des outils de conversion de texte
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
libc6
*
|
V:97, I:99 | 10012 | jeu de caractères |
convertisseur de codage de texte entre différents paramètres linguistiques à
l’aide d'iconv (1) (fondamental)
|
recode *
|
V:1.5, I:7 | 772 | charset+eol | convertisseur de codage de texte entre différents paramètres linguistiques (flexible avec plus d'alias et de fonctionnalités) |
konwert *
|
V:0.4, I:4 | 192 | jeu de caractères | text encoding converter between locales (le luxe) |
nkf
*
|
V:0.2, I:2 | 300 | jeu de caractères | jeux de caractères pour le japonais |
tcs
*
|
V:0.02, I:0.14 | 544 | jeu de caractères | jeu de caractères du traducteur |
unaccent *
|
V:0.01, I:0.09 | 76 | jeu de caractères | remplacer les lettres accentuées par leur équivalent accentué |
tofrodos *
|
V:1.1, I:7 | 48 | eol (in de ligne) |
convertisseur de format de texte entre DOS et Unix :
fromdos (1) et and todos (1)
|
macutils *
|
V:0.05, I:0.5 | 320 | eol (in de ligne) |
convertisseur de format de texte entre Macintosh et
Unix :frommac (1) et tomac (1)
|
iconv
(1) fait partie du paquet libc6
et est toujours disponible sur pratiquement tous les système pour permettre
la conversion des codages de caractères.
Vous pouvez convertir les codages de caractères d'un fichier texte par
iconv
(1) en effectuant ce qui suite :
$ iconv -f codage1 -t codage2 entrée.txt >sortie.txt
La valeur des codage n'est pas sensible à la casse et ignore
« -
» et « _
»
pour la correspondance. On peut vérifier quels sont les codage pris en
charge à l’aide de la commande « iconv -l
».
Tableau 11.2. Liste de valeurs de codage et leur utilisation
valeur de codage | utilisation |
---|---|
ASCII. | American Standard Code for Information Interchange (Code américain standard pour l’échange d'informations), code sur 7 bits sans caractère accentué |
UTF-8 | norme actuelle multi-langues pour tous les systèmes d'exploitation modernes |
ISO-8859-1 | ancienne norme pour les langues d'Europe de l’ouest, ASCII + lettres accentuées |
ISO-8859-2 | ancienne norme pour les langues d'Europe de l’est, ASCII + lettres accentuées |
ISO-8859-15 | ancienne norme pour les langues d'Europe de l’ouest, ISO-8859-1 avec le signe euro |
CP850 | page de code 850, caractères de DOS Microsoft avec graphiques pour les langues de l’Europe de l’est, variante de ISO-8859-1 |
CP932 | page de code 932, variante style Microsoft Windows de Shift-JIS pour le japonais |
CP936 | page de code 936, variante style Microsoft Windows de GB2312, GBK ou GB18030 pour le chinois simplifié |
CP949 | page de code 949, variante style Microsoft Windows de EUC-KR de « Unified Hangul Code » pour le coréen |
CP950 | page de code 950, variante style Microsoft Windows de Big5 pour le chinois traditionnel |
CP1251 | page de code 1251, encodage de style Microsoft Windows pour l’alphabet cyrillique |
CP1252 | page de code 1252, variante style Microsoft Windows de ISO-8859-15 pour les langues d'Europe de l’ouest |
KOI8-R | ancienne norme UNIX de russe pour l’alphabet cyrillique |
ISO-2022-JP | codage standard du courrier électronique japonais n'utilisant que des codes à 7 bits |
eucJP | ancien code UNIX de japonais sur 8 bits et complètement différent de Shift-JIS |
Shift-JIS | norme JIS X 0208 Annexe 1 pour le japonais (voir CP932) |
Certains codages ne sont pris en compte que pour la conversion de données et ne sont pas utilisés en tant que valeur de paramètre linguistique (Section 8.3.1, « Bases du codage »).
Pour les jeux de caractères qui tiennent dans un seul octet tels que les jeux de caractères ASCII et ISO-8859, le codage des caractères signifie à peu près la même chose que le jeu de caractères.
Pour les jeux de caractères ayant de nombreux caractères tels que JIS X 0213 pour le japonais ou Universal Character Set (UCS, Unicode, ISO-10646-1) (jeu de caractère universel) pour pratiquement toutes les langues, il y a de nombreux schémas de codage pour les insérer dans les séquences d'octets de données.
Pour ceux-ci, il y a une différence claire entre le jeu de caractères et le codage des caractères.
Page de code est utilisée comme synonyme de table de codage de caractères pour certaines d'entre-elles spécifiques au fournisseur.
Veuillez remarquer que la plupart des systèmes de codage partagent le même
code avec ASCII pour les caractères sur 7 bits. Mais il y a quelques
exceptions, lors de la conversion de programmes C et des données d'URL
anciens en japonais depuis ce qui est parfois appelé format de codage
shift-JIS vers le format UTF-8, utilisez
« CP932
» comme nom de codage plutôt que
« shift-JIS
» afin d'obtenir le résultat
attendu : 0x5C
→ « \
»
et 0x7E
→ « ~
». Sinon, ils
seront convertis vers les mauvais caractères.
On peut aussi utiliser recode
(1) qui offre plus de
fonctionnalités que celles combinées de iconv
(1),
fromdos
(1), todos
(1),
frommac
(1) et tomac
(1). Pour plus de
détails, voir « info recode
».
Vous pouvez vérifier si un fichier texte est codé en UTF-8 à l’aide
d’iconv
(1) en effectuant ce qui suite :
$ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "Trouvé non-UTF-8"
Utilisez l’option « --verbose
» dans les
exemples ci-dessus pour trouver le premier caractère non UTF-8.
Voici un exemple de script pour convertir le codage des noms de fichiers, dans un seul répertoire, depuis celui créé par un ancien système d'exploitation vers celui d'un système d'exploitation moderne en UTF-8.
#!/bin/sh ENCDN=iso-8859-1 for x in *; do mv "$x" $(echo "$x" | iconv -f $ENCDN -t utf-8) done
La variable « $ENCDN
» devra être définie à la
valeur du codage venant de Tableau 11.2, « Liste de valeurs de codage et leur utilisation ».
Pour les cas plus compliqués, veuillez monter le système de fichiers (par
exemple une partition d'un disque dur) contenant de tels noms de fichiers
avec le codage correct comme option de mount
(8) (voir
Section 8.3.6, « Coder les noms de fichiers ») et copier son contenu complet vers un
autre système de fichiers monté en UTF-8 avec la commande « cp
-a
».
Le format de fichier texte, particulièrement le code de fin de ligne (EOL), dépend de la plateforme.
Tableau 11.3. Liste des styles d'EOL pour différentes plateformes
plateforme | code pour EOL | contrôle | décimal | hexadécimal |
---|---|---|---|---|
Debian (unix) | LF |
^J
|
10 | 0A |
MSDOS et Windows | CR-LF |
^M^J
|
13 10 | 0D 0A |
Apple Macintosh | CR |
^M
|
13 | 0D |
Les programmes de conversion du format des fins de lignes (EOL),
fromdos
(1), todos
(1),
frommac
(1) et tomac
(1) sont assez
pratiques. recode
(1) peut aussi être utile.
Certaines données Some sur un système Debian, telles que les données de la
page wiki du paquet python-moinmoin
, utilisent le CR-LF
de style MSDOS style CR-LF comme code de fin de ligne (EOL). La règle
précédente n'est donc que générale.
La plupart des éditeurs (par exemple vim
,
emacs
, gedit
, …) peuvent prendre en
compte de manière transparente les fichiers ayant une fin de ligne (EOL) de
style MSDOS.
L’utilisation de « sed -e '/\r$/!s/$/\r/'
» en
remplacement de todos
(1) est préférable lorsque vous
désirez unifier le style de caractère de fin de ligne vers le style MSDOS
depuis un style mixte MSDOS et Unix. (Par exemple, après avoir fusionné deux
fichiers de style MSDOS avec diff3
(1).) Ceci parce que
todos
ajoute un retour charriot (CR) à toutes les lignes.
Il y a quelques programmes spécialisés dans la conversion des codes de tabulations.
Tableau 11.4. Liste des commande de conversion de TAB des paquets
bsdmainutils
et coreutils
fonction |
bsdmainutils
|
coreutils
|
---|---|---|
étendre les tabulations en espaces |
« col -x »
|
expand
|
convertir les espaces en tabulation |
« col -h »
|
unexpand
|
indent
(1) du paquet indent
reformate
complètement les espaces dans un programme en C.
Des programme d'édition tels que vim
et
emacs
peuvent aussi être utilisés pour la conversion des
tabulations. Par exemple avec vim
, vous pouvez étendre
les tabulation avec la séquence de commandes « :set
expandtab
» et « :%retab
». Vous
pouvez revenir en arrière de cette conversion par la séquence de commandes
« :set noexpandtab
» et
« :%retab!
».
Les éditeurs de textes modernes et intelligents comme le programme
vim
sont assez habiles et prennent assez bien en compte
les système de codage des caractères et tous les formats de fichiers. Vous
devriez utiliser ces éditeurs avec les paramètres linguistiques UTF-8 dans
une console compatible avec UTF-8 pour une meilleure compatibilité.
Un ancien fichier texte Unix d'Europe de l’ouest,
« u-file.txt
» enregistré dans le codage latin1
(iso-8859-1) peut être édité avec vim
de la manière
suivante :
$ vim u-file.txt
Ceci est possible car le mécanisme d'auto-détection du codage du fichier
dans vim
suppose d'abord que le codage est UTF-8 et, s'il
échoue, suppose qu'il est latin1.
Un ancien fichier texte en polonais,
« pu-file.txt
», enregistré avec le codage
latin2 (iso-8859-2) peut être édité avec vim
de la
manière suivante :
$ vim '+e ++enc=latin2 pu-file.txt'
Un ancien fichier texte Unix en japonais,
« ju-file.txt
», enregistré avec le codage
eucJP peut être édité avec vim
de la manière
suivante :
$ vim '+e ++enc=eucJP ju-file.txt'
Un ancien fichier MS-Windows en japonais,
« jw-file.txt
», enregistré dans le codage
appelé shift-JIS (plus précisément : CP932) peut être édité avec
vim
de la manière suivante :
$ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'
Lorsqu'un fichier est ouvert avec les options
« ++enc
» et
« ++ff
», « :w
»
sur la ligne de commandes de Vim l’enregistre dans son format d'origine et
écrase le fichier d'origine. Vous pouvez aussi indiquer le format
d'enregistrement et le nom du fichier sur la ligne de commandes de Vim, par
exemple, « :w ++enc=utf8 nouveau.txt
».
Veuillez vous rapporter à mbyte.txt « multi-byte text support »
dans l’aide en ligne de vim
et Tableau 11.2, « Liste de valeurs de codage et leur utilisation » pour les valeurs de paramètres
linguistiques utilisés avec « ++enc
».
La famille de programmes emacs
peut effectuer des
fonctions équivalentes.
Ce qui suit permet de lire une page web sous forme de fichier texte. C'est
très utile pour copier des informations de configuration depuis le Web ou
pour appliquer des outils textuels de base d’Unix comme
grep
(1) à la page web .
$ w3m -dump http://www.site-distant.com/help-info.html >fichier-texte
De la même manière, vous pouvez extraire des données en texte brut vers d'autres formats en utilisant ce qui suit :.
Tableau 11.5. Liste d'outils pour extraite des données en texte brut
paquet | popcon | taille | mot clé | fonction |
---|---|---|---|---|
w3m
*
|
V:24, I:84 | 1992 | html→texte |
convertisseur HTML vers texte avec la commande « w3m
-dump »
|
html2text *
|
V:15, I:37 | 248 | html→texte | convertisseur avancé HTML vers texte (ISO 8859-1) |
lynx
*
|
I:22 | 252 | html→texte |
convertisseur HTML vers texte avec la commande « lynx
-dump »
|
elinks *
|
V:2, I:5 | 1448 | html→texte |
convertisseur HTML vers texte avec la commande « elinks
-dump »
|
links
*
|
V:3, I:9 | 1380 | html→texte |
convertisseur HTML vers texte avec la commande « links
-dump »
|
links2 *
|
V:0.7, I:3 | 3288 | html→texte |
convertisseur HTML vers texte avec la commande « links2
-dump »
|
antiword *
|
V:1.3, I:2 | 796 | MSWord→texte,ps | convertir des fichiers MSWord en texte brut ou en ps |
catdoc *
|
V:1.0, I:2 | 2580 | MSWord→texte,TeX | convertir les fichier MSWord en texte brut ou en TeX |
pstotext *
|
V:0.8, I:1.4 | 148 | ps/pdf→texte | extraire du texte depuis des fichiers PostScript et PDF |
unhtml *
|
V:0.02, I:0.14 | 76 | html→texte | supprimer les balise d'un fichier HTML |
odt2txt *
|
V:0.8, I:1.4 | 100 | odt→texte | convertisseur du texte OpenDocument vers texte |
wpd2sxw *
|
V:0.02, I:0.13 | 156 | WordPerfect→sxw | convertisseur de documents de WordPerfect vers OpenOffice.org/StarOffice |
Vous pouvez mettre en évidence et formater des données en texte brut de la manière suivante :
Tableau 11.6. Liste des outils pour mettre en évidence des données de texte brut
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
vim-runtime *
|
V:3, I:38 | 25864 | mise en évidence |
MACRO Vim pour convertir du code source en HTML avec « :source
$VIMRUNTIME/syntax/html.vim »
|
cxref
*
|
V:0.05, I:0.4 | 1252 | c→html | convertisseur pour les programmes converter C vers latex et HTML (langage C) |
src2tex *
|
V:0.03, I:0.2 | 1968 | mise en évidence | convertit de nombreux codes sources en TeX (langage C) |
source-highlight *
|
V:0.14, I:1.1 | 2164 | mise en évidence | convertit de nombreux codes source vers des fichiers HTML, XHTML, LaTeX, Texinfo, séquences d'échappement en couleur ANSI et DocBook files avec mise en évidence (C++) |
highlight *
|
V:0.2, I:1.3 | 756 | mise en évidence | convertit de nombreux codes sources en fichiers HTML, XHTML, RTF, LaTeX, TeX ou XSL-FO avec mise en évidence (C++) |
grc
*
|
V:0.05, I:0.12 | 164 | texte→couleur | coloriseur générique pour n'importe quoi (Python) |
txt2html *
|
V:0.08, I:0.5 | 296 | texte→html | convertisseur de texte vers HTML (Perl) |
markdown *
|
V:0.07, I:0.4 | 96 | texte→html | formateur de documents textes Markdown vers (X)HTML (Perl) |
asciidoc *
|
V:0.15, I:1.1 | 3028 | texte→tout format | formateur de documents textes AsciiDoc vers XML/HTML (Python) |
python-docutils *
|
V:0.4, I:3 | 5740 | texte→tout format | formateur de documents ReStructured Text vers XML (Python) |
txt2tags *
|
V:0.06, I:0.3 | 1028 | texte→tout format | conversion de documents de texte vers HTML, SGML, LaTeX, page de manuel, MoinMoin, Magic Point et PageMaker (Python) |
udo
*
|
V:0.01, I:0.07 | 556 | texte→tout format | document universel - utilitaire de traitement du texte (language C) |
stx2any *
|
V:0.00, I:0.04 | 484 | texte→tout format | convertisseur de documents depuis un texte brut structuré vers d'autres formats (m4) |
rest2web *
|
V:0.01, I:0.08 | 576 | texte→html | convertisseur de documents depuis ReStructured Text vers html (Python) |
aft
*
|
V:0.01, I:0.06 | 340 | texte→tout format | système de préparation de document de « forme libre » (Perl) |
yodl
*
|
V:0.01, I:0.06 | 564 | texte→tout format | langage de pré-document et outils pour le manipuler |
sdf
*
|
V:0.01, I:0.08 | 1940 | texte→tout format | analyseur simple de documents (Perl) |
sisu
*
|
V:0.01, I:0.07 | 14384 | texte→tout format | infrastructure de structuration, de publication et de recherche de documents (Ruby) |
Le langage de balisage extensible (« The Extensible Markup Language (XML) » est un langage de balisage des documents dont les informations sont structurées.
Voir une introduction sur XML.COM.
Le texte en XML ressemble un peu à HTML. Il vous
permet de gérer de nombreux format de sortie pour un document. Un système
XML facile est le paquet docbook-xsl
qui est utilisé ici.
Chaque fichier XML commence par la déclaration XML standard suivante :
<?xml version="1.0" encoding="UTF-8"?>
La syntaxe de base d'un élément XML est balisée de la manière suivante :
<name attribute="value">contenu</nom>
Un élément XML dont le contenu est vide est balisé de la façon raccourcie suivante :
<name attribute="value"/>
« attribute="value"
» dans les exemples
ci-dessus es optionnel.
L’action commentaire en XML est balisée comme suit :
<!-- comment -->
En plus d'ajouter des balises, XML demande des conversion mineures de contenu en utilisant des entités prédéfinies pour les caractères suivants :
Tableau 11.7. Liste des entités XML prédéfinies
entité prédéfinie | caractère devant être converti |
---|---|
"
|
" : double apostrophe
|
'
|
' : apostrophe
|
<
|
< : inférieur à
|
>
|
> : supérieur à
|
&
|
& : esperluette
|
« <
» ou
« &
» ne peuvent pas être utilisés dans des
attributs ni des éléments.
Lorsqu'on utilise des entités définies par l’utilisateur de style SGML, par
exemple « &some-tag:
», la première
définition prend le pas sur les suivantes . La définition de l’entité est
exprimée par « <!ENTITY une-balise "valeur
entité">
".
Dans que la balisage XML est fait de manière cohérence avec un jeu particulier de nom de balises (soit certaines données comme valeur de contenu ou d'attribut), la conversion vers un autre XML est une tâche triviale en utilisant Extensible Stylesheet Language Transformations (XSLT).
Il existe de nombreux outils pour traiter les fichiers XML tels quele langage extensible de feuilles de style (« the Extensible Stylesheet Language XSL «).
De base, une fois créé un fichier XML correctement formaté, vous pouvez le convertir vers n'importe quel format en utilisant le langage extensible de transformation des feuilles de style (XSLT) (« Extensible Stylesheet Language Transformations »).
Le Langage extensible de
feuilles de style pour le formatage des objets (XSL-FO)
(« Extensible Stylesheet Language for Formatting Object » est
censé être la solution au formatage. Le paquet fop
se
trouve encore dans l’archive contrib
de Debian (pas dans
main
). Le code LaTeX est donc habituellement créé depuis
XML en utilisant XSLT, et le système LaTeX est utilisé pour créer des
fichiers imprimables comme DVI, PostScript et PDF.
Tableau 11.8. Liste d'outils XML
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
docbook-xml *
|
I:47 | 2488 | xml | Définition de type de document XML (DTD) pour DocBook |
xsltproc *
|
V:4, I:46 | 152 | xslt | processeur en ligne de commandes XSLT (XML→ XML, HTML, texte brut, etc.) |
docbook-xsl *
|
V:0.5, I:7 | 12792 | xml/xslt | feuilles de style XSL pour le traitement de DocBook XML vers divers formats de sortie avec XSLT |
xmlto
*
|
V:0.3, I:2 | 268 | xml/xslt | convertisseur XML-vers-tout avec XSLT |
dblatex *
|
V:0.2, I:2 | 7340 | xml/xslt | convertir les fichiers Docbook en documents DVI, PostScript, PDF avec XSLT |
fop
*
|
V:0.3, I:2 | 2280 | xml/xsl-fo | convertir les fichiers Docbook XML en PDF |
Comme XML est un sous-ensemble du Langage généralisé de balisage ( Standard Generalized Markup Language SGML »), il peut être traité par les nombreux outils disponibles pourSGML, comme Document Style Semantics and Specification Language (DSSSL).
Tableau 11.9. Liste des outils DSSL
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
openjade *
|
V:0.4, I:3 | 1212 | dsssl | processeur DSSSL à la norme ISO/IEC 10179:1996 DSSSL (le plus récent) |
openjade1.3 *
|
V:0.02, I:0.14 | 2336 | dsssl | processeur DSSSL à la norme ISO/IEC 10179:1996 DSSSL (séries 1.3.x) |
jade
*
|
V:0.3, I:2 | 1056 | dsssl | processeur DSSSL original de James Clark (séries 1.2.x) |
docbook-dsssl *
|
V:0.5, I:4 | 3100 | xml/dsssl | feuilles de style DSSSL pour le traitement des DocBook XML vers divers formats de sortie avec DSSSL |
docbook-utils *
|
V:0.2, I:2 | 440 | xml/dsssl |
utilitaires pour les fichiers DocBook y-compris la conversion avec DSSSL
vers d'autres formats (HTML, RTF, PS, man, PDF) avec des commandes
docbook2*
|
sgml2x *
|
V:0.00, I:0.06 | 216 | SGML/dsssl | convertisseur depuis SGML et XML utilisant les feuilles de style DSSSL |
Vous pouvez extraire des données HTML ou XML depuis d'autres formats en utilisant ce qui suit :
Tableau 11.10. Liste d'outils d'extraction de données XML
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
wv
*
|
V:1.3, I:2 | 2116 | MSWord→n'importe quoi | convertisseur de document depuis Microsoft Word vers HTML, LaTeX, etc. |
texi2html *
|
V:0.3, I:2 | 2076 | texi→html | convertisseur de Texinfo vers HTML |
man2html *
|
V:0.2, I:1.2 | 372 | manpage→html | convertisseur de page de manuel en HTML (prise en charge de CGI) |
tex4ht *
|
V:0.3, I:2 | 924 | tex↔html | convertisseur entre (La)TeX et HTML |
xlhtml *
|
V:0.5, I:1.1 | 184 | MSExcel→html | convertisseur de MSExcel .xls vers HTML |
ppthtml *
|
V:0.5, I:1.1 | 120 | MSPowerPoint→html | convertisseur de MSPowerPoint vers HTML |
unrtf
*
|
V:0.4, I:0.9 | 224 | rtf→html | convertisseur de documents de RTF vers HTML, etc |
info2www *
|
V:0.6, I:1.2 | 156 | info→html | convertisseur depuis GNU info vers HTML (prise en charge de CGI) |
ooo2dbk *
|
V:0.03, I:0.16 | 941 | sxw→xml | convertisseur de documents OpenOffice.org SXW en DocBook XML |
wp2x
*
|
V:0.01, I:0.07 | 240 | WordPerfect→any | fichiers WordPerfect 5.0 et 5.1 vers TeX, LaTeX, troff, GML et HTML |
doclifter *
|
V:0.00, I:0.03 | 424 | troff→xml | convertisseur de troff vers DocBook XML |
Vous pouvez convertir les fichiers HTML non-XML en XHTML qui est une instance XML correctement formatée. XHTML peut être traité par les outils XML.
Tableau 11.11. Liste d'outils sympa d'impression XML
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
libxml2-utils *
|
V:3, I:49 | 160 | xml↔html↔xhtml |
outil XML en ligne de commandes xmllint (1) (vérification
de la syntaxe, reformatage, lint, …)
|
tidy
*
|
V:1.0, I:9 | 108 | xml↔html↔xhtml | vérificateur de syntaxe et reformateur HTML |
Une fois qu'un fichier XML propre est créé, vous pouvez utiliser la technologie XSLT pour extraire des données dans le contexte de balisage, etc.
Sur un système Debian, les données imprimables sont définies dans le format PostScript. Common Unix Printing System (CUPS) utilise Ghostscript en tant que programme de tramage « rasterisation » pour les imprimantes non-PostScript.
Le cœur de la manipulation des données imprimables est l’interpréteur Ghostscript PostScript (PS) qui génère une image tramée (« raster image »).
La licence de la dernière version amont de Ghostscript par Artifex a été modifiée d'AFPL ver GPL et fusionnée avec les dernières modifications de version d'ESP telles que celles relatives à CUPS version 8.60 sous forme d'une version unifiée.
Tableau 11.12. Liste des interpréteurs Ghostscript PostScript
paquet | popcon | taille | description |
---|---|---|---|
ghostscript *
|
V:18, I:56 | 6716 | L’interpréteur GPLGhostscript PostScript/PDF |
ghostscript-x *
|
V:13, I:28 | 220 | interpréteur GPL Ghostscript PostScript/PDF - prise en charge de l’affichage X |
gs-cjk-resource *
|
V:0.04, I:0.4 | 4528 | fichiers de ressources pour gs-cjk, extension CJK-TrueType de Ghostscript |
cmap-adobe-cns1 *
|
V:0.03, I:0.3 | 1572 | CMaps pour Adobe-CNS1 (pour la prise en charge du chinois traditionnel) |
cmap-adobe-gb1 *
|
V:0.03, I:0.3 | 1552 | CMaps pour Adobe-GB1 (pour la prise en charge du chinois simplifié) |
cmap-adobe-japan1 *
|
V:0.08, I:0.7 | 2428 | CMaps pour Adobe-Japan1 (pour la prise en charge du japonais standard) |
cmap-adobe-japan2 *
|
I:0.4 | 416 | CMaps pour Adobe-Japan2 (pour un prise en charge étendue du japonais) |
cmap-adobe-korea1 *
|
V:0.01, I:0.19 | 872 | CMaps pour Adobe-Korea1 (pour la prise en charge du coréen) |
libpoppler5 *
|
V:4, I:21 | 2368 | bibliothèque de rendu PDF basée sur le visualisateur PDF xpdf |
libpoppler-glib4 *
|
V:7, I:19 | 504 | bibliothèque de rendu PDF (bibliothèque partagée basée sur GLib) |
poppler-data *
|
I:3 | 12232 | CMaps pour PDF la bibliothèque de rendu (pour la prise en charge de CJK : Adobe-*) |
« gs -h
» permet d'afficher la configuration de
Ghostscript.
Vous pouvez fusionner deux fichiers PostScript
(PS) ou Portable Document
Format (PDF) en utilisant gs
(1) de Ghostscript.
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sFichierSortie=blabla.ps -f toto1.ps toto2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sFichierSortie=blabla.pdf -f toto1.pdf toto2.pdf
Le format PDF qui est un format imprimable multi-plateformes largement utilisé, est essentiellement un format PS compressé avec quelques fonctionnalités et extensions supplémentaires .
En ligne de commandes, psmerge
(1) et d'autres commandes
du paquet psutils
sont utille pour manipuler des
documents PostScript. Les commandes issues du pdfjam
fonctionnent de manière similaires pour la manipulation de documents
PDF. pdftk
(1) issu du paquet pdftk
est
aussi utile pour la manipulation de documents PDF.
Les paquets suivants fournissant des utilitaires pour les données imprimables ont attiré mon attention :
Tableau 11.13. Liste des utilitaires pour les données imprimables
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
poppler-utils *
|
V:8, I:49 | 536 | pdf→ps,text,… |
utilitaires PDF :: pdftops ,
pdfinfo , pdfimages ,
pdftotext , pdffonts
|
psutils *
|
V:3, I:21 | 380 | ps→ps | outils de conversion de document PostScript |
poster *
|
V:1.2, I:9 | 80 | ps→ps | créer des posters de grandes dimensions à partir de pages PostScript |
xpdf-utils *
|
V:0.9, I:4 | 76 | pdf→ps,text,… |
utilitaires PDF :: pdftops ,
pdfinfo , pdfimages ,
pdftotext , pdffonts
|
enscript *
|
V:1.6, I:14 | 2464 | text→ps, html, rtf | convertir dur text ASCII en PostScript, HTML, RTF ou Pretty-Print |
a2ps
*
|
V:1.7, I:8 | 4292 | text→ps | Convertisseur de « N'importe quoi vers PostScript » et imprimeur élégant |
pdftk
*
|
V:1.0, I:5 | 200 | pdf→pdf |
outil de conversion de documents PDF :: pdftk
|
mpage
*
|
V:0.18, I:1.5 | 224 | text,ps→ps | imprimer plusieurs pages par feuille |
html2ps *
|
V:0.2, I:1.7 | 260 | html→ps | convertisseur de HTML vers PostScript |
pdfjam *
|
V:0.2, I:1.8 | 228 | pdf→pdf |
outils de conversions de documents PDF : pdf90 ,
pdfjoin et pdfnup
|
gnuhtml2latex *
|
V:0.07, I:0.6 | 60 | html→latex | convertisseur de html vers latex |
latex2rtf *
|
V:0.14, I:1.0 | 508 | latex→rtf | convertir des documents de LaTeX en RTF qui puissent être lus par MS Word |
ps2eps *
|
V:1.3, I:12 | 116 | ps→eps | convertisseur de PostScript vers EPS (PostScript encapsulé) |
e2ps
*
|
V:0.01, I:0.10 | 188 | text→ps | convertisseur de texte vers vers PostScript avec la prise en charge du codage japonais |
impose+ *
|
V:0.03, I:0.2 | 180 | ps→ps | Utilitaires PostScript |
trueprint *
|
V:0.02, I:0.13 | 188 | text→ps | imprime élégamment de nombreux codes source (C, C++, Java, Pascal, Perl, Pike, Sh, et Verilog) vers PostScript. (langage C) |
pdf2svg *
|
V:0.10, I:0.5 | 60 | ps→svg | convertisseur de PDF vers le format Scalable vector graphics (« SVG ») |
pdftoipe *
|
V:0.02, I:0.16 | 88 | ps→ipe | convertisseur de PDF vers le format IPE d'XML |
Les commandes lp
(1) et lpr
(1)
proposées par le Common Unix
Printing System (CUPS) fournissent toutes deux des options de
personnalisation des données imprimables.
Vous pouvez imprimer 3 copies d'un fichier en utilisant une des commandes suivantes :
$ lp -n 3 -o Collate=True NomFichier
$ lpr -#3 -o Collate=True NomFichier
Vous pouvez personnaliser davantage le fonctionnement de l’imprimante en
utilisant des options d'impression telles que « -o
number-up=2
», « -o
page-set=even
», « -o
page-set=odd
», « -o
scaling=200
», « -o
natural-scaling=200
», etc., documentée sur Impression et options en ligne de
commande.
Le programme Unix troff, développé à l’origine par AT&T, peut être utilisé pour une composition simple. Il est habituellement utilisé pour créer des pages de manuel.
TeX, créé par Donald Knuth, est un outil très puissant de composition et c'est le standard de fait. LaTeX, écrit à l’origine par Leslie Lamport permet un accès de haut niveau à la puissance de TeX.
Tableau 11.14. Liste des outils de typographie
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
texlive *
|
V:0.5, I:9 | 124 | (La)TeX | système TeX pour la composition, l’aperçu et l’impression |
groff
*
|
V:0.9, I:7 | 9116 | troff | système de formatage de texte GNU troff |
Traditionnellement, roff est le système de
traitement de texte principal sous Unix. Voir roff
(7),
groff
(7), groff
(1),
grotty
(1), troff
(1),
groff_mdoc
(7), groff_man
(7),
groff_ms
(7), groff_me
(7),
groff_mm
(7), et« info
groff
».
Vous pouvez lire pu imprimer un bon didacticiel et document de référence sur
la macro « -me
»
dans « /usr/share/doc/groff/
» en installant le
paquet groff
.
« groff -Tascii -me -
» produit une sortie en
texte brut avec du code d'échappement
ANSI. Si vous désirez obtenir une sortie semblable à une page de
manuel avec de nombreux « ^H » et « _ », utilisez plutôt
« GROFF_NO_SGR=1 groff -Tascii -me -
».
Pour supprimer les « ^H » et les « _ » d'un fichier
texte issu de groff
, filtrez le par « col
-b -x
».
La distribution logicielle TeX Live offre un
système TeX complet. Le méta-paquet texlive
fournit une
sélection acceptable des paquets de TeX Live
qui devraitsuffire aux tâches les plus courantes.
De nombreuses références sont disponibles pour TeX et LaTeX :
tex
(1) ;
latex
(1) ;
C'est l’environnement de composition typographique le plus puissant. De
nombreux processeurs SGML l’utilisent comme
processeur de texte en « backend ». Lyx
qu'on trouvera dans le paquet lyx
et GNU TeXmacs qui provient du paquet
texmacs
offrent un environnement d'édition agréable en
mode WYSIWYG pour LaTeX bien que nombreux sont ceux qui
choisissentd'utiliser Emacs et Vim pour éditer les sources.
De nombreuses ressources sont disponibles en ligne :
/usr/share/doc/texlive-doc-base/english/texlive-en/live.html
»)
(paquet texlive-doc-base
) ;
Lorsque les documents deviennent plus importants, TeX cause parfois des
erreurs.Vous devez augmenter la taille de l’espace dans
« /etc/texmf/texmf.cnf
» (ou, de manière plus
rigoureuse, éditez
« /etc/texmf/texmf.d/95NonPath
» et lancez
update-texmf
(8)) afin de corriger ceci.
Le source TeX de « The TeXbook » se trouve sur http://tug.ctan.org/tex-archive/systems/knuth/dist/tex/texbook.tex.
Ce fichier contient la plupart des macros nécessaires. J’ai entendu dire que
vous pouvez traiter ce document avec tex
(1) après avoir
commenté les lignes 7 à 10 et ajouté « \input manmac
\proofmodefalse
». Je recommande vivement l’achat de ce livre
(et de tous les autres livres de Donald E. Knuth) plutôt que d'utiliser la
version en ligne mais les source sont un très bon exemple d'entrée de
TeX !
Vous pouvez imprimer convenablement une page de manuel en PostScript en utilisant l’une des commandes suivantes :
$ man -Tps une_page_de_manuel lpr
$ man -Tps une_page_de_manuel | mpage -2 | lpr
Le deuxième exemple imprime deux pages par feuille.
Bien que l’écriture d'une page de manuel (manpage) dans le format troff brut soit possible, il existe quelques paquets facilitant cette tâche :
Tableau 11.15. Liste de paquets facilitant la création de pages de manuel
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
docbook-to-man *
|
V:0.3, I:2 | 240 | SGML→manpage | macros de conversion de DocBook SGML vers roff man |
help2man *
|
V:0.13, I:1.1 | 376 | text→manpage | générateur automatique d'une pages de manuel depuis --help |
info2man *
|
V:0.02, I:0.15 | 204 | info→manpage | convertisseur depuis GNU info vers POD ou page de manuel |
txt2man *
|
V:0.02, I:0.2 | 88 | text→manpage | convertir du texte brut ASCII au format d'une page de manuel |
Les paquets suivants, destinés à la conversion de données de courrier électronique, ont attirés mon attention :
Tableau 11.16. Liste de paquets facilitant la conversion de données de courrier électronique
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
sharutils *
|
V:2, I:32 | 904 |
shar (1), unshar (1),
uuencode (1), uudecode (1)
|
|
mpack
*
|
V:1.5, I:23 | 84 | MIME |
encodeur et décodeur de messages MIME :
mpack (1) et munpack (1)
|
tnef
*
|
V:0.8, I:1.5 | 164 | ms-tnef | dépaqueter des attachements MIME de type « application/ms-tnef » qui est un format propre à Microsoft |
uudeview *
|
V:0.17, I:1.6 | 132 | encodeur et décodeur pour les formats suivants : uuencode, xxencode, BASE64, quoted printable et BinHex | |
readpst *
|
V:0.04, I:0.3 | 228 | PST | convertir les fichiers Outlook PST files de Microsoft vers le format mbox |
Le serveur de protocole Internet d'accès au messages (« d'Internet Message Access Protocol ») version 4 (IMAP4) (voir Section 6.7, « serveur POP3/IMAP4 ») peut être utilisé pour déplacer des courriels depuis des systèmes de courriels propriétaires si le logiciel de courriel client peut aussi être configuré pour utiliser le serveur IMAP4.
Les données (SMTP) de courrier électroniques doivent être limitées 7 bits. Les données binaires et les données textuelles sur 8 bits sont codées dans un format sur 7 bits avec Multipurpose Internet Mail Extensions (MIME) et la sélection du jeu de caractères (voir Section 8.3.1, « Bases du codage »).
Le format standard d'enregistrement du courrier électronique est formaté en
« mbox » selon la RFC2822
(RFC822 mise à jour). Voir mbox
(5) (fournie par
le paquet mutt
.
Pour les langues européennes, on utilise habituellement pour le courriel
« Content-Transfer-Encoding: quoted-printable
»
avec le jeu de caractères ISO-8859-1 car il n'y a pas beaucoup de caractères
de 8 bits. Si le texte européen est codé en UTF-8, on préférera utiliser
« Content-Transfer-Encoding: quoted-printable
»
car ce sont essentiellement des données sur 7 bits.
Pour le japonais, « Content-Type: text/plain;
charset=ISO-2022-JP
» est habituellement utilisé pour le
courriel afin de conserver le texte sur 7 bits. Mais les anciens systèmes
Microsoft peuvent envoyer des données de courriel en Shift-JIS sans le
déclarer proprement. Si le texte japonais est codé en UTF-8, on utilisera de
préférence Base64 car il comporte de
nombreuses données sur 8 bits. La situation des autres langues asiatiques
est similaire.
Pour les données de courriel non-Unix accessible par un logiciel client ne venant pas de Debian, il est possible de dialoguer avec le serveur IMAP4, il vous faudra peut-être les déplacer en lançant votre propre serveur IMAP4 (voir Section 6.7, « serveur POP3/IMAP4 »).
Si vous utilisez d'autres formats d'enregistrement de courriel, les mettre
dans le format mbox est une bonne première étape. Un programme client souple
comme mutt
(1) peut être pratique pour le faire.
Vous pouvez éclater le contenu d'une boîte à lettre en messages séparés en
utilisant procmail
(1) et formail
(1).
Chaque message de courrier électronique peut être dépaqueté en utilisant
munpack
(1) qui provient du paquet
mpack
(ou d'autres outils spécialisés) afin d'en obtenir
le contenu codé en MIME.
Les paquets suivants contenant des outils pour la conversion, l’édition et l’organisation de données graphiques ont attiré mon attention :
Tableau 11.17. Liste d'outils pour les données graphiques
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
gimp
*
|
V:12, I:44 | 13560 | image (bitmap) | Programme de manipulation d'images GNU ( GNU Image Manipulation Program ») |
imagemagick *
|
V:13, I:35 | 268 | image (bitmap) | programmes de manipulation d'images |
graphicsmagick *
|
V:1.6, I:3 | 4532 | image (bitmap) |
programmes de manipulation d'images (compagnons
d'imagemagick )
|
xsane
*
|
V:5, I:36 | 748 | image (bitmap) | Interface graphique X11 de SANE basée sur GTK+-based (Scanner Access Now Easy) |
netpbm *
|
V:4, I:29 | 4612 | image (bitmap) | outils de conversion graphique |
icoutils *
|
V:0.3, I:1.3 | 200 | png↔ico (bitmap) | convertit les icônes et curseurs de MS Windows de et vers des formats PNG (favicon.ico) |
scribus *
|
V:0.5, I:3 | 26888 | ps/pdf/SVG/… | éditeur DTP Scribus |
openoffice.org-draw *
|
V:18, I:40 | 10720 | image (vectorielle) | suite de bureautique OpenOffice.org - dessin |
inkscape *
|
V:15, I:32 | 87436 | image (vectorielle) | éditeur SVG (Scalable Vector Graphics) |
dia-gnome *
|
V:1.4, I:2 | 576 | image (vectorielle) | éditeur de diagrammes (GNOME) |
dia
*
|
V:3, I:5 | 572 | image (vectorielle) | éditeur de diagrammes (Gtk) |
xfig
*
|
V:2, I:4 | 1676 | image (vectorielle) | générer des des figures de manière interactives sous X11 |
pstoedit *
|
V:1.9, I:16 | 708 | ps/pdf→image (vectorielle) | convertisseur de fichiers PostScript et PDF en graphiques vectoriels éditables (SVG) |
libwmf-bin *
|
V:1.4, I:13 | 68 | Windows/image (vectorielle) | outils de conversion de méta-fichiers Windows (données graphiques vectorielles) |
fig2sxd *
|
V:0.03, I:0.2 | 200 | fig→sxd (vectorielle) | conversion de fichiers XFig dans le format OpenOffice.org Draw |
unpaper *
|
V:0.2, I:1.7 | 736 | image→image | outil de post-traitement pour des pages numérisées pour OCR |
tesseract-ocr *
|
V:0.7, I:3 | 3196 | image→texte | logiciel OCR libre basé sur le moteur commercial OCR de HP |
tesseract-ocr-eng *
|
V:0.2, I:2 | 1752 | image→texte | moteur de données OCR : fichier de langue de tesseract-ocr pour le texte en anglais |
gocr
*
|
V:0.8, I:5 | 492 | image→texte | logiciel OCR libre |
ocrad
*
|
V:0.4, I:4 | 364 | image→texte | logiciel OCR libre |
gtkam
*
|
V:0.3, I:1.7 | 1100 | image (Exif) | manipuler les fichier des images d'appareils photos numériques (GNOME) - interface graphique |
gphoto2 *
|
V:0.3, I:2 | 1008 | image (Exif) | manipuler les fichier des images d'appareils photo numériques (GNOME) - ligne de commandes |
kamera *
|
V:0.7, I:13 | 312 | image (Exif) | manipuler les fichier des images d'appareils photo numériques (KDE) |
jhead
*
|
V:0.5, I:3 | 132 | image (Exif) | manipuler la partie non graphique des fichiers JPEG compatibles avec Exif (appareils photo numériques) |
exif
*
|
V:0.2, I:1.7 | 184 | image (Exif) | utilitaire enligne de commandes pour afficher les informations EXIF contenues dans les fichiers JPEG |
exiftags *
|
V:0.14, I:0.9 | 248 | image (Exif) | utilitaire pour lire les balises Exif depuis un fichier JPEG d'appareil photo numérique |
exiftran *
|
V:0.4, I:3 | 56 | image (Exif) | transformer les images jpeg des appareil photo numériques |
exifprobe *
|
V:0.08, I:0.5 | 484 | image (Exif) | lire les méta-données des images numériques |
dcraw
*
|
V:0.9, I:5 | 444 | image (Raw)→ppm | décoder les images brutes (« raw ») des appareils photo numériques |
findimagedupes *
|
V:0.06, I:0.4 | 140 | image→fingerprint | rechercher des images visuellement similaires ou dupliquées |
ale
*
|
V:0.02, I:0.17 | 768 | image→image | assembler des images pour en améliorer la fidélité ou créer des mosaïques |
imageindex *
|
V:0.03, I:0.2 | 192 | image (Exif)→html | créer des galleries HTML statiques depuis des images |
f-spot *
|
V:0.5, I:1.8 | 9488 | image (Exif) | application de gestion personnelle de photos (GNOME) |
bins
*
|
V:0.02, I:0.15 | 2008 | image (Exif)→html | créer des albums photos statiques en HTMM en utilisant XML et les balises EXIF |
gallery2 *
|
V:0.2, I:0.4 | 62548 | image (Exif)→html | créer des albums photos HTML navigables avec des vignettes |
outguess *
|
V:0.02, I:0.14 | 252 | jpeg,png | outil universel Stéganographique |
qcad
*
|
V:1.5, I:2 | 3944 | DXF | éditeur de données de CAO (KDE) |
blender *
|
V:0.5, I:3 | 28336 | blend, TIFF, VRML, … | éditeur de contenu 3D pour l’animation, etc. |
mm3d
*
|
V:0.04, I:0.3 | 4536 | ms3d, obj, dxf, … | Éditeur de modèles 3D basé sur OpenGL |
open-font-design-toolkit *
|
I:0.03 | 36 | ttf, ps, … | méta-paquet pour la conception de polices libres |
fontforge *
|
V:0.2, I:1.7 | 6612 | ttf, ps, … | éditeur pour les polices PS, TrueType et OpenType |
xgridfit *
|
V:0.01, I:0.07 | 1060 | ttf | programme pour l’ajustement à la grille (« gridfitting » et la gestion des déformations (« hinting ») des polices TrueType |
gbdfed *
|
V:0.01, I:0.11 | 496 | bdf | éditeur de polices BDF |
Recherchez d'autres outils pour les images en utilisant l’expression
rationnelle « ~Gworks-with::image
» dans
aptitude
(8) (voirSection 2.2.6, « Options de la méthode de recherche avec aptitude »).
Bien que des programmes ayant une interface graphique comme
gimp
(1) soient très puissants, des outils en ligne de
commandes comme imagemagick
(1) sont assez utiles pour la
manipulation automatique d'images au moyen de scripts.
Le format standard de fait pour les images d'appareils photo numériques est Exchangeable Image File Format (EXIF) qui est composé d'une image au format JPEG à laquelle sont ajoutés des balises de méta-données. Il peut contenir des informations telles que la date, l’heure ou les paramètres de l’appareil photo.
Le brevet de compression de données sans pertes Lempel-Ziv-Welch (LZW) est arrivé en fin de validité. Les utilitaires du format Graphics Interchange Format (GIF) qui utilise la méthode de compression LZW peuvent être maintenant librement disponibles sur un système Debian.
Tous les appareils photons numériques ou les scanners ayant un support d'enregistrement amovible fonctionnent sous Linux avec des lecteurs « USB storage » s'il est conforme à la Design rule for Camera Filesystem et utilise un système de fichiers FAT. Voir Section 10.1.10, « Périphériques d'enregistrement amovibles ».
Il y a de nombreux programmes pour convertir les données. Les paquets
suivants ont attiré mon attention en utilisant l’expression rationnelle
« ~Guse::converting
» avec
aptitude
(8) (voir Section 2.2.6, « Options de la méthode de recherche avec aptitude »).
Tableau 11.18. Liste d'outils divers de conversion de données
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
alien
*
|
V:1.2, I:11 | 244 | rpm/tgz→deb | convertisseur de paquets étrangers vers des paquets Debian |
freepwing *
|
V:0.00, I:0.03 | 568 | EB→EPWING | convertisseur de « Electric Book » (Livre électronique - populaire au Japon) en un simple format JIS X 4081 (un sous-ensemble de EPWING V1) |
Vous pouvez aussi extraire des données depuis le format RPM avec ce qui suit :
$ rpm2cpio fichier.src.rpm | cpio --extract
Je donne quelques indications pour apprendre à programmer sous le système Debian, suffisantes pour suivre le code source mis en paquets. Voici les paquets importants correspondant aux paquets de documentation pour la programmations :
Tableau 12.1. Liste de paquets pour aider à la programmation
paquet | popcon | taille | documentation |
---|---|---|---|
autoconf *
|
V:4, I:25 | 2256 |
« info autoconf » fourni par
autoconf-doc
|
automake *
|
V:3, I:21 | 1812 |
« info automake » fourni par
automake1.10-doc
|
bash
*
|
V:91, I:99 | 3536 |
« info bash » fourni par
bash-doc
|
bison
*
|
V:2, I:15 | 1504 |
« info bison » fourni par
bison-doc
|
cpp
*
|
V:38, I:82 | 32 |
« info cpp » fourni par
cpp-doc
|
ddd
*
|
V:0.3, I:2 | 3852 |
« info ddd » fourni par
ddd-doc
|
exuberant-ctags *
|
V:1.2, I:5 | 284 |
exuberant-ctags (1)
|
flex
*
|
V:2, I:15 | 1352 |
« info flex » fourni par
flex-doc
|
gawk
*
|
V:28, I:32 | 2172 |
« info gawk » fourni par
gawk-doc
|
gcc
*
|
V:17, I:67 | 28 |
« info gcc » fourni par
gcc-doc
|
gdb
*
|
V:4, I:22 | 4812 |
« info gdb » fourni par
gdb-doc
|
gettext *
|
V:8, I:46 | 7272 |
« info gettext » fourni par
gettext-doc
|
gfortran *
|
V:0.9, I:6 | 8 |
« info gfortran » fourni par
gfortran-doc (Fortran 95)
|
gpc
*
|
V:0.07, I:0.5 | 8 |
« info gpc » fourni par
gpc-doc (Pascal)
|
fpc
*
|
I:0.4 | 40 |
fpc (1) et les pages html fournies par
fp-doc (Pascal)
|
glade
*
|
V:0.3, I:2 | 1652 | l’aide fournie par le menu (UI Builder) |
glade-gnome *
|
V:0.09, I:1.2 | 508 | l’aide fournie par le menu (UI Builder) |
libc6
*
|
V:97, I:99 | 10012 |
« info libc » fourni par
glibc-doc et glibc-doc-reference
|
make
*
|
V:21, I:72 | 1220 |
« info make » fourni par
make-doc
|
xutils-dev *
|
V:1.7, I:15 | 1728 |
imake (1), xmkmf (1), etc.
|
mawk
*
|
V:66, I:99 | 244 |
mawk (1)
|
perl
*
|
V:88, I:99 | 18528 |
perl (1) et les pages html fournies par
perl-doc et perl-doc-html
|
python *
|
V:62, I:97 | 736 |
python (1) et les pages html fournies par
python-doc
|
tcl8.4 *
|
V:8, I:46 | 3332 |
tcl (3) et les pages de manuel détaillées fournies par
tcl8.4-doc
|
tk8.4
*
|
V:5, I:34 | 2712 |
tk (3) et les pages de manuel détaillées fournies par
tk8.4-doc
|
ruby
*
|
V:9, I:24 | 120 |
ruby (1) et la référence interactive fournir par
ri
|
vim
*
|
V:15, I:33 | 1792 |
menu d'aide (F1) fourni par vim-doc
|
susv2
*
|
I:0.03 | 48 | rechercher « The Single Unix Specifications v2 » |
susv3
*
|
I:0.07 | 48 | rechercher « The Single Unix Specifications v3 » |
Une référence en ligne est accessible en entrant « man
name
» après l’installation des paquets
manpages
et manpages-dev
. Les
références en ligne des outils GNU tools sont disponibles en entrant
« info nom_programme
» après l’installation des
paquets de documentation pertinents. Vous devrez peut-être inclure les
archives contrib
et non-free
en plus
de l’archive main
car certaines documentations GFDL ne
sont pas considérées comme conforme à DSFG.
N'utilisez pas « test
» comme nom d'un fichier
exécutable. « test
» est fait partie de
l’interpréteur de commandes.
Vous devrez installer les programmes directement compilés à partir des
sources dans « /usr/local
» ou
« /opt
» afin d'éviter des collisions avec les
programmes du système.
L’exemple de code pour la création de « Song 99 Bottles of Beer » devrait vous donner une bonne idée de pratiquement tous les langages de programmation.
Le script de l’interpréteur de commandes (« shell script » est un fichier texte dont le bit d'exécution est positionné et qui contient des commandes dans le format suivant :
#!/bin/sh ... lignes de commandes
La première ligne indique l’interpréteur qui sera utilisé pour lire et exécuter le contenu de ce fichier.
La lecture des scripts de l’interpréteur de commandes est la meilleure manière de comprendre comment fonctionne un système de type Unix. Je donne ici quelques indications et rappels de la programmation avec l’interpréteur de commandes. Voir « Erreurs en shell » (http://www.greenend.org.uk/rjk/2001/04/shell.html) pour apprendre à partir d'erreurs.
Contrairement à l’interpréteur de commandes en mode interactif (voirSection 1.5, « La commande simple de l’interpréteur de commandes » et Section 1.6, « Traitement des données textuelles à la Unix »), les scripts de l’interpréteur de commandes utilisent souvent des paramètres, des conditions et des boucles.
De nombreux scripts systèmes peuvent être interprétés par n'importe lequel
des interpréteurs de commande POSIX (voir Tableau 1.13, « Liste de programme d'interprétation des commandes (« shells ») »). L’interpréteur de commandes par défaut
pour le système est « /bin/sh
» qui est un lien
symbolique pointant vers le programme réel.
bash
(1) pour lenny
ou plus ancien
dash
(1) pour squeeze
ou plus récent
Évitez d'écrire des scripts de l’interpréteur de commandes avec des
bashismes ou des zshismes afin de les rendre portables entre tous
les interpréteurs POSIX. Vous pouvez le vérifier en utilisant
checkbashisms
(1).
Tableau 12.2. Liste de bashismes typiques
Bon : POSIX | À éviter : bashisme |
---|---|
if [ "$toto" = "$titi" ] ; then …
|
if [ "$toto" == "$titi" ] ; then …
|
diff -u fichier.c.orig fichier.c
|
diff -u fichier.c{.orig,}
|
mkdir /tototiti /tototutu
|
mkdir /toto{titi,tutu}
|
funcname() { … }
|
function funcname() { … }
|
format octal : « \377 »
|
format hexadécimal : « \xff »
|
La commande « echo
» doit être utilisée avec
les précautions suivantes car son implémentation diffère selon que l’on
utilise les commandes internes ou externes de l’interpréteur de
commandes :
-e
» et « -E
».
-n
».
Bien que l’option « -n
» ne soit pas vraiment de la syntaxe POSIX, elle est
généralement acceptée.
Utilisez la commande « printf
» plutôt que la
commande « echo
» si vous avez besoin
d'intégrer des séquences d'échappement dans la chaîne de sortie.
Des paramètres spéciaux de l’interpréteur de commandes sont souvent utilisés dans les scripts de l’interpréteur de commandes.
Tableau 12.3. Liste des paramètres de l’interpréteur de commandes
paramètre de l’interpréteur de commandes | valeur |
---|---|
$0
|
nom de l’interpréteur ou du script de l’interpréteur |
$1
|
premier (1) paramètre de l’interpréteur |
$9
|
neuvième (9) paramètre de l’interpréteur |
$#
|
nombres de paramètres positionnels |
"$*"
|
"$1 $2 $3 $4 … "
|
"$@"
|
"$1" "$2" "$3" "$4" …
|
$?
|
valeur de retour de la commande la plus récente |
$$
|
PID de ce script de l’interpréteur de commandes |
$!
|
PID de la tâche de fond la plus récemment lancée |
Les expansions de paramètres les plus courants à retenir sont les suivants :
Tableau 12.4. Liste des expansions de paramètres de l’interpréteur
forme de l’expression du paramètre |
valeur si var est positionnée
|
valeur si var n'est pas positionnée
|
---|---|---|
${var:-chaîne}
|
« $var »
|
« chaîne »
|
${var:+chaîne}
|
« chaîne »
|
« null »
|
${var:=chaîne}
|
« $var »
|
« chaîne » (et lancer
« var=chaîne »)
|
${var:?chaîne}
|
« $var »
|
écho « chaîne » vers stderr (et quitter avec une erreur)
|
Ici, les deux points « :
» dans tous ces
opérateurs sont en fait optionnels.
:
» =
opérateur de test pour existe et
différent de null
:
» =
opérateur de test pourexiste uniquement
Tableau 12.5. Liste des substitutions-clés de paramètres de l’interpréteur
forme de substitution de paramètre | résultat |
---|---|
${var%suffixe}
|
supprimer le motif de suffixe le plus petit |
${var%%suffixe}
|
supprimer le motif de suffixe le plus grand |
${var#préfixe}
|
supprimer le motif de préfixe le plus petit |
${var##préfixe}
|
supprimer le motif de suffixe le plus grand |
Chaque commande retourne un état de sortie qui peut être utilisé pour des expressions conditionnelles.
« 0 » dans le contexte conditionnel de l’interpréteur signifie « Vrai » alors que « 0 » dans le contexte conditionnel de C signifie « Faux ».
« [
» est l’équivalent de la commande
test
, qui évalue, comme expression conditionnelle, ses
paramètres jusqu'à « ]
».
Les idiomes conditionnels de base à se souvenir sont les suivants :
<commande> &&
<si_succès_lancer_aussi_cette_commande> || true
»
<commande> ||
<en_cas_de_non_succès_lancer_aussi_cette_commande> ||
true
»
if [ <expression_conditionnelle> ]; then <si_succès_lancer_cette_commande> else <si_pas_de_succes_lancer_cette_commande> fi
Ici, le « || true
» était nécessaire pour
s'assurer que ce script de l’interpréteur ne se termine pas accidentellement
à cette ligne lorsque l’interpréteur est appelé avec l’indicateur
« -e
».
Tableau 12.6. Liste des opérateurs de comparaison dans les expressions conditionnelles
équation | condition pour retourner une valeur logique vraie |
---|---|
-e <fichier>
|
<fichier> existe |
-d <filchier>
|
<fichier> existe et est un répertoire |
-f <fichier>
|
<fichier> existe et est un fichier normal (« régulier ») |
-w <fichier>
|
<fichier> existe et peut être écrit |
-x <fichier>
|
<fichier> existe et est exécutable |
<fichier1> -nt <fichier2>
|
<fichier1> est plus récent que <fichier2> (modification) |
<fichier1> -ot <fichier2>
|
<fichier1> est plus ancien que <fichier2> (modification) |
<fichier1> -ef <fichier2>
|
<fichier1> et <fichier2> sont sur le même périphérique et le même numéro d'i-nœud |
Tableau 12.7. Liste des opérateurs de comparaison de chaîne de caractères dans les expressions conditionnelles
équation | condition pour retourner une valeur logique vraie |
---|---|
-z <str>
|
la longueur de <str> est nulle |
-n <str>
|
la longueur de <str> est non nulle |
<str1> = <str2>
|
<str1> et <str2> sont égales |
<str1> != <str2>
|
<str1> et <str2> ne sont pas égales |
<str1> < <str2>
|
<str1> est trié avant <str2> (dépendant des paramètres linguistiques) |
<str1> > <str2>
|
<str1> est trié après <str2> (dépendant des paramètres linguistiques) |
Les opérateurs de comparaison arithmétique entière dans les expressions
conditionnelles sont « -eq
»,
« -ne
», « -lt
»,
« -le
», « -gt
»
et « -ge
».
Il existe un certains nombre d'idiomes de boucles qu'on peut utiliser avec un interpréteur de commandes POSIX.
for x in toto1 toto2 … ; do commande ; done
»
boucle en assignant les éléments de la liste « toto1 toto2
...
» à la variable « x
» et et
en exécutant la « commande
».
while condition ; do commande ; done
»
répète la « commande
» tant que la
« condition
» est vraie.
until condition ; do commande ; done
» répète
la « commande
» tant que
« « condition
» n'est pas vraie.
break
» permet de quitter la boucle.
continue
» permet de reprendre l’itération
suivante de la boucle.
Les itérations numériques semblables à celles du langage C peuvent être réalisée en utilisant
seq
(1) comme générateur de « toto1 toto2
…
».
En gros, l’interpréteur de commandes traite un script de la manière suivante :
"…"
ou '…'
:
l’interpréteur de commandes découpe les autres parties de la ligne en éléments comme suit :
<espace> <tabulation>
<saut-de-ligne>
< > | ; & ( )
l’interpréteur de commandes vérifie les mots
réservés pour chacun des éléments et ajuste son comportement s'il
ne se trouve pas entre "…"
ou '…'
.
if then elif
else fi for in while unless do done case esac
"…"
ou '…'
.
l’interpréteur de commandes étend les tilde s'il ne se trouve pas entre
"…"
ou '…'
.
~
» → répertoire personnel de l’utilisateur
actuel
~<utilisateur>
» → répertoire personnel
de l’<utilisateur>
l’interpréteur de commande étend les paramètres en leur valeur s'ils ne sont pas entre
'…'
.
$PARAMETRE
» ou
« ${PARAMETRE}
»
l’interpréteur de commandes étend la substitution de
commande si elle n'est pas entre '…'
.
$( commande )
» → sortie de la
« commande
»
` commande `
» → sortie de la
« commande
»
l’interpréteur de commandes étend les motifs
génériques du chemin aux fichiers correspondants s'il ne sont pas
entre "…"
ou '…'
.
*
→ n'importe quel caractère
?
→ un caractère
[…]
→ un caractère quelconque parmi
« …
»
l’interpréteur de commandes recherche la commande dans ce qui suit et l’exécute.
$PATH
»
Des guillemets simples dans des guillemets doubles n'ont pas d'effet.
Exécuter « set -x
» dans le script de
l’interpréteur ou l’appel du script avec l’option
« -x
» fait imprimer par l’interpréteur de
commande toutes les commandes exécutées. C'est assez pratique pour le
débogage.
De façon à rendre vous programmes de l’interpréteur de commandes aussi portables que possible dans tout le système Debian, c'est une bonne idée de limiter les programmes utilitaires à ceux fournis par les paquets essentiels.
aptitude search ~E
» » affiche la liste
des essentiels.
dpkg -L <nom_paquet> |grep
'/man/man.*/'
» affiche la liste des pages de manuels pour
les commandes que fournit le paquet <nom_paquet>
.
Tableau 12.8. Lites des paquets comportant des petits programmes utilitaires pour les scripts de l’interpréteur de commandes
paquet | popcon | taille | description |
---|---|---|---|
coreutils *
|
V:92, I:99 | 13828 | utilitaires du cœur de GNU |
debianutils *
|
V:93, I:99 | 260 | divers utilitaires spécifiques à Debian |
bsdmainutils *
|
V:81, I:99 | 768 | collection d'autres utilitaires provenant de FreeBSD |
bsdutils *
|
V:77, I:99 | 196 | utilitaires de base provenant de 4.4BSD-Lite |
moreutils *
|
V:0.3, I:1.5 | 220 | utilitaires supplémentaires d’Unix |
Bien que moreutils
puisse exister en dehors de Debian, il
propose d'intéressants petits programmes. Le plus remarquable
estsponge
(8). Voir Section 1.6.4, « Substitution globale avec des expressions rationnelles ».
L’interface utilisateur d'un simple programme de l’interpréteur de commandes
peut être améliorée au-delà de l’interaction bête des commandes
echo
et read
afin de devenir plus
interactif en utilisant un des programmes appelés « dialogues »,
etc.
Tableau 12.9. Liste de programme d'interface utilisateur
paquet | popcon | taille | description |
---|---|---|---|
x11-utils *
|
V:26, I:53 | 652 |
xmessage (1) : afficher un message ou une question
dans une fenêtre (X)
|
whiptail *
|
V:42, I:99 | 104 | afficher des boîtes de dialogues conviviales depuis des scripts de l’interpréteur de commandes (newt) |
dialog *
|
V:4, I:25 | 1592 | afficher des boîtes de dialogues conviviales depuis des scripts de l’interpréteur de commandes (ncurses) |
zenity *
|
V:8, I:41 | 4992 | afficher de boîtes de dialogue graphiques depuis des scripts de l’interpréteur de commandes (gtk2.0) |
ssft
*
|
V:0.01, I:0.11 | 152 | Outil frontal de scripts de l’interpréteur de commandes (enrobeur pour zenity, kdialog et dialog avec gettext) |
gettext *
|
V:8, I:46 | 7272 |
« /usr/bin/gettext.sh »: traduire des messages
|
Voici un exemple simple qui crée une image ISO avec des données RS02
fournies par dvdisaster
(1) :
#!/bin/sh -e # gmkrs02 : Copyright (C) 2007 Osamu Aoki <osamu@debian.org>, Public Domain #set -x error_exit() { echo "$1" >&2 exit 1 } # Initialiser les variables DATA_ISO="$HOME/Desktop/iso-$$.img" LABEL=$(date +%Y%m%d-%H%M%S-%Z) if [ $# != 0 ] && [ -d "$1" ]; then DATA_SRC="$1" else # Sélectionner le répertoire pour la création de l’image ISO à partir d'un dossier du bureau DATA_SRC=$(zenity --file-selection --directory \ --title="Sélectionner la racine de l’arborescence de répertoires pour créer l’image ISO") \ || error_exit "Quitter lors de la sélection du répertoire" fi # Vérifier la taille de l’archive xterm -T "Check size $DATA_SRC" -e du -s $DATA_SRC/* SIZE=$(($(du -s $DATA_SRC | awk '{print $1}')/1024)) if [ $SIZE -le 520 ] ; then zenity --info --title="Dvdisaster RS02" --width 640 --height 400 \ --text="La taille des données convient à pour une sauvegarde sur CD :\\n $SIZE Mo" elif [ $SIZE -le 3500 ]; then zenity --info --title="Dvdisaster RS02" --width 640 --height 400 \ --text="La taille des données convient à pour une sauvegarde sur DVD :\\n $SIZE Mo" else zenity --info --title="Dvdisaster RS02" --width 640 --height 400 \ --text="La taille des données est trop grande pour une sauvegarde : $SIZE Mo" error_exit "Taille de données trop importante pour la sauvegarde :\\n $SIZE Mo" fi # on n'est certain d'avoir une option -e fonctionnelle uniquement avec xterm # Créer une image ISO brute rm -f "$DATA_ISO" || true xterm -T "genisoimage $DATA_ISO" \ -e genisoimage -r -J -V "$LABEL" -o "$DATA_ISO" "$DATA_SRC" # Créer la redondance RS02 supplémentaire xterm -T "dvdisaster $DATA_ISO" -e dvdisaster -i "$DATA_ISO" -mRS02 -c zenity --info --title="Dvdisaster RS02" --width 640 --height 400 \ --text="Données ISO/RS02 ($SIZE Mo) \\n créées sur : $DATA_ISO" # EOF
Vous désirerez peut-être créer un lancer sur le bureau avec une commande
définie comme « /usr/local/bin/gmkrs02 %d
».
Make est un utilitaire destiné à la maintenance
d'un groupe de programmes. Lors de l’exécution de
make
(1), make
lit le fichier de
règles, « Makefile
» et met à jour une cible si
elle dépend de fichiers prérequis qui on été modifiés depuis que la cible a
été modifiée pour la dernière fois ou si la cible n'existe pas. L’exécution
de ces mises à jour peut être faite conjointement.
La syntaxe du fichier de règles est la suivante :
cible: [ prérequis... ] [TAB] commande1 [TAB] -commande2 # ignorer les erreurs [TAB] @commande3 # supprimer l’écho
Ici, « [TAB]
» est un code de
tabulation. Chaque ligne est interprétée par l’interpréteur de commandes
après que make ait effectué la substitution des variables. Utilisez
« \
» à la fin d'une ligne pour poursuivre le
script. Utilisez « $$
» pour entrer un
« $
» pour les valeurs des variables
d'environnement d'un script de l’interpréteur de commandes.
On peut écrire des règles implicites pour la cible et les prérequis, par exemple, de la manière suivante :
%.o: %.c header.h
Ici, la cible contient le caractère « %
»
(exactement 1 caractère). Le caractère « %
»
peut correspondre à n'importe quelle sous-chaîne non vide des noms de
fichiers de la cible actuelle. De même pour les prérequis, utilisez
« %
» pour afficher la manière dont leur nom
est en relation avec le nom de la cible actuelle.
Tableau 12.10. Liste des variables automatiques de make
variables automatiques | valeur |
---|---|
$@
|
cible |
$<
|
première exigence |
$?
|
toutes les exigences plus récentes |
$^
|
toutes les exigences |
$*
|
« % » correspond au radical dans le motif cible
|
Tableau 12.11. Liste de l’expansion des variables de make
expansion de la variable | description |
---|---|
toto := titi
|
expansion à la volée |
toto2 = titi
|
expression récursive |
toto3+= titi
|
ajouter |
Exécutez « make -p -f/dev/null
» afin de voir
les règles automatiques internes.
Vous pouvez définir un environnement propre pour compiler des programmes écrits dans le langage de programmation C par ce qui suit :
# apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential
Le paquet libc6-dev
, c'est-à-dire la bibliothèque GNU C,
fournit la bibliothèque C standard
qui est une collection de fichiers d'en-têtes et de routines de bibliothèque
utilisée par le langage de programmation C.
Voir les références pour C comme suit; :
info libc
» (références des fonctions de la
bibliothèque C)
gcc
(1) et « info gcc
»
chaque_nom_de_fonction_de la_bibliothèque_C
(3)
Un exemple simple « example.c
» peut être
compilé avec la bibliothèque « libm
» pour
donner l’exécutable « run_example
» par ce qui
suit :
$ cat > example.c << EOF #include <stdio.h> #include <math.h> #include <string.h> int main(int argc, char **argv, char **envp){ double x; char y[11]; x=sqrt(argc+7.5); strncpy(y, argv[0], 10); /* évite les débordements de tampon */ y[10] = '\0'; /* remplir afin d'être certain que la chaîne se termine par'\0' */ printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]); return 0; } EOF $ gcc -Wall -g -o run_example example.c -lm $ ./run_example 1, 2.915, ./run_exam, (null) $ ./run_example 1234567890qwerty 2, 3.082, ./run_exam, 1234567890qwerty
Ici, « -lm
» est nécessaire pour lier la
bibliothèque « /usr/lib/libm.so
» depuis le
paquet libc6
pour sqrt
(3). La
bibliothèque réelle se trouve dans « /lib/
»
avec le nom de fichier « libm.so.6
» avec un
lien symbolique vers « libm-2.7.so
».
Regardez le dernier paramètre du texte en sortie. Il y a plus de 10
caractères bien que « %10s
» soit indiqué.
L’utilisation de fonctions effectuant des opération sur des pointeurs en
mémoire sans vérification des limites, telles que
sprintf
(3) et strcpy
(3) a été rendue
obsolète afin d'éviter les exploits de débordements de tampons qui utilisent
les effects des débordements ci-dessus. Utilisez
snprintf
(3) etstrncpy
(3) en
remplacement..
Le débogage est une partie de l’activité de programmations. Savoir comme déboguer des programmes fera de vous un bon utilisateur de Debian qui pourra produire des rapports de bogues documentés.
Le debogueur primaire sous Debian est
gdb
(1), il vous permet d'inspecter un programme alors
qu'il tourne.
Installons gdb
et les programmes associés par ce qui
suit :
# apt-get install gdb gdb-doc build-essential devscripts
Un bon didacticiel de gdb
est proposé par
« info gdb
«» ou peut être trouvé ailleurs sur le web. Voici un exemple
simple d'utilisation de gdb
(1) sur un
« program
» compilé avec l’option
« -g
» qui produit les informations de
débogage.
$ gdb program (gdb) b 1 # définit un point d'arrêt à la ligne 1 (gdb) run args # lancer les programmes avec des paramètres (gdb) next # ligne suivante ... (gdb) step # avancer d'un pas ... (gdb) p parm # afficher parm ... (gdb) p parm=12 # définir sa valeur à 12 ... (gdb) quit
De nombreuses commandes de gdb
(1) possèdent une
abréviation. L’expansion à l’aide de la touche de tabulation fonctionne
comme avec l’interpréteur de commandes.
Comme, par défaut, sous Debian, tous les paquets binaires sont
« strippés » (dépouillés de leurs symboles de débogage), la
plupart des symboles de débogage sont supprimés des paquets normaux. Pour
pouvoir déboguer des paquets Debian à l’aide de gdb
(1),
les paquets *-dbg
correspondants doivent être installés
(par exemple libc6-dbg
dans le cas de
libc6
).
Si un paquet à déboguer ne possède pas de paquet *-dbg
correspondant, vous devrez l’installer après l’avoir reconstruit comme
suit :
$ mkdir /chemin/nouveau ; cd /chemin/nouveau $ sudo apt-get update $ sudo apt-get dist-upgrade $ sudo apt-get install fakeroot devscripts build-essential $ sudo apt-get build-dep nom_paquet_source $ apt-get source nom_paquet $ cd nom_paquet*
Corriger les bogues si nécessaire.
Modifier la version du paquet pour ne pas entrer en collision avec les
versions officielles de Debian, par exemple, en ajoutant
« +debug1
» pour la compilation d'une version
de paquet existante, ou « ~pre1
» pour la
compilation d'une version de paquet qui n'est pas encore diffusée de la
manière suivante :
$ dch -i
Compiler et installer les paquets avec les symboles de débogage comme suit :
$ export DEB_BUILD_OPTIONS=nostrip,noopt $ debuild $ cd .. $ sudo debi nom_paquet*.changes
Vous devrez vérifier les scripts de construction du paquet et vous assurer
que les options « CFLAGS=-g -Wall
» sont
positionnées pour la compilation des binaires.
Si vous rencontrez un plantage de programme, signaler le bogue avec un copier-coller des informations de trace est une bonne idée.
La trace peut être obtenue de la manière suivante :
gdb
(1) ;
Reproduire le plantage ;
gdb
;
bt
» à l’invite de
gdb
;
Si le programme se fige, vous pouvez le planter en pressant
Ctrl-C
dans le terminal où tourne gdb
pour récupérer l’invite de gdb
;
Souvent, vous voyez une trace où une ou plusieurs des lignes de départ se
trouvent dans « malloc()
» ou
« g_malloc()
». Lorsque ceci arrive, il y a des
chances pour que votre trace ne soit pas très utile. La meilleure façon de
trouver des informations utiles est de définir la variable d'environnement
« $MALLOC_CHECK_
» à la valeur 2
(malloc
(3)). Vous pouvez le faire en lançant
gdb
de la manière suivante :
$ MALLOC_CHECK_=2 gdb hello
Tableau 12.12. Liste des commandes avancées de gdb
commande | description des objectifs des commandes |
---|---|
(gdb) thread apply all bt
|
obtenir une trace de tous les processus d'un programme multi-processus (multi-threaded) |
(gdb) bt full
|
obtenir les paramètres qui se trouvent sur la pile d'appel des fonctions |
(gdb) thread apply all bt full
|
obtenir une trace et les paramètres en combinant les options précédentes |
(gdb) thread apply all bt full 10
|
obtenir une trace et les paramètres des 10 appels supérieurs en supprimant ce qui n'est pas significatif |
(gdb) set logging on
|
écrire le journal de sortie de gdb dans un fichier (le
fichier par défaut est « gdb.txt »)
|
Su un programme apercu1
de GNOME a reçu une erreur X,
vous devriez obtenir un message comme suit :
Le programme 'apercu1' a reçu une erreur du système X Window.
Dans ce cas, vous pouvez essayer de faire tourner le programme avec
« --sync
» et arrêter sur la fonction
« gdk_x_error
» de manière à obtenir une trace.
Utilisez ldd
(1) pour trouver les dépendances d'un
programme avec des bibliothèques :
$ ldd /bin/ls librt.so.1 => /lib/librt.so.1 (0x4001e000) libc.so.6 => /lib/libc.so.6 (0x40030000) libpthread.so.0 => /lib/libpthread.so.0 (0x40153000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Pour que ls
(1) fonctionne dans un environnement
`chroot`é, les bibliothèques ci-dessus doivent être disponibles dans votre
environnement `chroot`é.
Il y a plusieurs outils de détection des fuites de mémoire disponibles sous Debian.
Tableau 12.13. Liste des outils de détection des fuites de mémoire
paquet | popcon | taille | description |
---|---|---|---|
libc6-dev *
|
V:46, I:68 | 11292 |
mtrace (1) : fonctionnalité de débogage de malloc
dans glibc
|
valgrind *
|
V:1.3, I:6 | 136416 | débogueur mémoire et optimiseur |
kmtrace *
|
V:0.3, I:2 | 324 |
traceur de fuites de mémoire de KDE utilisant mtrace (1)
de glibc
|
alleyoop *
|
V:0.05, I:0.3 | 596 | frontal pour GNOME du vérificateur mémoire Valgrind |
electric-fence *
|
V:0.05, I:0.8 | 120 | débogueur malloc (3)
|
leaktracer *
|
V:0.01, I:0.11 | 116 | traceur de fuites mémoires pour les programmes C++ |
libdmalloc5 *
|
V:0.01, I:0.2 | 356 | bibliothèque de débogage de l’allocation mémoire |
mpatrolc2 *
|
V:0.00, I:0.01 | 3592 | bibliothèque pour déboguer les allocations mémoire |
Il y a des outils tels que lint pour l’analyse du code statique.
Tableau 12.14. Liste des outils d'analyse du code statique :
paquet | popcon | taille | description |
---|---|---|---|
splint *
|
V:0.06, I:0.5 | 1836 | outil pour vérifier de manière statistique les bogues d'un programme en C |
rats
*
|
V:0.06, I:0.2 | 876 | outil grossier d'audit pour la sécurité (code C, C++, PHP, Per et Python code) |
flawfinder *
|
V:0.01, I:0.15 | 192 | outil pour examiner le code source en C/C++ et rechercher des faiblesse du point de vue de la sécurité |
perl
*
|
V:88, I:99 | 18528 |
interpréteur ayant un vérificateur de code statique interne :
B::Lint (3perl)
|
pylint *
|
V:0.2, I:0.7 | 576 | vérificateur de code statique Python |
jlint
*
|
V:0.01, I:0.09 | 156 | vérificateur de code Java |
weblint-perl *
|
V:0.10, I:0.7 | 28 | vérificateur de syntaxe et de style minimal pour HTML |
linklint *
|
V:0.05, I:0.3 | 432 | vérificateur rapide de liens et outils de maintenance de sites web |
libxml2-utils *
|
V:3, I:49 | 160 |
utilitaires avec xmllint (1) pour valider les fichiers XML
|
Flex est un générateur d'analyse lexicale rapide compatible avec Lex.
On trouve un didacticiel de flex
(1) dans
« info flex
».
Vous devez fournir vos propres « main()
» et
« yywrap()
». Sinon votre programme flex
devrait ressembler à ce qui suit pour se compiler sans bibliothèque. (Ceci
parce que « yywrap
» est une macro et que
« %option main
» active de manière implicite
« %option noyywrap
».
%option main %% .|\n ECHO ; %%
Sinon, vous pouvez compiler avec l’option de l’éditeur de liens
« -lfl
» à la fin de la ligne de commandes de
cc
(1) (comme AT&T-Lex with
« -ll
»). L’option
« %option
» n'est pas nécessaire dans ce cas.
Un certain nombre de paquets fournissent un analyseur LR à lecture anticipée (« lookahead ») compatible avec Yacc ou un générateur d'analyseur LALR sous Debian.
Tableau 12.15. Liste de générateurs d'analyseur LALR compatibles avec Yacc
paquet | popcon | taille | description |
---|---|---|---|
bison
*
|
V:2, I:15 | 1504 | générateur d'analyseur GNU LALR |
byacc
*
|
V:0.09, I:1.2 | 168 | générateur d'analyseur Berkeley LALR |
btyacc *
|
V:0.00, I:0.07 | 248 |
générateur d'analyseur avec retour arrière basé sur byacc
|
On trouve un didacticiel de bison
(1) dans
« info bison
».
Vous devez fournir vos propre « main()
» et
« yyerror()
».
« main()
» appelle
« yyparse()
» qui appelle
« yylex()
», habituellement créé avec Flex.
%% %%
Autoconf est un outil destiné à produire des scripts en shell qui configurent automatiquement un code source de logiciel pour l’adapter à de nombreux types de systèmes « Unix-like » en utilisant l’ensemble du système de construction GNU.
autoconf
(1) produit le script de configuration
« configure
».
« configure
» crée automatiquement une
« Makefile
» en utilisant le patron
« Makefile.in
».
Ne pas écraser les fichiers du système avec les programmes que vous avez compilés en les installant.
Debian ne touche pas aux fichiers se trouvant dans
« /usr/local/
» ou
« /opt
». Donc, si vous compilez un programme
depuis ses sources, installez-le dans
« /usr/local/
» de manière à ce qu'il
n'interfère pas avec Debian.
$ cd src $ ./configure --prefix=/usr/loca $ make $ make install # cela met les fichiers dans le système
Si vous avez les sources d'origine et s'ils utilisent
autoconf
(1) et automake
(1) et si
vous-vous souvenez comment vous l’avez configuré, exécutez-le comme suit
pour désinstaller le programme :
$ ./configure « toutes-les-options-que-vous-lui-avez-passé » # make uninstall
Sinon, si vous êtes absolument certain que le processus d'installation n'a
mis des fichiers que sous « /usr/local/
» et
qu'il n'y a là rien d'important, vous pouvez supprimer tout son contenu
avec :
# find /usr/local -type f -print0 | xargs -0 rm -f
Si vous n'êtes pas certain de l’emplacement où les fichiers ont été
installés, vous devriez envisager d'utiliser
checkinstall
(8) du paquet
checkinstall
qui fournit une voie propre pour la
désistallation. Il prend maintenant en charge la création d'un paquet Debian
à l’aide de l’option « -D
».
Bien que tous les scripts en AWK puissent être
réécrits automatiquement en Perl en utilisant
a2p
(1), il est plus facile de convertir manuellement les
scripts AWK constitués d'une seule ligne en scripts Perl d'une seule ligne.
Regardons le bout de script AWK suivant :
awk '($2=="1957") { print $3 }' |
Il est équivalent à l’une quelconque des lignes suivantes :
perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
perl -lane 'print $F[2] if $F[1] eq "1957"' |
perl -lane 'print$F[2]if$F[1]eq+1957' |
La dernière est une devinette. Elle tire parti des fonctionnalités suivantes de Perl :
Voir perlrun
(1) pour les options de la ligne de
commandes. Pour des scripts en Perl plus fous, il peut être intéressant de
consulter Perl Golf.
Des pages web dynamiques et interactives simples peuvent être faites de la manière suivante :
Remplir et cliquer les entrées de formulaires envoie une des chaînes d'URL suivantes avec des paramètres codés depuis le navigateur vers le serveur web.
http://www.foo.dom/cgi-bin/programme.pl?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3
»
http://www.foo.dom/cgi-bin/programme.py?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3
»
http://www.foo.dom/programme.php?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3
»
%nn
» dans l’URL est remplacé par le
caractère dont la valeur hexadécimale est nn
.
QUERY_STRING="VAR1=VAL1 VAR2=VAL2
VAR3=VAL3"
».
programme.*
») sur le serveur web s'exécute
lui-même avec la variable d'environnement
« $QUERY_STRING
».
sortie standard (stdout)
du programme CGI est envoyée
au navigateur web et présentée sous forme d'une page web dynamique
interactive.
Pour des raisons de sécurité, il est préférable de ne pas réaliser soi-même de nouvelles bidouilles pour analyser les paramètres CGI. Il existe des modules bien établis pour cela, en Perl et Python. PHP est fourni avec ces fonctionnalités. Lorsqu'il est nécessaire d'enregistrer des données du client, on utilise des cookies HTTP. Lorsqu'un traitement de données est nécessaire côté client, on utilise fréquemment Javascript.
Pour davantage d'informations, voir Common Gateway Interface, The Apache Software Foundation et JavaScript.
Rechercher « CGI tutorial » sur Google en entrant l’URL encodée http://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial directement dans la barre d'adresse du navigateur est une bonne méthode pour voir un script CGI en action sur le serveur Google.
Il existe des programmes pour convertir les codes sources.
Tableau 12.16. Liste des outils de conversion de code source
paquet | popcon | taille | mot clé | description |
---|---|---|---|---|
perl
*
|
V:88, I:99 | 18528 | AWK→PERL |
convertir le code source de AWK vers PERL : a2p (1)
|
f2c
*
|
V:0.12, I:1.2 | 448 | FORTRAN→C |
convertir le code source de FORTRAN 77 vers C/C++ :
f2c (1)
|
protoize *
|
V:0.00, I:0.09 | 100 | ANSI C | créer et supprimer des prototypes ANSI depuis du code C |
intel2gas *
|
V:0.01, I:0.07 | 344 | intel→gas | convertisseur depuis NASM (format Intel) vers l’Assembleur GNU (GAS) |
Si vous désirez créer un paquet Debian, lisez ce qui suit :
debuild
(1), pbuilder
(1) et
pdebuild
(1)
maint-guide
)
developers-reference
)
debian-policy
)
Il existe des paquets tels que dh-make
,
dh-make-perl
, etc., qui facilitent la réalisation des
paquets.
Voici les fondements de ce document.
Le système Linux est une plateforme informatique très performante pour un ordinateur connecté au réseau. Cependant, apprendre à utiliser toutes ses possibilités n'est pas si facile. Configurer LPR avec une imprimante qui ne soit pas PostScript en était un bon exemple. (Il n'y a plus de problème maintenant car les nouvelles installations utilisent CUPS).
Il existe une carte très détaillée appelée « CODE SOURCE ». Elle est très précise mais très difficile à comprendre. Il existe aussi des références appelées HOWTO et mini-HOWTO. Elles sont plus faciles à comprendre mais ont tendance à trop se concentrer sur des détails et perdent de vue les aspects généraux. J'ai de temps en temps des problèmes à trouver la bonne section dans un long HOWTO quand j'ai besoin d'exécuter certaines commandes.
J'espère que cette « Référence Debian (version 2) » offrira un bon cap à suivre pour les personne se trouvant dans le labyrinthe de Debian.
La Référence Debian a été lancée par Osamu Aoki <osamu at debian dot org> en tant qu'aide-mémoire personnel pour l’administration système. De nombreuses parties proviennent des connaissances que j'ai acquises sur la liste de diffusion debian-user et d'autres ressources Debian.
En suivant les suggestions de Josip Rodin, qui a été très actif dans le Projet de documentation Debian (DDP), la « Référence Debian (version 1, 2001-2007) » a été créée en tant que partie des documents du DDP.
Après 6 ans, Osamu a réalisé que la « Référence Debian (version 1) » était dépassée et a commencé à en réécrire de nombreux passages. La nouvelle « Référence Debian (version 2) » a été diffusée en 2008.
Le contenu de ce tutoriel tire son origine et son inspiration dans ce qui suit :
« Linux User's Guide » de Larry Greenfield (décembre 1996)
« Debian Tutorial » de Havoc Pennington. (11 décembre 1998)
« Debian GNU/Linux: Guide to Installation and Usage » de John Goerzen and Ossama Othman (1999)
Les descriptions des paquets et des archives peuvent trouver une partie de leur origine et de leur inspiration dans ce qui suit :
Le reste du contenu peut trouver son origine et son inspiration dans ce qui suit :
« Référence Debian (version 1) » de Osamu Aoki (2001–2007)
La version précédente « Référence Debian (version 1) » avait été créée par de nombreux contributeurs :
De nombreuses pages de manuel et de pages info du système Debian ont été utilisées comme référence primaire pour écrire ce document. Dans la mesure où Osamu Aoki considérait que c'était compris dans une utilisation équitable (« fair use »), de nombreuses parties d'entre-elles, particulièrement les définitions des commandes, ont été utilisées comme morceaux de phrases après un effort éditorial soigneux afin de les insérer dans le style et avec les objectifs de ce document.
La description du débogueur gdb a été augmentée en utilisant le contenu du wiki Debian sur les « backtrace » avec le consentement d'Ari Pollak, Loïc Minier et Dafydd Harries.
Le contenu de « Référence Debian (version 2) » est principalement mon propre travail à l’exception de ce qui est mentionné ci-dessus. Il a aussi été mis à jour par les contributeurs.
Le document « Référence Debian (version 1) » a été traduit par Guillaume Erbs (gerbs chez free point fr) et al.
Le document « Référence Debian (version 2) » a été traduit par Jean-Luc Coulon (f5ibh) (jean-luc.coulon chez wanadoo.fr) à partir de la version 1, et est maintenu avec l'aide de David Prévot (david chez tilapin point org) et la liste de contributeurs (debian-l10n-french chez lists point debian point org).
L’auteur, Osamu Aoki, remercie tous ceux qui ont aidé à rendre possible ce document.
La source du document original en anglais est actuellement écrite sous forme de fichiers texte AsciiDoc. AsciiDoc n'est utilisé que par facilité car il demande moins de frappe que l’XML natif et prend en charge les tableaux dans un format très intuitif. Vous devez avoir à l’esprit que les fichiers XML et PO sont les vrais fichiers sources. Ils sont convertis dans le format XML DocBook par le script de construction et les données créées automatiquement sont insérées afin de former un source final XML Docbook. Ce source final XML Docbook peut être converti en HTML, en text brut, en PostScript et en PDF. Actuellement, seules les conversions HTML et texte brut sont réalisées.