Étrange paquet Google Chrome beta pour Debian…

Comme tout le monde je regarde d’un oeil critique le nouveau navigateur Google. L’arrive de la version béta pour GNU/Linux était l’occasion de remplacer l’unstable déjà installé. En regardant de plus près de paquet on constate que Google semble prendre quelques libertés :

Le script postinst du paquet installe un /etc/apt/sources.list.d/google-chrome.list sans prévenir.

Lire la suite

Install Debian Lenny depuis une clef USB

Pour créer une clef USB d’installation Debian procéder comme suit :

Récupérer le fichier boot.img.gz depuis  un FTP Debian

Le dumper vers la clef USB : zcat boot.img.gz > /dev/sdc

Monter la clef : mount /dev/sdc /mnt/point

Télécharger l’image ISO du CD Netinst depuis le FTP Debian

Copier l’image ISO sur la clef : cp debian-502a-i386-businesscard.iso /mnt/point/ && sync && umount /mnt/point

Connecter la clef à la machine cible et booter

Note : Ce billet est plus un mémo pour moi-même qu’autre chose puisque l’info se trouve un peu partout. Ça m’agace juste de chercher à chaque fois.

Installation pseudo-propre de binaires sur Debian

Pris d’une nostalgie coupable, je m’étais mis dans la tête de bruler un peu de mon temps à quelque chose de purement inutile : jouer. Dans ce domaine comme dans quelques autres, les vieux classiques sont souvent les meilleurs solution. J’ai donc opté pour quelque chose de classique : Doom.

Debian fourni un paquet prboom constitué du programme diffusé par Id Software sous GPL et légèrement amélioré. Le paquet freedoom, quant à lui, fourni les données (cartes, monstrer, textures, effets sonores).

Mais je voulais quelque chose de plus… de moins… de mieux ! J’ai donc regardé du côté de Doomsday et compilé tout cela après installation d’une certaine quantité de dépendances (cycle cmake-capamarche-aptitude).

Et voilà, c’est compilé. Arrive le moment d’installer tout cela et là… c’est le drame ! Hors de question de jouer du make install à l’arrache. Je voulais un paquet bien propre.

La solution : checkinstall.

Et donc, au final, dans l’ordre :
% tar xfzv deng-1.9.0-beta6.1
.tar.gz
% cd deng-1.9.0-beta6.1
% mkdir doomsday/mybuild
% cd doomsday/mybuild
% cmake -DCMAKE_INSTALL_PREFIX=/usr  ..
[…]
— CMAKE_INSTALL_PREFIX          /usr
— DENG_BASE_DIR                 /usr/share/deng
— DENG_LIBRARY_DIR              /usr/lib
— DENG_BINARY_DIR               /usr/bin
— DENG_ENGINE_DATA_DIR          /usr/share/deng/data
— DENG_JDOOM_DATA_DIR           /usr/share/deng/data/jdoom
— DENG_JHERETIC_DATA_DIR        /usr/share/deng/data/jheretic
— DENG_JHEXEN_DATA_DIR          /usr/share/deng/data/jhexen
— DENG_JDOOM64_DATA_DIR         /usr/share/deng/data/jdoom64
[…]
% make
% checkinstall
Et voilà. Au final, on retrouve un sympathique doomsday_20090425-1_i386.deb dans le répertoire courant et les fichiers bien proprement installés. Bien sûr, ce n’est pas parfait, aucune dépendance n’est gérée, etc. Mais la désinstallation se fait très bien (via dpkg -P) et c’est le plus important.

Pour une petite demi-heure de jeu et le plaisir de massacrer quelques cacodemons avec des effets 3D bien plus sympathiques que dans le jeu original, c’est suffisant. Accessoirement, le binaire supporte ausso bien Doom, qu’Heretic ou Hexen…

Nostalgie, nostalgie…

Modification de phrase de passe pour disque chiffré LUKS

Une phrase de passe complexe, longue et difficile à deviner c’est bien. La changer régulièrement c’est mieux. On peut également avoir besoin de plusieurs phrases de passe (si on veut confier son ancien lappy à une voisine dans le besoin, par exemple).

