Voici ce qui se passe lorsque j'exécute mon programme print-size-of-pointer sous Linux:
(Il y a deux versions: compilé en 32-bit et compilé en 64-bit):
Résultat sur cobra (Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz, Debian GNU/Linux "squeeze" 64-bit):
[pbn@cobra] /home/pbn>cd other/print-sizeof-pointer/
Voyons les fichiers
[pbn@cobra] /home/pbn>ls -l
total 92
-rwxr-xr-x 1 pibe pibe 561 jun 1 20:00 print-sizeof-pointer.c
-rwxr-xr-x 1 pibe pibe 6587 jun 1 20:00 print-sizeof-pointer-linux-32bit.bin
-rwxr-xr-x 1 pibe pibe 9415 jun 1 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pibe pibe 53640 jun 1 20:00 print-sizeof-pointer-macosx.bin
Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 32-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer-linux-32bit.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 64-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer-linux-64bit.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
Voyons la version du kernel:
[pbn@cobra] /home/pbn>uname -a
Linux cobra 2.6.26-2-amd64 #1 SMP Fri Mar 27 04:02:59 UTC 2009 x86_64 GNU/Linux
Voyons le "type de machine" du kernel:
[pbn@cobra] /home/pbn>uname -m
x86_64
Demandons à dpkg sur quelle architecture nous sommes:
[pbn@cobra] /home/pbn>dpkg --print-architecture
amd64
J'exécute la version 32-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 4
J'exécute la version 64-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@cobra] /home/pbn>
En bref sous Linux sur une machine 64-bit avec un OS 64-bit, je peux à la fois exécuter les exécutables 32-bit et 64-bit. Et en fait, les exécutables 32-bit ont leurs adresses en 32-bit, les exécutables 64-bit ont leurs adresses en 64-bit.
Affichage des articles dont le libellé est Debian GNU/Linux. Afficher tous les articles
Affichage des articles dont le libellé est Debian GNU/Linux. Afficher tous les articles
samedi 20 juin 2009
vendredi 12 juin 2009
64 bits ou 32 bits: mon petit programme print-sizeof-pointer.c
Comme je viens de m'offrir un PC de bureau 64-bit, je m'intéresse aux différences entre 64-bit et 32-bit.
J'ai donc écrit un tout petit programme en C qui permet de connaître la taille des pointeurs:
/*
print-sizeof-pointer.c
This little program prints the size of pointers.
On a 64-bit system, pointers are 64-bit (8 bytes),
so this program prints "8".
On a 32-bit system, pointers are 32-bit (4 bytes),
so this program prints "4".
Pierre Bauduin
le 12 juin 2009 */
#include <stdio.h>
int main()
{
printf ("print-sizeof-pointer.c\n");
printf (" If the result is 8, this machine is a 64-bit system.\n");
printf (" If the result is 4, this machine is a 32-bit system.\n");
printf (" Result: %d\n", sizeof(void *));
}
Ce programme permet donc de savoir si l'adressage est 64-bit ou 32-bit.
Si la taille des pointeurs est 8 octets, cela veut dire que l'adressage est 64-bit.
Si la taille des pointeurs est 4 octets, cela veut dire que l'adressage est 32-bit.
Attention, évitons les confusions:
Comment compiler une version 64-bit et/ou 32-bit ?
Si vous avez un système 64-bit, il est possible de dire au compilateur de générer un exécutable 32-bit ou 64-bit.
Cas de Linux, FreeBSD et Solaris:
Pour compiler en 64-bit:
gcc -o print-sizeof-pointer-solaris-64bit.bin -m64 print-sizeof-pointer.c
Pour compiler en 32-bit:
gcc -o print-sizeof-pointer-solaris-32bit.bin -m32 print-sizeof-pointer.c
Cas de Mac OS X: Comme expliqué dans un post précédent, MacOSX permet de générer des "universal binaries" qui contiennent dans le même fichier les exécutables pour une, deux, trois ou même quatre architectures:
gcc -arch i386 -arch ppc -arch ppc64 -arch x86_64 -o print-sizeof-pointer.bin print-sizeof-pointer.c
J'ai donc écrit un tout petit programme en C qui permet de connaître la taille des pointeurs:
/*
print-sizeof-pointer.c
This little program prints the size of pointers.
On a 64-bit system, pointers are 64-bit (8 bytes),
so this program prints "8".
On a 32-bit system, pointers are 32-bit (4 bytes),
so this program prints "4".
Pierre Bauduin
le 12 juin 2009 */
#include <stdio.h>
int main()
{
printf ("print-sizeof-pointer.c\n");
printf (" If the result is 8, this machine is a 64-bit system.\n");
printf (" If the result is 4, this machine is a 32-bit system.\n");
printf (" Result: %d\n", sizeof(void *));
}
Ce programme permet donc de savoir si l'adressage est 64-bit ou 32-bit.
Si la taille des pointeurs est 8 octets, cela veut dire que l'adressage est 64-bit.
Si la taille des pointeurs est 4 octets, cela veut dire que l'adressage est 32-bit.
Attention, évitons les confusions:
- Sur une machine 64-bit on peut faire tourner un OS 64-bit ou un OS 32-bit. Si l'OS est 32-bit, l'adressage est 32-bit.
- Même si la machine et l'OS sont tous les deux 64-bit, cela ne veut pas dire que tous les exécutables doivent être 32-bit ou 64-bit. Par exemple avec Mac OS X 10.5 "Léopard", une grande majorité des exécutables est encore 32-bit.
- Et donc, sur une machine 64-bit avec un OS 64-bit, il est généralement possible de faire tourner à la fois des exécutables 64-bit et des exécutables 32-bit.
- C'est en fait c'est à la compilation (voir ci-dessous comment) qu'il est possible de choisir de générer un exécutable 32-bit ou 64-bit.
Comment compiler une version 64-bit et/ou 32-bit ?
Si vous avez un système 64-bit, il est possible de dire au compilateur de générer un exécutable 32-bit ou 64-bit.
Cas de Linux, FreeBSD et Solaris:
Pour compiler en 64-bit:
gcc -o print-sizeof-pointer-solaris-64bit.bin -m64 print-sizeof-pointer.c
Pour compiler en 32-bit:
gcc -o print-sizeof-pointer-solaris-32bit.bin -m32 print-sizeof-pointer.c
Cas de Mac OS X: Comme expliqué dans un post précédent, MacOSX permet de générer des "universal binaries" qui contiennent dans le même fichier les exécutables pour une, deux, trois ou même quatre architectures:
gcc -arch i386 -arch ppc -arch ppc64 -arch x86_64 -o print-sizeof-pointer.bin print-sizeof-pointer.c
Libellés :
64-bit,
Debian GNU/Linux,
development,
FreeBSD,
Linux,
Mac OS X,
print-sizeof-pointer,
Solaris
samedi 4 avril 2009
Debian Live sur une clef USB: la solution définitive pour les partitions
Dans un post précédent (enfin il y a plus d'un an) je vous expliquais un "dilemme":
Lorsqu'on introduit une clef USB qui contient plusieurs partitions, Windows monte seulement la première partition, et aucune autre !
Ceci est embêtant car sur ma clef USB Debian Live j'ai en fait deux partitions
La solution que j'avais trouvée il y a un an fonctionnait, mais n'était pas très élégante. Je devais utiliser dd ou parted pour déplacer la partition DEBIAN_LIVE à la fin de la clef USB. Ensuite je recréais la partition DOCUMENTS comme première partition de la clef USB.
Comme me l'a suggéré Stuart (merci beaucoup !) dans un commentaire sur mon blog, il y a une solution beaucoup plus élégante. On se base sur le fait que la première partition de la table des partitions n'est pas obligatoirement la première partition sur la clef USB. La partition que Windows va monter est celle qui est la première dans la table des partitions, mais elle peut être n'importe où sur la clef USB.
Voici en pratique comment faire:
C'est beaucoup plus élégant, et ça va beaucoup plus vite !
Merci encore à Stuart...
Lorsqu'on introduit une clef USB qui contient plusieurs partitions, Windows monte seulement la première partition, et aucune autre !
Ceci est embêtant car sur ma clef USB Debian Live j'ai en fait deux partitions
- une partition DEBIAN_LIVE qui contient le système Debian Live bootable
- une partition DOCUMENTS formatée en FAT32 qui contient divers fichiers utiles
La solution que j'avais trouvée il y a un an fonctionnait, mais n'était pas très élégante. Je devais utiliser dd ou parted pour déplacer la partition DEBIAN_LIVE à la fin de la clef USB. Ensuite je recréais la partition DOCUMENTS comme première partition de la clef USB.
Comme me l'a suggéré Stuart (merci beaucoup !) dans un commentaire sur mon blog, il y a une solution beaucoup plus élégante. On se base sur le fait que la première partition de la table des partitions n'est pas obligatoirement la première partition sur la clef USB. La partition que Windows va monter est celle qui est la première dans la table des partitions, mais elle peut être n'importe où sur la clef USB.
Voici en pratique comment faire:
** Je m'occupe de ma clef USB: /dev/sdc
[root@cobra] /home/pbn/debian-live>fdisk /dev/sdc
** Je regarde les partitions
Command (m for help): p
Disk /dev/sdc: 2004 MB, 2004876800 bytes
255 heads, 63 sectors/track, 243 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00075233
Device Boot Start End Blocks Id System
/dev/sdc1 * 1 134 1076323+ 83 Linux
** Je vois qu'il y a une partition, c'est DEBIAN_LIVE, qui commence au cylindre 1 et s'arrête au cylindre 134
** Je jette la partition 1
Command (m for help): d
Selected partition 1
** Je crée une nouvelle partition 2
** Cette partition va du cylindre 1 à 134 inclus
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1-243, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-134, default 134):
Using default value 134
** Je marque la partition 2 comme bootable
Command (m for help): a
Partition number (1-4): 2
** Je crée une nouvelle partition 1
** Cette partition va du cylindre 135 à la fin
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-243, default 1): 135
Last cylinder or +size or +sizeM or +sizeK (135-243, default 243):
Using default value 243
** Cette partition est de type 0x0b (FAT32)
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 0b
Changed system type of partition 1 to b (W95 FAT32)
** Je regarde le résultat
Command (m for help): p
Disk /dev/sdc: 2004 MB, 2004876800 bytes
255 heads, 63 sectors/track, 243 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00075233
Device Boot Start End Blocks Id System
/dev/sdc1 135 243 875542+ b W95 FAT32
/dev/sdc2 * 1 134 1076323+ 83 Linux
Partition table entries are not in disk order
* J'écris la table des partitions
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
* Ca y est on a fini !
C'est beaucoup plus élégant, et ça va beaucoup plus vite !
Merci encore à Stuart...
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
FAT,
FAT32,
Linux,
partitions,
Windows
samedi 21 mars 2009
Debian Live le retour
Avec la sortie de Debian GNU/Linux 5.0 "Lenny" ce 14 février je me suis attelé à me replonger à nouveau dans Debian Live.

