Trucs et Astuces sur Debian Testing
Document version 1.0


Retour à la page d'accueil

Table des matières


1 Introduction

Cette rubrique liste quelques trucs et astuces pour gagner du temps dans la configuration de la Debian Testing de début 2007.
Elle est conçue comme un historique des manipulations que je réalise une fois le système installé, et elle me sert de guide si j'installe Debian sur une machine.


2 Trucs et Astuces

2.1 Codage des caractères en français

Cette section se focalise sur la pratique, après avoir très brièvement rappelé quelques principes. Wikipedia décrit en détail tout ce qu'il faut savoir sur les codages existants, je ne vais pas les recopier ici.

2.1.1 Codage des caractères en français - rappels

2.1.1.1 Introduction - tables de caractères existantes

Il existe de nombreuses normes pour encoder les caractères. Même sans parler des caractères accentués, plusieurs choix existent, dont ASCII et EBCDIC. L'URL http://www.dynamoo.com/technical/ascii-ebcdic.htm décrit ces deux standards.
L'EBCDIC est utilisé sur les gros systèmes IBM, les codages que l'on rencontre en pratique sont tous basés sur ASCII, http://www.asciitable.com/

ASCII est un standard de fait mais ne code aucun caractère accentué. Pour y parvenir, plusieurs solutions existent.

Codepages Solution historique, plusieurs constructeurs et éditeurs ayant créé leurs propres codepages (dont Microsoft et IBM). En règle générale, les codepages sont compatibles ASCII, mais ce n'est pas obligatoire.
Il est assez difficile de s'y retrouver parmi les codepages existants. Ils sont sensés être normalisés par l'ANSI, mais cela n'est pas toujours le cas. Ils constituent le standard historique MS-DOS ® et Windows ®.
MS-DOS ® : les langues d'Europe occidentale (dont le Français) sont codées avec le codepage 850 (cp850), édité par IBM. Il est identique à la table "ASCII étendue" (8 bits au lieu de 7 pour ASCII simple).
Windows ® : le codepage d'Europe occidentale est le 1252. Il est très proche du code ISO-8859-1, il arrive même qu'il y ait des confusions entre les deux, certains programmes annonçant un affichage ISO-8859-1 alors qu'il s'agit de cp1252, et vice-versa.
Liste des codepages :  http://www.i18nguy.com/unicode/codepages.html
ISO-8859-* Normalisation pour les langues européennes, compatible ASCII.
Liste des codes ISO-8859 :  http://en.wikipedia.org/wiki/Iso-8859.
Unicode Encodage universel, compatible ASCII.
Le codage "canonique" Unicode est l'encodage sur 16 bits, UTF-16, soit deux octets. Nous verrons plus loin qu'il existe d'autres codages Unicode. Les octets peuvent être rangés de deux manières distinctes :
1- Octet de poids fort en premier ("BE", big endian).
2- Octet de poids faible en premier ("LE", little endian).
Un texte Unicode peut démarrer par un BOM (Byte Order Mark), qui indique l'ordre des octets, http://unicode.org/unicode/faq/utf_bom.html#22.
Page d'accueil d'Unicode :  http://www.unicode.org.
UCS UCS = Universal Character Set.
Autre encodage universel, non compatible ASCII (semble-t-il ; UCS est peu utilisé en Europe). UCS et Unicode sont étroitement liés, Unicode étant beaucoup plus populaire (en Europe) qu'UCS.
Pas d'URL de référence autre que celle d'Unicode.
2.1.1.2 Compatibilité ASCII d'un système de codage

"Compatible ASCII" signifie que la base du codage, pour les caractères non accentués, est ASCII. Ce qui signifie que même si votre système ne reconnaît pas le codage utilisé, les caractères ASCII (non accentués) seront affichés correctement. Cela est très pratique, car en Français par exemple, un texte sans caractères accentués est inconfortable mais parfaitement lisible. Les codages compatibles ASCII sont donc plus robustes.

2.1.1.3 Codages régionaux

Les codepages et les normes ISO-8859-n ne permettent de coder que quelques langues simultanément. Ainsi la norme ISO-8859-1, conçue pour les langues d'Europe occidentale, ne permet pas de coder les caractères islandais, turcs, grecs, etc.

Les codages ISO-8859-1, ISO-8859-2, ..., couvrent les langues européennes. Pour le français, les deux normes envisageables sont ISO-8859-1 (Europe occidentale) et ISO-8859-15 (Europe occidentale + symbole euro et quelques adaptations mineures).

2.1.1.4 Codages universels

Unicode et UCS sont universels, ils permettent de coder n'importe quel caractère de n'importe quelle langue.

Unicode et UCS sont déclinés en plusieurs codages possibles, adaptés au contexte. Unicode codé sur un octet a pour nom UTF-8. Cela ne signifie pas que tout caractère prend un seul octet - un caractère peut nécessiter entre 1 et 6 octets pour être codé. Avec UTF-8 la notion d'ordre des octets n'intervient pas, c'est pourquoi le BOM (Byte Order Mark) est peu utilisé dans ce codage, quoiqu'il existe.

UTF-8 est optimisé pour les langues européennes, car les caractères non accentués sont codés sur un seul octet. Cela étant, UTF-8, comme tout codage Unicode, est universel.
Coder du français en UTF-16 ou en UTF-32 ne pose aucun problème, mais en moyenne, le texte prendra le double et le quadruple d'octets pour être représenté, respectivement.

2.1.1.5 Codage du français dans la pratique

Dans la pratique lorsque nous voudrons coder un texte, ou définir un codage par défaut sur Linux, nous aurons les choix suivants.
Je ne présente pas cp850 ou cp1252 comme des choix, car ils appartiennent au monde Microsoft, de plus ils tendent à être de moins en moins utilisés y compris sur Windows ®, où le standard est désormais Unicode.

  1. ISO-8859-1
    Ce codage porte également le nom "latin1". C'est le codage historique. Le codepage 1252 (Microsoft Windows ®) en est si proche que les deux sont facilement interchangeables.
  2. ISO-8859-15
    Également désigné par les noms "latin9" ou "euro". Ce codage modifie de manière mineure ISO-8859-1. L'apport le plus connu est l'ajout du symbole euro €. Il corrige aussi l'absence de caractère œ.
  3. UTF-8
    Unicode sur 8 bits.
2.1.1.6 Choix d'un codage par défaut

Sur Linux, comment choisir entre ISO-8859-1, ISO-8859-15 et UTF-8 ?
Le tableau suivant liste les points à considérer.

ISO-8859-1 ou ISO-8859-15 UTF-8
Avantages - Codage historique, supporté partout.
- Un octet et un seul pour chaque caractère, ce qui facilite la programmation.
- Très proche de cp1252, ce qui facilite les échanges avec le monde Microsoft ®.
- Codage universel.
- Unicode est le standard recommandé pour le web.
- Unicode est le standard de fait sur le web.
Inconvénients - Non universel.
- N'est pas la recommandation officielle pour le web.
- A tendance à être moins souvent géré que ISO-8859-n.
- Nombre d'octets variable pour représenter un caractère, ce qui rend ce codage compliqué à gérer en programmation.