Les disques chiffrés avec Cryptsetup/LUKS sont de petites merveilles. LUKS supporte, en effet, plusieurs phrases de passe stockée dans les slots. On peut, à loisir, ajouter et supprimer des phrases de passe (jusqu’à 8). Facile alors de fournir une phrase de passe temporaire le temps d’un prêt.

Lister les infos :
% cryptsetup luksDump /dev/disk/by-id/scsi-SATA_Hitachi_HDS7216_PVF904Z23V7KLN-part1
LUKS header information for /dev/disk/by-id/scsi-SATA_Hitachi_HDS7216_PVF904Z23V7KLN-part1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      08 fc d8 1c f8 49 a9 a1 8e 47 8e b4 32 11 64 4a 5e ca 14 26
MK salt:        0a 24 2a 6e 90 68 a0 8e d3 06 bd 25 f5 c3 7e af
                d3 e9 0b 54 3a d3 f3 a3 b2 bd 4a 63 4a 54 63 c4
MK iterations:  10
UUID:           8702329c-0242-4d20-ad8c-1a5986d0ea82

Key Slot 0: ENABLED
        Iterations:             178684
        Salt:                   d5 76 c0 bc 93 55 76 31 15 75 10 65 76 ef 0e 32
                                02 6a 88 5c 95 b4 83 c2 dd 3b d1 36 de 58 b0 55
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Nous avons un slot (le 0) d’utilisé. C’est celui de la phrase de passe utilisé lors de la création du disque chiffré. Nous pouvons en ajouter une avec :
% cryptsetup luksAddKey /dev/disk/by-id/scsi-SATA_Hitachi_HDS7216_PVF904Z23V7KLN-part1
Enter any LUKS passphrase:
key slot 0 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command successful.
On entre la phrase de passe existante pour débloquer le périphérique LUKS, puis la nouvelle, deux fois. On vérifiera le bon déroulement de l’opération avec un nouvel appel à la demande d’information :
Key Slot 0: ENABLED
        Iterations:             178684
        Salt:                   d5 76 c0 bc 93 55 76 31 15 75 10 65 76 ef 0e 32
                                02 6a 88 5c 95 b4 83 c2 dd 3b d1 36 de 58 b0 55
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             182347
        Salt:                   43 e8 e2 ee d3 be bc 4d 51 3f cc c8 16 4e 80 9b
                                83 60 28 cc 28 c9 91 32 eb 48 2d 21 5f 92 c7 74
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Le slot 1 est maintenant utilisé. On utilise ensuite la configuration habituelle pour tester (via le script d’init).
% /etc/init.d/cryptdisks start
Starting remaining crypto disks… satahitachi (starting)Enter LUKS passphrase:
key slot 1 unlocked.
Command successful.
 satahitachi (started)done.
Ça marche (bien sûr). On voit dans la sortie que c’est la clef sur le slot 1 qui a été utilisée.

Pour retirer une phrase de passe, c’est :
% cryptsetup luksDelKey /dev/disk/by-id/scsi-SATA_Hitachi_HDS7216_PVF904Z23V7KLN-part1 1
Enter any remaining LUKS passphrase:
key slot 0 unlocked.
Command successful.
On utilise alors l’une des phrase de passe stockée dans l’un des slot restant (ici 0). Un chagement de phrase de passe revient à ajouter la nouvelle et supprimer l’ancienne, tout simplement. C’est tout.

Configurer un beau WDM pour mon x31

Les choix ne manquent pas en ce qui concerne les Display Managers. Le plus courant est sans doute maintenant le GDM de Gnome suivi par XDM pour les systèmes se voulant un peu plus léger. Pour ma part, j’aime bien WDM (WINGs Display Manager) parce qu’il s’agit d’un choix cohérent lorsqu’on utilise WindowMaker et parce qu’il est léger et implique peu de dépendances (comparé à GDM).