Debian Live est, comme son nom le laisse entendre, un outil très puissant qui permet de créer une version Live (Live-CD ou Live-USB ou Live-Net) entièrement personnalisée. Je l'utilise pour générer des clefs USB bootables.
Lorsque j'arrive devant un ordinateur lambda, je n'ai qu'à brancher la clef USB, forcer la machine à booter sur le port USB, et je me retrouve en quelques secondes dans ma version personnalisée de Debian:
Bien entendu Debian Live ne touche pas au disque dur de la machine, donc vous pouvez l'utiliser sur une machine qui n'est pas à vous...
Debian Live génère des images pour CD/DVD (LiveCD), pour clef USB (LiveUSB), mais aussi des systèmes Debian Live qu'il est possible de démarrer par le réseau avec une machine qui supporte PXE. Un serveur DHCP/BOOTP et TFTP est également nécessaire pour démarrer par le réseau.
Voici l'incantation magique:
lh_config --mirror-binary http://debian-mirror:7777/debian/ --mirror-binary-security http://debian-mirror:7777/debian-security/ --mirror-bootstrap http://debian-mirror:7777/debian/ --mirror-chroot http://debian-mirror:7777/debian/ --mirror-chroot-security http://debian-mirror:7777/debian-security/ -b usb-hdd -d lenny --bootappend-live "quickreboot locale=fr_BE.UTF-8 keyb=be2-latin1" --hostname debian-live --packages "akregator alsa-base alsaplayer-text alsa-tools alsa-utils amarok atlantik audacity aumix bzip2 console-setup cupsys cupsys-bsd cupsys-client debian-goodies eject elinks enscript ethtool evolution evolution-exchange finger fortunes fortunes-fr frozen-bubble ghc6 gimp gkrellm gnuchess gwenview htop iceweasel iceweasel-l10n-fr imagemagick k3b k3b-i18n kalarm kasteroids kate kaudiocreator kcalc kcheckgmail kde-i18n-fr kdebase kdeprint keytouch kgoldrunner khangman khexedit kicker-applets kmahjongg kmix kompose kpat kpdf kpersonalizer kpoker kpowersave krdc kreversi kscreensaver kscreensaver-xsavers ksirtet ksnapshot kweather kwifimanager kwin4 laptop-detect less live-helper lftp lmms locate lsdvd lshw lsof lynx mc memtest86+ mpg321 mtools munin-node mutt ncftp network-manager-kde ntpdate octave3.0 openoffice.org openoffice.org-l10n-fr openssh-server partimage parted pinball psmisc qtparted resolvconf screen slay smb4k smbclient smlnj strace sysstat tcpdump tcsh telnet tofrodos traceroute unzip vim wamerican wdutch wfrench wget xorg xbill xboard xdaliclock xgalaga xine-plugin xine-ui x-ttcidfont-conf xscreensaver xserver-xorg xsysinfo xterm zsh" && lh_build
Note: on suppose que l'on dispose d'un miroir local appelé debian-mirror sur le port 7777. Personnellement j'utilise apt-cacher pour mon miroir local.
Ensuite sans surprise il suffit d'écrire le fichier binary.img directement sur la clef USB:
dd if=/home/pbn/debian-live/binary.img of=/dev/sdX
... où vous remplacez /dev/sdX par le périphérique correspondant à la clef USB. Attention, ne vous trompez pas de périphérique, sinon vous risquez d'effacer le contenu de votre disque dur ! Je vous aurai prévenu...