On peut se demander pourquoi je mentionne la facilité de programmation (qui donne l'avantage à ISO-8859), sachant que la plupart des gens ne sont pas développeurs. En fait la programmation concerne aussi le contenu web (PHP, Java, Javascript, ...), ce qui élargit le périmètre.
La complexité d'Unicode explique que certains programmes (anciens) supportent ISO-8859 uniquement.

2.1.2 Codage des caractères en français - la pratique sur Debian

Une documentation très utile se trouve ici : http://www.debian.org/doc/manuals/fr/debian-fr-howto/ch3.html

2.1.2.1 Pré-requis - paquetages Debian

Le paquetage locales doit être installé, ce qui est le cas par défaut. Exemple :

sebastien@maison-2:~$ dpkg -l locales
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  locales                   2.3.6.ds1-10              GNU C Library: National Language (locale) data [support]
2.1.2.2 Choisir entre ISO-8859-1, ISO-8859-15 et UTF-8

Personnellement, je choisis le codage proposé avec Debian par défaut, à savoir, UTF-8.
Tout ça pour en arriver là ? Eh oui !
Sauf qu'avec les clés USB utilisées sous Windows ®, ça se complique. Même avec Windows XP ® service pack 2, les noms de fichier sont toujours en ISO-8859-1 (ou en cp1252, il est difficile de les différencier).
Résultat, aujourd'hui, j'utilise UTF-8, en sachant que j'ai régulièrement des caractères accentués dans les noms de fichier qui sont affichés comme un point d'interrogation.

2.1.2.3 Choisir entre ISO-8859-1 et ISO-8859-15

Si vous souhaitez rester sur un codage ISO-8859, ISO-8859-15 est plus moderne, sachant que certains programmes risquent de ne pas le gérer. Personnellement, je l'ai utilisé durant deux ans sans rencontrer de difficulté supplémentaire par rapport à ISO-8859-1.

2.1.2.4 Choisir la localisation

"Localisation" signifie "réglages régionaux".
Exécuter
dpkg-reconfigure locales
Je recommande de sélectionner les 3 options disponibles pour le français, à savoir fr_FR, fr_FR.UTF-8 et fr_FR@euro, ensuite choisir fr_FR.UTF-8 comme codage par défaut. Ce changement ce n'est pas pris en compte à la volée, pour en voir (en partie) les effets, il faut ré-ouvrir une session. Cela n'est parfois pas suffisant, et pour écrire les paragraphes qui suivent, j'ai dû redémarrer Linux.

Copie d'écran (1). Remarquez l'affichage insolite des bordures de cadre, dû au passage d'ISO-8859-15 à UTF-8 comme codage par défaut, sans redémarrage de Linux.

Copie d'écran (2). Pour cette deuxième image, je n'avais pas modifié le codage en cours de route, donc les bordures sont affichées correctement.

Les codages que vous sélectionnez sont listés dans /etc/locale.gen.
Mon fichier /etc/locale.gen :

fr_FR.UTF-8 UTF-8

fr_FR@euro ISO-8859-15

fr_FR ISO-8859-1

2.1.2.5 Afficher la localisation en cours

Quel est ma localisation ? Exécuter la commande set | grep LANG pour avoir simplement le codage, la commande locale pour tout afficher.
Exemples :

 Afficher uniquement le codage des caractères
sebastien@maison-2:~$ set | grep LANG
LANG=fr_FR@euro

  Exemple avec "fr_FR ISO-8859-1" sélectionné par défaut
maison-2:~# locale
LANG=fr_FR
LC_CTYPE="fr_FR"
LC_NUMERIC="fr_FR"
LC_TIME="fr_FR"
LC_COLLATE="fr_FR"
LC_MONETARY="fr_FR"
LC_MESSAGES="fr_FR"
LC_PAPER="fr_FR"
LC_NAME="fr_FR"
LC_ADDRESS="fr_FR"
LC_TELEPHONE="fr_FR"
LC_MEASUREMENT="fr_FR"
LC_IDENTIFICATION="fr_FR"
LC_ALL=

  Exemple avec "fr_FR@euro ISO-8859-15" sélectionné par défaut
maison-2:~# locale
LANG=fr_FR@euro
LC_CTYPE="fr_FR@euro"
[...]
LC_IDENTIFICATION="fr_FR@euro"
LC_ALL=

  Exemple avec "fr_FR.UTF-8 UTF-8" sélectionné par défaut
maison-2:~# locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
[...]
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
2.1.2.6 Identifier le codage utilisé dans un texte

Le texte peut être contenu dans un fichier, ou bien être un nom de fichier. Une méthode est de choisir un type de codage (sur le navigateur ou dans un terminal X, c'est possible avec la plupart des terminaux) et de contrôler l'affichage des caractères.
Si vous avez choisi UTF-8 et que les accents s'affichent bien, c'est que le contenu est UTF-8, idem avec ISO-8859-1 et -15

Une autre méthode, radicale, qui a l'avantage d'être fiable à 100%, consiste à afficher les octets du fichier (ou du nom de fichier) que l'on souhaite examiner. Ainsi j'ai écrit la chaîne
-é-
dans un fichier alpha, que j'ai codé de deux manières différentes, j'expliquerai plus loin comment.

Contenu binaire des fichiers selon le codage.

maison-2:~# hexdump -e '"" 1/1 "%02x" "\n"' alpha.iso-8859-15
2d
e9
2d
0a
maison-2:~# hexdump -e '"" 1/1 "%02x" "\n"' alpha.utf-8
2d
c3
a9
2d
0a

Tous les codes qui suivent sont écrits en hexadécimal.

En ISO-8859-15, le e minuscule accent aigu, é, est codé sur un seul octet, e9.
En UTF-8, le é est codé sur deux octets, c3 puis a9.

Autre exemple, avec un nom de fichier.

maison-2:~# set | grep LANG
LANG=fr_FR.UTF-8
maison-2:~# touch -- -é-
maison-2:~# ls -- -é-
-é-
maison-2:~# ls -- -é- | hexdump -e '"" 1/1 "%02x" "\n"'
2d
c3
a9
2d
0a

Et si on passe au codage par défaut ISO-8859-15, que se passe-t-il ?
A noter qu'entre les deux manipulations, j'ai redémarré Linux.

maison-2:~# set | grep LANG
LANG=fr_FR@euro
maison-2:~# touch -- -é-2
maison-2:~# ls -- -é-2
-é-2
maison-2:~# ls -- -é-2 | hexdump -e '"" 1/1 "%02x" "\n"'
2d
e9
2d
32
0a
maison-2:~# ls -l
total 148
-rw-r--r-- 1 root root     0 2007-02-11 13:06 -é-
-rw-r--r-- 1 root root     0 2007-02-11 14:05 -é-2
maison-2:~# ls -- -é- | hexdump -e '"" 1/1 "%02x" "\n"'
2d
c3
a9
2d
0a

Les noms de fichier sont écrits tels quels dans le système de fichier, et dans l'exemple qui précède, un codage ISO-8859-15 et UTF-8 cohabitent. On voit ici qu'en passant à ISO-8859-15, le fichier créé avec un nom codé en UTF-8 (car créé alors que le codage par défaut était UTF-8) n'est plus affiché correctement. La séquence é est typique d'un texte UTF-8 affiché en ISO-8859-1. A l'inverse, un texte ISO-8859-15 affiché en UTF-8 produira des points d'interrogation, car la plupart des codes latin9 produisent des séquences UTF-8 illégales. Exemple :

maison-2:/mnt/usb2# ls z*
z?
maison-2:/mnt/usb2# ls z* | hexdump -e '"" 1/1 "%02x" "\n"'
7a
e9
0a

Ici le ? était un e accent aigu, ce ce que l'on peut voir avec la commande hexdump. Durant la rédaction de ces pages, il m'est arrivé par erreur de créer deux fichiers différents ayant même nom, mais encodés différemment - pour le système de fichiers, ils étaient bien distincts.

Ce mode de fonctionnement déporte dans l'espace utilisateur les problèmes de représentation des caractères. C'est une règle générale, que j'ai constatée sur tous les systèmes de fichiers, y compris VFAT (le plus utilisé sur clé USB).

2.1.2.7 Cas particulier du système de fichier VFAT

Ce système et, de manière différente, NTFS, permet de définir un jeu de caractère, avec l'option iocharset. Saut que cela ne permet pas d'afficher convenablement des caractères ISO-8859-1 sur une console UTF-8, ni l'inverse. Exemple :

maison-2:/mnt/usb2# set | grep LANG
LANG=fr_FR.UTF-8
maison-2:/mnt/usb2# mount
[...]
/dev/sdg1 on /misc/usb2 type vfat (rw,noexec,nosuid,nodev,sync,umask=000,iocharset=iso8859-15)
maison-2:/mnt/usb2# ls z*
z?
maison-2:/mnt/usb2# ls z* | hexdump -e '"" 1/1 "%02x" "\n"'
7a
e9
0a

Ici, /mnt/usb2 (clé USB) est monté avec l'option ISO-8859-15, ce qui ne permet pas pour autant d'afficher les accents. Inversement, avec une localisation ISO-8859-15, les caractères UTF-8 ne s'affichent pas correctement.
Si quelqu'un sait comment gérer cette situation autrement qu'en utilisant fr_FR@euro comme localisation par défaut, je lui en serais reconnaissant...

2.1.2.8 Convertir un fichier d'UTF-8 en ISO-8859-15 avec Vi

Je parle d'un fichier texte, et je ne traiterai pas le cas du BOM (Byte Order Mark). Sachez que Vi sait gérer le BOM, avec l'option bomb.
Naturellement, dans tout ce qui suit, ISO-8859-15 peut être remplacé par ISO-8859-1.

  1. Ouvrir le fichier dans Vi, en exécutant vi
    Surtout n'exécutez pas vi nom_fichier. Vi tentera de déterminer tout seul le type du fichier, et si le fichier contient des séquences illégales, le résultat peut être inattendu.
  2. Exécuter les commandes Vi suivantes
    :e ++enc=utf-8 nom_fichier
    :set fileencoding=iso-8859-15
    :wq!
2.1.2.9 Convertir un fichier d'ISO-8859-15 en UTF-8 avec Vi
  1. Ouvrir le fichier dans Vi, en exécutant vi
  2. Exécuter les commandes Vi suivantes
    :e ++enc=iso-8859-15 nom_fichier
    :set fileencoding=utf-8
    :wq!

L'exécution de vi -c ":set fileencoding=..." ne fonctionne pas, car c'est comme si cette commande était exécutée à la main, après l'ouverture du fichier par Vi, donc après que Vi a déterminé le type d'encodage du fichier.
Naturellement, ces manipulations fonctionnent aussi avec vim (invoqué à la place de vi de manière transparente) et gvim.

2.1.2.10 Le programme convmv

Ce programme est capable de modifier l'encodage des noms de fichier donnés en paramètre. Il convertit les noms des fichiers, pas leur contenu... Il fait partie du paquetage convmv.
Exemple de commande, pour convertir depuis latin1 vers utf-8, dans tous les répertoires, récursivement :
convmv -f latin1 -t utf-8 --notest -r *


2.2 su root sans saisir le mot de passe

Nous allons modifier la configuration de PAM. Plus loin dans ce document, un paragraphe évoque (rapidement) PAM,
Remarque au sujet de PAM

Dans le fichier /etc/pam.d/su, dé-commenter la ligne
auth sufficient pam_wheel.so trust
Ensuite, créer le groupe wheel et y ajouter les utilisateurs qui doivent pouvoir devenir root en exécutant su, sans mot de passe. Exemple :

maison-2:~# groupadd wheel
maison-2:~# groups sebastien
sebastien : sebastien dialout cdrom floppy audio video plugdev netdev powerdev
maison-2:~# usermod -G sebastien,dialout,cdrom,floppy,audio,video,plugdev,netdev,powerdev,wheel sebastien
maison-2:~# groups sebastien
sebastien : sebastien dialout cdrom floppy audio video plugdev netdev powerdev wheel

  Fichier /etc/pam.d/su après modification (quelques commentaires ont été enlevés)
#
# The PAM configuration file for the Shadow `su' service
#

# This allows root to su without passwords (normal operation)
auth       sufficient pam_rootok.so
[...]
# Uncomment this if you want wheel members to be able to
# su without a password.
auth       sufficient pam_wheel.so trust
[...]
session       required   pam_env.so readenv=1
[...]
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
[...]
session    optional   pam_mail.so nopen

@include common-auth
@include common-account
@include common-session

Utilisation d'un autre groupe

Le groupe wheel est particulier. Si vous préférez passer par un autre groupe, ajouter la ligne suivante :

 auth  sufficient  pam_succeed_if.so use_uid user ingroup nom_groupe

2.3 Montage automatique des clés USB et des CD-ROM

Nous allons voir l'installation et l'utilisation du système autofs, version 4. KDE et Gnome savent gérer le montage automatique de volume, grâce au système d-bus. d-bus fonctionne de manière irréprochable, mais personnellement, je trouve autofs encore plus pratique. Avec autofs, un volume peut être monté automatiquement au moment où l'on s'en sert, et démonté ensuite, après un délai réglable. Il n'y a pas à cliquer où que ce soit, ça fonctionne en mode texte, et c'est 100% automatique.
Ce système sert aussi aux CDROM, mais il lui arrive de provoquer des perturbations avec des graveurs de CD tels que k3b.
Bref.

2.3.1 Pré-requis

2.3.1.1 Paquetages Debian

Le paquetage s'appelle autofs. Exemple sur ma Debian.

sebastien@maison-2:~$ dpkg -l autofs
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                        Version                    Description
+++-==========================-==========================-====================================================================
ii  autofs                     4.1.4-13                   kernel-based automounter for Linux
2.3.1.2 Options de compilation du noyau

Pour utiliser autofs, il est inutile de recompiler le noyau
Si toutefois vous le recompilez, il faut inclure l'option AUTOFS4_FS, qui se trouve dans la partie File systems. Le titre de cette option est Kernel automounter version 4 support (also supports v3).

2.3.2 Service autofs

Le service s'appelle autofs et est démarré comme tout service, grâce à un script dans /etc/init.d référencé dans différents runlevel. Quand le paquetage est installé, le service est configuré pour être lancé automatiquement au démarrage de la machine. Vous pouvez le vérifier avec rcconf (paquetage rcconf), service autofs, qui doit être coché.

Comme d'habitude, le fonctionnement d'autofs en tant que service est contrôlé dans le fichier /etc/default/autofs.
Fichier /etc/default/autofs

# Timeout value in seconds (default: 300)
TIMEOUT=300

# Direct maps are only partially implemented
# and could silently break things. See /usr/share/doc/autofs/README.direct for information
# about current limitations and check your configurations before enabling them.
DISABLE_DIRECT=1

# The LDAP URI for auto.master
# (e. g. LDAPURI="ldap://ldapserver.example.com/")
#LDAPURI=

# The LDAP base for auto.master
# (e. g. LDAPBASE="ou=auto.master,ou=Automount,dc=example,dc=com")
#LDAPBASE=

# Restart autofs automatically on upgrades -- normally, you want this, but
# if you have critical files on autofs-mounted directories (the new autofs
# .deb file, for instance), you may want to set this to 1
#AUTOFS_DONT_RESTART_ON_UPGRADES=

2.3.3 Configuration d'autofs

La configuration d'autofs est effectuée dans le fichier /etc/auto.master, l'usage étant d'utiliser des sous-fichiers de nom /etc/auto.*.
En cas de changement de la configuration, il faut redémarrer le service, en exécutant la commande
/etc/init.d/autofs restart

Mon fichier /etc/auto.master

#
# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#/misc  /etc/auto.misc --timeout=60
#/smb /etc/auto.smb
/misc /etc/auto.misc  --timeout=5
#/net /etc/auto.net

Mon fichier /etc/auto.misc

#
# $Id: auto.misc,v 1.2 2003/09/29 08:22:35 raven Exp $
#
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage

cdrom   -fstype=iso9660,ro,nosuid,nodev,noexec  :/dev/cdrom
usb1    -fstype=vfat,sync,nosuid,nodev,noexec,umask=000,iocharset=iso8859-15  :/dev/sdf1
usb2    -fstype=vfat,sync,nosuid,nodev,noexec,umask=000,iocharset=iso8859-15  :/dev/sdg1

# the following entries are samples to pique your imagination
[...]

Ces fichiers configurent autofs ainsi :

autofs crée à la volée le répertoire /misc. Les sous-répertoires de /misc (/misc/cdrom, ...) ne sont pas visibles tant que l'on n'y accède pas. L'accès peut consister à lire le contenu, ou bien à le définir comme répertoire courant (commande cd /misc/cdrom). Si l'on se contente de lire le contenu, le périphérique est monté, lu, puis après 5 secondes, il est démonté. Comme ce mécanisme est transparent, cela ne pose aucun problème.

Exemple :

maison-2:~# cd /misc
maison-2:/misc# ls -l
total 0
maison-2:/misc# cd cdrom
-su: cd: cdrom: Aucun fichier ou répertoire de ce type
maison-2:/misc# ls -l
total 0
  [insertion d'un DVD dans le lecteur]
maison-2:/misc# cd cdrom
maison-2:/misc/cdrom# ls
autorun.bat  debian  doc      isolinux    pics  README.html          README.mirrors.txt  tools
autorun.inf  dists   install  md5sum.txt  pool  README.mirrors.html  README.txt
maison-2:/misc/cdrom# cd ..
maison-2:/misc# ls -l
total 4
dr-xr-xr-x 10 root root 4096 2005-06-05 14:36 cdrom
  [attente de quelques secondes]
maison-2:/misc# ls -l
total 0
maison-2:/misc#

Le fonctionnement décrit ci-dessus manque de confort car on ne voit pas le répertoire tant que l'on n'y a pas accédé. Du coup, la complétion automatique (ligne de commande du shell) ne fonctionne pas, et dans un programme graphique tel que Konqueror, il faut saisir leur nom au clavier.

La solution consiste à créer des liens symboliques pointant sur les répertoires gérés par autofs.
J'ai créé /mnt/cdrom pointant sur /misc/cdrom, idem pour usb1 et usb2. Résultat, /mnt/cdrom est toujours visible, et il est monté et démonté automatiquement. Exemple :

maison-2:~# cd /mnt
maison-2:/mnt# ls -l
total 0
maison-2:/mnt# ln -s /misc/cdrom cdrom
maison-2:/mnt# ln -s /misc/usb1 usb1
maison-2:/mnt# ln -s /misc/usb2 usb2
maison-2:/mnt# ls -l
total 0
lrwxrwxrwx 1 root root 11 2007-02-17 12:36 cdrom -> /misc/cdrom
lrwxrwxrwx 1 root root 10 2007-02-17 12:37 usb1 -> /misc/usb1
lrwxrwxrwx 1 root root 10 2007-02-17 12:37 usb2 -> /misc/usb2
maison-2:/mnt# cd cdrom
-su: cd: cdrom: Aucun fichier ou répertoire de ce type
maison-2:/mnt#

Avec ce système, j'accède au CD et aux deux ports USB uniquement à travers les noms /mnt/cdrom, /mnt/usb1 et /mnt/usb2, qui sont toujours visibles.


2.4 Chiffrement de volume

Je vais décrire plusieurs opérations :

2.4.1 Pré-requis

2.4.1.1 Paquetages Debian

Le paquetage s'appelle cryptsetup. Il dépend (entre autres) de dmsetup. Exemple sur ma Debian.

maison-2:~# dpkg -l "*setup"
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                           Version                       Description
+++-=============================-=============================-==========================================================================
[...]
ii  cryptsetup                    1.0.4+svn26-1                 configures encrypted block devices
ii  dmsetup                       1.02.08-1                     The Linux Kernel Device Mapper userspace library
[...]
2.4.1.2 Options de compilation du noyau

TODO

2.4.2 Création d'un volume chiffré

La commande cryptsetup permet de créer un volume chiffré. Elle peut être vue comme un raccourci simplifié des commandes permettant de créer un volume chiffré avec dmsetup seul.

Exemple de création d'un volume chiffré.

sebastien@maison-2:~$ /sbin/cryptsetup -c twofish -h sha512 -s 256 create _my_ciphered_dev_sda5 /dev/sda5
Command failed: Incompatible libdevmapper 1.02.08 (2006-07-17)(compat) and kernel driver
sebastien@maison-2:~$ su -
maison-2:~# /sbin/cryptsetup -c twofish -h sha512 -s 256 create _my_ciphered_dev_sda5 /dev/sda5
Enter passphrase:
maison-2:~# dmsetup info _my_ciphered_dev_sda5
Name:              _my_ciphered_dev_sda5
State:             ACTIVE
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      254, 0
Number of targets: 1
maison-2:~# dmsetup table _my_ciphered_dev_sda5
0 18249777 crypt twofish-cbc-plain 755f22d17396775dc2f8525a9aca98b47c0248c892f11dfb9355487be88851c8 0 8:5 0
maison-2:~# cryptsetup status _my_ciphered_dev_sda5
/dev/mapper/_my_ciphered_dev_sda5 is active:
  cipher:  twofish-cbc-plain
  keysize: 256 bits
  device:  /dev/.static/dev/sda5
  offset:  0 sectors
  size:    18249777 sectors
  mode:    read/write

Remarque

Lorsque cryptsetup est exécuté sans les privilèges super-utilisateur, cela produit l'erreur "Incompatible libdevmapper..." que l'on peut voir ci-dessus.

2.4.3 Utilisation d'un volume chiffré

Un volume géré par dmsetup est vu comme /dev/mapper/nom_dm. Ainsi le volume créé tout-à-l'heure est vu comme /dev/mapper/_my_ciphered_dev_sda5. Ce nom de volume doit ensuite être utilisé comme un volume normal, pour y créer un système de fichier, le monter, etc.
Exemple.

maison-2:~# mkfs.ext3 /dev/mapper/_my_ciphered_dev_sda5
[...]
maison-2:~# mkdir /mnt/rep_chiffre
maison-2:~# mount -t ext3 /dev/mapper/_my_ciphered_dev_sda5 /mnt/rep_chiffre
maison-2:~# ls -al /mnt/rep_chiffre
total 24
drwxr-xr-x 3 root root  4096 2007-02-17 15:39 .
drwxr-xr-x 3 root root  4096 2007-02-17 15:40 ..
drwx------ 2 root root 16384 2007-02-17 15:39 lost+found
maison-2:~# mount
[...]
/dev/mapper/_my_ciphered_dev_sda5 on /mnt/rep_chiffre type ext3 (rw)
maison-2:~#

2.4.4 Montage d'un volume chiffré au login

Rédigé d'après un article paru dans Linux Magazine.
Le volume chiffré monté au login sera le répertoire personnel de l'utilisateur, qui sera /chome/sebastien.
L'URL http://EncryptionHOWTO.sourceforge.net est un peu datée (2000 ; elle ne parle pas du device mapper) mais elle peut être utile.

2.4.4.1 Pré-requis - paquetages Debian

Le paquetage pour monter un volume chiffré à la volée est libpam-mount. Il permet également le montage de volumes SAMBA (partage Windows) et NFS. Le paquetage openssl est également requis, pour chiffrer le fichier contenant la clé.
Sur ma Debian :

sebastien@maison-2:~$ dpkg -l libpam-mount
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  libpam-mount              0.18-3                    PAM module that can mount volumes for a user session
sebastien@maison-2:~$ dpkg -l openssl
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  openssl                   0.9.8c-4                  Secure Socket Layer (SSL) binary and related cryptographic tools

Naturellement, libpam-mount ne fonctionne que si PAM est utilisé. C'est le cas par défaut.

Remarque au sujet de PAM

PAM signifie Pluggable Authentication Modules, c'est un système permettant de gérer l'authentification.
Son point fort est d'être conçu dès l'origine comme étant totalement configurable à l'aide de modules. PAM est configuré dans le fichier /etc/pam.conf et surtout dans le répertoire /etc/pam.d. Les modules se trouvent dans /lib/security. Ses possibilités sont illimitées.

Page d'accueil de PAM : http://www.kernel.org/pub/linux/libs/pam
   Manuels PAM : http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html
Documentation sur l'authentification Linux : http://www.faqs.org/docs/Linux-HOWTO/User-Authentication-HOWTO.html

2.4.4.2 Volume chiffré - préparation

Méthode employée :

Ainsi la clé de chiffrement du volume n'est jamais enregistrée en clair - si quelqu'un parvient à récupérer le fichier contenant la clé, il ne peut rien en faire sans le mot de passe.

Création du fichier contenant la clé de chiffrement

Des exemples très utiles sont donnés dans le fichier /usr/share/doc/libpam-mount/README.Debian.gz, et ce qui suit (y compris la configuration de libpam-mount) ne fait que le copier.
Ci-dessous nous utilisons dd avec /dev/urandom pour produire 32 octets aléatoires (soit 256 bits), que nous chiffrons avec openssl.
Ensuite nous donnons au fichier le propriétaire et les droits appropriés, car même s'il est chiffré, autant ne pas exposer son contenu.

Ci-dessous, l'utilisateur lui-même ne peut pas modifier le fichier contenant la clé. C'est aussi bien comme ça, autant faire ce genre de manipulation en tant que root.

Attention, la perte de ce fichier signifie la perte irrémédiable du volume chiffré !

maison-2:~# dd if=/dev/urandom bs=1c count=32 | openssl enc -aes-256-ecb > /home/sebastien.key
32+0 enregistrements lus
32+0 enregistrements écrits
32 octets (32 B) copiés, 0,000130692 seconde, 245 kB/s
enter aes-256-ecb encryption password:[saisie du mot de passe du login de l'utilisateur]
Verifying - enter aes-256-ecb encryption password:[saisie du mot de passe du login de l'utilisateur]
maison-2:~# chown sebastien.sebastien /home/sebastien.key
maison-2:~# chmod 400 /home/sebastien.key
maison-2:~# ls -l /home
[...]
-r--------  1 sebastien sebastien   64 2007-02-18 16:21 sebastien.key
[...]

Protéger le fichier sur ext2 ou ext3

Avec chattr, le fichier peut être verrouillé à 100%. Même le super-utilisateur ne pourra pas le modifier ni le supprimer, sauf à ôter la protection décrite ci-dessous.

maison-2:/home# chattr +i sebastien.key
maison-2:/home# lsattr sebastien.key
----i------------- sebastien.key
maison-2:/home# rm sebastien.key
rm: détruire un fichier protégé en écriture fichier régulier `sebastien.key'? y
rm: ne peut enlever `sebastien.key': Opération non permise

Création du volume chiffré

maison-2:~# openssl enc -d -aes-256-ecb -in /home/sebastien.key | cryptsetup -c twofish -h sha512 -s 256 create _dev_sda5 /dev/sda5
enter aes-256-ecb decryption password:[saisie du mot de passe du login de l'utilisateur]
maison-2:~#

A ce stade nous disposons d'un volume /dev/mapper/_dev_sda5, chiffré avec une clé se trouvant dans le fichier /home/sebastien.key, lequel fichier est lui-même chiffré avec le mot de passe de sebastien.
Il est donc question ici de deux chiffrements bien distincts :

2.4.4.3 Configuration de libpam-mount

Fichier /etc/security/pam_mount.conf

J'ai laissé uniquement les lignes non commentées, et mis en gras les lignes modifiées par rapport au fichier d'origine.

[...]
debug 0
[...]
mkmountpoint 0
[...]
fsckloop /dev/loop7
[...]
options_allow nosuid,nodev,loop,encryption,fsck
[...]
options_require nosuid,nodev
[...]
lsof /usr/bin/lsof %(MNTPT)
fsck /sbin/fsck -p %(FSCKTARGET)
losetup /sbin/losetup -p0 "%(before=\"-e\" CIPHER)" "%(before=\"-k\" KEYBITS)" %(FSCKLOOP) %(VOLUME)
unlosetup /sbin/losetup -d %(FSCKLOOP)
cifsmount /bin/mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"
smbmount /usr/bin/smbmount   //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"
ncpmount /usr/bin/ncpmount   %(SERVER)/%(USER) %(MNTPT) -o "pass-fd=0,volume=%(VOLUME)%(before=\",\" OPTIONS)"
smbumount /usr/bin/smbumount %(MNTPT)
ncpumount /usr/bin/ncpumount %(MNTPT)
fusemount  /sbin/mount.fuse    %(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
fuseumount /usr/bin/fusermount -u %(MNTPT)
[...]
umount /bin/umount %(MNTPT)
[...]
lclmount /bin/mount -p0 -t %(FSTYPE) %(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
cryptmount /bin/mount -t crypt "%(before=\"-o\" OPTIONS)" %(VOLUME) %(MNTPT)
nfsmount /bin/mount %(SERVER):%(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
mntagain /bin/mount --bind %(PREVMNTPT) %(MNTPT)
[...]
mntcheck /bin/mount # For BSDs (don't have /etc/mtab)
pmvarrun /usr/sbin/pmvarrun -u %(USER) -o %(OPERATION)
[...]
volume sebastien crypt - /dev/sda5 /chome/sebastien exec,fsck,nodev,nosuid,fstype=ext3,cipher=twofish,hash=sha512,keysize=256 aes-256-ecb /home/sebastien.key
[...]

L'option mkmountpoint vaut 1 par défaut, comme le répertoire de montage sera créé d'avance, je préfère la mettre à 0.
Ici le montage est effectué dans /chome/sebastien.

Fichier /etc/pam.d/common-pammount

En cas d'échec du montage du volume chiffré, il faut demander à libpam-mount de faire échouer le login - en effet, c'est le répertoire personnel de l'utilisateur qui est monté.
Pour ce faire, nous allons remplacer optional par required dans les lignes auth et session.

Comme d'habitude, j'ai enlevé les commentaires et mis en gras les lignes modifiées.

[...]
auth       required   pam_mount.so use_first_pass
session    required   pam_mount.so use_first_pass
[...]

l'option use_first_pass évite de demander plusieurs fois le mot de passe à l'utilisateur.

2.4.4.4 Répertoire de montage

Par défaut, un répertoire monté a pour propriétaire root.root et comme droits, 755 (=> pas d'accès en écriture pour les utilisateurs autres que root). Comme il s'agit d'un répertoire personnel, c'est ennuyeux : l'utilisateur doit avoir accès en écriture à son répertoire personnel, de plus il doit pouvoir en interdire l'accès aux autres utilisateurs s'il le souhaite.

La commande mount ne permet pas de régler cela, et je n'ai pas trouvé de solution avec libpam-mount ou cryptsetup, ni avec tune2fs. La solution que j'ai trouvée consiste à :

Naturellement les commandes à exécuter sont :

maison-2:~# mkdir /chome
maison-2:~# mkdir /chome/sebastien
maison-2:~# mount -t ext3 /dev/mapper/_dev_sda5 /chome/sebastien
maison-2:~# mount
[...]
/dev/mapper/_dev_sda5 on /chome/sebastien type ext3 (rw)
maison-2:~# chown sebastien.sebastien /chome/sebastien
maison-2:~# chmod 750 /chome/sebastien
maison-2:~# umount /chome/sebastien

Lors de montages ultérieurs, ces informations sont rémanentes.
Pourquoi ?
Je l'ignore, et si quelqu'un pouvait m'éclairer, ça m'arrangerait.
Il semble que le propriétaire et les droits après mount sont totalement distincts de ce qu'ils sont avant.
Bref, à l'arrivée, le répertoire /chome/sebastien a les bons droits et propriétaire, mais cette solution est gruiiik car j'ignore l'origine de cette rémanence, et il est possible que l'information "saute" un jour.

sebastien@maison-2:~$ ls -l /chome
total 4
drwxr-x--- 23 sebastien sebastien 4096 2007-02-18 15:46 sebastien

2.4.4.5 Répertoire personnel de l'utilisateur

A modifier avec la commande
usermod -d nouveau_répertoire -u login

2.4.4.6 Montage au login console

Par "login console" on entend le login en mode texte dans l'un des 6 terminaux virtuels qui existent par défaut (Alt+F1..Alt+F6 ou bien Ctrl+Alt+F1..Ctrl+Alt+F6 depuis l'interface graphique).

Fichier /etc/pam.d/login

Il faut ajouter la ligne
@include common-pammount
après les inclusions de common-auth et common-session.

[...]
# Added by Sébastien Millet, February 2007
@include common-pammount

2.4.4.7 Montage au login kdm

kdm est le pendant de xdm avec KDE, pour se loguer en mode graphique.

Faire dans le fichier /etc/pam.d/kdm, la même chose que décrit précédemment avec /etc/pam.d/login.
Comme ce fichier est court, je vais en donner l'intégralité ici :

#
# /etc/pam.d/kdm - specify the PAM behaviour of kdm
#
auth       required     pam_nologin.so
auth       required     pam_env.so readenv=1
auth       required     pam_env.so readenv=1 envfile=/etc/default/locale
@include common-auth
session    required     pam_limits.so
@include common-account
@include common-password
@include common-session

# Added by Sébastien Millet, February 2007
@include common-pammount

Même chose avec gdm, pour lequel il faut modifier /etc/pam.d/gdm (non testé).

2.4.4.8 Remarques

Effets de bord lorsque le répertoire personnel d'un utilisateur n'est pas toujours disponible

Certains programmes tels que procmail ou spamassassin prennent en compte des fichiers ou répertoires se trouvant dans le répertoire personnel, même lorsque l'utilisateur n'est pas logué. Pour contourner la difficulté il faut, au choix :

Programme pmvarrun

Pour démonter automatiquement un volume lorsque l'utilisateur ferme la session, libpam-mount comptabilise le nombre de login avec le programme pmvarrun.
Si le décompte est erroné, pmvarrun permet de modifier ce décompte, en indiquant la quantité à ajouter avec l'option -o (0 = afficher le décompte courant, sans le modifier).
Exemple avec un seul login en cours pour l'utilisateur sebastien:

maison-2:~# pmvarrun -u sebastien -o 0
1

2.4.5 Montage d'un volume chiffré au démarrage

Après avoir créé le volume, cf. 2.4.2 Création d'un volume chiffré, modifier les fichiers /etc/default/cryptdisks et /etc/crypttab. Exemple avec également une partition swap chiffrée :

Fichier /etc/default/cryptdisks

# Run cryptdisks at startup ?
CRYPTDISKS_ENABLE=Yes

# Mountpoints to mount, before starting cryptsetup. This is useful for
# keyfiles on removable media. Seperate mountpoints by space.
CRYPTDISKS_MOUNT=""

# Default check script, see /lib/cryptsetup/checks/
# Takes effect, if the 'check' option is set in crypttab without a value
CRYPTDISKS_CHECK=vol_id

# Default precheck script, see
# Takes effect, if the 'precheck' option is set in crypttab without a value
CRYPTDISKS_PRECHECK=

# Default timeout in seconds for password prompt
# Takes effect, if the 'timeout' option is set in crypttab without a value
CRYPTDISKS_TIMEOUT=180

Fichier /etc/crypttab

# <target device> <source device> <key file> <options>
chome /dev/hda8 none  cipher=twofish
cswap /dev/hda6 /dev/random cipher=twofish,swap

Fichier /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
[...]
/dev/mapper/cswap   none       swap    sw                                 0   0
[...]
/dev/mapper/chome   /chome     ext3    defaults,errors=continue           0   2

2.4.6 Les extensions LUKS

LUKS n'était pas disponible lors de l'écriture initiale de ce document.
LUKS signifie Linux Unified Key Setup. C'est une extension de cryptsetup permettant de gérer plusieurs mots de passe pour un volume, et de modifier des mots de passe sans re-chiffrer le volume.

LUKS définit 8 slots en début de partition, qui permettent d'accéder à la clé maître, laquelle chiffre le volume. Cette clé maître est totalement aléatoire. L'utilisateur n'accède jamais directement à la clé maître. Ainsi, jusqu'à huit mots de passe peuvent être définis pour accéder à un volume, et on peut facilement changer un mot de passe (cela modifie le slot, mais pas la clé maître, ainsi les données chiffrées n'ont pas à être réécrites).

Pour utiliser les extensions LUKS, il faut préciser luksFormat en premier paramètre de cryptsetup (sans tiret), exemple :
cryptsetup luksFormat -c twofish -h sha512 /dev/sda5

LUKS est décrit dans les pages de manuel de cryptsetup.


2.5 Connexion de deux machines avec un cable Null modem

Le document http://tldp.org/HOWTO/Serial-Laplink-HOWTO/index.html peut être utile.

2.5.1 Pré-requis

Sur les deux machines, le paquetage ppp doit être installé. Dans cette suite de documents, la rubrique 2.2 Connexion par RTC (modem téléphonique), dans le document Configuration réseau sur Debian Testing (décembre 2006 - février 2007), décrit comment installer PPP. Ici, les paquetages pppconfig et resolvconf sont inutiles.

2.5.2 Configuration de PPP sur le serveur

Fichier /etc/ppp/options

# /etc/ppp/options
lock

Fichier /etc/ppp/pap-secrets

# Secrets for authentication using PAP
# client  server  secret      IP addresses
* * ""  192.168.0.2

Fichier /etc/ppp/options.ttyS1

# /etc/ppp/options.ttyS1
lock
auth
login
asyncmap 0
crtscts
local
silent

# These two lines are necessary I don't know why.
# If not specified, errors "Received bad configure-ack" are
# raised on the client.
noaccomp
noccp

192.168.0.1:192.168.0.2
require-pap
115200

2.5.3 Configuration de PPP sur le client

Fichier /etc/ppp/options.ttyS0

# /etc/ppp/options.ttyS0
lock
115200
crtscts
local
user sebastien
noauth

Fichier /etc/ppp/pap-secrets

# /etc/ppp/pap-secrets
sebastien * zesrvpassword

2.5.4 Démarrage de la connexion

Sur le serveur, exécuter
/usr/sbin/pppd /dev/ttyS1 nodetach

Sur le client, exécuter
/usr/sbin/pppd /dev/ttyS0 nodetach

Résultat :

TODO - je ne l'ai pas fait depuis un moment - avec un boîtier ADSL
on s'habitue vite au confort...

2.6 Transfert entre deux Linux

On suppose que les deux Linux se voient sur un réseau TCP/IP.
Pour procéder rapidement, j'utilise ssh.

  1. Installer le paquetage openssh-server si nécessaire. Sur ma Debian :
    sebastien@maison-2:~$ dpkg -l "openssh*"
    Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
    | État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
    |/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
    ||/ Nom                       Version                   Description
    +++-=========================-=========================-==================================================================
    ii  openssh-client            4.3p2-8                   Secure shell client, an rlogin/rsh/rcp replacement
    ii  openssh-server            4.3p2-8                   Secure shell server, an rshd replacement
    
  2. Démarrer le démon ssh en exécutant
    /etc/init.d/ssh start
  3. Avec rcconf, désactiver le lancement du démon ssh au démarrage - je me sers très rarement de ssh, autant ne pas le lancer automatiquement.
  4. Pour vérifier que le démon ssh est bien à l'écoute côté serveur, exécuter (sur le serveur)
    ssh localhost
  5. Si le firewall décrit dans cette série de documents est activé, exécuter
    iptables -I block 7 -m state --state NEW -p tcp -s adresse_ip_source --destination-port 22 -j ACCEPT
    Pour plus de détail, aller ici 3.3 Lancer le firewall automatiquement, dans le document Configuration réseau sur Debian Testing (décembre 2006 - février 2007)
    Si vous êtes paranoïaque, vous pouvez ajouter l'option -m mac --mac-source 01:23:45:67:89:AB. Résultat :
    maison-2:~# iptables -vnL --line-numbers
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    1     6643 4297K block      0    --  *      *       0.0.0.0/0            0.0.0.0/0
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    1        0     0 block      0    --  *      *       0.0.0.0/0            0.0.0.0/0
    
    Chain OUTPUT (policy ACCEPT 6175 packets, 2030K bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    
    Chain block (2 references)
    num   pkts bytes target     prot opt in     out     source               destination
    1     6366 4281K ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    2      185 11410 ACCEPT     0    --  !eth0  *       0.0.0.0/0            0.0.0.0/0           state NEW
    3        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:37351
    4        0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           udp dpt:37351
    5        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:4662
    6        0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           udp dpt:4672
    7        0     0 ACCEPT     tcp  --  *      *       192.168.1.3          0.0.0.0/0           state NEW tcp dpt:22
    8       92  4303 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0
    
  6. Sur le poste client, exécuter scp pour transférer un ou plusieurs fichiers - l'option -r permet de transférer des répertoires récursivement. Utiliser -o User=nom_login pour changer l'utilisateur. Exemple avec transfert de .gftp (côté local = client scp) vers ~/trans (côté distant = serveur ssh). Ici l'option -o User=sebastien est inutile puisque le nom local est identique au nom distant.
    sebastien@maison-2:~$ scp -r -o User=sebastien .gftp 192.168.1.5:trans/
    The authenticity of host '192.168.1.5 (192.168.1.5)' can't be established.
    RSA key fingerprint is 2a:59:9b:9d:ac:75:f6:60:a6:d4:cd:3b:70:5d:a7:aa.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.1.5' (RSA) to the list of known hosts.
    sebastien@192.168.1.5's password:
    gftprc                                                                                    100%   10KB  10.3KB/s   00:00
    bookmarks                                                                                 100% 6133     6.0KB/s   00:00
    gftp.log                                                                                  100% 5260     5.1KB/s   00:00
    sebastien@maison-2:~$
    

2.7 JAVA Sun ® sur Iceweasel (firefox)

Nous allons exécuter le fichier .bin à télécharger depuis le site de Sun ®, mais en passant par make-jpkg pour une installation propre. Ainsi la machine virtuelle sera gérée par APT.

Pré-requis

Installer le paquetage java-package. Pour fonctionner il a besoin (entre autres) du paquetage fakeroot. Sur ma Debian :

sebastien@maison-2:~$ dpkg -l java-package
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  java-package              0.28                      utility for building Java(TM) 2 related Debian packages
sebastien@maison-2:~$ dpkg -l fakeroot
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  fakeroot                  1.5.10                    Gives a fake root environment

Récupération du binaire d'installation

Télécharger le .bin correspondant à l'architecture depuis l'URL http://java.com/fr/download/manual.jsp. A la date d'écriture de cette page (22/02/2007), le fichier pour mon PC 32 bits est jre-1_5_0_11-linux-i586.bin.

Création du paquetage Debian

Exécuter make-jpkg sous fakeroot. Exemple :

sebastien@maison-2:~/tmp$ fakeroot make-jpkg jre-1_5_0_11-linux-i586.bin
Creating temporary directory: /tmp/make-jpkg.sGcXn10801
Loading plugins: blackdown-j2re.sh blackdown-j2sdk.sh common.sh ibm-j2re.sh ibm-j2sdk.sh j2re.sh j2sdk-doc.sh j2sdk.sh j2se.sh sun-j2re.sh sun-j2sdk-doc.sh sun-j2sdk.sh
[...]
Detected product:
    Java(TM) Runtime Environment (JRE)
    Standard Edition, Version 1.5.0+update11
    Sun Microsystems(TM), Inc.
Is this correct [Y/n]:
[...]

sebastien@maison-2:~/tmp$ ls -l
total 47168
-rw-r----- 1 sebastien sebastien 17115102 2007-02-22 18:05 jre-1_5_0_11-linux-i586.bin
-rw-r----- 1 sebastien sebastien 31120704 2007-02-22 18:09 sun-j2re1.5_1.5.0+update11_i386.deb

Installation du paquetage Debian

Exécuter (en tant que root)
dpkg -i jre-1_5_0_11-linux-i586.bin

Pour afficher des informations sur le paquetage créé, exécuter
dpkg-deb --info nom_fichier_paquetage
Pour afficher la liste des fichiers contenus dans le .deb, exécuter
dpkg -c nom_fichier_paquetage
Exemple :

sebastien@maison-2:~/tmp$ dpkg-deb --info sun-j2re1.5_1.5.0+update11_i386.deb
 nouveau paquet Debian, version 2.0.
 taille 31120704 octets : archive de contrôle = 19938 octets.
    1081 octets,    21 lignes      control
   50781 octets,   649 lignes      md5sums
    2634 octets,    95 lignes   *  postinst             #!/bin/bash
    1788 octets,    76 lignes   *  prerm                #!/bin/bash
 Package: sun-j2re1.5
 Version: 1.5.0+update11
 Section: non-free/devel
 Priority: optional
 Architecture: i386
 Depends: libasound2 (>> 1.0.12), libc6 (>= 2.3.6-6), libx11-6, libxext6, libxi6, libxp6, libxt6, libxtst6
 Recommends: netbase, libx11-6 | xlibs, libasound2, libgtk1.2
 Replaces: sun-j2re1.5debian
 Provides: java-virtual-machine, java-runtime, java2-runtime, java-browser-plugin, j2re1.5
 Installed-Size: 88408
 Maintainer: Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org>
 Description: Java(TM) JRE, Standard Edition, Sun Microsystems(TM)
  The Java(TM) 2 Runtime Environment contains the Java virtual machine,
  runtime class libraries, and Java application launcher that are
  necessary to run programs written in the Java progamming language
  (this includes the Java 2 Plug-In for Netscape and Mozilla
  browsers). It is not a development environment and doesn't contain
  development tools such as compilers or debuggers. For development
  tools, see the Java 2 SDK, Standard Edition.
  .
  This package has been automatically created with java-package (0.28).

sebastien@maison-2:~/tmp$ dpkg -l "sun*"
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  sun-j2re1.5               1.5.0+update11            Java(TM) JRE, Standard Edition, Sun Microsystems(TM)
un  sun-j2re1.5debian         <néant>                  (aucune description n'est disponible)

Configuration de Iceweasel

Le site de Sun ® donne les instructions pour procéder. Pour une installation standard de Iceweasel et de la machine virtuelle, dans le répertoire /usr/lib/iceweasel/plugins, créer un lien symbolique vers /usr/lib/j2re1.5-sun/plugin/i386/ns7/libjavaplugin_oji.so (de même nom). Ensuite redémarrer Iceweasel. Exemple :

maison-1:/usr/lib/iceweasel/plugins# ln -s /usr/lib/j2re1.5-sun/plugin/i386/ns7/libjavaplugin_oji.so .
maison-2:/usr/lib/iceweasel/plugins# ls -l
total 12
lrwxrwxrwx 1 root root   57 2007-02-06 14:34 libjavaplugin_oji.so -> /usr/lib/j2re1.5-sun/plugin/i386/ns7/libjavaplugin_oji.so
[...]

Test de la machine virtuelle

Aller à l'URL http://www.java.com/fr/download/help/testvm.xml.


2.8 Utiliser l'interface X en tant que root

Sur Debian, par défaut, le super-utilisateur ne peut pas se connecter au serveur X. Toute tentative de connexion provoque une erreur, même en définissant la variable DISPLAY. Exemple :

maison-2:~# xeyes
Error: Can't open display:
maison-2:~# DISPLAY=:0.0 xeyes
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified

Error: Can't open display: :0.0
maison-2:~#
Solution inqualifiable Se loguer dans l'interface graphique en tant que root !
Solution plutôt gruiiik En tant qu'utilisateur standard logué sur une session X, exécuter
xhost +
Par la suite, tout utilisateur pourra se connecter au serveur X.
Solution un peu moins gruiiik En tant qu'utilisateur standard logué sur une session X, exécuter
xhost +local:root
Par la suite, seul le super-utilisateur local pourra se connecter au serveur X.
Solution propre Utiliser kdesu (KDE) ou gksu (Gnome).
Solution permanente (non recommandé)
  1. Ajouter la commande
    export DISPLAY=:0.0
    au fichier ~/.bashrc du super-utilisateur (si son shell est bash bien sûr).

  2. Créer le fichier /etc/X11/Xsession.d/60xhost, avec le contenu suivant :
    # Taken from 55numlockx (numlockx Debian package)
    
    # In the script that called this, set -e has been set. Errors in any
    # command will abort the entire script and X won't start. By putting
    # this part in a subshell, any errors will abort the subshell - which
    # we want, in case xhost fails.
    
    # The 'true' at the end ensures that the entire script will never end
    # with an error code, even if there was an error.
    
    # Ariel Shkedi <asdebian@dsgml.com>
    
    (
    xhost +local:root
    )
    
    true
    

2.9 Autoriser le groupe wheel à tout exécuter avec sudo

Dans le fichier /etc/sudoers, ajouter la ligne
%wheel ALL=(ALL) ALL
Pour donner cette autorisation, mais sans obliger l'utilisateur à saisir son mot de passe, ajouter la ligne
%wheel ALL=(ALL) NOPASSWD: ALL
Aide sur la structure du fichier /etc/sudoers : man sudoers


2.10 Configuration du noyau au démarrage

C'est utile pour configurer l'IP forwarding, les syn cookies, le niveau des messages de debug du noyau...
La configuration se trouve dans le fichier /etc/sysctl.conf. man sysctl.conf pour afficher de l'aide.


2.11 Paquetages que j'ajoute à l'installation de base

netselect-apt Exécuter netselect-apt testing pour optimiser /etc/apt/sources.list
apt-file Recherche d'un paquetage par nom de fichier avec apt-file search nom_fichier
apt-show-versions Affichage des informations sur les versions des paquetages
dosfstools Pour formater des clés USB en VFAT avec la commande mkfs -t vfat
ethtool Pour régler le fonctionnement de la carte Ethernet avec le programme ethtool
rcconf Pour définir les services lancés au démarrage avec rcconf - c'est un front-end de update-rc.d, paquetage sysv-rc.
tree Afficher les fichiers d'un répertoire sous la forme d'une arborescence avec la commande tree
network-manager Enlevé pour éviter les interactions avec ma configuration réseau
vim-full Version complète de vim
autofs Décrit dans ce document 2.3 Montage automatique des clés USB et des CD-ROM
cryptsetup Décrit dans ce document 2.4 Chiffrement de volume
doc-linux-fr-html Version HTML (principalement dans le répertoire /usr/share/doc/HOWTO/fr-html) de la documentation texte se trouvant dans le répertoire /usr/share/doc/HOWTO/fr-txt (paquetage doc-linux-fr-text)
gftp Transferts FTP (interface Gnome) avec la commande gftp
openssh-server Décrit dans ce document 2.6 Transfert entre deux Linux
gthumb Visualisation de photos avec vignettes, commande gthumb
imagemagick Manipulation d'images en ligne de commande, entre autres commandes, display, identify, import, convert, animate, montage, mogrify
mplayer Lecture vidéo, cf. 2.24 Installation de MPlayer dans ce document
baobab Affichage graphique (Gnome) des tailles des répertoires du disque
aspell Vérification orthographique (installé par défaut)
bchunk Convertit des images CD binaires (.bin ou .cue) en .cdr, .wav et .iso.
deborphan Affichage des paquetages orphelins
alien Installe des .rpm
libc6-dev, gcc Nécessaire pour recompiler le noyau - Etch contient par défaut gcc-4.1 qui n'est pas pris en compte
qt3-dev-tools, libqt3-mt-dev, libqt3-compat-headers, g++ Pour configurer la recompilation du noyau avec make xconfig (interface QT => KDE)
kernel-package Permet d'installer proprement un noyau que l'on a compilé soi-même (sous forme de paquetage) avec la commande make-kpkg
file-browser-applet Pour afficher un menu répertoire dans la barre des menus GNOME
alltray Mets n'importe quelle application dans le systray
ntp Pour synchroniser l'heure sur le PC

2.12 Ajouter un CD dans /etc/apt/source.list

Exécuter la command apt-cdrom add.


2.13 Définir si l'horloge est en UTC ou pas

UTC = temps universel coordonné, équivalent dans les situations usuelles à GMT (différent si vous possédez une horloge atomique).
Dans le fichier /etc/default/rcS, UTC=yes ou UTC=no indique la configuration.
Attention, il y a un lien avec la configuration du noyau, dans lequel on trouve également ce paramètre. Paramètre CONFIG_APM_RTC_IS_GMT.


2.14 Régler le fuseau horaire courant

Commande tzconfig.
Septembre 2007 : désormais il faut exécuter tzselect.

Le fuseau horaire courant est défini dans /etc/timezone.


2.15 Configuration système de Vim

Il est possible de modifier /etc/vim/vimrc, mais ce fichier fait partie du paquetage vim, et les futures mises à jour soit l'écraseront, soit le laisseront tel quel.
Configurer Vim (au niveau système) dans le fichier /etc/vim/vimrc.local.
Mon fichier /etc/vim/vimrc.local :

" Local configuration file for vim
" /etc/vim/vimrc.local

set ignorecase
set shiftwidth=4
set tabstop=4
set hlsearch
set linebreak
syntax on

2.16 Configurer kdm avec les photos

  1. Dans le répertoire /usr/share/apps/kdm/faces, créer les images au format "Bitmap X" (XPM), avec pour nom login.face ou bien login.face.icon. Compte tenu de la taille affichée, 70x70 est un bon format.
    Exemple avec une image uniquement pour l'utilisateur sebastien (identify fait partie du paquetage imagemagick) :
    maison-2:/usr/share/apps/kdm/faces# ls -al
    total 80
    drwxr-xr-x 2 root      root       4096 2007-02-23 16:41 .
    drwxr-xr-x 6 root      root       4096 2007-02-05 23:29 ..
    lrwxrwxrwx 1 root      root         26 2007-02-15 20:44 .default.face -> ../pics/users/default1.png
    -rw-r--r-- 1 sebastien sebastien 69405 2007-02-23 16:41 sebastien.face
    maison-2:/usr/share/apps/kdm/faces# identify sebastien.face
    sebastien.face XPM 70x70 PseudoClass 3704c 68kb
    
  2. Dans le fichier /etc/kde3/kdm/kdmrc, quelques paramètres permettent de régler le fonctionnement de l'interface "photos" :
    PreselectUser=Previous
    FocusPasswd=true
    EchoMode="ThreeStars"
    
  3. C'est tout !

Dernière minute
Suite à une mise à jour de kdm il y a quelques semaines (janvier 2007), cela ne fonctionne plus !
A suivre...


2.17 Numlock au démarrage (console)

Pour activer numlock sur les consoles texte, ajouter les lignes suivantes au script d'init du shell (/etc/profile pour bash). Naturellement en fonction de la syntaxe propre au shell utilisé, il faut adapter le code.

# Pour les ordinateurs avec un pavé numérique...
# Active le pavé numérique quand on se logue en console
case "`tty`" in /dev/tty[1-6])
  setleds +num
esac

2.18 Numlock au démarrage (KDE)

  1. Installer le paquetage numlockx
  2. L'installation de numlockx créé le fichier /etc/X11/Xsession.d/55numlockx, sensé activer numlock. Avec KDE (ou kdm ?) ça ne fonctionne pas, il faut ajouter la ligne
    numlockx on
    au fichier /etc/kde3/kdm/Xsetup.

2.19 Reconfigurer X

Exécuter dpkg-reconfigure xserver-xfree86 (obsolète) ou bien dpkg-reconfigure xserver-xorg (actuel).
Pour savoir si X fonctionne avec Xfree86 ou x.org, exécuter dpkg -l "xserver*".


2.20 Changer la police de gvim à l'exécution de gvim en ligne de commande

Dans ~/bashrc (si le shell est bash), ajouter la ligne (par exemple) :
alias gvim='gvim -font "courier 10 pitch 12" -geom "80x30"'
Pour afficher les fontes disponibles dans X : commande xlsfonts


2.21 Modifier les droits par défaut des fichiers et répertoires créés

Commande umask, à ajouter à ~/bashrc (si le shell est bash). Exemple :
umask 027
Les fichiers créés auront pour droits -rw-r----- (640), les répertoires, drwxr-x--- (750).


2.22 Quelques trucs sur bash

jobs Affiche la liste des jobs en cours.
history Affiche l'historique des commandes exécutées.
fc Affiche l'historique et exécute la commande choisie.
Substitution d'historique : !^!$!*!:n!:n1-n2 Pour rappeler depuis la dernière commande, respectivement, le premier argument, le dernier, tous, le n-ième, les arguments de n1 à n2. Les arguments sont numérotés à partir de 1 (0 = nom du programme).
shopt -s histverify A ajouter à ~/.bashrc). Affiche la commande modifiée avant de l'exécuter (si substitution d'historique). shopt pour afficher les réglages en cours.
set show-all-if-ambiguous on A ajouter à ~/.inputrc). Complète automatiquement au lieu de provoquer une alarme. Dans le manuel de bash, rechercher ^READLINE pour voir les autres possibilités de réglages.
set -o Affiche encore d'autres réglages en cours. Exemple : set -o vi rend facile la recherche dans l'historique (pour les utilisateurs de vi).
function calc() { awk "BEGIN{ print $* }"; } A ajouter au fichier ~/.bashrc.
Permet d'effectuer un calcul en ligne de commande, exemple : calc '(2+7.2)*sin(3.14159)/(2.5*log(10))'.
D'après http://www.guilde.asso.fr/ressources/contrib/bash/bashrc.txt

Comment bien programmer en bash, d'après Linux Magazine numéro 220.

  1. Utilisation de la fonction trap.
    Exemple : plutôt que de supprimer un fichier temporaire à la fin du fichier script, il est plus élégant d'intercepter l'événement de fin d'exécution et d'y placer la suppression du fichier.
    
    function finish {
        # ...
    }
    
    # Exécute la fonction finish lorsque le script est terminé, y compris
    # en cas d'arrêt dû à une erreur.
    trap finish EXIT
  2. shellcheck
    Vérifie un script, la syntaxe mais aussi et surtout le respect de certaines bonnes pratiques.
  3. Tests unitaires
    D'après le magazine, Bats est mieux que shUnit2 car Bats peut produire une sortie au format TAP.
  4. Ajouter à tout script les lignes suivantes :
    set -euo pipefail
    IFS=$'\n\t'
    Explications :
    1. set -e provoque l'arrêt du script dès qu'une erreur se produit. Attention, "une erreur" se produit dès qu'un programme retourne une valeur non nulle... Si en cours de script il faut appeler un programme retournant une valeur non nulle en cas de succès (cas de grep par exemple), il faut entourer l'appel avec set +e et set -e.
    2. set -u interdit l'utilisation de variable non définie, pratique pour détecter les fautes de frappe. C'est un peu le use strict de Perl pour le bash...
      Pour lire les arguments $1, $2, etc., sans provoquer un arrêt du script en cas de non définition, exécuter :
      mavar=${1:-}
    3. set -o pipefail retournera un code d'erreur en cas de non fonctionnement d'un pipe, plutôt que de retourner le code d'erreur de la dernière commande (qui sera non pertinent en cas de défaillance en amont).
    4. IFS=$'\n\t' supprime l'espace de la liste des séparateurs. Par exemple quand on exécute for mavar in ...; do, IFS est utilisée pour décomposer les chaînes en éléments qui seront passés à mavar. À noter que par défaut, la valeur d'IFS est $' \n\t', c'est-à-dire début et fin de ligne, tabulation et espace.

2.23 Quelques commandes utiles

fuser Affiche quels processus utilisent un fichier donné ; permet d'envoyer un signal aux processus
lsof Affiche la liste des fichiers ouverts
netstat -ltnp
netstat -taupe
Affiche quels ports sont à l'écoute, avec le nom des processus
dd if=/dev/urandom bs=1 count=32 2> /dev/null | hexdump -e '"" 32/1 "%02x" "\n"' Affiche une chaîne aléatoire de 32 octets (utile pour générer une clé WPA par exemple)
stty -a Affiche les réglages du terminal
stty tostop Arrêter les tâches d'arrière-plan qui tentent d'écrire sur le terminal
find / -type f -perm +4000 | xargs ls -l Trouve les fichiers avec l'option SUID
find / -type f -perm +2000 | xargs ls -l Trouve les fichiers avec l'option SGID
xxd Affiche un fichier en représentation binaire ; pour éditer un fichier binaire dans Vi, dans Vi, exécuter :%!xxd
xfontsel Sélectionneur de fontes dans X
xlsfonts Lister les fontes disponibles dans X
lsattr, chattr Attributs des fichiers et répertoires sur les systèmes de fichier ext2 et ext3
badblocks Trouver les secteurs défectueux sur un volume ; appartient au paquetage mtools
dpkg -l "lib*-perl" Afficher quels modules PERL sont installés
xev, xmodmap, lineak, xbindkeys Programmation du clavier multimédia
update-alternatives Modifie les programmes invoqués pour réaliser certaines tâches
Créer /etc/udev/rules.d/00-ipod.rules, y écrire
BUS:"scsi", SYSFS{nodev}="iPods", SYMLINK="ipod"
Cela crée /dev/ipod lorsque ce périphérique est plugué
lshal Liste le matériel
dmidecode Décode les informations contenues dans le BIOS
hdparm Règle le fonctionnement d'un disque dur ou lecteur de CDROM IDE
smartctl Utilitaire SMART, pour Self-Monitoring, Analysis and Reporting
blockdev --getsize device Affiche la taille d'un périphérique de bloc, en nombre de blocs de 512 octets
cat /etc/*release* Affiche la version de la distribution (testé sur Ubuntu 7.10)
lsb_release -a Même chose que ci-dessus
acpi -t Informations sur la batterie, la température du processeur...
sensors Paquet lm-sensors. Affiche l'état de la machine. Fonctionne avec sensors-detect
find . -type f -iname "*.mp3" -exec mp3info -p "%S\n" {} \; | perl -ne '$t+=$_; END { print("Temps total : " . int($t/3600) . "h" . int($t/60 % 60) . "m" . int($t % 60) . "s\n");}' Affiche la durée totale des fichiers MP3 trouvés dans le répertoire courant
[Alt]+déplacement_souris Déplace la fenêtre
[Shift]+[Numlock] Déplace la souris au clavier
xset b off
set bell-style none
Désactive la cloche sonore
gtf Pour déterminer la valeur de la ligne ModeLine (dans le fichier xorg.conf) en fonction des caractéristiques de l'écran
notify-send et send-bus Pour interagir avec D-Bus, permet par exemple d'afficher une fenêtre
last reboot Affiche la liste des derniers reboot
root-tail Affiche le contenu d'un fichier sur la fenêtre racine X-Window, très adapté pour suivre le contenu des fichiers se trouvant dans /var/log
rsync Peut faire beaucoup de choses ! Exemple pour sauvegarde complète :
rsync -arH --delete --progress --stats /rep/a/sauvegarder /rep/de/sauvegarde
Sauvegarde incrémentale :
rsync -arHu --delete --progress --stats --link-dest=/rep/de/sauvegarde /rep/a/sauvegarder /rep/de/sauvegarde/incrementale
stat nom_fichier Affiche de nombreuses informations sur le fichier
uptime Statistiques sur le processeur
vmstat Statistiques sur la mémoire virtuelle
whois nom_domaine Affiche des informations sur le propriétaire d'un domaine Internet
dhclient iface Pour renouveler manuellement l'adresse fournie en DHCP
sudo update-usbids Mets à jour la base des périphériques USB
xrandr Affiche des informations sur les résolutions minimale, actuelle et maximale de l'écran
ddcprobe Affiche des informations sur le rafraîchissement de l'écran
whereis Détermine le chemin d'une commande
lshw Liste le matériel
hddtemp device Affiche la température du disque dur
mdadm Gestion des disques tels que RAID

2.24 Installation de MPlayer

L'URL http://www.debian-multimedia.org/mirrors.html donne les miroirs permettant de récupérer les paquetages.
Page d'accueil de MPlayer : http://www.mplayerhq.hu
Exemple de lignes ajoutées au fichier /etc/apt/sources.list (on a commenté la ligne deb-src, inutile tant que l'on ne recompile pas) :

# Multimedia packages - added by Sébastien Millet, February 2007
deb http://mirror.home-dn.net/debian-multimedia testing main
# deb-src http://mirror.home-dn.net/debian-multimedia stable main

Ensuite des erreurs sont affichées par APT (exécution de apt-get update), en raison d'une clé manquante :

maison-2:~# apt-get update
Réception de : 1 http://mir1.ovh.net testing Release.gpg [189B]
[...]
Lecture des listes de paquets... Fait
W: GPG error: http://mirror.home-dn.net testing Release: Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 07DC563D1F41B907
W: Vous pouvez lancer « apt-get update » pour corriger ces problèmes.

Pour éviter cet avertissement, nous allons utiliser gpg et apt-key, décrits ci-dessous.
Ensuite, faire l'installation normalement avec apt-get install mplayer mencoder (mencoder pour faire de l'encodage).


2.25 Le programme apt-key

Pour éviter les avertissements "Les signatures suivantes n'ont pas pu être vérifiées..." (exemple ci-dessus), il faut faire reconnaître le clé manquante par APT avec apt-key. Dans l'exemple qui suit, l'utilisateur sebastien a le droit d'exécuter apt-key avec sudo, cf. 2.9 Autoriser le groupe wheel à tout exécuter avec sudo.

sebastien@maison-2:~$ gpg --keyserver hkp://wwwkeys.eu.pgp.net --recv-keys 1F41B907
gpg: requesting key 1F41B907 from hkp server wwwkeys.eu.pgp.net
gpg: key 1F41B907: public key "Christian Marillat <marillat@debian.org>" imported
gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model
gpg: depth: 0  valid:   2  signed:   3  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: depth: 1  valid:   3  signed:   1  trust: 1-, 0q, 0n, 1m, 1f, 0u
gpg: Total number processed: 1
gpg:               imported: 1
sebastien@maison-2:~$ gpg --armor --export 1F41B907 | sudo apt-key add -
OK

2.26 Modifier le format d'une vidéo

De nombreux programmes peuvent le faire. Mencoder est l'un de ceux-là, son installation est décrite au-dessus. Ses paramètres sont *très* nombreux.
Utiliser l'option expand à la place de scale pour modifier le format sans modifier l'image (pas de zoom avant ni arrière), ce qui, au besoin, ajoute des bandes noires ou coupe l'image. Exemples :

 Avec le codec ffmpeg (paquetage libavcodec0d), en sortant du MPEG2 448x336
mencoder -ovc lavc -vf scale=448:336 -lavcopts vcodec=mpeg2video -oac copy input.avi -o output.avi

  Avec le codec ffmpeg, en sortant du MPEG4 448x336
mencoder -ovc lavc -vf scale=448:336 -lavcopts vcodec=mpeg4 -oac copy input.avi -o output.avi

  Avec le codec XVid (paquetage libxvidcore4), en limitant la taille du fichier de sortie à 368 000 Ko, format 608x456
mencoder -ovc xvid -xvidencopts bitrate=-368100 -vf scale=608:456 -oac copy input.avi -o output.avi

  Paquetages contenant les codecs ffmpeg et XVid
sebastien@maison-2:~$ dpkg -l "libavcodec*"
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  libavcodec0d              0.cvs20060823-6           ffmpeg codec library
sebastien@maison-2:~$ dpkg -l "libxvidcore4"
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  libxvidcore4              1.1.2-0.1                 High quality ISO MPEG4 codec library

2.27 Changer le navigateur par défaut de KDE

Ouvrir le centre de configuration KDE, rubrique Composants de KDE | Sélecteur de composants | Navigateur web.


2.28 Lister les fichiers par date, sous-répertoires inclus

 Liste les fichiers en affichant taille<espace>nom_fichier
find . -type f -exec ls -l {} \; | sed 's/\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\(.*\)/\5 \8/'
  Liste les fichiers par date croissante, en affichant date<espace>heure<espace>nom_fichier
find . -type f -exec ls -l {} \; | sed 's/\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\(.*\)/\6 \7 \5 \8/' | sort

2.29 Vérification orthographique

Vérifier que le paquetage aspell est installé, et exécuter aspell. Commande exécutée pour vérifier le document présent (howto-miscellaneous-1.0.html) :
aspell --encoding=utf-8 check howto-miscellaneous-1.0.html

Fichier ~/.aspell.conf :

# ~/.aspell.conf

lang fr_FR

2.30 Stardict (dictionnaire)

Ce dictionnaire est très complet, et l'interface (GNOME) est pratique.
URL : http://stardict.sourceforge.net
Installer le paquetage stardict, et éventuellement, stardict-xmlittre (il s'agit du Littré).

sebastien@maison-2:~$ dpkg -l "stardict*"
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  stardict                  2.4.8-1                   International dictionary for GNOME 2
ii  stardict-common           2.4.8-1                   International dictionary - data files
un  stardict-gtk              <néant>                  (aucune description n'est disponible)
ii  stardict-xmlittre         1.0-1                     French Littré dictionary for stardict

Copie d'écran.


2.31 Configuration des fontes sur X

La configuration des fontes se trouve dans le répertoire /etc/fonts et dans chaque fichier ~/.fonts.conf
Pour afficher de l'aide : man fonts.conf


2.32 Compilation du noyau

2.32.1 Avant-propos

Il y aurait ici de quoi écrire un livre entier. Je vais juste indiquer quelques trucs.

Les paquetages sont mentionnés ailleurs dans ce même document, 2.11 Paquetages que j'ajoute à l'installation de base

Avec le noyau par défaut, la plupart des pilotes sont chargés en tant que modules => Un lsmod donne des indications utiles sur le code à inclure dans le noyau.
Ci-dessous, j'indique comment passer de la liste des modules chargés aux configurations (qui se trouvent typiquement dans /usr/src/linux/.config, configurées avec make config ou autre). Pour que ça fonctionne, il faut le faire alors que Linux tourne avec le noyau par défaut fourni avec la distribution.
Attention car :

Tous ces éléments font que le résultat est incomplet, à manier avec des pincettes.
Néanmoins il permet de gagner un peu de temps.

maison-2:~# cd /usr/src/linux
maison-2:/usr/src/linux# lsmod | sed 's/\s.*//' | egrep -v '^Module$' | tr '_' '.' | sed 's/.*/\\<&\\.o\\>/' > ~/mods.regex
maison-2:/usr/src/linux# egrep -R -f ~/mods.regex * | egrep "\(CONFIG" | sed 's/.*(\(CONFIG[^)]*\)).*/\\<\1\\>/' > ~/config.regex
maison-2:/usr/src/linux# egrep -R -f ~/config.regex .config > ~/resultat
maison-2:/usr/src/linux#

2.32.2 Commandes pour configurer le noyau

2.32.3 Compilation du noyau

Un make && make modules_install fonctionne (à condition, ensuite, de copier les fichiers ad hoc dans /boot), mais il est préférable de faire appel à make-kpkg (paquetage kernel-package).
make-kpkg crée un paquetage .deb permettant un suivi par APT.

maison-2:/usr/src/linux# make-kpkg --append-to-version=seb --revision=2.6.20.1seb.10 kernel_image
[...]
maison-2:/usr/src/linux# cd ..
maison-2:/usr/src# ls -l
total 3452
lrwxrwxrwx  1 root src       14 2007-03-07 21:54 linux -> linux-2.6.20.1
drwxrwxr-x 21 root root    4096 2007-03-10 18:24 linux-2.6.20.1
-rw-r--r--  1 root src  3523722 2007-03-10 18:23 linux-image-2.6.20.1seb_2.6.20.1seb.10_i386.deb
maison-2:/usr/src# dpkg-deb --info linux-image-2.6.20.1seb_2.6.20.1seb.10_i386.deb
 nouveau paquet Debian, version 2.0.
[...]
 Package: linux-image-2.6.20.1seb
 Version: 2.6.20.1seb.10
 Section: base
[...]

2.32.4 Installation du noyau

Exécuter dpkg -i suivi du nom des paquetages (noms des fichiers .deb) à installer.

maison-2:/usr/src# dpkg -i linux-image-2.6.20.1seb_2.6.20.1seb.10_i386.deb
Sélection du paquet linux-image-2.6.20.1seb précédemment dé-sélectionné.
[...]
Updating /boot/grub/menu.lst ... done

maison-2:/usr/src# dpkg -l "linux-image*"
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
un  linux-image               <néant>                  (aucune description n'est disponible)
un  linux-image-2.6           <néant>                  (aucune description n'est disponible)
ii  linux-image-2.6-486       2.6.18+6                  Linux kernel 2.6 image on x86
ii  linux-image-2.6.17-2-486  2.6.17-9                  Linux 2.6.17 image on 486-class
ii  linux-image-2.6.18-3-486  2.6.18-7                  Linux 2.6.18 image on x86
ii  linux-image-2.6.18-4-486  2.6.18.dfsg.1-11          Linux 2.6.18 image on x86
ii  linux-image-2.6.20.1seb   2.6.20.1seb.10            Linux kernel binary image for version 2.6.20.1seb

2.33 Installer le driver nVidia

2.33.1 Méthode 1 - Recompilation avec création des paquetages

Les informations qui suivent correspondent au driver nVidia version 1.0.8776.
Il faut installer nvidia-kernel-common, ce qui installe également (en prenant en compte les paquets suggérés) :

devscripts (utile si recompilation) Scripts pour faciliter la vie des développeurs Debian
dpatch (utile si recompilation) Programme dpatch ("patch maintenance system for Debian")
nvidia-kernel-common Scripts dans /etc/init.d, /etc/modutils et /etc/modprobe.d pour configurer les périphériques /dev/nvidia* au démarrage.
nvidia-kernel-version_noyau (ex. : nvidia-kernel-2.6.18-4-486) Installe le module (binaire) dans /lib/modules/version_noyau/nvidia/nvidia.ko (ex. : /lib/modules/2.6.18-4-486/nvidia/nvidia.ko).
Ce paquetage est utile seulement pour utiliser un module déjà compilé.
nvidia-glx Modules x.org (entre autres, /usr/lib/xorg/modules/drivers/nvidia_drv.o) et scripts d'initialisation dans /etc/init.d
nvidia-kernel-source (utile si recompilation) Installe /usr/src/nvidia-kernel-source.tar.gz.
Utile si vous souhaitez compiler vous-même le module.
patchutils (utile si recompilation) Suite d'outils de type "diff".
Ici aussi, ce paquetage est utile seulement si vous souhaitez compiler vous-même le module.
mesa-utils Permet de tester l'accélération matérielle avec, entre autres, glxinfo et glxgears.

Pour compiler le module, il faut installer module-assistant. Le programme module-assistant permet de créer un paquetage Debian contenant le module compilé.
make-kpkg sait aussi le faire, mais cette méthode n'est pas décrite ici.

Paramétrage du noyau : pour que le module nvidia puisse être compilé, il faut ne pas avoir configuré le framebuffer nvidia.
Ci-dessous, j'indique la commande module-assistant à exécuter pour compiler le module nvidia puis créer le paquetage Debian.

Exemple avec /usr/src/nvidia-kernel-source.tar.gz absent
maison-2:/usr/src# module-assistant auto-build -t -k /usr/src/linux nvidia-kernel
The source tarball could not be found!
Package nvidia-kernel-source not installed?
Running "m-a -f get nvidia-kernel-source" may help.
The source tarball could not be found!
Package nvidia-kernel-source not installed?
Running "m-a -f get nvidia-kernel-source" may help.
La construction a échoué. Appuyez sur Entrée pour continuer...

  Exemple avec /usr/src/nvidia-kernel-source.tar.gz présent mais avec le framebuffer nvidia configuré
maison-2:/usr/src# module-assistant auto-build -t -k /usr/src/linux nvidia-kernel
Your kernel was configured to include nvidiafb support!

The nvidiafb driver conflicts with the NVIDIA driver, please
reconfigure your kernel and *disable* nvidiafb support, then
try installing the NVIDIA kernel module again.

  Exemple qui fonctionne
maison-2:/usr/src# module-assistant auto-build -t -k /usr/src/linux nvidia-kernel
Extracting the package tarball, /usr/src/nvidia-kernel-source.tar.gz, please wait...
[...]
make[1]: quittant le répertoire « /usr/src/modules/nvidia-kernel »
maison-2:/usr/src# ls -l
total 6692
lrwxrwxrwx  1 root src       14 2007-03-07 21:54 linux -> linux-2.6.20.1
drwxrwxr-x 21 root root    4096 2007-03-11 09:14 linux-2.6.20.1
-rw-r--r--  1 root src  3460132 2007-03-11 09:03 linux-image-2.6.20.1seb_2.6.20.1seb.11_i386.deb
drwxrwxr-x  3 root src     4096 2007-01-05 05:51 modules
-rw-r--r--  1 root src  1622700 2007-03-11 09:19 nvidia-kernel-2.6.20.1seb_1.0.8776-4+2.6.20.1seb.11_i386.deb
-rw-r--r--  1 root root 1744193 2007-01-05 05:51 nvidia-kernel-source.tar.gz

Dans l'exemple ci-dessus, module-assistant a créé le fichier
/usr/src/nvidia-kernel-2.6.20.1seb_1.0.8776-4+2.6.20.1seb.11_i386.deb
Le paquetage est donc nvidia-kernel-2.6.20.1seb version 1.0.8776-4+2.6.20.1seb.11. Ce paquetage contient le module nvidia, installé dans /lib/modules/2.6.20.1seb/nvidia/nvidia.ko.

L'inconvénient de cette méthode est qu'elle ne fonctionne pas chez moi ! Mon PC est un Acer Aspire T180-XB7Z, la carte vidéo (intégrée) est une Nvidia GeForce 6100, référence lspci :
00:0d.0 VGA compatible controller: nVidia Corporation Unknown device 03d1 (rev a2)
Le pilote nVidia à la sauce Debian est en version 8776 (alors que le site nvidia permet de télécharger le pilote version 9755), et il plante. Cela se produit aussi bien pour le noyau Debian du paquetage linux-image-2.6.18-4-486, qu'avec un noyau que j'ai compilé moi-même, de version 2.6.20.1.

2.33.2 Méthode 2 - Installateur nVidia

Eh oui, malgré tous mes efforts pour rester propre, il a fallu que j'utilise l'installateur fourni par nVidia. Dans mon cas, il s'agit de l'exécutable NVIDIA-Linux-x86-1.0-9755-pkg1.run, téléchargeable sur le site de nVidia, http://www.nvidia.com.
URL utiles au sujet de Debian et nVidia :
http://wiki.debian.org/NvidiaGraphicsDrivers#head-783b4c1ece4093dca2810eeff7da15c17a2b031a
http://www.commentcamarche.net/faq/sujet-3456-debian-howto-xorg7-installer-drivers-nvidia

Pour ne pas trop casser ma Debian, j'ai réalisé un diff sur le contenu des répertoires avant et après installation. J'ai fait appel au script suivant (avant et après l'installation), puis j'ai comparé les fichiers avec la commande vi -d.

#/bin/sh

#
# Monitor files sizes and modification date/time
# Sébastien Millet, March 2007
#

find /bin /boot /etc /initrd /lib /lib64 /opt /sbin /selinux /srv /usr -exec ls -ldF {} \; | sed 's/\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\(.*\)/\6 \7 \5 \8/' | egrep -v "[[:digit:]] \/[^>]*\/$" | egrep -v "[[:digit:]] (\/dev\/.static\/dev\/console|\/etc\/blkid\.tab\.old|\/etc\/adjtime|\/etc\/network\/run\/ifstate|\/etc\/mtab|\/etc\/blkid\.tab|\/lib\/init\/rw\/\.ramfs)$" | egrep -v "[[:digit:]][[:space:]]+\/usr\/src\/"
echo "::::::::::::::::::::::::::::::::::::::::"
echo "::::::::::::::::::::::::::::::::::::::::"
find /dev -type d -exec ls -ldF {} \; | sed 's/\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\(.*\)/\5 \8/'
echo "::::::::::::::::::::::::::::::::::::::::"
echo "::::::::::::::::::::::::::::::::::::::::"
find /dev -type l -exec ls -ldF {} \; | sed 's/\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\(.*\)/\5 \8/'
echo "::::::::::::::::::::::::::::::::::::::::"
echo "::::::::::::::::::::::::::::::::::::::::"
find /dev -type b -o -type c -exec ls -ldF {} \; | sed 's/\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\([^[:space:]]\+\)[[:space:]]\+\([^[:space:],]\+\)[[:space:],]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+\(.*\)/\9 \5 \6/' | sort

Cela m'a permis de détecter les modifications suivantes :

modifié 2007-03-18 10:20 3689 /etc/X11/xorg.conf
ajouté 2007-03-18 10:20 7504932 /lib/modules/2.6.20.3seb/kernel/drivers/video/nvidia.ko
ajouté 2007-03-18 10:20 1353184 /usr/bin/nvidia-settings*
ajouté 2007-03-18 10:20 213880 /usr/bin/nvidia-installer*
ajouté 2007-03-18 10:20 151052 /usr/bin/nvidia-xconfig*
ajouté 2007-03-18 10:20 10716 /usr/bin/nvidia-bug-report.sh*
ajouté 2007-03-18 10:20 25 /usr/lib/libnvidia-tls.so.1 -> libnvidia-tls.so.1.0.9755*
ajouté 2007-03-18 10:20 25 /usr/lib/libXvMCNVIDIA_dynamic.so.1 -> libXvMCNVIDIA.so.1.0.9755*
ajouté 2007-03-18 10:20 601720 /usr/lib/libGL.so.1.0.9755*
ajouté 2007-03-18 10:20 21 /usr/lib/libGLcore.so.1 -> libGLcore.so.1.0.9755*
ajouté 2007-03-18 10:20 178924 /usr/lib/libXvMCNVIDIA.so.1.0.9755*
ajouté 2007-03-18 10:20 193966 /usr/lib/libXvMCNVIDIA.a
ajouté 2007-03-18 10:20 2352 /usr/lib/libnvidia-tls.so.1.0.9755*
ajouté 2007-03-18 10:20 653 /usr/lib/libGL.la
ajouté 2007-03-18 10:20 18 /usr/lib/xorg/modules/libwfb.so -> libnvidia-wfb.so.1*
ajouté 2007-03-18 10:20 25 /usr/lib/xorg/modules/libnvidia-wfb.so.1 -> libnvidia-wfb.so.1.0.9755*
modifié 2007-03-18 10:20 1396712 /usr/lib/xorg/modules/drivers/nvidia_drv.so*
modifié 2007-03-18 10:20 18 /usr/lib/xorg/modules/extensions/libglx.so -> libglx.so.1.0.9755*
ajouté 2007-03-18 10:20 691852 /usr/lib/xorg/modules/extensions/libglx.so.1.0.9755*
supprimé 2007-03-01 04:09 2396219 /usr/lib/xorg/modules/extensions/libGLcore.so
ajouté 2007-03-18 10:20 279508 /usr/lib/xorg/modules/libnvidia-wfb.so.1.0.9755*
ajouté 2007-03-18 10:20 18 /usr/lib/libnvidia-cfg.so -> libnvidia-cfg.so.1*
ajouté 2007-03-18 10:20 10 /usr/lib/libGL.so -> libGL.so.1*
ajouté 2007-03-18 10:20 25 /usr/lib/libnvidia-cfg.so.1 -> libnvidia-cfg.so.1.0.9755*
ajouté 2007-03-18 10:20 107364 /usr/lib/libnvidia-cfg.so.1.0.9755*
modifié 2007-03-18 10:20 17 /usr/lib/libGL.so.1 -> libGL.so.1.0.9755*
ajouté 2007-03-18 10:20 25 /usr/lib/tls/libnvidia-tls.so.1 -> libnvidia-tls.so.1.0.9755*
ajouté 2007-03-18 10:20 2324 /usr/lib/tls/libnvidia-tls.so.1.0.9755*
supprimé 2007-02-23 01:38 425832 /usr/lib/libGL.so.1.2
ajouté 2007-03-18 10:20 9918780 /usr/lib/libGLcore.so.1.0.9755*
modifié 2007-03-18 10:20 371483 /usr/include/GL/glext.h
modifié 2007-03-18 10:20 14021 /usr/include/GL/glx.h
modifié 2007-03-18 10:20 32000 /usr/include/GL/glxext.h
modifié 2007-03-18 10:20 72949 /usr/include/GL/gl.h
ajouté le répertoire 2007-03-18 10:20 25190 /usr/share/doc/NVIDIA_GLX-1.0/...
ajouté 2007-03-18 10:20 237 /usr/share/applications/nvidia-settings.desktop
ajouté 2007-03-18 10:20 5939 /usr/share/man/man1/nvidia-installer.1.gz
ajouté 2007-03-18 10:20 6554 /usr/share/man/man1/nvidia-settings.1.gz
ajouté 2007-03-18 10:20 5750 /usr/share/man/man1/nvidia-xconfig.1.gz

Le diff est le suivant. J'ai enlevé les différences dont il est inutile de se préoccuper, comme le cache des librairies /etc/ld.so.cache, les dépendances de modules reconstruites avec depmod, etc., et j'ai enlevé la liste de tous le fichiers du répertoire /usr/share/doc/NVIDIA_GLX-1.0. :

> 2007-03-18 10:20 2912 /etc/X11/xorg.conf.backup
< 2007-03-12 08:11 2912 /etc/X11/xorg.conf
---
> 2007-03-18 10:20 3689 /etc/X11/xorg.conf
---
> 2007-03-18 10:20 7504932 /lib/modules/2.6.20.3seb/kernel/drivers/video/nvidia.ko
---
> 2007-03-18 10:20 1353184 /usr/bin/nvidia-settings*
> 2007-03-18 10:20 213880 /usr/bin/nvidia-installer*
> 2007-03-18 10:20 151052 /usr/bin/nvidia-xconfig*
> 2007-03-18 10:20 10716 /usr/bin/nvidia-bug-report.sh*
> 2007-03-18 10:20 25 /usr/lib/libnvidia-tls.so.1 -> libnvidia-tls.so.1.0.9755*
> 2007-03-18 10:20 25 /usr/lib/libXvMCNVIDIA_dynamic.so.1 -> libXvMCNVIDIA.so.1.0.9755*
> 2007-03-18 10:20 601720 /usr/lib/libGL.so.1.0.9755*
> 2007-03-18 10:20 21 /usr/lib/libGLcore.so.1 -> libGLcore.so.1.0.9755*
> 2007-03-18 10:20 178924 /usr/lib/libXvMCNVIDIA.so.1.0.9755*
> 2007-03-18 10:20 193966 /usr/lib/libXvMCNVIDIA.a
> 2007-03-18 10:20 2352 /usr/lib/libnvidia-tls.so.1.0.9755*
> 2007-03-18 10:20 653 /usr/lib/libGL.la
> 2007-03-18 10:20 18 /usr/lib/xorg/modules/libwfb.so -> libnvidia-wfb.so.1*
> 2007-03-18 10:20 25 /usr/lib/xorg/modules/libnvidia-wfb.so.1 -> libnvidia-wfb.so.1.0.9755*
< 2007-01-05 05:51 1040088 /usr/lib/xorg/modules/drivers/nvidia_drv.so
---
> 2007-03-18 10:20 1396712 /usr/lib/xorg/modules/drivers/nvidia_drv.so*
< 2007-03-01 04:09 493686 /usr/lib/xorg/modules/extensions/libglx.so
---
> 2007-03-18 10:20 18 /usr/lib/xorg/modules/extensions/libglx.so -> libglx.so.1.0.9755*
> 2007-03-18 10:20 691852 /usr/lib/xorg/modules/extensions/libglx.so.1.0.9755*
< 2007-03-01 04:09 2396219 /usr/lib/xorg/modules/extensions/libGLcore.so
> 2007-03-18 10:20 279508 /usr/lib/xorg/modules/libnvidia-wfb.so.1.0.9755*
> 2007-03-18 10:20 18 /usr/lib/libnvidia-cfg.so -> libnvidia-cfg.so.1*
> 2007-03-18 10:20 10 /usr/lib/libGL.so -> libGL.so.1*
> 2007-03-18 10:20 25 /usr/lib/libnvidia-cfg.so.1 -> libnvidia-cfg.so.1.0.9755*
> 2007-03-18 10:20 107364 /usr/lib/libnvidia-cfg.so.1.0.9755*
< 2007-03-11 20:15 12 /usr/lib/libGL.so.1 -> libGL.so.1.2
---
> 2007-03-18 10:20 17 /usr/lib/libGL.so.1 -> libGL.so.1.0.9755*
> 2007-03-18 10:20 25 /usr/lib/tls/libnvidia-tls.so.1 -> libnvidia-tls.so.1.0.9755*
> 2007-03-18 10:20 2324 /usr/lib/tls/libnvidia-tls.so.1.0.9755*
< 2007-02-23 01:38 425832 /usr/lib/libGL.so.1.2
> 2007-03-18 10:20 9918780 /usr/lib/libGLcore.so.1.0.9755*
< 2007-01-04 17:19 342501 /usr/include/GL/glext.h
< 2007-01-04 17:19 15234 /usr/include/GL/glx.h
---
> 2007-03-18 10:20 371483 /usr/include/GL/glext.h
> 2007-03-18 10:20 14021 /usr/include/GL/glx.h
< 2007-01-04 17:19 30134 /usr/include/GL/glxext.h
< 2007-02-22 20:24 90905 /usr/include/GL/gl.h
---
> 2007-03-18 10:20 32000 /usr/include/GL/glxext.h
> 2007-03-18 10:20 72949 /usr/include/GL/gl.h
> 2007-03-18 10:20 25190 /usr/share/doc/NVIDIA_GLX-1.0/NVIDIA_Changelog
[...] 54 lignes, non reproduites ici.
> 2007-03-18 10:20 3485 /usr/share/doc/NVIDIA_GLX-1.0/nvidia-settings.png
> 2007-03-18 10:20 237 /usr/share/applications/nvidia-settings.desktop
> 2007-03-18 10:20 5939 /usr/share/man/man1/nvidia-installer.1.gz
> 2007-03-18 10:20 6554 /usr/share/man/man1/nvidia-settings.1.gz
> 2007-03-18 10:20 5750 /usr/share/man/man1/nvidia-xconfig.1.gz

Et ça marche !
A noter que l'utilisateur qui souhaite bénéficier de l'accélération matérielle doit faire partie du groupe video.
Résultat de la commande glxinfo :

sebastien@maison-2:~$ glxinfo | grep -i render
direct rendering: Yes
OpenGL renderer string: GeForce 6100 nForce 405/PCI/SSE2/3DNOW!
    GL_NVX_conditional_render, GL_SGIS_generate_mipmap, GL_SGIS_texture_lod,
sebastien@maison-2:~$

Le pilote nVidia installe un panneau de contrôle. Sous KDE, il est accessible dans le menu "K" -> Système -> NVIDIA X Server Settings.
Copie d'écran du panneau de contrôle :


2.34 Faire une copie d'écran sous X

Nous allons utiliser le programme import, appartenant au paquetage imagemagick. Pour identifier la fenêtre, nous allons faire appel au programme xwininfo, paquetage xbase-clients (installé par défaut). Une fois xwininfo lancé, il faut cliquer sur la fenêtre que l'on souhaite capturer.

sebastien@maison-2:~$ dpkg -l imagemagick
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  imagemagick               6.2.4.5.dfsg1-0.14        Image manipulation programs
sebastien@maison-2:~$ dpkg -l xbase-clients
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                       Version                   Description
+++-=========================-=========================-==================================================================
ii  xbase-clients             7.1.ds1-2                 miscellaneous X clients
sebastien@maison-2:~$ xwininfo | grep -i "window id"
xwininfo: Window id: 0x2e00045 "howto-miscellaneous-1.0.html - Bluefish 1.0.7"
sebastien@maison-2:~$ import -window 0x2e00045 mon_image.png
sebastien@maison-2:~$ identify mon_image.png
mon_image.png PNG 1024x47 1024x47+0+0 DirectClass 39kb
sebastien@maison-2:~$ display mon_image.png

Exécuter import -window root pour copier la totalité de l'écran X.


2.35 Auto-eject et auto-close

Exécuter
echo 1 > /proc/sys/dev/cdrom/autoclose
ou bien
echo 1 > /proc/sys/dev/cdrom/autoeject


2.36 Tour très rapide des outils APT

Programmes APT avec exemples d'utilisation. La source principale (mais non exclusive) du tableau qui suit est Linux Magazine HS 28, notamment, l'exemple avec apt-rdepends et le script pour parcourir /var/log/popularity-contest.
URL utile : http://www.debian.org/doc/manuals/reference/ch-package.fr.html#s-apt-install

Exécutable ou fichier Paquetage Exemple
Explication
apt-get apt apt-get update
Mets à jour la liste des paquetages et versions de paquetages.

apt-get upgrade
A exécuter après apt-get update. Mets à jour ce qui doit l'être.

apt-get install planetpenguin-racer
Installer le paquetage de nom planetpenguin-racer.

apt-get source planetpenguin-racer
Récupère les sources du paquetage planetpenguin-racer. Nécessite une ou des lignes deb-src dans le fichier /etc/apt/sources.list.

apt-get build-dep planetpenguin-racer
Récupère les sources du paquetage planetpenguin-racer, ainsi que tout ce qui est nécessaire pour le construire. Même remarque concernant deb-src.
dpkg dpkg dpkg -i glest_2.0.0-0~getdeb1_i386.deb glest-data_2.0.0-0~getdeb1_all.deb
Installer Glest depuis des fichiers paquetages se trouvant dans le répertoire courant.

dpkg -l "icewea*"
Lister les paquetages dont le nom commence par icewea.

dpkg -L "iceweasel"
Lister les fichiers du paquetage iceweasel.

dpkg -P quake2
Efface les fichiers de configuration du paquetage quake2, même s'il n'est pas installé.
dpkg-reconfigure debconf dpkg-reconfigure xserver-xorg
Reconfigurer X-Window (seulement si x.org est le serveur X).
Fichier /etc/apt/sources.list n/a Emplacements (réseau ou CDROM) où aller chercher les paquetages. Aide : man sources.list
Exemple :
# the main Debian packages.
deb http://mir1.ovh.net/debian/ testing main contrib non-free
deb http://mir1.ovh.net/debian/ unstable main contrib non-free
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most packages.
deb-src http://mir1.ovh.net/debian/ testing main contrib non-free
# uncommenting the following line will enable security updates
deb http://security.debian.org/ stable/updates main contrib non-free

# Multimedia packages - added by Sébastien Millet, February 2007
deb http://mirror.home-dn.net/debian-multimedia testing main
# deb-src http://mirror.home-dn.net/debian-multimedia stable main
Fichier /etc/apt/preferences n/a Règles de précédence dans le choix de la distribution d'où prendre les paquetages à installer ou mettre à jour. Exemple :
Package: *
Pin: release a=testing
Pin-Priority: 900

Package: *
Pin: release a=stable
Pin-Priority: 90

Package: *
Pin: release a=unstable
Pin-Priority: 50
netselect-apt netselect-apt netselect-apt testing
Détermine le serveur le plus rapide pour récupérer les paquetages de la distribution Testing. Modifie /etc/apt/sources.list.
apt-cdrom apt apt-cdrom add
Référence (dans /etc/apt/sources.list) le CD se trouvant dans le lecteur de CDROM.
aptoncd aptoncd aptoncd
Lance aptoncd, pour récupérer les paquets installés sur une machine.
apt-cache apt apt-cache show vim
Affiche des informations (description, dépendances, etc.) au sujet du paquetage de nom vim.

apt-cache search tux
Cherche tous les paquetages où il est question de tux.

apt-cache showsrc noatun
Affiche quels paquets source sont nécessaires pour recompiler noatun.
apt-show-versions apt-show-versions apt-show-versions -a tree
Affiche les différentes versions de tree, toutes distributions confondues.
apt-file apt-file apt-file search rcconf
Affiche le nom du paquetage dans lequel se trouve un fichier de nom rcconf.
apt-key apt gpg --armor --export 1F41B907 | sudo apt-key add -
Ajoute la clé 1F41B907 (=> signature des paquetages MPlayer) dans le gestionnaire APT. Pour que cette commande fonctionne, la clé 1F41B907 doit se trouver dans le trousseau de gpg (GnuPG), cf. 2.25 Le programme apt-key.
apt-rdepends apt-rdepends apt-rdepends vim
Affiche les dépendances (en parcourant récursivement l'arbre dans les niveaux inférieurs) du paquetage de nom vim.

Pour se la jouer :
apt-rdepends -d rcconf | dot -Tps > ~/rcconf.ps && kghostview ~/rcconf.ps
Affiche sous forme graphique (fichier PostScript) les dépendances du paquetage rcconf.
dot est fourni par le paquetage graphviz, kghostview est un programme KDE. Essayez avec gftp, le résultat est amusant.
deborphan deborphan deborphan
Affiche les paquetages orphelins.
wajig wajig wajig list-orphans
Comparable à deborphan mais avec un peu plus de possibilités.
cruft cruft cruft
Affiche les fichiers qui ne font partie d'aucun paquetage.
apt-show-source apt-show-source apt-show-source
Affiche les paquets avec leur version binaire et leur version source.
apt-spy apt-spy
- popularity-contest Une fois installé, participe au Popularity Contest, permettant de savoir quels paquetages sont les plus utilisés par les utilisateurs Debian. Les données se trouvent dans le fichier /var/log/popularity-contest. Les nombres en début de ligne indiquent la date/heure à laquelle le fichier de référence du paquet a été accédé pour la dernière fois. Ce nombre est le nombre de secondes écoulées depuis le 1/1/70 à minuit.

Pour l'afficher de manière lisible :
date -d '1970-01-01 UTC nombre seconds' '+%d/%m/%Y'
ou bien
date -d '@nombre' '+%d/%m/%Y'

Script pour parcourir /var/log/popularity-contest et l'afficher de manière lisible (exécuter ./monscript.pl /var/log/popularity-contest) :
#!/usr/bin/perl -w
mainloop: while (<>) {
  my $l = $_;
  @t = split(' ', $l);
  if (defined($t[2])) {
    $d0 = `date -d '\@$t[0]' '+%d/%m/%Y'`;
    $d1 = `date -d '\@$t[1]' '+%d/%m/%Y'`;
    chomp($d0);
    chomp($d1);
    print "$d0 $d1 $t[2]\n"
  }
}'
dh_make dh-make dh_make -e machin@domaine.net -f ../mypackage.tar.gz -c gpl
dh_make crée et pré-remplit le répertoire debian/ dans l'arobrescence source du paquet
dpkg-buildpackage dpkg-dev dpkg-buildpackage -b -rfakeroot
Construis le paquetage se trouvant dans le répertoire courant.
apt-src apt-src apt-src install ethtool
Récupère les sources du paquetage ethtool, ainsi que les paquetages nécessaires à sa construction.
apt-build apt-build apt-build install tree
Récupère les sources du paquetage tree, ainsi que les paquetages nécessaires à sa construction, puis le construis, et enfin, l'installe !

apt-build world
Reconstruis le système.
debtags debtags debtags show iceweasel
Affiche les tags du paquetage iceweasel.

debtags tagsearch browser
Affiche les paquetages ayant un tag browser.

debtags tagshow sound::player
Affiche des renseignements sur le tag sound::player.
make-kpkg kernel-package make-kpkg --append-to-version=seb --revision=2.6.20.1seb.10 kernel_image
Construis un paquetage contenant le noyau compilé, cf. 2.32 Compilation du noyau.
make-jpkg java-package fakeroot make-jpkg jre-1_5_0_11-linux-i586.bin
Construis un paquetage contenant la JRE de Sun ®, cf. 2.7 JAVA Sun ® sur Iceweasel (firefox).
reportbug reportbug reportbug
Démarre le programme reportbug.
dpkg-divert dpkg dpkg-divert --list
Affiche la liste des diversions.
apt-proxy apt-proxy Système de proxy pour APT.
debootstrap debootstrap Installation d'un système de base.
dgrep debian-goodies Recherche un motif dans les paquetages spécifiés en argument
dglob debian-goodies Génère la liste des paquetages qui correspondent à un motif
debget debian-goodies Récupère un paquetage dans le répertoire courant
dpigs debian-goodies Pour afficher quels paquetages installés occupent le plus d'espace
debman debian-goodies Pour consulter la page de manuel d'un paquetage non encore installé
debmany debian-goodies Détermine et visualise la documentation relative à un paquetage
checkrestart debian-goodies Détermine quels processus sont en attente de redémarrage pour utiliser des fichiers de configuration qui viennent d'être mis à jour
popbugs debian-goodies Affiche la liste des bogues critiques d'un paquetage installé
which-pkg-broke debian-goodies Affiche la liste des dépendances d'un paquetage

2.37 Modification de syslog.conf

Ajouter ces deux lignes pour afficher les LOGs messagerie sur le terminal virtuel 5, et les LOGs système sur le terminal virtuel 6.
mail.* /dev/tty5
*.*;auth,authpriv.none /dev/tty6

Modifier /etc/inittab en conséquence.
Résultat :

Fichier /etc/syslog.conf

#  /etc/syslog.conf  Configuration file for syslogd.
#
#     For more information see syslog.conf(5)
#     manpage.

#
# First some standard logfiles.  Log by facility.
#

auth,authpriv.*     /var/log/auth.log
*.*;auth,authpriv.none    -/var/log/syslog
#cron.*       /var/log/cron.log
daemon.*      -/var/log/daemon.log
kern.*        -/var/log/kern.log
lpr.*       -/var/log/lpr.log
mail.*        -/var/log/mail.log
user.*        -/var/log/user.log
uucp.*        /var/log/uucp.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info     -/var/log/mail.info
mail.warn     -/var/log/mail.warn
mail.err      /var/log/mail.err

# Logging for INN news system
#
news.crit     /var/log/news/news.crit
news.err      /var/log/news/news.err
news.notice     -/var/log/news/news.notice

#
# Some `catch-all' logfiles.
#
*.=debug;\
  auth,authpriv.none;\
  news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
  auth,authpriv.none;\
  cron,daemon.none;\
  mail,news.none    -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg       *

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#

# Sébastien Millet, Feb 2007
mail.* /dev/tty5
*.*;auth,authpriv.none /dev/tty6

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
#
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
daemon.*;mail.*;\
  news.crit;news.err;news.notice;\
  *.=debug;*.=info;\
  *.=notice;*.=warn |/dev/xconsole

Fichier /etc/inittab

# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
#  <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
# 5:23:respawn:/sbin/getty 38400 tty5
# 6:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

2.38 Récupérer un CD audio sous forme de fichier son

Il existe de *très* nombreux programmes pour le faire, si bien qu'il est difficile de s'y retrouver.

Pour récupérer un CD tel quel sous forme de fichiers .wav (un fichier par morceau), sans se préoccuper de CDDB :

 cdparanoia -B -w 1-, paquetage cdparanoia

Pour récupérer un CD tel quel sous forme de fichiers .wav, avec consultation de CDDB :

 icedax -B -D /dev/hda -L 1, paquetage icedax, remplace cdda2wav

Pour encoder un fichier non compressé (par exemple, au format .wav) en mp3 :

 lame fichier_départ fichier_arrivée

Pour afficher des informations techniques sur un fichier mp3 :

 mp3info -x, paquetage mp3info

Pour afficher les TAGs d'un fichier mp3 - ce programme permet aussi l'édition de TAGs :

 id3v2 -l, paquetage id3v2

Pour lire un CD audio et le convertir en MP3 avec lame, avec consultation CDDB :

 abcde -o mp3, paquetage abcde

Je convertis mes CD audio en MP3 avec la configuration et la commande ci-dessous. A noter qu'en l'absence d'option fournie à lame (~/.abcde.conf ou /etc/abcde.conf), l'encodage est effectué à 128 kbps, 44 kHz.

Fichier ~/.abcde.conf

# ~/.abcde.conf

# To have a constant bitrate of 192 kbps.
# LAMEOPTS="-b 192"

# To have a variable bitrate
LAMEOPTS="-v"

Commande abcde -x -o mp3


2.39 Convertir une image APE, compressée en RAR, en un ensemble de fichiers MP3

  1. Paquetages requis

  2. Décompresser le fichier .rar

  3. Convertir {CDImage.ape, CDImage.cue} en plusieurs .wav

  4. Convertir les fichiers .wav en .mp3 à débit variable

2.40 L'heure système est décalée

2.40.1 Symptôme

L'heure système - commande date et affichage KDE - est systématiquement en avance de 2h après démarrage. Un réglage ne dure que jusqu'au démarrage suivant.
C'est comme si le paramètre UTC=no, dans le fichier /etc/default/rcS, était ignoré. Linux prend l'heure du BIOS, que j'ai choisie de régler sur l'heure locale plutôt que UTC, et y ajoute deux heures car le fuseau horaire courant est réglé à "Europe/Paris" = GMT+2 en été.
Pour le réglage du fuseau horaire, cf. 2.14 Régler le fuseau horaire courant.

Un test rapide (modification de /etc/inid.d/hwclock.sh) montre que hwclock est bien invoqué avec l'option --localtime.
L'exécution de hwclock en mode debug révèle l'origine de l'erreur :

maison-2:~# hwclock --debug --hctosys --localtime
hwclock from util-linux-2.12r
Using /dev/rtc interface to clock.
Assuming hardware clock is kept in local time.
Waiting for clock tick...
select() to /dev/rtc to wait for clock tick timed out
...got clock tick
maison-2:~#

2.40.2 Solution

L'une des solutions trouvée sur Internet consiste à exécuter hwclock avec l'option --directisa. Ce n'est pas la plus propre mais c'est la plus simple. A l'exécution :

maison-2:~# hwclock --debug --hctosys --localtime --directisa
hwclock from util-linux-2.12r
Using direct I/O instructions to ISA clock.
Assuming hardware clock is kept in local time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2007/09/20 23:00:36
Hw clock time : 2007/09/20 23:00:36 = 1190322036 seconds since 1969
Calling settimeofday:
        tv.tv_sec = 1190322036, tv.tv_usec = 0
        tz.tz_minuteswest = -120
maison-2:~#

Comment donner cette option à hwclock au démarrage ? Le script /etc/init.d/hwclock.sh prend en compte la variable HWCLOCKPARS. Cette variable pourrait être définie en modifiant directement hwclock.sh. Ce n'est pas raisonnable en raison des mises à jour de paquet Debian à venir.
Je préfère modifier le fichier /etc/default/rcS, en y ajoutant la ligne HWCLOCKPARS="$HWCLOCKPARS --directisa". Fichier complet :

#
# /etc/default/rcS
#
# Default settings for the scripts in /etc/rcS.d/
#
# For information about these variables see the rcS(5) manual page.
#
# This file belongs to the "initscripts" package.

TMPTIME=0
SULOGIN=no
DELAYLOGIN=no
UTC=no
HWCLOCKPARS="$HWCLOCKPARS --directisa"
VERBOSE=no
FSCKFIX=no

A noter que HWCLOCKPARS n'est pas mentionné dans man rcS.


2.41 Quelques uni-lignes PERL

Ces uni-lignes proviennent tous de GNU LINUX MAGAZINE FRANCE NUMÉRO 100 (décembre 2007), avec parfois des modifications mineures.

perl -ne '/regexp/&&print'
Équivalent à grep regexp.

perl -ne '/regexp/||print'
Équivalent à grep -v regexp.

perl -lne '}{print$.'
Équivalent à wc -l.

perl -e 'print chr(32 + rand 95) for 1..8; print "\n"'
Génère un mot de passe aléatoire.

perl -ne 'print if 14 .. 42' fichier
Imprime les lignes 14 à 42. unless à la place de if pour imprimer tout sauf cet intervalle.

perl -MMIME::Base64=decode_base64 -e 'print decode_base64 join "", <>'
Un décodeur BASE64.

perl -MMIME::Base64=encode_base64 -e 'print encode_base64 join "", <>'
Un encodeur BASE64.

perl -pe 'tr/A-Za-z/N-ZA-Mn-za-m/'
Encodeur/décodeur ROT13.

perl -MSocket -nle 'print"$_";$_=gethostbyaddr inet_aton($_),AF_INET;print"\t$_"'
Convertit une liste d'adresses IP en noms d'hôtes.

perl -MSocket -nle '$h=$_;printf("%s\t%d.%d.%d.%d\n",$h,unpack"C4", $_) for splice @{[gethostbyname$_]},4'
Convertit une liste de noms d'hôtes en adresses IP.


2.42 Gravage de CD en ligne de commande

cdrecord -scanbus
Détecte le graveur disponible.

cdrecord -v -dev=ATA:1000,0,0 -blank=fast -eject gracetime=3
Efface le CD-RW, éjecte-le quand c'est terminé et n'attends que 3 secondes après exécution de la commande pour démarrer l'effacement.
Remplacer 1000,0,0 par les valeurs trouvées à l'exécution de cdrecord -scanbus.

Wodim permet également le gravage de CD en ligne de commande


2.43 Maîtrise de bash

Ce qui suit est tiré du livre "Le shell bash", 3e édition, 2005-2006, éditions O'Reilly, de Cameron Newham et Bill Rosenblatt, traduction de Hervé Soulard.

2.43.1 Substitutions

cd -
  Aller au dernier répertoire dans lequel on se trouvait avant
  d'exécuter "cd" (pour aller dans son répertoire personnel)

cd ~seb
  Aller dans le répertoire personnel de l'utilisateur seb

ls *[!0-9]
  Lister les fichiers dont le dernier caractère n'est pas un chiffre

ls *.[!a-zA-Z]*
  Lister les fichiers dont l'extension ne commence pas par une lettre

ls *.[!a-zA-Z]
  Lister les fichiers dont l'extension est un seul caractère, qui ne doit pas être une lettre

ls *.{gz,tar*}
  Lister les fichiers dont l'extension est gz, ou bien est toute chaîne commençant par tar

ls a{b}c
  Lister le fichier de nom a{b}c (avec les accolades.) Différent du shell C.
  Le shell C listerait le fichier de nom abc, alors que bash considère que
  l'accolade comportant un seul élément, elle ne doit pas être interprétée.

echo 1..5
  Afficher 1..5

echo {1..5}
  Afficher 1 2 3 4 5

echo {5..1}
  Afficher 5 4 3 2 1

echo {0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}
  Afficher (en notation binaire) les 256 premiers entiers naturels

echo {a..z}
  Afficher toutes les lettres de l'alphabet, en minuscules (séparées par un espace.)

echo {A..z}
  Résultat dépendant du système ! Sur un système ASCII (cas de loin le
  plus fréquent chez un particulier), affiche toutes les lettres majuscules,
  puis quelques caractères non alphanumériques, puis toutes les lettres
  minuscules.

2.43.2 Clavier (mode emacs)

CTRL-A, CTRL-E
  Déplace le curseur sur le premier (A) ou dernier (E) caractère de la
  ligne de commande

CTRL-K, CTRL-U
  Efface tout depuis le curseur vers la gauche (U) ou vers la droite (K)

CTRL-Y
  Ramène la dernière chaîne de caractère effacée

ECHAP-<, ECHAP-<
  Va à la première (<) ou dernière (>) ligne de l'historique

CTRL-R
  Recherche en arrière

CTRL-R CTRL-R
  Recommence la dernière recherche arrière

ECHAP-?
  Liste les complétions possibles

CTRL-O
  Exécute les commandes en parcourant l'historique

ECHAP-.
  Insère le dernier mot de la ligne de commande précédente après le curseur

CTRL-V
  Protège le caractère suivant

2.43.3 Rappel des dernières lignes de commande

!!chaine
  Exécute la première commande de l'historique commençant par
  chaine

!?chaine
  Exécute la dernière commande de l'historique commençant par
  chaine

!!:0
  Dernière commande exécutée, mais sans argument

!!:0 !:2-$
  Exécute la dernière commande, en enlevant son premier argument

echo !*
  Affiche les argument de la dernière commande exécutée

^chaine1^chaine2
  Exécute la commande précédente, en remplaçant chaine1 par chaine2

!:1, !:$, !:^, !:2, !:2-4
  Premier, dernier, premier, deuxième, et deuxième+troisième+quatrième
  argument(s) de la dernière ligne de commande

!!:0 !:2-$:p
  Rappelle la dernière commande, en supprimant le premier argument, et sans l'exécuter

!-2:p
  Affiche (sans l'exécuter) l'avant-dernière ligne de commande

!507
  Rappelle la commande numéro 507 dans l'historique

2.43.4 Fichier ~/.inputrc

"\C-A": "Bonjour chez vous !"
  Provoque l'entrée de Bonjour chez vous ! chaque fois que l'on appuie sur Control-A

bind -P
  Associations (de touches) en cours

bind -V
  Configuration actuelle de readline

2.43.5 Options bash

set -o (ou bien shopt -o)
  Affiche certaines options

shopt (shopt -p pour un affichage réutilisable en ligne de commande)
  Affiche-s-en d'autres...

set -o
  emacs (mode emacs)
  ignoreeof (pas de sortie du shell avec \C-D)
  noclobber (pas d'écrasement de fichier avec >)
  noglob (* et ? ne sont pas remplacés)
  nounset (erreur si variable n'existe pas)
  vi (mode vi)

shopt -s ou shopt -u
  cdable_vars (cd prend le nom comme un nom de variable si rép n'existe pas)
  checkhash (hash des commandes pour ne pas parcourir $PATH)
  dotglob (les fichiers cachés sont pris en compte dans * et ?)

2.43.6 Variables de bash

HISTCONTROL, liste de valeurs séparées par le caractère ':'
  ignorespace (n'entre pas la commande dans l'historique
    si elle commence par un espace)
  ignoredups (n'entre pas la commande dans l'historique
    si elle est identique à la précédente)
  erasedups (toutes les lignes précédentes correspondant
    à la ligne précédente sont effacées de l'historique)
  ignoreboth (active ignorespace et ignoredups)

HISTTIMEFORMAT
  HISTTIMEFORMAT="%a %e %T "
  HISTTIMEFORMAT="%d/%m/%y %T "

  Ajoute date ou date+heure à l'affichage de l'historique

MAILPATH
  MAILPATH="/usr/mail/machin?machin vous a écrit !:\
  /usr/mail/bidule?Un message de bidule vous attend dans $_"

  Pour vérifier l'arrivée de courrier (lié à l'option mailwarn de shopt)

CDPATH
  Recherche automatique de sous-répertoires (avec la commande cd)

SECONDS
  Secondes écoulées depuis l'ouverture du shell

PWD
  Répertoire courant

OLDPWD
  Ancien répertoire courant

2.43.7 Commandes

type programme (ou mieux type -all programme)
  Indique où le programme se trouve, ou bien les alias définis sur ce nom

hash
  Affiche la table de hachage

declare -f
  Fonctions définies dans le shell, et leur définition

declare -F
  Uniquement les noms de fonctions définies

2.43.8 extglob

ls *@(.pl|mp3)
  Liste tous les fichiers se terminant par .pl ou mp3

ls *.@(pl|pm)
  Liste les fichiers se terminant par .pl ou .pm

ls -d !(*@(.pl|+([0-9])))
  Liste (sans lister le contenu des répertoires) les fichiers ne se terminant pas
  par .pl ni par un chiffre

2.44 Trucs Google

Tiré de Lunix Pratique Essentiel numéro 6, Février-Mars 2009

Saisie Description Exemple
+ et - Rend un terme obligatoire (+) ou interdit (-) dans la recherche +unix -linux
define: Trouve des définitions du terme define:thomisme
site: Restreint la recherche à une URL ubuntu site:http://www.lea-linux.org
filetype: ou ext: Restreint les résultats à un type de fichier tutoriel latex ext:pdf
allintitle:, allinurl: ou allintext: Recherche uniquement dans le titre, l'URL ou le contenu des pages allintitle:randonnée grenoble
book: ou movie: Recherche le livre ou le film ou bien, movie: étant suivi d'un nom de ville ou d'un code postal, affiche les salles et séances aux alentours movie:the chaser
movie:38000
weather: Météo pour la ville qui suit weather:grenoble

2.45 Combinaisons de touches avec CONFIG_MAGIC_SYSRQ activé


2.46 Chiffrer avec SSH un protocole qui ne l'est pas

D'après Linux Pratique numéro 61, septembre/octobre 2010.

Éditer le fichier ~/.ssh/config (ou bien /etc/ssh/ssh_config), pour y créer un profil configuré ainsi.

Host MyProfile
  MyHost 192.168.1.99
  CheckHostIp no
  Port 22
  LocalForward 12345 127.0.0.1:12345
  Compression yes

Ouvrir la connexion avec la commande ssh MyProfile. Ensuite, lancer le programme client-serveur (qui fonctionne sur le port 12345) en le connectant à localhost.


2.47 GIMP - créer un objet en plastique translucide

D'après Linux Pratique Essentiel numéro 13, avril-mai 2010

  1. Créer une image à fond gris (#BCBCBC)
  2. Créer un calque transparent dessus et y dessiner la forme, en blanc. Ce calque sera désigné comme "blanc"
  3. Créer un claque transparent, dit "brun"
  4. Clic droit sur le calque "blanc", menu "Alpha vers sélection"
  5. Dans le calque "brun", remplir la sélection avec un brun, #846A4F, puis désactiver la sélection
  6. Appliquer un flou gaussien 5 pixels (RLE) au calque "blanc"
  7. Dans le calque "brun", appliquer Filtres - Repoussage d'après une carte, profondeur 4 pixels, d'après le calque "blanc"
  8. Cliquer sur le calque "brun" avec l'outil Sélection par couleur (l'option Échantillonner sur tous les calques doit être désactivée)
  9. Réduire la sélection de 3 pixels, l'adoucir de 2 pixels
  10. Toujours sur cette sélection, aller dans le menu Couleurs - Courbes, sélectionner le canal Alpha, et descendre le point blanc à droite à une position de 1,2 environ (1 = 1 carreau)
  11. Dupliquer le calque "brun", revenir au calque "brun" et supprimer la sélection, puis désactiver la sélection
  12. Appliquer Couleurs - Inverser au calque "Copie de brun"
  13. Appliquer un flou gaussien de 10 pixels (RLE) au calque "brun", puis le décaler de 12 pixels en bas à droite en allant dans le menu Calque - Transformer - Décalage
  14. Passer le calque "brun" en mode "Multiplier" et ajuster son opacité
  15. Pour modifier la couleur de l'objet : dans le calque "Copie de brun", menu Couleurs - Teinte-Saturationn déplacer le curseur Teinte

2.48 configuration avec gconf-editor


2.49 Configuration conky

Paquetage : conky. Après installation, exécuter
cp -i /etc/conky/conky.conf ~/.conkyrc

Exemple de fichier ~/.conkyrc

# Conky, a system monitor, based on torsmo
#
# Any original torsmo code is licensed under the BSD license
#
# All code written since the fork of torsmo is licensed under the GPL
#
# Please see COPYING for details
#
# Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
# Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)
# All rights reserved.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#

alignment top_left
background no
border_width 1
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
use_xft yes

# Mis à jour par Sébastien Millet en mars 2011
xftfont FreeSans:normal:size=10

gap_x 5
gap_y 60
minimum_size 5 5
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
extra_newline no
own_window yes
own_window_class Conky
own_window_type desktop
stippled_borders 0
update_interval 5.0
uppercase no
use_spacer none
show_graph_scale no
show_graph_range no

TEXT
${color}${font FreeSans:bold:size=10}SYSTÈME ${hr 2}
${color grey}$nodename (${addr wlan0})  -  $sysname $kernel on $machine
$hr
${color lightgrey}Temps d'exécution :$color $uptime ${color lightgrey}- Charge :$color $loadavg
${color lightgrey}Utilisation CPU :${color #5000a0} ${cpu}% ${cpubar}
${color black}${cpugraph 000000 5000a0}
${color grey}Utilisation RAM :$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Utilisation Swap :$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}Température disque :${hddtemp /dev/sda}°C
$hr
${color grey}Système de fichiers : / $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
$color$stippled_hr
${color lightgrey}Réseau :
 Descendant :${color #8844ee} ${downspeed wlan0} k/s${color lightgrey} ${offset 70}Montant :${color #22ccff} ${upspeed wlan0} k/s
${color black}${downspeedgraph wlan0 32,150 ff0000 0000ff} $alignr${color black}${upspeedgraph wlan0 32,150 0000ff ff0000}
${color}${font FreeSans:bold:size=10}MÉTÉO ${hr 2}
#${color grey}Température :${weather http://xoap.weather.com/weathel/local/ FRXX0153 temperature }°C
#${color grey}Température :${weather http://xoap.weather.com/weathel/local/ FRXX0153 cloud_cover }°C
#${color grey}Température :${weather http://xoap.weather.com/weathel/local/ FRXX0153 pressure }°C
#${color grey}Température :${weather http://xoap.weather.com/weathel/local/ FRXX0153 humidity }°C
#${color grey}Température :${weather http://xoap.weather.com/weathel/local/ FRXX0153 wind_speed }°C
#${color grey}Température :${weather http://xoap.weather.com/weathel/local/ FRXX0153 wind_dir }°C

2.50 Nouveautés C++11


2.51 Weboob, WEB Out Of Browser

D'après GNU Linux Pratique numéro 79, septembre-octobre 2013.

Installation :

sudo apt-get install git
git clone git://git.symlink.me/pub/weboob/stable.git
sudo apt-get install python-setuptools pyqt4-dev-tools python-dev libxml2-dev libxslt1-dev python-html2text python-prettytable zlib1g-dev

sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib
  * Cette dernière instruction provoque une erreur car le lien existe déjà, le problème est donc résolu (mis ici pour mémoire)

  * Ajout par rapport à LP79 : l'installation des exécutables produit une erreur
    "ImportError: No module named dateutil.parser" ainsi que
    "ImportError: Please install python-mechanize"
    Il faut donc installer ces modules avec la commande :
sudo apt-get install python-dateutil python-mechanize
  * Par la suite une erreur se produit si cssselect n'est pas trouvé, à installer :
sudo apt-get install python-cssselect

cd stable
./tools/local_install.sh ~/weboob
  * Ici les exécutables sont installés dans ~/weboob, à ajouter au PATH dans le rc du shell

2.52 Installer une version antérieure du logiciel abcde

Dans sa versions actuelle (2.5.4), abcde ne modifie plus les tags ID3 à l'issue d'un encodage en MP3. Ce bug s'est produit sur une Ubuntu raring.
Pour revenir à la dernière version dépourvue de ce bug j'ai procédé comme suit :

Un test rapide montre que l'encodage de CD fonctionne bien en version 2.5.3, les TAGs ID3, vérifiés avec id3v2, sont bien mis à jour.


2.53 Sauvegarder et rétablir la sélection logicielle

Pour enregistrer la sélection :

dpkg --get-selections > liste-logiciels

Pour restorer la sélection :

dpkg --set-selections < liste-logiciels
apt-get dselect-upgrade

2.54 Quelques trucs sur Debian Wheezy


2.55 Améliorer le rendu des applications GTK dans KDE

Installer les paquets qtcurve system-config-gtk-kde.
Ensuite aller dans la fenêtre de configuration de KDE, Apparence -> Styles et polices GTK. Dans le champ Utiliser un autre style sélectionner QtCurve.


2.56 Construire des paquetages DEB et RPM

D'après Inside Linux Hors-série n° 8

1ère partie : DEB

Les paquetages permettant de compiler sont : build-essential autoconf automake autotools-dev
La construction des paquetages est faite par : dh-make debhelper devscripts fakeroot xutils lintian pbuilder

  1. Il faut disposer d'une clé gpg (paire privée/publique) gnupg, je passe cette partie
  2. Exécuter dh_make pour préparer les sources. Typiquement il faut se rendre dans le répertoire racine des sources du logiciel et exécuter ceci :
    dh_make -e AdresseEmail -c Licence -f ../FichierArchive
    Par exemple :
    dh_make -e milletseb@laposte.net -c gpl3 -f ../prpn-0.5.5.tar.gz
  3. Éditer le fichier debian/control
  4. Exécuter dpkg-depcheck -d ./configure pour détecter les dépendances
  5. Selon les résultats de la commande précédente, éditer le fichier debian/control
  6. Éditer le fichier changelog
  7. Exécuter dpkg-buildpackage -b
  8. Vérifier la confirmité du paquetage créé avec lintian

2ème partie : RPM

  1. Exécuter les commandes suivantes pour disposer des paquets nécessaires à la construction :
    yum groupinstall «Development Tools»
    yum install gcc-c++ fedora-packager
    S'ajouter au groupe mock pour ne pas avoir à tout faire en tant que root
  2. Exécuter rpmdev-setuptree, cela crée ~/rpmbuild dans lequel le travail sera effectué
  3. Déplacer l'archive dans ~/rpmbuild/SOURCES
  4. Exécuter rpmdev-newspec NomPkg dans le répertoire ~/rpmbuild/SPECS
  5. Modifier le fichier ~/rpmbuild/SPECS/NomPkg.spec avec les dépendances et autres paramètres
  6. Si la construction depuis la source peut être entièrement prise en charge automatiquement, exécuter yum-builddep NomPkg
  7. Sinon exécuter rpmbuild -ba NomPkg.spec
  8. Pour installer le paquetage : rpm -ivh NomPkg
  9. Pour vérifier qu'il est bien installé : rpm -qa

2.57 Quelques trucs bien utiles en ligne de commande

D'après Linux Planète Août-Septembre 2018.

sort -h Trie en fonction de tailles affichées avec une unité (M, G, etc.).
progress Affiche la progression de commandes longues à exécuter (cp, du, etc.)
ip A paraît-il remplacé ifconfig
ps -ejH Affiche les processus en cours d'exécution, sous forme hiérarchique (voir aussi pstree)
ps -e -o %cpu,%mem,command | sort -nr -k 2 | head -10 Affiche les 10 programmes qui consomment le plus de mémoire. Le magazine donne ps -euxf | sort -nr -k 4 | head -10, le résultat est touffu...
iostat n iostat fait partie du paquetage sysstat. Affiche la charge des disques toutes les n secondes.
Fermeture automatique du terminal Modifier le fichier /etc/profile et y ajouter :
# Exit Terminal
TMOUT=1200
export TMOUT
apt --no-install-recommends install nom_paquet Installe un paquetage, sans installer les paquets recommandés. Pour rendre cette option permanente : ajouter la ligne
APT::Install-Recommends "false";
au fichier /etc/apt/apt.conf.

Ajouter la ligne
APT::Install-Suggests "true";
pour installer automatiquement les paquetages suggérés.
apt changelog nom_paquet Pour connaitre les ChangeLog d'un paquetage.
gdebi Installation d'un fichier .deb.
Mettre des étoiles à sudo Lancer visudo et remplacer la ligne
Defaults   env_reset
par
Defaults   env_reset,pwfeedback
Prolonger les droits dans sudo Toujours dans visudo, écrire :
Defaults   env_reset,timestamp_timeout=30
La durée est en minutes (0 pour que le mot de passe soit demandé à chaque fois).
systemctl Affiche l'état de systemd.
systemd-analyze blame Affiche une analyse du démarrage système
cat /rpco/cmdline Affiche les paramètres du noyau
hwinfo --wlan --short Affiche des informations sur la carte wifi


2.58 Démarrage automatique d'openvpn

D'après Linux Planète Août-Septembre 2018.

Créer le fichier /etc/systemd/system/openvpn@VPNTunnel ainsi :

[Unit]
Description=OpenVPN connexion VPNTunnel
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/vpntunnel/Amsterdam.ovpn --daemon openvpn@VPNTunnel
WorkingDirectory=/etc/openvpn/vpntunnel/
[Install]
WantedBy=multi-user.target
Ensuite, enregistrer le script dans la base systemctl avec la commande :
sudo systemctl enable openvpn@VPNTunnel.service

Afficher l'adresse IP :
curl ifconfig.co


2.59 Copie de DVD

1ère méthode : exécuter la commande

vobcopy -m
(cette première méthode nécessite libdvdcss2)

2ème méthode : exécuter la commande

mplayer -dumpstream -dumpfile output.mpg dvd://1


2.60 Lancer un logiciel en bloquant son accès au réseau

D'après Linux Planète de février - mars 2019.


# Créer une un espace de nomage vide :
ip netns add no-network

# Démarrer un logiciel sans accès réseau
ip netns exec no-network su utilisateur -c logiciel


2.61 Easy2Boot

D'après Linux Pratique numéro 112 (mars - avril 2019).
Auteur de l'article : Benoît Benedetti.

Il n'y a pas de paquet à installer. Il faut télécharger l'archive ZIP disponible sur le site Easy2Boot, d'adresse http://www.easy2boot.com/download/.

Une fois téléchargée et décompressée, on obtient un dossier de 550 MO environ, contenant Easy2Boot.
Par la suite, on suppose que le dossier où l'archive a été décompressée est /opt/Easy2Boot_v1.A9.

Ci-dessous, ## indique un commentaire, # indique une commande exécutée en tant que root.

## Créer deux partitions sur une clé USB, 80%/20%,
## de type W95 FAT32 (LBA) :
## (exemple avec une clé de 62 GO sur /dev/sda)

# fdisk -l /dev/sda
Disque /dev/sda : 57,9 GiB, 62109253632 octets, 121307136 secteurs
Modèle de disque : Ultra
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x30ddf2c3

Périphérique Amorçage    Début       Fin Secteurs Taille Id Type
/dev/sda1                 2048  97046527 97044480  46,3G  c W95 FAT32 (LBA)
/dev/sda2             97046528 121307135 24260608  11,6G  c W95 FAT32 (LBA)

## Formatter la deuxième partition en exfat :
# mkfs.exfat -n "DATA-EASY2BOOT" /dev/sda2

## Initialiser la première partition (formattage, copie de fichiers
## et configuration pour rendre amorçable).
## ATTENTION
##   D'après Linux Pratique, le script affiche propose souvent un
##   mauvais volume par défaut (dans mon cas : il n'affiche rien,
##   donc il faut corriger de toute façon).
# bash /opt/Easy2Boot_v1.A9/_ISO/docs/linux_utils/fmt.sh
## Une fois lancé, répondre 'n' en général et indiquer la première
## partition, dans notre exemple, /dev/sda1.

## Tester la clé
# qemu-system-x86_64 -m 512 -drive format=raw,file=/dev/sda

## Les fichiers ISO doivent être copiés dans des sous-répertoires
## de _ISO.
## Pour changer le nom d'affiche d'une entrée, créer un fichier
## ayant le même nom que l'image, mais l'extention remplacée par txt
## IMPORTANT
##   Après avoir copié les images à booter, il faut défragmenter
##   la clé, avec l'utilitaire :
##   _ISO/docs/linux_utils/defragfs
##   exécuté en lui indiquant le dossier et l'option -f
##   Par exemple :
$ perl /opt/Easy2Boot_v1.A9/_ISO/docs/linux_utils/defragfs /mnt/usbkey -f

2.62 Changer la sortie d'un processus en cours d'exécution

D'après https://superuser.com/questions/732503/redirect-stdout-stderr-of-a-background-job-from-console-to-a-log-file.

# 1. Attacher gdb au processus en cours d'exécution avec l'option -p
gdb -p PID
# Ou bien (cette commande nécessite d'être root)
sudo gdb -p PID
# 2. Exécuter les commandes suivantes dans gdb :
p (int)dup2((int)open("/nom/complet/du/fichier",577,420),1)
p (int)dup2(1,2)
# D'après l'URL donnée ci-dessus, les constantes correspondent à :
# 577 = O_CREAT|O_WRONLY|O_TRUNC
# 420 = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
# 3. Détacher gdb et quitter
detach
quit

La sortie et l'erreur standards du processus PID sera effectuée dans le fichier /nom/complet/du/fichier, au lieu du terminal.


2.63 Manipulations de fichier PDF

D'après Linux Pratique numéro 113, mai-juin 2019.


# 1. Manips

pdfcrop --margins '-10 -20 30 40' in.pdf out.pdf
# pdfshuffler et pdfarranger pour modifier au niveau page (ré-ordonner,
supprimer, changer la disposition paysage-portrait, recadrer)
# pdftk, pour tout faire :
pdftk in.pdf cat 1-3 5-end output out.pdf  # Supprimer la page 4
pdftk in1.pdf in2.pdf cat output out.pdf   # Concatène deux fichiers
pdftk in.pdf burst                         # Écris un fichier par page
pdf-remove-blank-pages in.pdf out.pdf      # Supprime les pages blanches (ne fonctionne pas si images)
pdf-zip in1.pdf in2.pdf out.pdf            # Alterne les pages du 1er et 2e fichier

# 2. Gestion / OCR
# Paperwork pour classer des documents scannés (fonctionne avec OCR)
ocrmypdf -l fra in.pdf out.pdf  # Ajoute un calque avec le texte

# 3. Extraction
pdftotext in.pdf  # Extrais le texte de in.pdf
# pdfminer, même chose (extraction de texte)
pdfimages -all -- in.pdf répertoire_images

# 4. Recherche et comparaison
# pdfgrep, pour faire des recherches
# diffpdf, pour visualiser la différence entre deux PDF

# 5. Optimisation
pdfsizeopt in.pdf out.pdf  # Optimise
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dSAFER -dNOPAUSE -dQUIET -dBATCH -sOutputFile="out.pdf" "in.pdf"
# En plus simple :
ps2pdf -dPDFSETTINGS=/ebook in.pdf out.pdf
# Pour choisir la qualité, choisir entre : screen, ebook, printer et prepress

# 6. Visualisation
# Evince, Okular, mupdf, xpdf
# Zathura : affiche avec des commandes à la vi !

# 7. Sécurité
pdftk in.pdf input_pw "x" output out.pdf   # Supprime le mot de passe
qpdf --decrypt --password=x in.pdf out.pdf # Supprime le mot de passe
pdfcrack in.pdf                   # Craque le fichier
pdfcrack -c 'abcdefgh123-_$@' in.pdf # Craque le fichier, en utilisant certains caractères
# jsignpdf, pour gérer la signature des PDF


2.64 Retouche photographies

D'après Linux Pratique numéro 113, mai-juin 2019.

  1. Rappel : cocher Éclater la vue permet de visualiser le réglage sur la moitié gauche de la photo (la moitié droite n'est pas modifiée).
  2. Réglage de la teinte-saturation : menu Couleurs -> Teinte-Saturation. L'auteur propose -15,2 pour atténuer la couleur orange qui prédomine en cas d'éclairage insuffisant.
  3. Si la photo est trop sombre, aller dans le menu Couleurs -> Niveaux. Décaler le niveau de droite (qui se trouve à l'extrémité) à la fin du pic de couleurs, ensuite décaler vers la gauche le niveau du milieu (couleurs médianes).


2.65 Logs avec journalctl

D'après Planète Linux numéro 110, août-septembre 2019.

# Logs depuis le démarrage
journalctl -b

# Logs avec critère de date
journalctl --since today
journalctl --since 17:00 --until 17:25

# Logs indiquant une erreur
journalctl -b -p err

# Les 25 dernières entrées
journalctl -n 25

# Encore plus de log
journalctl -o verbose

# Logs du démon sshd (_EXE pour indiquer un exécutable)
journalctl --since today _COMM=sshd

# Pas de pager
journalctl -b --no-pager

# Réglages dans le fichier /etc/systemd/journald.conf
# Par exemple, utiliser l'option ForwardToSyslog=yes pour que tout soit envoyé à syslog
# (dans ce cas, installer syslog-ng)


2.97 Résumé Linux Pratique Essentiel numéro 1


2.98 Logiciels non testés, à étudier un jour


2.99 Quelques URL utiles