La configuration, sur un système Debian, passe par l’édition des fichiers présents dans /etc/X11/wdm. wdm-config est le plus important. On configure le fond d’écran avec :
DisplayManager*wdmBg: pixmap:/chemin/image.png
On en profite pour spécifier le gestionnaire de fenêtre :
DisplayManager*wdmWm: wmaker
Cette ligne sera réécrite automatiquement en fonction des gestionnaires installés. Pour éviter cela, c’est dans le wdm.options que nous commentons :
#auto-update-wmlist
En fonction du fond, il est peut-être souhaitable de ne pas laisser la fenêtre se placer toute seule au centre de l’écran. Il faut alors créer un fichier wdmlogin.conf et y spécifier la taille et l’emplacement correctes :
{
geometry = (520, 230, 490, 316);
}
Pour tuner un peu, on remplace aussi le logo qui fait un peu tache, c’est à nouveau dans le wdm-config que ça se passe :
DisplayManager*wdmLogo: /chemin/logo.png
L’astuce utilisée ici consiste simplement à faire une capture d’écran de WDM puis de jouer avec The Gimp pour intégrer proprement le nouveau logo en s’aidant au passage du fond choisi.

Faire une capture d’une ouverture de session WDM se fait simplement en utilisant Xnest. On commence par autoriser les connexion XDMCP dans le wdm-config :
DisplayManager.requestPort: 177
Puis, par exemple depuis une autre machine, on utilise :
% Xnest :1 -geometry 1024×768 -query nom_serveur_ou_IP
Capturez ensuite avec ce qui vous chante, import d’ImageMagick ou The Gimp…

Note : Si par curiosité vous vous demandez qui peut bien être ce sublime personnage, sachez que c’est Caprica-6, un Cylon de la série Battlestar Galactica. Wikipedia vous en dira plus…

Chiffrement de disque facile avec Debian

Je viens tout juste de me rendre compte à quel point il est facile aujourd’hui de chiffrer un disque avec Debian. Voici la, courte, description de la manipulation.

Soit un disque contenant une seule partition, /dev/sda1. On commence par installer ce qu’il faut :
% aptitude install cryptsetup hashalot
On chiffre ensuite le périphérique avec cryptsetup en LUKS. Choisissez une phrase de passe longue et complexe :
% cryptsetup –verbose –verify-passphrase luksFormat /dev/sda1
Mappez le périphérique pour obtenir un /dev/mapper/cryptodisk utilisable :
% cryptsetup luksOpen /dev/sda1 cryptodisk
% ls /dev/mapper/cryptodisk
Créez le système de fichiers :
% mkfs.ext3 -j /dev/mapper/cryptodisk
Ajoutez un point de montage et montez le système de fichiers. Tout marche. Démontez :
% mkdir /mnt/cryptodisk
% mount /dev/mapper/cryptodisk /mnt/cryptodisk
% umount /mnt/cryptodisk
Ajoutez le périphérique au fichier crypttab pour automatiser le montage. Ici, on ne supporte qu’un seul essai et un temps limite pour la saisie de la phrase de passe de 10 secondes. Ainsi, on ne bloque pas le démarrage du système si personne n’est présent pour saisir la phrase (reboot, coupure, etc) :
% cat /etc/crypttab
cryptodisk /dev/sda1 none luks,tries=1,timeout=10
Redémarrez le service et entrez la phrase :
% /etc/init.d/cryptdisks restart
Modifiez votre fstab pour pouvoir monter le système de fichiers facilement :
% cat /etc/fstab
/dev/mapper/cryptodisk /mnt/cryptodisk auto user,noauto 0 0
Montez le système de fichiers et rendez-le utilisable pour l’utilisateur lambda :
% mount /mnt/cryptodisk
% sudo chown -R user.user /mnt/cryptodisk
Et voilà, c’est tout.

Petite astuce au passage : l’entrée dans /dev pour votre périphérique peut être changeante en fonction de la présence d’autres périphériques. Pour pouvoir facilement vous y retrouvez, utilisez simplement l’entrée correspondante dans /dev/disk/by-id. Ceci s’avère d’autant plus pratique avec les disques USB.

Nouveau jouet : Thinkpad x31

Ah ! Noël ! La période des cadeaux. La période où on se fait de beaux cadeaux. Et dans la catégorie des cadeaux que je me suis fait cette année voici l’IBM Thinkpad x31.