Debian Live est, comme son nom le laisse entendre, un outil très puissant qui permet de créer une version Live (Live-CD ou Live-USB ou Live-Net) entièrement personnalisée. Je l'utilise pour générer des clefs USB bootables.
Lorsque j'arrive devant un ordinateur lambda, je n'ai qu'à brancher la clef USB, forcer la machine à booter sur le port USB, et je me retrouve en quelques secondes dans ma version personnalisée de Debian:
- choix des paquets installés
- ajout de mes propres programmes personnalisés
- configuration du fond d'écran, de l'écran de veille
- configuration des locales, des langues disponibles
Bien entendu Debian Live ne touche pas au disque dur de la machine, donc vous pouvez l'utiliser sur une machine qui n'est pas à vous...
Debian Live génère des images pour CD/DVD (LiveCD), pour clef USB (LiveUSB), mais aussi des systèmes Debian Live qu'il est possible de démarrer par le réseau avec une machine qui supporte PXE. Un serveur DHCP/BOOTP et TFTP est également nécessaire pour démarrer par le réseau.
Voici l'incantation magique:
lh_config --mirror-binary http://debian-mirror:7777/debian/ --mirror-binary-security http://debian-mirror:7777/debian-security/ --mirror-bootstrap http://debian-mirror:7777/debian/ --mirror-chroot http://debian-mirror:7777/debian/ --mirror-chroot-security http://debian-mirror:7777/debian-security/ -b usb-hdd -d lenny --bootappend-live "quickreboot locale=fr_BE.UTF-8 keyb=be2-latin1" --hostname debian-live --packages "akregator alsa-base alsaplayer-text alsa-tools alsa-utils amarok atlantik audacity aumix bzip2 console-setup cupsys cupsys-bsd cupsys-client debian-goodies eject elinks enscript ethtool evolution evolution-exchange finger fortunes fortunes-fr frozen-bubble ghc6 gimp gkrellm gnuchess gwenview htop iceweasel iceweasel-l10n-fr imagemagick k3b k3b-i18n kalarm kasteroids kate kaudiocreator kcalc kcheckgmail kde-i18n-fr kdebase kdeprint keytouch kgoldrunner khangman khexedit kicker-applets kmahjongg kmix kompose kpat kpdf kpersonalizer kpoker kpowersave krdc kreversi kscreensaver kscreensaver-xsavers ksirtet ksnapshot kweather kwifimanager kwin4 laptop-detect less live-helper lftp lmms locate lsdvd lshw lsof lynx mc memtest86+ mpg321 mtools munin-node mutt ncftp network-manager-kde ntpdate octave3.0 openoffice.org openoffice.org-l10n-fr openssh-server partimage parted pinball psmisc qtparted resolvconf screen slay smb4k smbclient smlnj strace sysstat tcpdump tcsh telnet tofrodos traceroute unzip vim wamerican wdutch wfrench wget xorg xbill xboard xdaliclock xgalaga xine-plugin xine-ui x-ttcidfont-conf xscreensaver xserver-xorg xsysinfo xterm zsh" && lh_build
Note: on suppose que l'on dispose d'un miroir local appelé debian-mirror sur le port 7777. Personnellement j'utilise apt-cacher pour mon miroir local.
Ensuite sans surprise il suffit d'écrire le fichier binary.img directement sur la clef USB:
dd if=/home/pbn/debian-live/binary.img of=/dev/sdX
... où vous remplacez /dev/sdX par le périphérique correspondant à la clef USB. Attention, ne vous trompez pas de périphérique, sinon vous risquez d'effacer le contenu de votre disque dur ! Je vous aurai prévenu...
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
Linux
dimanche 21 septembre 2008
Une commande Debian GNU/Linux peu connue: saidar
Lorsque vous désirez surveiller l'utilisation des ressources d'une machine dans un xterm, vous connaissez certainement top et htop.
Mais il existe une commande peu connue mais qui peut être utile:saidar.
Un peu d'information:
Pour l'installer:
(en tant que root)
Pour l'utiliser:
(pas besoin d'être root)
Mais il existe une commande peu connue mais qui peut être utile:saidar.
Un peu d'information:
[pbn@cobra] /home/pbn>aptitude show saidar
Package: saidar
State: installed
Automatically installed: no
Version: 0.13-1
Priority: optional
Section: utils
Maintainer: Bartosz Fenski
Uncompressed Size: 102k
Depends: libc6 (>= 2.3.5-1), libncurses5 (>= 5.4-5), libstatgrab6
Description: curses-based program which displays live system statistics
saidar is a curses-based application to display system statistics. Statistics
include CPU, processes, load, memory, swap, network I/O and disks I/O along
with their free space.
saidar utilizes libstatgrab library.
Homepage: http://www.i-scream.org/libstatgrab/
Tags: uitoolkit::ncurses
Pour l'installer:
(en tant que root)
[root@cobra] /home/pbn> aptitude-install saidar
Pour l'utiliser:
(pas besoin d'être root)
[pbn@cobra] /home/pbn>saidar
Libellés :
Debian GNU/Linux,
Linux,
Open Source
lundi 14 avril 2008
Mon appareil photo numérique Sony DSC-W55 sous Debian GNU/Linux
J'apprécie assez bien mon nouvel appareil photo numérique SONY DSC-W55.
Sans surprise, il écrit les photos sur mon MemoryStick de 2 GB, qui est un système de fichier FAT16. Pour afficher les photos sous Debian GNU/Linux, la première solution est de sortir le MemoryStick de l'appareil, le mettre dans un lecteur MemoryStick à connecteur USB, et de le brancher dans ma machine Debian GNU/Linux. Le MemoryStick apparaît comme un système de fichiers.
Mais, évidemment, ce serait plus simple de brancher l'appareil directement...
Lorsque je connecte l'appareil à ma machine Debian GNU/Linux à l'aide du connecteur approprié, je vois bien des messages de type USB dans mon kernel, mais sans plus.
Avec la commande lsusb je vois:
La solution est de modifier la configuration de l'appareil photo numérique.
J'allume l'appareil, j'appuie sur MENU et je vais dans le menu numéro 2. Là pour l'option Connexion USB je choisis Stock de mas, ou en anglais, dans l'option USB Connect je choisis Mass Storage.
Je branche à nouveau mon appareil photo sur le port USB de ma machine et pouf, le système de fichiers du MemoryStick se monte tout seul !
Sans surprise, il écrit les photos sur mon MemoryStick de 2 GB, qui est un système de fichier FAT16. Pour afficher les photos sous Debian GNU/Linux, la première solution est de sortir le MemoryStick de l'appareil, le mettre dans un lecteur MemoryStick à connecteur USB, et de le brancher dans ma machine Debian GNU/Linux. Le MemoryStick apparaît comme un système de fichiers.
Mais, évidemment, ce serait plus simple de brancher l'appareil directement...
Lorsque je connecte l'appareil à ma machine Debian GNU/Linux à l'aide du connecteur approprié, je vois bien des messages de type USB dans mon kernel, mais sans plus.
Avec la commande lsusb je vois:
[root@cobra] /root>lsusb... mais aucun système de fichiers ne se monte automatiquement.
Bus 005 Device 009: ID 054c:0010 Sony Corp. DSC-S30/S70/S75/F505V/F505/FD92 Cybershot/Mavica Digital Camera
La solution est de modifier la configuration de l'appareil photo numérique.
J'allume l'appareil, j'appuie sur MENU et je vais dans le menu numéro 2. Là pour l'option Connexion USB je choisis Stock de mas, ou en anglais, dans l'option USB Connect je choisis Mass Storage.
Je branche à nouveau mon appareil photo sur le port USB de ma machine et pouf, le système de fichiers du MemoryStick se monte tout seul !
Libellés :
Debian GNU/Linux,
Linux,
photo numérique,
Sony
vendredi 14 mars 2008
Mon script sizeofdeb
J'ai écrit un (petit) script qui vous donne l'espace occupé par le package Debian donné en paramètre.
Voici le script:
Exemples d'utilisation:
Cliquez ici pour télécharger ce script (faites clic-droit-> Enregistrer sous)
Voici le script:
#!/bin/bash
#
# sizeofdeb.sh - version 0.0.2
# Pierre Bauduin (pierre@baudu.in)
# le 14 mars 2008
#
# This script finds out how much space in kB is taken by the package given as a parameter
#
# Let's print some information
printf "$0 - finds out how much space in kB is taken by a Debian package\n"
# With how many parameters were we called ?
if [ "$#" != 1 ]; then
printf "Usage: $0\n"
exit 1
else
# Here is the package we are looking for
NAME_OF_THE_DEBIAN_PACKAGE=$1
RESULT_OF_GREP_STATUS=`grep-status -nsInstalled-size,Package -F Status ' installed' $STATUS \
| perl -p00l12 -e 's/\n/ /' \
| grep -i $NAME_OF_THE_DEBIAN_PACKAGE`
# Is the string empty ?
if [ "$RESULT_OF_GREP_STATUS" = "" ]; then
# The string is empty
printf "Could not find any package matching $NAME_OF_THE_DEBIAN_PACKAGE. This means it is not installed or you made a typo.\n"
else
# The string is not empty
printf "$RESULT_OF_GREP_STATUS\n"
fi
fi
Exemples d'utilisation:
[pbn@cobra] /home/pibe>sizeofdeb finger
sizeofdeb - finds out how much space in kB is taken by a Debian package
76 finger
[pbn@cobra] /home/pibe>sizeofdeb iceweasel
sizeofdeb - finds out how much space in kB is taken by a Debian package
836 iceweasel-l10n-fr
24408 iceweasel
780 iceweasel-l10n-nl
[pbn@cobra] /home/pibe>sizeofdeb toto
sizeofdeb - finds out how much space in kB is taken by a Debian package
Could not find any package matching toto. This means it is not installed or you made a typo.
[pbn@cobra] /home/pibe>sizeofdeb evolution
sizeofdeb - finds out how much space in kB is taken by a Debian package
7660 evolution-data-server-common
1088 evolution-data-server
462 evolution-webcal
2672 evolution-exchange
384 evolution-plugins
7748 evolution
73582 evolution-common
Cliquez ici pour télécharger ce script (faites clic-droit-> Enregistrer sous)
mercredi 12 mars 2008
Plus loin dans Debian Live sur une clef USB

Mon affaire de système Debian Live est presque parfaite. Hélas, il me reste le problème suivant: quand je connecte ma clef USB à une machine Windows, comme expliqué précémment: Au lieu de monter la deuxième partition et pas la première, Windows monte la première partition et pas la deuxième .
En fait, "by design", lorsqu'on introduit une clef USB, Windows monte seulement la première partition, et aucune autre !
La solution est de mettre la partition DEBIAN_LIVE en second et la partition DOCUMENTS en premier.
Comment faire ?
En fait, lh_build génère à la fois le MBR (512 premiers octets de /dev/hda) et la partition Debian Live (/dev/hda1).
La première solution est de déplacer la partition /dev/hda1 à la fin de la clef USB où elle deviendra /dev/hda2 à l'aide d'un outil opensource approprié tel que GNU Parted ou GParted ou QtParted. Ou à la limite un outil commercial approprié: PartitionMagic
Mais, ce n'est finalement pas si facile que cela:
- GNU Parted ou GParted ou QtParted me disent tous: Error: The file system is bigger than its volume!
- PartitionMagic ne voit même pas les partitions sur la clef USB (!?)
- modifier directement la table de partition avec un éditeur hexadécimal me semble périlleux
- avec fdisk, voir combien de cylindres occupe /dev/sdb1
- créer un /dev/sdb2 type 0x83 comportant le même nombre de cylindres tout à la fin de la clef USB
- sauvegarder la table de partitions et quitter fdisk
- transférer "en raw" toutes les données de la première vers la deuxième partition: time dd if=/dev/sdb1 of=/dev/sdb2
- jeter la première partition
- avec cfdisk recréer comme première partition /dev/sdb1 de type 0x0b (FAT32) qui prend tout l'espace jusqu'au début de /dev/sdb2
- toujours dans cfdisk mettre le flag "bootable" sur /dev/sdb2
- sauver et quitter cfdisk
- créer la partition FAT32 DOCUMENTS sur /dev/sdb1 en faisant: mkfs.vfat -F 32 -n DOCUMENTS /dev/sdb1
Name Flags Part Type FS Type [Label] Size (MB)
----------------------------------------------------------------------
sdb1 Primary W95 FAT32 [DOCUMENTS] 1044,62
sdb2 Boot Primary Linux [DEBIAN_LIVE] 962,36
Voici ce que Windows voit:

Et voilà, désormais, j'arrive à faire les deux:
- Quand je boote sur ma clef USB, j'arrive dans Debian Live
- Quand je connecte ma clef USB à une machine Windows, j'arrive à monter la partition DOCUMENTS
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
Linux,
partitions,
Windows
vendredi 7 mars 2008
Debian Live: script pour monter automatiquement la partition Documents
Comme je vous l'ai expliqué dans plusieurs posts précédents, je m'intéresse à produire un système Debian Live sur clef USB de 2 GB.
Mon système Debian Live prend 800MB, il me reste donc 1200 MB pour mes données. Evidemment, le plus simple est de créer une partition de données appelée "DOCUMENTS" en effectuant:
time mkfs.vfat -F 32 -n DOCUMENTS /dev/sdb2.
Cette partition sera la deuxième sur la clef. J'aurai donc une table des partitions comme ceci:
Avec ceci, quand je connecte ma clef USB à une machine Debian GNU/Linux, Ubuntu ou Mac OS X, ma partition DOCUMENTS est automatiquement montée et je peux y accèder en lecture/écriture. Hélas, trois fois hélas, quand je connecte ma clef USB à une machine Windows, comme expliqué précémment: Au lieu de monter la deuxième partition et pas la première, Windows monte la première partition et pas la deuxième .
Une solution est de mettre la partition DEBIAN_LIVE en second et la partition DOCUMENTS en premier. Oui mais, dans ce cas, lorsque je boote Debian Live sur ma clef, il faut arriver à monter automatiquement la partition DOCUMENTS, qu'elle soit première ou deuxième. Et ce n'est à priori pas si facile que ça car:
Mon système Debian Live prend 800MB, il me reste donc 1200 MB pour mes données. Evidemment, le plus simple est de créer une partition de données appelée "DOCUMENTS" en effectuant:
time mkfs.vfat -F 32 -n DOCUMENTS /dev/sdb2.
Cette partition sera la deuxième sur la clef. J'aurai donc une table des partitions comme ceci:
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 93 746991 83 Linux
/dev/sdb2 94 244 1212907+ b W95 FAT32
Avec ceci, quand je connecte ma clef USB à une machine Debian GNU/Linux, Ubuntu ou Mac OS X, ma partition DOCUMENTS est automatiquement montée et je peux y accèder en lecture/écriture. Hélas, trois fois hélas, quand je connecte ma clef USB à une machine Windows, comme expliqué précémment: Au lieu de monter la deuxième partition et pas la première, Windows monte la première partition et pas la deuxième .
Une solution est de mettre la partition DEBIAN_LIVE en second et la partition DOCUMENTS en premier. Oui mais, dans ce cas, lorsque je boote Debian Live sur ma clef, il faut arriver à monter automatiquement la partition DOCUMENTS, qu'elle soit première ou deuxième. Et ce n'est à priori pas si facile que ça car:
- je ne connais pas à priori sur quel disque sera monté mon système Debian Live: /dev/sda, /dev/sdb, /dev/sdc, ...
- même si je connais le disque, par exemple /dev/sdb, je ne sais pas à priori si la partition DOCUMENTS est première càd /dev/sdb1 ou deuxième càd /dev/sdb2: il serait élégant de ne pas produire deux versions du script qui monte la partition DOCUMENTS: une version pour le cas où DOCUMENTS est premier, une autre pour le cas où DOCUMENTS est second...
#!/bin/bashCliquez ici pour télécharger ce script à partir de mon site (faites clic-droit -> Enregistrer sous...)
#
# Monte la partition des documents (vfat) dans /home/user/Documents
# monter-partition-documents.sh
#
# Pierre Bauduin
# Le 7 mars 2008
#
# Ceci est une clef USB
#
# Une des partitions est le système Debian Live,
# l'autre partition est la partition Documents (formatée en FAT32)
#
# Il est possible que la partition Debian Live soit la première c'est à dire /dev/hdX1 ou /dev/sdX1
# dans ce cas la partition Documents est /dev/hdX2 ou /dev/sdX2
#
# ! Mais, comme Windows ne monte que la première partition qu'il trouve sur une clef USB,
# ! il est possible que sur la clef la partition Debian Live soit la deuxième c'est à dire /dev/hdX2 ou /dev/sdX2
# ! dans ce cas la partition Documents est /dev/hdX1 ou /dev/sdX1
#
# Le point de montage /live/image est-il sur la première partition de ma clef USB ?
if `mount | grep /live/image | awk '{print $1}' | grep -q 1`; then
# Oui
# Donc ma partition Documents est la deuxième et je la monte
PART=`mount | grep /live/image | awk '{print $1}' | sed 's/1/2/'`
[ -z "$PART" ] && exit 1
[ -d "$HOME/Documents" ] || mkdir $HOME/Documents
sudo mount $PART $HOME/Documents \
-t vfat \
-o rw,noexec,nosuid,nodev,noatime,uid=999,gid=6,umask=027,codepage=850
# Le point de montage /live/image est-il sur la deuxième partition de ma clef USB ?
elif `mount | grep /live/image | awk '{print $1}' | grep -q 2`; then
# Oui
# Donc ma partition Documents est la première et je la monte
PART=`mount | grep /live/image | awk '{print $1}' | sed 's/2/1/'`
[ -z "$PART" ] && exit 1
[ -d "$HOME/Documents" ] || mkdir $HOME/Documents
sudo mount $PART $HOME/Documents \
-t vfat \
-o rw,noexec,nosuid,nodev,noatime,uid=999,gid=6,umask=027,codepage=850
fi
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
Linux
dimanche 2 mars 2008
Debian Live: quelques liens utiles
Les packages les plus récents de Debian Live sont ici.
Le git repository de Debian Live c'est ici.
Les écrans de boot (splashscreens) pour Debian Live sont ici.

Vous trouverez plein d'autres liens Debian Live en allant ici.
Le git repository de Debian Live c'est ici.
Les écrans de boot (splashscreens) pour Debian Live sont ici.

Vous trouverez plein d'autres liens Debian Live en allant ici.
mercredi 27 février 2008
Taille des clusters sur une partition en fonction de sa taille et du systeme de fichiers
A force de travailler avec Debian Live et de créer des partitions FAT, il est intéressant de s'informer de la taille des clusters. J'ai donc créé cette page:
Taille des clusters sur une partition en fonction de sa taille et du système de fichiers FAT, FAT32 ou NTFS.
Ah oui - certains d'entre vous pourraient me demander ce qu'est un cluster...
En bref, le cluster, ou "unité d'allocation" en Microsoftien, est la plus petite unité attribuable à un fichier dans les systèmes de fichiers pour MS-DOS et Windows. Les clusters ont tous la même taille. Chaque fichier occupe un ou plusieurs clusters. Un cluster appartient à un et un seul fichier.
Supposons que la taille de cluster est de 8K.
Si j'ai un fichier qui fait 1K, il occupe un cluster.
Si j'ai un fichier qui fait 7K, il occupe un cluster.
Si j'ai un fichier qui fait 12K, il occupe deux clusters.
Si j'ai un fichier qui fait 81K, il occupe onze clusters.
Si j'ai un fichier qui contient uniquement la phrase "Bardaf, c'est l'embardée", c'est à dire 24 octets, il occupera un cluster.
On voit que quelle que soit la taille du fichier, le dernier cluster n'est pas complètement occupé. Que je mette un fichier de 7K ou simplement "Bardaf, c'est l'embardée" je consomme un cluster de 8K.
On perd donc de l'espace. Mais combien ? Une estimation connue est la suivante: si j'ai n fichiers, cela fait n clusters "pas complètement remplis", et ce quelle que soit la taille de chaque fichier. Un estimation de l'espac perdue est donc (n * taille du cluster) divisé par 2.
Cet espace perdu peut être non négligeable. Si vers 1995 j'avais un disque de 1200 MB et que je le formatais en une seule partition FAT16, j'avais des clusters de 32 KB. Si j'avais par exemple 7000 fichiers (ce qui n'est pas si énorme), je perdais 112 MB sur un disque de 1200 MB, soit presque 10% de l'espace disque total.
On comprend donc que, plus la taille des clusters est importante, plus on perd de l'espace. C'est la raison pour laquelle Microsoft a fait évoluer ses filesystems en passant de FAT à FAT16 puis à FAT32. Surtout, si vous devez choisir entre FAT16 et FAT32, choisissez FAT32, sauf peut-être si c'est pour un système d'exploitation qui ne connaît que FAT16 (cas de MS-DOS et de la première version de Windows 95).
Taille des clusters sur une partition en fonction de sa taille et du système de fichiers FAT, FAT32 ou NTFS.
Ah oui - certains d'entre vous pourraient me demander ce qu'est un cluster...
En bref, le cluster, ou "unité d'allocation" en Microsoftien, est la plus petite unité attribuable à un fichier dans les systèmes de fichiers pour MS-DOS et Windows. Les clusters ont tous la même taille. Chaque fichier occupe un ou plusieurs clusters. Un cluster appartient à un et un seul fichier.
Supposons que la taille de cluster est de 8K.
Si j'ai un fichier qui fait 1K, il occupe un cluster.
Si j'ai un fichier qui fait 7K, il occupe un cluster.
Si j'ai un fichier qui fait 12K, il occupe deux clusters.
Si j'ai un fichier qui fait 81K, il occupe onze clusters.
Si j'ai un fichier qui contient uniquement la phrase "Bardaf, c'est l'embardée", c'est à dire 24 octets, il occupera un cluster.
On voit que quelle que soit la taille du fichier, le dernier cluster n'est pas complètement occupé. Que je mette un fichier de 7K ou simplement "Bardaf, c'est l'embardée" je consomme un cluster de 8K.
On perd donc de l'espace. Mais combien ? Une estimation connue est la suivante: si j'ai n fichiers, cela fait n clusters "pas complètement remplis", et ce quelle que soit la taille de chaque fichier. Un estimation de l'espac perdue est donc (n * taille du cluster) divisé par 2.
Cet espace perdu peut être non négligeable. Si vers 1995 j'avais un disque de 1200 MB et que je le formatais en une seule partition FAT16, j'avais des clusters de 32 KB. Si j'avais par exemple 7000 fichiers (ce qui n'est pas si énorme), je perdais 112 MB sur un disque de 1200 MB, soit presque 10% de l'espace disque total.
On comprend donc que, plus la taille des clusters est importante, plus on perd de l'espace. C'est la raison pour laquelle Microsoft a fait évoluer ses filesystems en passant de FAT à FAT16 puis à FAT32. Surtout, si vous devez choisir entre FAT16 et FAT32, choisissez FAT32, sauf peut-être si c'est pour un système d'exploitation qui ne connaît que FAT16 (cas de MS-DOS et de la première version de Windows 95).
Libellés :
Debian GNU/Linux,
Debian Live,
FAT,
FAT32,
Linux
mardi 26 février 2008
Plusieurs partitions sur une clef USB: problème dans Windows
Comme je vous l'ai expliqué précédemment avec Debian Live je génére un système bootable à placer sur une clef USB.
Debian Live me crée un fichier binary.img que j'écris sur la clef USB en faisant:
dd if=binary.img of=/dev/sdX
Notez que j'écris bien sur /dev/sdX et pas sur /dev/sdX1. Cela signifie que je binary.img contient le MBR de la clef USB. En bref en faisant ce dd je crée sur ma clef USB:
Je crée donc une partition primaire de type 0x0b:FAT32 dans l'espace libre. Cette partition fait environ 1200 MB c'est à dire 1,2 GB
J'ai donc la table de partitions suivante:
Maintenant je crée un système de fichiers FAT32.
mkfs.vfat -F 32 -c -n DOCUMENTS /dev/sdb2
Ci-dessus:
(Pour accéder à diskmgmt.msc faites Start > Run > diskmgmt.msc. Vous pouvez aussi faire un clic droit sur l'ordinateur qui est en haut à gauche sur le bureau, choisir "Gérer" et sélectionner "Gestion des disques")
Je branche ma clef USB sur la machine Windows, et dans diskmgmt.msc, je vois ceci:

... eh bien ça alors !
Dans la table des partitions (donc dans le MBR), la première partition est indiquée comme 0x83 c'est à dire Linux et la deuxième est indiquée comme 0x0b c'est à dire FAT32. En toute logique, Windows devrait monter la deuxième partition, mais pas la première. En fait Windows fait exactement l'inverse: il monte la première partition (Linux) mais ne monte pas la deuxième partition (FAT32) !
Comment Windows peut-il monter la partition alors que c'est une partition Linux me direz-vous ? C'est ici qu'il y a une subtilité. En fait, dans la table des partitions (donc dans le MBR), la première partition est indiquée comme 0x83 c'est à dire Linux. Mais le système de fichier utilisé sur cette partition est FAT16 car Debian Live génère un système bootable pour clef USB basé sur SYSLINUX. Et SYSLINUX, c'est une technologie qui ne fonctionne que sur les partitions FAT.
Ce n'est qu'avec Windows que la deuxième partition DOCUMENTS n'est pas accessible.
Avec Debian GNU/Linux, dès que je branche ma clef USB, je peux accéder à la première partition (DEBIAN-LIVE) et à la deuxième partition (DOCUMENTS).
Avec Mac OS X, dès que je branche ma clef USB, je peux accéder à la deuxième partition (DOCUMENTS).
Résultat des courses: Windows monte la première partition et pas la deuxième... Alors qu'il devrait monter la deuxième partition et pas la première...
Debian Live me crée un fichier binary.img que j'écris sur la clef USB en faisant:
dd if=binary.img of=/dev/sdX
Notez que j'écris bien sur /dev/sdX et pas sur /dev/sdX1. Cela signifie que je binary.img contient le MBR de la clef USB. En bref en faisant ce dd je crée sur ma clef USB:
- un MBR
- une table des partitions contenant l'unique partition /dev/sdX1 de type 0x83:Linux
- une partition /dev/sdX1
cfdisk (util-linux-ng 2.13.1)
Disk Drive: /dev/sdb
Size: 2013265920 bytes, 2013 MB
Heads: 255 Sectors per Track: 63 Cylinders: 244
Name Flags Part Type FS Type Size (MB)
--------------------------------------------------------------
sdb1 Boot Primary Linux 764,96
Pri/Log Free Space 1242,02
Je crée donc une partition primaire de type 0x0b:FAT32 dans l'espace libre. Cette partition fait environ 1200 MB c'est à dire 1,2 GB
J'ai donc la table de partitions suivante:
[root@cobra] /root>fdisk -l /dev/sdb
Disk /dev/sdb: 2013 MB, 2013265920 bytes
255 heads, 63 sectors/track, 244 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000ecf8e
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 93 746991 83 Linux
/dev/sdb2 94 244 1212907+ b W95 FAT32
Maintenant je crée un système de fichiers FAT32.
mkfs.vfat -F 32 -c -n DOCUMENTS /dev/sdb2
Ci-dessus:
- -F 32 indique que je formate en FAT32 et pas FAT16 ni FAT12
- -c indique que je veux tester le support lors du formatage (facultatif)
- -n DOCUMENTS formate avec l'étiquette (label) DOCUMENTS
- /dev/sdb2 est le périphérique qui correspond à la deuxième partition de ma clef USB
(Pour accéder à diskmgmt.msc faites Start > Run > diskmgmt.msc. Vous pouvez aussi faire un clic droit sur l'ordinateur qui est en haut à gauche sur le bureau, choisir "Gérer" et sélectionner "Gestion des disques")
Je branche ma clef USB sur la machine Windows, et dans diskmgmt.msc, je vois ceci:

... eh bien ça alors !
Dans la table des partitions (donc dans le MBR), la première partition est indiquée comme 0x83 c'est à dire Linux et la deuxième est indiquée comme 0x0b c'est à dire FAT32. En toute logique, Windows devrait monter la deuxième partition, mais pas la première. En fait Windows fait exactement l'inverse: il monte la première partition (Linux) mais ne monte pas la deuxième partition (FAT32) !
Comment Windows peut-il monter la partition alors que c'est une partition Linux me direz-vous ? C'est ici qu'il y a une subtilité. En fait, dans la table des partitions (donc dans le MBR), la première partition est indiquée comme 0x83 c'est à dire Linux. Mais le système de fichier utilisé sur cette partition est FAT16 car Debian Live génère un système bootable pour clef USB basé sur SYSLINUX. Et SYSLINUX, c'est une technologie qui ne fonctionne que sur les partitions FAT.
Ce n'est qu'avec Windows que la deuxième partition DOCUMENTS n'est pas accessible.
Avec Debian GNU/Linux, dès que je branche ma clef USB, je peux accéder à la première partition (DEBIAN-LIVE) et à la deuxième partition (DOCUMENTS).
Avec Mac OS X, dès que je branche ma clef USB, je peux accéder à la deuxième partition (DOCUMENTS).
Résultat des courses: Windows monte la première partition et pas la deuxième... Alors qu'il devrait monter la deuxième partition et pas la première...
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
FAT,
FAT32,
Linux,
Mac OS X,
Windows
vendredi 22 février 2008
Debian-Live: squashfs-tools est en ballon
Hé bien cela fait maintenant plus d'une semaine qu'il n'est plus possbile de générer une image Debian Live de lenny. En fait squashfs-tools 1:3.3-3, la version actuelle de squashfs-tools dans lenny, produit des images Debian Live qui ne démarrent pas correctement. Au boot j'obtiens:
Comme je l'écris ici, une solution temporaire est de donner une valeur particulière à la variable d'environnement MKSQUASHFS_OPTIONS avant de taper lh_build:
export MKSQUASHFS_OPTIONS="-b 64K -no-sparse"
Reste à attendre qu'une nouvelle version de squashfs-tools soit disponible pour lenny.
Begin: Mounting root file system... ...Voyez d'ailleurs mon Debian bug report à ce sujet...
aufs 20071105
loop: module loaded
squashfs: version 3.2-r2 (2007/01/15) Phillip Lougher
BusyBox v1.1.3 (Debian 1:1.1.3-5- Built-in shell (ash)
Enter 'help' for a list of built-in commands.
/bin/sh: can't access tty: job control turned off
(initramfs)
Comme je l'écris ici, une solution temporaire est de donner une valeur particulière à la variable d'environnement MKSQUASHFS_OPTIONS avant de taper lh_build:
export MKSQUASHFS_OPTIONS="-b 64K -no-sparse"
Reste à attendre qu'une nouvelle version de squashfs-tools soit disponible pour lenny.
mercredi 20 février 2008
Debian Live pour une clef USB: suite
Dans les posts précédents je vous ai expliqué comment créer un système Debian Live pour clef USB.
Je vais maintenant personnaliser en profondeur mon système Debian Live pour clef USB.
J'ajoute quelques fichiers à mon système Debian Live, en allant par exemple cherches ces fichiers sur une autre machine Debian. Par exemple:
Le plugin Adobe Flash pour Iceweasel:
/usr/lib/iceweasel/plugins/libflashplayer.so
Quelques fonds d'écran:
/usr/share/wallpapers/debian01.jpg
/usr/share/wallpapers/debian02.jpg
/usr/share/wallpapers/debian03.jpg
Je démarre à partir de la clef USB que j'ai obtenue précédemment.
Par défaut, la session KDE s'ouvre automatiquement et mon utilisateur est
uid: 999
login: user
password: live
Je personnalise l'environnement de mon utilisateur, en éditant .bashrc et .bash_profile
Je personnalise mon installation KDE, c'est à dire:
Maintenant je sauvegarde le plug-in Adobe Flash, mes fonds d'écran, et le répertoire /home/user/.kde (et tout son contenu, bien entendu) de mon utilisateur, comme ceci:
cd /
tar --preserve -zcvf /tmp/my-debian-live-custom-files.tar.gz usr/share/wallpapers/debian01.jpg usr/share/wallpapers/debian02.jpg usr/share/wallpapers/debian03.jpg usr/lib/iceweasel/plugins/libflashplayer.so home/user/.bashrc home/user/.bash_profile home/user/.kde
Attention, ce fichier est sur le système de fichiers squashfs de ma clef USB, et donc il disparaitra de la clef dès que j'éteins ou redémarre la machine ! Je dois donc le copier quelquepart pour pouvoir le récupérer ! Pour ce faire je peux:
Pour monter un système de fichiers en lecture/écriture, je peux:
Quand, c'est fait, retourner sur la machine où vous avez créé votre Debian Live, et allez dans le répertoire approprié. Ensuite:
Je nettoie avant de personnaliser:
# lh_clean --binary
Ensuite aller dans le répertoire chroot:
# cd chroot
Je remonte ce que je viens de sauvegarder
# tar --preserve -zxvf /home/pbn/debian-live-home-user.tar.gz
Ensuite, je peux lancer à nouveau la génération de mon système Debian Live:
# time nice --adjustment=1 lh_binary
Je vais maintenant personnaliser en profondeur mon système Debian Live pour clef USB.
J'ajoute quelques fichiers à mon système Debian Live, en allant par exemple cherches ces fichiers sur une autre machine Debian. Par exemple:
Le plugin Adobe Flash pour Iceweasel:
/usr/lib/iceweasel/plugins/libflashplayer.so
Quelques fonds d'écran:
/usr/share/wallpapers/debian01.jpg
/usr/share/wallpapers/debian02.jpg
/usr/share/wallpapers/debian03.jpg
Je démarre à partir de la clef USB que j'ai obtenue précédemment.
Par défaut, la session KDE s'ouvre automatiquement et mon utilisateur est
uid: 999
login: user
password: live
Je personnalise l'environnement de mon utilisateur, en éditant .bashrc et .bash_profile
Je personnalise mon installation KDE, c'est à dire:
- je configure la barre des tâches en bas, en ajoutant et/ou enlevant des boutons
- je configure mon fond d'écran
- je configure mon écran de veille (screensaver en anglais)
- je configure mon menu K
- je configure la présentation et la couleur des fenêtres, etc ...
Maintenant je sauvegarde le plug-in Adobe Flash, mes fonds d'écran, et le répertoire /home/user/.kde (et tout son contenu, bien entendu) de mon utilisateur, comme ceci:
cd /
tar --preserve -zcvf /tmp/my-debian-live-custom-files.tar.gz usr/share/wallpapers/debian01.jpg usr/share/wallpapers/debian02.jpg usr/share/wallpapers/debian03.jpg usr/lib/iceweasel/plugins/libflashplayer.so home/user/.bashrc home/user/.bash_profile home/user/.kde
Attention, ce fichier est sur le système de fichiers squashfs de ma clef USB, et donc il disparaitra de la clef dès que j'éteins ou redémarre la machine ! Je dois donc le copier quelquepart pour pouvoir le récupérer ! Pour ce faire je peux:
- le transférer par sftp
- l'écrire sur un filesystem que j'ai monté en lecture/écriture
Pour monter un système de fichiers en lecture/écriture, je peux:
- monter un autre système de fichiers de ma première clef USB en lecture/écriture (voir ce post pour en savoir plus)
- insérer une disquette et la monter en lecture/écriture
- insérer une deuxième clef USB et la monter en lecture/écriture
- monter un système de fichiers du disque dur de la machine en lecture/écriture (déconseillé si la machine n'est pas à vous et que vous n'avez pas envie d'avoir des coups...)
Quand, c'est fait, retourner sur la machine où vous avez créé votre Debian Live, et allez dans le répertoire approprié. Ensuite:
Je nettoie avant de personnaliser:
# lh_clean --binary
Ensuite aller dans le répertoire chroot:
# cd chroot
Je remonte ce que je viens de sauvegarder
# tar --preserve -zxvf /home/pbn/debian-live-home-user.tar.gz
Ensuite, je peux lancer à nouveau la génération de mon système Debian Live:
# time nice --adjustment=1 lh_binary
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
Linux
samedi 16 février 2008
Nouvelle version de ma page d'outils pour Debian GNU/Linux
J'ai réalisé une nouvelle version de ma page d'outils pour Debian GNU/Linux.

Les nouveautés sont:

Les nouveautés sont:
- en plus des informations générales sur un package, vous pouvez maintenant obtenir des informations détaillées sur un package. Ces informations viennent du site de Debian Quality Assurance.
- possibilité de trouver tous les bugs pour un package
- possibilité de trouver tous les bugs signalés par une personne
- possibilité de trouver tous les bugs portant une certaine étiquette
Libellés :
Debian GNU/Linux,
Linux,
Mon Site Web
vendredi 15 février 2008
Faire apparaître des imprimantes CUPS dans le Default Printer Browser de Mac OS X Tiger
Dans un post précédent je vous parlais des "subtilités" qui peuvent survenir lorsque vous désirez installer une imprimante CUPS dans Mac OS X. Il faut en effet indiquer non pas "Claire" comme nom de file d'attente mais bien "/printers/Claire"
Suite à mon interaction avec developer.apple.com, j'ai appris qu'il y avait une solution beaucoup plus intuitive et élégante à ce problème.
Mon serveur CUPS est une machine Debian GNU/Linux 4.0 appelée cobra. Elle partage l'imprimante CUPS appellée Canon GP300.
Notez que tout ce qui suit n'est valable qu'avec Mac OS X 10.4 "Tiger" comme client.
Je vais dans Préférences Systèmes > Imprimantes et Fax et je clique sur le +.

J'arrive dans le Default Printer Browser et je vois quelque chose comme ceci:

Ce que je vois là est la liste des imprimantes disponible sur le réseau. Je vois des imprimantes AppleTalk et Bonjour... mais je ne vois pas l'imprimante qui m'intéresse: Canon GP300 sur le serveur cobra.
Voyons la partie "Browsing" du fichier /etc/cups/cupsd.conf sur cobra. Comme j'ai laissé la configuration par défaut du "Browsing", j'ai ceci:
Le "Browsing" est activé. Donc le serveur CUPS de cobra "publie" les informations sur les imprimantes. Cependant ce n'est pas suffisant pour que Mac OS X "voie" mon imprimante Canon GP300. Je dois indiquer dans le fichier /etc/cups/cupsd.conf sur cobra:
Où 10.20.255.255 est l'adresse de broadcast de votre connexion Ethernet.
Si vous ne connaissez pas l'adresse de broadcast de votre machine, tapez /sbin/ifconfig eth0.
N'oubliez pas de redémarrer le démon CUPS. Sous Debian GNU/Linux c'est la commande invoke-rc.d cupsys restart.
Je vois maintenant ceci:

Ca y est mon imprimante ImprimanteCanon est là ! Il ne me reste plus qu'à cliquer dessus et à l'installer:
Suite à mon interaction avec developer.apple.com, j'ai appris qu'il y avait une solution beaucoup plus intuitive et élégante à ce problème.
Mon serveur CUPS est une machine Debian GNU/Linux 4.0 appelée cobra. Elle partage l'imprimante CUPS appellée Canon GP300.
Notez que tout ce qui suit n'est valable qu'avec Mac OS X 10.4 "Tiger" comme client.
Je vais dans Préférences Systèmes > Imprimantes et Fax et je clique sur le +.

J'arrive dans le Default Printer Browser et je vois quelque chose comme ceci:

Ce que je vois là est la liste des imprimantes disponible sur le réseau. Je vois des imprimantes AppleTalk et Bonjour... mais je ne vois pas l'imprimante qui m'intéresse: Canon GP300 sur le serveur cobra.
Voyons la partie "Browsing" du fichier /etc/cups/cupsd.conf sur cobra. Comme j'ai laissé la configuration par défaut du "Browsing", j'ai ceci:
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
Le "Browsing" est activé. Donc le serveur CUPS de cobra "publie" les informations sur les imprimantes. Cependant ce n'est pas suffisant pour que Mac OS X "voie" mon imprimante Canon GP300. Je dois indiquer dans le fichier /etc/cups/cupsd.conf sur cobra:
Browsing On
BrowseAddress 10.20.255.255
BrowseAllow All
BrowseOrder allow,deny
Où 10.20.255.255 est l'adresse de broadcast de votre connexion Ethernet.
Si vous ne connaissez pas l'adresse de broadcast de votre machine, tapez /sbin/ifconfig eth0.
N'oubliez pas de redémarrer le démon CUPS. Sous Debian GNU/Linux c'est la commande invoke-rc.d cupsys restart.
Je vois maintenant ceci:

Ca y est mon imprimante ImprimanteCanon est là ! Il ne me reste plus qu'à cliquer dessus et à l'installer:
jeudi 14 février 2008
VMware et un kernel 2.6.24.2
Je viens de compiler un kernel 2.6.24.2 pour Debian GNU/Linux "lenny". Tout fonctionne... sauf vmware qui n'arrive pas à compiler ses kernels modules.
Quand je tente de compiler les kernel modules de VMWare pour un kernel 2.6.24.2, j'obtiens ceci:
Ouille !
Solution:
Quand je tente de compiler les kernel modules de VMWare pour un kernel 2.6.24.2, j'obtiens ceci:
[root@cobra] /root>/usr/vmware/bin/vmware-config.pl
Making sure services for VMware Server are stopped.
Stopping VMware services:
Virtual machine monitor done
Bridged networking on /dev/vmnet0 done
DHCP server on /dev/vmnet1 done
Host-only networking on /dev/vmnet1 done
DHCP server on /dev/vmnet8 done
NAT service on /dev/vmnet8 done
Host-only networking on /dev/vmnet8 done
Virtual ethernet done
Configuring fallback GTK+ 2.4 libraries.
In which directory do you want to install the mime type icons?
[/usr/share/icons]
What directory contains your desktop menu entry files? These files have a
.desktop file extension. [/usr/share/applications]
In which directory do you want to install the application's icon?
[/usr/share/pixmaps]
Trying to find a suitable vmmon module for your running kernel.
None of the pre-built vmmon modules for VMware Server is suitable for your
running kernel. Do you want this program to try to build the vmmon module for
your system (you need to have a C compiler installed on your system)? [yes]
Using compiler "/usr/bin/gcc". Use environment variable CC to override.
What is the location of the directory of C header files that match your running
kernel? [/lib/modules/2.6.24.2/build/include]
Extracting the sources of the vmmon module.
Building the vmmon module.
Building for VMware Server 1.0.0.
Using 2.6.x kernel build system.
make: entrant dans le répertoire « /tmp/vmware-config1/vmmon-only »
make -C /lib/modules/2.6.24.2/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: entrant dans le répertoire « /usr/src/linux-2.6.24.2 »
CC [M] /tmp/vmware-config1/vmmon-only/linux/driver.o
CC [M] /tmp/vmware-config1/vmmon-only/linux/driverLog.o
CC [M] /tmp/vmware-config1/vmmon-only/linux/hostif.o
/tmp/vmware-config1/vmmon-only/linux/hostif.c: In function 'HostIF_BrokenCPUHelper':
/tmp/vmware-config1/vmmon-only/linux/hostif.c:3042: warning: passing argument 1 of 'HostIFBrokenCPUHelper' discards qualifiers from pointer target type
CC [M] /tmp/vmware-config1/vmmon-only/common/comport.o
CC [M] /tmp/vmware-config1/vmmon-only/common/cpuid.o
In file included from include/asm/bitops.h:2,
from /tmp/vmware-config1/vmmon-only/./include/vcpuset.h:74,
from /tmp/vmware-config1/vmmon-only/./include/modulecall.h:23,
from /tmp/vmware-config1/vmmon-only/common/vmx86.h:19,
from /tmp/vmware-config1/vmmon-only/common/hostif.h:18,
from /tmp/vmware-config1/vmmon-only/common/cpuid.c:15:
include/asm/bitops_32.h:9:2: error: #error onlycan be included directly
make[2]: *** [/tmp/vmware-config1/vmmon-only/common/cpuid.o] Erreur 1
make[1]: *** [_module_/tmp/vmware-config1/vmmon-only] Erreur 2
make[1]: quittant le répertoire « /usr/src/linux-2.6.24.2 »
make: *** [vmmon.ko] Erreur 2
make: quittant le répertoire « /tmp/vmware-config1/vmmon-only »
Unable to build the vmmon module.
For more information on how to troubleshoot module-related problems, please
visit our Web site at "http://www.vmware.com/download/modules/modules.html" and
"http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".
Execution aborted.
Ouille !
Solution:
- aller chercher le patch vmware-any-any-update115.tar.gz
- le décompresser (dans /tmp par exemple): time tar --preserve -zxvf vmware-any-any-update115.tar.gz
- là dedans, décompresser vmmon.tar: time tar --preserve -xvf vmmon.tar
- éditer vmmon-only/include/vcpuset.h et remplacer include "asm/bitops.h" en #include "linux/bitops.h"
- éditer vmmon-only/include/iocontrols_compat.h et mettre 167 comme VMMON_VERSION_V6
- éditer vmmon-only/include/iocontrols.h et mettre 167 comme VMMON_VERSION
- recompresser vmmon.tar en faisant: time tar --preserve -cvf vmmon.tar vmmon-only
- lancer runme.pl
mardi 12 février 2008
Ajouter une partition montée en lecture/écriture à votre clef USB
Dans un post précédent je vous expliquais comment créer une clef USB bootable contenant un système Debian Live.
La dernière étape consistait à faire une commande du genre:
dd if=debian-live-binary.img of=/dev/sdX
Vous avez donc créé sur la clef USB une table de partitions qui contient une seule partition:
# fdisk -l /dev/sdb
Le système de fichier /dev/sdb1 est mon système Debian Live.
Ici c'est une clef de 1 GB, et il reste de l'espace. Je vais l'utiliser !
D'abord je crée dans l'espace libre une partition primaire de type 0x06 (FAT16).
Pour cela j'utilise par exemple la commande cfdisk
Je la formate en FAT16:
# time mkfs.vfat -c -F 16 -n DOCUMENTS /dev/sdX2
Et voilà ! Je peux maintenant monter la partition avec une commande du genre:
# mount -t vfat /dev/sdb2 /mnt/target
Mais je peux faire beaucoup mieux: je peux faire en sorte que cette partition soit montée automatiquement en lecture/écriture lors du démarrage de Debian Live !
Voici le script script usr/local/sbin/monter-partition-documents.sh qui monte automatiquement la partition des documents:
Pour qu'il soit lancé automatiquement par l'utilisateur user au démarrage de KDE il suffit de faire:
ln -s usr/local/sbin/monter-partition-documents.sh home/user/.kde/Autostarts
Et voilà !
La dernière étape consistait à faire une commande du genre:
dd if=debian-live-binary.img of=/dev/sdX
Vous avez donc créé sur la clef USB une table de partitions qui contient une seule partition:
# fdisk -l /dev/sdb
Le système de fichier /dev/sdb1 est mon système Debian Live.
Ici c'est une clef de 1 GB, et il reste de l'espace. Je vais l'utiliser !
D'abord je crée dans l'espace libre une partition primaire de type 0x06 (FAT16).
Pour cela j'utilise par exemple la commande cfdisk
Je la formate en FAT16:
# time mkfs.vfat -c -F 16 -n DOCUMENTS /dev/sdX2
Et voilà ! Je peux maintenant monter la partition avec une commande du genre:
# mount -t vfat /dev/sdb2 /mnt/target
Mais je peux faire beaucoup mieux: je peux faire en sorte que cette partition soit montée automatiquement en lecture/écriture lors du démarrage de Debian Live !
Voici le script script usr/local/sbin/monter-partition-documents.sh qui monte automatiquement la partition des documents:
#!/bin/bash
#
# Monte la partition des documents (vfat) dans /home/user/Documents
#
# Pierre Bauduin
# Le 12 février 2008
#
# Attention ici on suppose que:
# * la partition Debian Live est /dev/sdX1
# * la partition Documents est /dev/sdX2
#
# La partition qui m'interesse est sur le point de montage /live/image
# Je trouve /dev/sdX1 et je le transforme en /dev/sdX2
PART=`mount | grep /live/image | awk '{print $1}' | sed 's/1/2/'`
[ -z "$PART" ] && exit 1
[ -d "$HOME/Documents" ] || mkdir $HOME/Documents
sudo mount $PART $HOME/Documents \
-t vfat \
-o rw,noexec,nosuid,nodev,noatime,uid=999,gid=6,umask=027,codepage=850
Pour qu'il soit lancé automatiquement par l'utilisateur user au démarrage de KDE il suffit de faire:
ln -s usr/local/sbin/monter-partition-documents.sh home/user/.kde/Autostarts
Et voilà !
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
KDE,
Linux
lundi 11 février 2008
Comment améliorer et/ou personnaliser un système Debian Live pour une clef USB
Dans un post précédent je vous expliquais comment j'ai pu créer un système Debian Live bootable et le copier sur une clef USB.
La version que j'ai obtenue fonctionne, mais j'ai quelques désagréments:
Attention, pour tout ceci, je ne branche pas ma clef USB ! Je vais dans le répertoire où j'ai effectué lh_build dans le post précédent. Chez moi c'est le répertoire /mnt/data/debian-live-usb.
Et maintenant:
Je nettoie avant de personnaliser:
[root@cobra] /mnt/data/debian-live-usb>lh_clean --binary
Je me déplace dans le répertoire chroot:
[root@cobra] /mnt/data/debian-live-usb>cd chroot
Je place la dernière version sid du paquet user-setup (que je suis allé chercher préalablement ici) dans le répertoire root:
[root@cobra] /mnt/data/debian-live-usb/chroot>cp /home/pbn/download/user-setup_1.18_all.deb root/
J'édite les fichiers que je désire personnaliser, par exemple:
etc/apt/sources.list
etc/default/rcS
etc/motd
etc/vim/vimrc
(Note: dans etc/default/rcS je conseille d'indiquer UTC=no. En effet il est fort probable que les machines sur lesquelles ja vais booter ma clef USB auront leur horloge interne à l'heure locale.)
Je rentre dans le système Debian Live avec la commande chroot:
[root@cobra] /mnt/data/debian-live-usb>chroot chroot
Je configure les quatre paquets assez importants:
# dpkg-reconfigure locales
# dpkg-reconfigure fortunes-fr
# dpkg-reconfigure tzdata
# dpkg-reconfigure console-data
J'installe le paquet user-setup que j'ai mis dans root:
# dpkg -i root/user-setup_1.18_all.deb
Je quitte le chroot:
# Ctrl-D
Je remonte d'un directory
cd ..
Et, enfin, je peux lancer la génération de mon image Debian Live personnalisée:
# time nice --adjustment=1 lh_binary
Quand c'est terminé, j'ai mon image binary.img, que je peux transférer sur ma clef USB:
# time dd if=binary.img of=/dev/sdX
Remarques(rappel):
La version que j'ai obtenue fonctionne, mais j'ai quelques désagréments:
- par défaut, je n'ai pas la bonne disposition du clavier
- par défaut, je n'ai pas la bonne locale
- je n'ai pas mon prompt habituel (valeur de la variable d'environnement PS1)
- je n'ai pas mes réglages habituels dans vi (tel que par exemple syntax on)
- je n'ai pas le choix des fortunes dans fortunes-fr
Attention, pour tout ceci, je ne branche pas ma clef USB ! Je vais dans le répertoire où j'ai effectué lh_build dans le post précédent. Chez moi c'est le répertoire /mnt/data/debian-live-usb.
Et maintenant:
Je nettoie avant de personnaliser:
[root@cobra] /mnt/data/debian-live-usb>lh_clean --binary
Je me déplace dans le répertoire chroot:
[root@cobra] /mnt/data/debian-live-usb>cd chroot
Je place la dernière version sid du paquet user-setup (que je suis allé chercher préalablement ici) dans le répertoire root:
[root@cobra] /mnt/data/debian-live-usb/chroot>cp /home/pbn/download/user-setup_1.18_all.deb root/
J'édite les fichiers que je désire personnaliser, par exemple:
etc/apt/sources.list
etc/default/rcS
etc/motd
etc/vim/vimrc
(Note: dans etc/default/rcS je conseille d'indiquer UTC=no. En effet il est fort probable que les machines sur lesquelles ja vais booter ma clef USB auront leur horloge interne à l'heure locale.)
Je rentre dans le système Debian Live avec la commande chroot:
[root@cobra] /mnt/data/debian-live-usb>chroot chroot
Je configure les quatre paquets assez importants:
# dpkg-reconfigure locales
# dpkg-reconfigure fortunes-fr
# dpkg-reconfigure tzdata
# dpkg-reconfigure console-data
J'installe le paquet user-setup que j'ai mis dans root:
# dpkg -i root/user-setup_1.18_all.deb
Je quitte le chroot:
# Ctrl-D
Je remonte d'un directory
cd ..
Et, enfin, je peux lancer la génération de mon image Debian Live personnalisée:
# time nice --adjustment=1 lh_binary
Quand c'est terminé, j'ai mon image binary.img, que je peux transférer sur ma clef USB:
# time dd if=binary.img of=/dev/sdX
Remarques(rappel):
- surtout, n'exécutez pas lh_build ni lh_binary directement sur votre clef USB ! En effet, une clef USB est moins performante au niveau des temps d'accés et de la vitesse de lecture écriture. Mais surtout, les nombreuses opérations de lecture/écriture lors de la génération du système Debian Live diminuent fortement la durée de vie de votre clef USB !
- faites très attention de ne pas vous tromper de périphérique lors de la commande dd. Si vous n'avez que des disques PATA, la clef USB sera probablement le périphérique /dev/sda. Mais si vous avez des disques SCSI ou SATA, le périphérique /dev/sda est votre premier disque dur ! Votre clef USB sera quelquechose comme /dev/sdb ou /dev/sdc ou /dev/sdd, etc... N'allez pas écrire binary.img sur votre disque dur, vous perdriez toutes vos données !
Libellés :
Clef USB,
Debian GNU/Linux,
Debian Live,
Linux
dimanche 10 février 2008
Une commande Debian GNU/Linux peu connue: dpigs
Vous préparez une image compressée avec Debian-Live, et elle est trop grande pour votre CD / DVD/ clef USB ?
Vous êtes sur une machine où la partition / et/ou /usr est presque pleine ?
Vous vous demandez combien de place est utilisée/perdue dans des packages qui ne vous servent à rien ?
Utilisez la commande dpigs.
Pour l'installer:
(en tant que root)
Pour l'utiliser:
(pas besoin d'être root)
... eh oui, ce programme vous donne la liste des dix packages qui prennent le plus de place sur votre système Debian. Vous pouvez demander une liste plus longue, par exemple les vingt packages qui prennent le plus de place en tapant:
Vous êtes sur une machine où la partition / et/ou /usr est presque pleine ?
Vous vous demandez combien de place est utilisée/perdue dans des packages qui ne vous servent à rien ?
Utilisez la commande dpigs.
Pour l'installer:
(en tant que root)
[root@cobra] /home/pbn> aptitude-install debian-goodies
Pour l'utiliser:
(pas besoin d'être root)
[pbn@cobra] /home/pbn>dpigs
95932 openoffice.org-core
65368 sun-java5-bin
61200 evolution-common
51696 linux-image-2.6.22-3-686
37968 kde-i18n-fr
36220 wireshark-common
35692 libwine
34228 libgcj8-1
34220 openoffice.org-common
33548 w32codecs
... eh oui, ce programme vous donne la liste des dix packages qui prennent le plus de place sur votre système Debian. Vous pouvez demander une liste plus longue, par exemple les vingt packages qui prennent le plus de place en tapant:
[pbn@cobra] /home/pbn> dpigs -n 20
Libellés :
Debian GNU/Linux,
Debian Live,
Linux,
Open Source
Inscription à :
Articles (Atom)