La machine est du reconditionné constructeur acheté chez laptopservice pour quelques 399€ + 20€ pour 1 Go de mémoire + port (+ 40€ de batterie sur eBay, cf plus bas). Voici quelques tips pour utiliser Debian Etch/Lenny sur la chose.

Installation classique depuis le CD NetInst Debian avec sélection de paquets Laptop et (oups) Environnement graphique.
De base tout est reconnu : Wifi, Ethernet (Giga svp), FireWire, Bluetooth, USB, SpeedStep, touches de fonction, suspend to RAM, carte son, carte vidéo, PCMCIA
Mise en sommeil lors de la fermeture de l’écran :
% cd /etc/acpi
% mv lid.sh lid.sh.old
% ln -s sleep.sh lid.sh

Installation du module tp_smapi :
% aptitude install tp-smapi-source
% module-assistant prepare tp-smapi
% module-assistant auto-install tp-smapi
% modprobe -a tp_smapi

Maintenant on sait pourquoi le portable ne tient pas 1h sur batteries :
% cat /sys/devices/platform/smapi/BAT0/first_use_date
2004-07-24
% cat /sys/devices/platform/smapi/BAT0/cycle_count
489

modprobe de ibm_acpi, et hop hibernate marche au poilt . Il faut juste éditer /etc/acpi/events/ibm-hibernatebtn
Des boutons de fonction plus convi ? Simple :
aptitude install tpb

Je ne vais pas tout détailler ici, je pense faire un papier à ce propos dans GLMF. Ceci dit, c’est un achat que je regrette pas du tout. J’ai pris contacte avec la société qui m’a vendu le lappy à propos de la batterie annoncée pour 3h environ d’autonomie. On verra ce que ca donne.

Bon d'accord, aptitude>apt-get

Je suis une tête de mule, ça c’est pas nouveau. Mais il faut reconnaître lorsqu’on s’entête sur une bétise. apt-get de ci, apt-get de là…. non, non, moi c’est apt-get, aptitude je m’en fiche. Bin voilà, oui, aptitude intègre des solutions de résolution de conflit bien plus puissantes qu’apt-get. C’est vrai aptitude, c’est le bien. La preuve en images…

Avant :
% apt-show-versions -a gimp
gimp 2.2.15-2 install ok installed
gimp 2.2.13-1etch1 stable
gimp 2.2.17-1 testing
gimp 2.4.0-2 unstable
gimp/testing upgradeable from 2.2.15-2 to 2.2.17-1
Version primaire :
% apt-get install gimp=2.4.0-2
Lecture des listes de paquets… Fait
Construction de l’arbre des dépendances… Fait
Certains paquets ne peuvent être installés. Ceci peut signifier
que vous avez demandé l’impossible, ou bien, si vous utilisez
la distribution unstable, que certains paquets n’ont pas encore
été créés ou ne sont pas sortis d’Incoming.

Puisque vous n’avez demandé qu’une seule opération, le paquet n’est
probablement pas installable et vous devriez envoyer un rapport de bogue.
L’information suivante devrait vous aider à résoudre la situation:

Les paquets suivants contiennent des dépendances non satisfaites:
gimp: Dépend: gimp-data (>= 2.4.0) mais ne sera pas installé
Dépend: gimp-data (< 2.4.0-z) mais ne sera pas installé
Dépend: libgimp2.0 (>= 2.4.0-1) mais 2.2.17-1 devra être installé
Dépend: libgtk2.0-0 (>= 2.12.0) mais 2.10.13-1 devra être installé
Dépend: libhal1 (>= 0.5.10) mais 0.5.9.1-6 devra être installé
Dépend: libpango1.0-0 (>= 1.18.3) mais 1.18.2-1 devra être installé
E: Paquets défectueux
Bam ! Calmé. Denis, pas de The Gimp 2.4 pour toi ! Mhééééé steuplé ! Hop, new school :
% aptitude install gimp=2.4.0-2
Lecture des listes de paquets… Fait
Construction de l’arbre des dépendances
Lecture des informations d’état… Fait
Initialisation de l’état des paquets… Fait
Écriture de l’information d’état étendu… Fait
Construction de la base de données des étiquettes… Fait
Les paquets suivants sont CASSÉS:
gimp gimp-gnomevfs libatk1.0-dev librsvg2-common libxdamage-dev
Les NOUVEAUX paquets suivants vont être automatiquement installés:
libgnomevfs2-extra
Les paquets suivants seront automatiquement ENLEVÉS:
gimp-data gimp-print
Les NOUVEAUX paquets suivants vont être installés :
libgnomevfs2-extra
Les paquets suivants seront ENLEVÉS :
gimp-data gimp-print
Les paquets suivants seront mis à jour :
libatk1.0-0 librsvg2-2 libxdamage1
4 paquets mis à jour, 2 nouvellement installés, 2 à enlever et 891 non mis à jour.
Il est nécessaire de télécharger 5248ko d’archives. Après dépaquetage, 17.3Mo seront libérés.
Les paquets suivants ont des dépendances non satisfaites :
libatk1.0-dev: Dépend: libatk1.0-0 (= 1.18.0-2) mais 1.20.0-1 doit être installé.
gimp-gnomevfs: Dépend: libgimp2.0 (>= 2.4.0-1) mais 2.2.17-1 est installé.
Dépend: libgnome-keyring0 (>= 2.20.1) mais 0.8.1-2 est installé.
libxdamage-dev: Dépend: libxdamage1 (= 1:1.0.3-3) mais 1:1.1.1-3 doit être installé.
gimp: Dépend: gimp-data (>= 2.4.0) mais il n’est pas installable
Dépend: gimp-data (< 2.4.0-z) mais il n’est pas installable
Dépend: libgimp2.0 (>= 2.4.0-1) mais 2.2.17-1 est installé.
Dépend: libgtk2.0-0 (>= 2.12.0) mais 2.10.13-1 est installé.
Dépend: libhal1 (>= 0.5.10) mais 0.5.9.1-4 est installé et a été conservé
Dépend: libpango1.0-0 (>= 1.18.3) mais 1.18.2-1 est installé.
librsvg2-common: Dépend: librsvg2-2 (= 2.16.1-2) mais 2.18.2-1 doit être installé.
Resolving dependencies…
Les actions suivantes permettront de résoudre ces dépendances:
Supprimer les paquets suivants:
libbonoboui2-dev
libglade2-dev
libgnome-keyring-dev
libgnomecanvas2-dev
libgnomeui-dev
libgtk2.0-dev
libpango1.0-dev
libxdamage-dev
python-uno

Mettre à jour les paquets suivants:
gimp-data [2.2.15-2 (now) -> 2.4.0-2 (unstable)]
gnome-keyring [0.8.1-2 (testing, now) -> 2.20.1-1 (unstable)]
libatk1.0-dev [1.18.0-2 (now) -> 1.20.0-1 (testing, unstable)]
libcupsys2 [1.2.7-4 (stable, now) -> 1.3.2-1 (testing, unstable)]
libgimp2.0 [2.2.17-1 (testing, now) -> 2.4.0-2 (unstable)]
libgnome-keyring0 [0.8.1-2 (testing, now) -> 2.20.1-1 (unstable)]
libgtk2.0-0 [2.10.13-1 (testing, now) -> 2.12.1-1 (unstable)]
libgtk2.0-common [2.10.13-1 (testing, now) -> 2.12.1-1 (unstable)]
libhal1 [0.5.9.1-4 (now) -> 0.5.10-2 (unstable)]
libpango1.0-0 [1.18.2-1 (testing, now) -> 1.18.3-1 (unstable)]
libpango1.0-common [1.18.2-1 (testing, now) -> 1.18.3-1 (unstable)]
librsvg2-common [2.16.1-2 (now) -> 2.18.2-1 (testing, unstable)]
libwxbase2.6-0 [2.6.3.2.1.5 (testing, stable, now) -> 2.6.3.2.2-1 (unstable)]
libwxgtk2.6-0 [2.6.3.2.1.5 (testing, stable, now) -> 2.6.3.2.2-1 (unstable)]
openoffice.org-l10n-fr [2.0.4.dfsg.2-5 (now) -> 2.2.1-8 (testing)]

Le score est de 1627

Accepter cette solution? [Y/n/q/?]
Et voilà :