vendredi 28 mars 2008

Des logiciels libres pour les 40 000 nouveaux ordinateurs de la région wallonne ?

Je lis dans cet article du Soir de ce 28 mars 2008 que pour le marché des 40.000 nouveaux ordinateurs il est possible que des logiciels libres soient choisis au détriment des produits Microsoft. Bien entendu OpenOffice.org est pour moi un excellent choix pour de nombreuses raisons:
  • coût: OpenOffice.org coûte 0 EUR contre environ 600 EUR pour Microsoft Office
  • respect des standards: OpenOffice.org utilise des formats de fichiers standard tels que ODF. Microsoft Office utilise par contre des formats propriétaires qui sont illisibles
  • compatibilité: OpenOffice sait lire et écrire les format de fichiers standard, mais aussi les formats propriétaires Microsoft Office: .xls, .doc, .ppt.
  • pas de lien avec un fournisseur unique: Microsoft peut "brader" la version actuelle de Microsoft Office et vous la vendre 100 EUR au lieu de 600 EUR. Mais bien entendu, quand vous voudrez la nouvelle version d'ici trois ans, ce sera le prix plein...
  • disponible pour tous les systèmes d'exploitation. Microsoft Office n'existe que pour Windows et Mac OS X. Par contre OpenOffice.org existe pour: Debian, Ubuntu, Red Hat, Windows, Mac OS X, FreeBSD, PC-BSD, etc...
Cependant je peux lire dans l'article:
Le seul bémol c’est que l’on n’a pas aujourd’hui la certitude qu’OpenOffice sera parfaitement stable sur les ordinateurs d’Apple, note un proche du dossier. Or, l’appel d’offres prévoit que les écoles doivent pouvoir choisir librement entre des PC ou des Mac.
... soyons sérieux, il existe des versions d'OpenOffice.org 2.3.x pour Mac OS X...

Espérons que la région wallonne choisisse OpenOffice.org !

Oui mais, attendez... ce vendredi 28 mars 2008 une autre information se retrouve dans l'actualité: Microsoft aurait l'intention de s'implanter en région wallonne. Peut-être que si la région wallonne choisit de l'Open Source, l'implantation de Microsoft en en région wallonne ne se fera pas ?

jeudi 20 mars 2008

autorun.inf sur une clef USB

Voici la suite de mes aventures avec Debian Live sur ma clef USB...

Désormais j'arrive à booter sur la clef USB (à condition, bien entendu, que le BIOS supporte le démarrage à partir de la clef USB)
J'arrive également à ce que la partition DOCUMENTS soit montée automatiquement sous Windows.

Cependant, j'aimerais qu'une action soit exécutée automatiquement lorsque je branche la clef USB dans une machine Windows. J'ai donc créé sur la partition DOCUMENTS un fichier autorun.inf qui contient tout simplement:
[autorun]
icon=linux.ico
open=autorun.bat

Quand je branche la clef USB dans une machine Windows, je vois ceci dans explorer.exe:

... mais, le fichier autorun.inf ne s'exécute pas automatiquement !

Note: pour être complet, voici le contenu du fichier autorun.bat:
@echo Starting "debian_live.txt"...
@start debian_live.txt
@exit

Et le fichier debian_live.txt est un fichier texte expliquant qu'il faut redémarrer la machine en activant le boot sur clef USB.

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:
#!/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
Finalement j'ai trouvé la solution:
  • 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
Résultat des courses:
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

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:
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...
J'ai finalement produit un script monter-partition-documents.sh qui détecte automatiquement sur quelle partition se trouve DEBIAN_LIVE et sur quelle partition se trouve DOCUMENTS.
#!/bin/bash
#
# 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
Cliquez ici pour télécharger ce script à partir de mon site (faites clic-droit -> Enregistrer sous...)

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.

jeudi 28 février 2008

Tim McCormick et Matt Olander présentent PC-BSD au FOSDEM2008



Le week-end dernier se déroulait le traditionnel FOSDEM millésime 2008. Une présentation ("talk") retenait particulièrement mon attention. En effet Tim McCormick et Matt Olander, deux des développeurs principaux de PC-BSD venaient des USA à Bruxelles pour nous présenter leur système d'exploitation...





La présentation a failli ne pas avoir lieu car le projecteur ne fonctionnait plus ! Matt a branché son MacBook Pro sur l'entrée du projecteur, mais rien n'apparaissait sur la toile. Matt a alors commencé sa présentation sans aucun support et a répondu a quelques questions. Cependant, après quelques minutes de bidouillage au niveau des connexions du projecteur, nous avons pu assister à la démonstration.

Matt a alors montré le processus d'installation PC-BSD, qui (comme vous le savez probablement déjà) est simplissime: démarrer sur le CD, choisir la langue et le clavier, et pouf, PC-BSD s'installe.

Matt a également parlé d'un des gros avantages de PC-BSD qui est l'utilisation de fichiers .pbi. Pour installer un logiciel particulier, dans l'exemple de Matt: GIMP, il suffit d'aller sur le site pbidir.com et de cliquer sur le logiciel que vous désirez installer. Dans notre exemple il s'agit de GIMP. Le logiciel est alors téléchargé et installé automatiquement. Ceci est particulièrement intéressant pour un "utilisateur moyen" qui ne doit pas s'occuper de repositories ou de faire make install. Il lui suffit de cliquer sur le fichier .pbi, de cliquer Next et Finish, comme on le fait dans un système d'exploitation bien connu.

Nous avons eu un certain nombre de questions/réponses assez intéressantes, notamment sur PC-BSD 2.0 ainsi que de la possibilité de pouvoir installer les ports de FreeBSD par une interface graphique, ce qui serait vraiment génial !

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).

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:
  • un MBR
  • une table des partitions contenant l'unique partition /dev/sdX1 de type 0x83:Linux
  • une partition /dev/sdX1
Mais la partition /dev/sdX1 ne prend pas toute la clef USB, il reste de la place. Regardez ce que je vois dans cfdisk pour ma clef USB:

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
Maintenant, je vais prendre ma clef USB et la brancher à une machine sous Windows. J'ai une partition Debian Live de 760 MB et une partition DOCUMENTS de 1200 MB. Je réfléchis: laquelle de ces partitions Windows va-t-il monter ? En toute logique, il ne devrait pas monter la première partition, puisque c'est une partition Linux. Par contre il devrait monter la deuxième partition, qui est une partition FAT32.

(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...

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:

Begin: Mounting root file system... ...
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)
Voyez d'ailleurs mon Debian bug report à ce sujet...

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:

  • 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...)
Il suffit alors de transférer ce fichier my-debian-live-custom-files.tar.gz vers votre support monté en lecture/écriture.

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

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:
  • 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

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:
# 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:
[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 only can 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:

  1. aller chercher le patch vmware-any-any-update115.tar.gz
  2. le décompresser (dans /tmp par exemple): time tar --preserve -zxvf vmware-any-any-update115.tar.gz
  3. là dedans, décompresser vmmon.tar: time tar --preserve -xvf vmmon.tar
  4. éditer vmmon-only/include/vcpuset.h et remplacer include "asm/bitops.h" en #include "linux/bitops.h"
  5. éditer vmmon-only/include/iocontrols_compat.h et mettre 167 comme VMMON_VERSION_V6
  6. éditer vmmon-only/include/iocontrols.h et mettre 167 comme VMMON_VERSION
  7. recompresser vmmon.tar en faisant: time tar --preserve -cvf vmmon.tar vmmon-only
  8. 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:
#!/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à !

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:
  • 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
Il est en fait possible, et relativement facile, de personnaliser votre installation Debian Live.

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 !
... et voilà !

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)
[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

jeudi 7 février 2008

Comment créer un système Debian Live pour une clef USB

Le projet Debian Live permet de créer une installation de Debian GNU/Linux qui fonction en "live", c'est à dire en démarrant sur un CD, un DVD ou une clef USB.

Ceci est intéressant quand par exemple, sur le lieu de travail, on met une machine à votre disposition mais qu'elle est sous Windows. Avec un système Debian-Live, vous ne touchez aucunement au disque dur. C'est également très utile lorsque vous passez chez une connaissance et que vous voulez lui montrer comment Debian tourne sur sa machine, évidemment sans toucher à son disque dur.

De plus votre système Debian Live fonctionne en "lecture seule", de la sorte il est impossible qu'un programme malveillant (virus, worm, rootkit) ne s'installe.

Avant tout il vous faut installer le package live-helper qui contient tous les outils permettant de générer un système Debian-Live. Ce live-helper existe pour lenny et sid, mais il est recommandé d'installer la dernière version à partir du site de Debian-Live.

Voici la commande (attention c'est long):

#!/bin/sh
#
# Script qui génère un système Debian-Live
# au format usb-hdd (système de fichier sur clef USB)
#
# Pierre Bauduin
# Le 7 février 2008
#
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-bootstrap-security http://debian-mirror:7777/debian-security/ -b usb-hdd -d lenny --bootappend-live "quickreboot locale=fr_BE@euro keyb=be2-latin1" --hostname debian-live --packages "akregator alsa-base alsaplayer-text alsa-tools alsa-utils amarok audacity aumix avidemux bzip2 cupsys cupsys-bsd cupsys-client debian-goodies dillo dvdrip eject elinks enscript finger fortunes fortunes-fr frozen-bubble gimp gwenview htop iceweasel iceweasel-l10n-fr iceweasel-l10n-nl imagemagick irssi k3b k3b-i18n kalarm kate kcalc kcheckgmail kde-i18n-fr kde-i18n-nl kdebase kdeprint keytouch kgoldrunner khangman kmahjongg kmix kompose kpat kpdf kpersonalizer kpoker krdc kreversi kscreensaver kscreensaver-xsavers ksirtet ksnapshot kweather kwin4 laptop-detect less lftp libdvdcss2 loadmeter lsdvd lshw lsof lynx mc memtest86+ mondo mpg123 mpg123-alsa mpg321 msttcorefonts mtools munin-node mutt ncftp nmap ntpdate openoffice.org openoffice.org-l10n-fr openoffice.org-l10n-nl openssh-server pidgin screen slay smb4k smbclient strace sun-java5-bin sun-java5-jre sun-java5-plugin sysstat tcpdump tcsh telnet tofrodos traceroute unzip vim w32codecs wamerican wdutch wfrench wget wine wireshark x-window-system-core xbill xchat xchm xdaliclock xine-ui x-ttcidfont-conf xmms xscreensaver xserver-xorg xsysinfo" && time nice --adjustment=1 lh_build

Remarquez que:
  • il est fortement recommandé d'utiliser un miroir local de Debian
  • dans cet exemple mon miroir s'appelle debian-mirror, il faut donc adapter le script (ou encore définir dans votre serveur DNS que debian-mirror est l'alias de votre machine miroir)
  • tous les fichiers seront créés dans le répertoire courant, je vous conseille donc fortement de faire mkdir debian-live && cd debian-live avant de lancer la commande
  • sur ma machine il faut environ 40 minutes pour générer le système Debian Live
  • pour des raisons de performance, il est fortement recommandé d'exécuter cette commande sur un filesystem local (c'est à dire, un disque qui existe physiquement, pas sur un tmpfs, ni nfs, ni smbfs)
  • veillez à exécuter cette commande sur un filesystem qui a suffisamment d'espace libre: dans le cas de la commande ci-dessus, la génération du Debian Live consomme 5,4 GB d'espace !
  • surtout, n'exécutez pas cette commande 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 !
  • au final, vous obtenez un fichier binary.img d'environ 720 MB que vous pourrez transférer avec une commande du genre dd if=binary.img of=/dev/sdXsdX est le bon périphérique pour 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 !
  • copier le binary.img sur ma clef USB prend environ 10 minutes (mais c'est une clef de marque Peak, ce n'est pas très performant...)

samedi 2 février 2008

Une commande Mac OS X peu connue: machine

Il y a quelques jours je vous parlais de la commande arch de Mac OS X.

Voyons aujourd'hui une autre commande peu connue, la commande machine.

Cette commande est un peu similaire à la commande arch dont je vous parlais l'autre fois. En fait la commande machine affiche le type de machine sur laquelle Mac OS X tourne.

Attention, l'architecture et le type de machine, ce n'est pas la même chose !

L'architecture, donnée par la commande arch, est ppc, ppc64, i386 ou x86_64.

Le type de machine, donnée par la commande machine, indique avec précision le type de processeur.

Exemple avec Mac OS X Tiger sur un Power Macintosh G3 Blue and white:
[pierre@blueandwhite] /Users/pierre>machine
ppc750
Exemple avec Mac OS X Léopard sur un iMac Intel 20-inch:
[pierre@albert] /Users/pierre>machine
i486

Voyons les pages de manuel de cette commande machine:

Mac OS X Tiger sur PowerPC:
MACHINE(1)                BSD General Commands Manual               MACHINE(1)

NAME
machine -- print machine type

SYNOPSIS
machine

DESCRIPTION
The machine command displays the machine type.

SEE ALSO
make(1)

HISTORY
The machine command is currently under development.

BSD July 26, 1991 BSD
Mac OS X Léopard sur Intel:
MACHINE(1)                BSD General Commands Manual               MACHINE(1)

NAME
machine -- print machine type

SYNOPSIS
machine

DESCRIPTION
The machine command displays the machine type.

SEE ALSO
arch(1), make(1)

HISTORY
The machine command is currently under development.

BSD July 26, 1991 BSD
... on constatera au passage que cette commande est toujours "currently under development", étonnant :)

mercredi 30 janvier 2008

Une commande Unix / Linux / Mac OS X peu connue: arch

Voyons aujourd'hui une commande Mac OS X peu connue: il s'agit de la commande arch.

Cette commande renvoie l'architecture de la machine.
Le résultat peut être:
  • ppc pour un Apple Macintosh basé sur un processeur PowerPC 32 bits (G3, G4, G5)
  • ppc64 pour un Apple Macintosh basé sur un processeur PowerPC 64 bits (G5)
  • i386 pour un Apple Macintosh basé sur un processeur x86 (Intel) 32 bits
  • x86_64 pour un Apple Macintosh basé sur un processeur x86_64 (Intel) 64 bits
  • ??? (à vérifier - probablement arm) pour un iPhone, qui fait tourner Mac OS X sur un processeur arm.

Voyons les pages de manuel de cette commande arch:

Mac OS X Tiger sur PowerPC:

ARCH(1) BSD General Commands Manual ARCH(1)

NAME
arch -- print architecture type

SYNOPSIS
arch

DESCRIPTION
The arch command displays the machine's architecture type.

SEE ALSO
machine(1)

Mac OS August 20, 1997 Mac OS

Mac OS X Leopard sur Intel:

ARCH(1) BSD General Commands Manual ARCH(1)

NAME
arch -- print architecture type or run selected architecture of a univer-
sal binary

SYNOPSIS
arch
arch [-h] [[-arch_name | -arch arch_name]...] prog [args ...]

DESCRIPTION
The arch command with no arguments, displays the machine's architecture
type.

The other use of the arch command it to run a selected architecture of a
universal binary. A universal binary contains code that can run on dif-
ferent architectures. By default, the operating system will select the
architecture that most closely matches the processor type. This means
that an intel architecture is selected on intel processors and a powerpc
architecture is selected on powerpc processors. A 64-bit architecuture
is preferred over a 32-bit architecture on a 64-bit processor, while only
32-bit architectures can run on a 32-bit processor.

When the most natural architecture is unavailable, the operating system
will try to pick another architecture. On 64-bit processors, a 32-bit
architecture is tried. If this is also unavailable, the operating system
on an intel processor will try running a 32-bit powerpc architecture.
Otherwise, no architecture is run, and an error results.

The arch command can be use to alter the operating system's normal selec-
tion order. The most common use is to select the 32-bit architecture on
a 64-bit processor, even if a 64-bit architecture is available.

The -h option prints a usage message and exits.

The arch_name argument must be one of the currently supported architec-
tures:

i386 32-bit intel

ppc 32-bit powerpc

ppc64 64-bit powerpc

x86_64 64-bit intel

Either prefix the architecture with a hyphen, or (for compatibility with
other commands), use -arch followed by the architecture.

If more than one architecture is specified, the operating system will try
each one in order, skipping an architecture that is not supported on the
current processor, or is unavailable in the universal binary.

The prog argument is the command to run, followed by any arguments to
pass to the command. It can be a full or partial path, while a lone name
will be lookup in the user's command search path.

If no architectures are specified on the command line, the arch command
takes the basename of the prog argument and searches for the first prop-
erty list file with that basename and the .plist suffix, in the
archSettings sub-directory in each of the standard domains, in the fol-
lowing order:

~/Library/archSettings User settings

/Library/archSettings Local settings

/Network/Library/archSettings Network settings
Either prefix the architecture with a hyphen, or (for compatibility with
other commands), use -arch followed by the architecture.

If more than one architecture is specified, the operating system will try
each one in order, skipping an architecture that is not supported on the
current processor, or is unavailable in the universal binary.

The prog argument is the command to run, followed by any arguments to
pass to the command. It can be a full or partial path, while a lone name
will be lookup in the user's command search path.

If no architectures are specified on the command line, the arch command
takes the basename of the prog argument and searches for the first prop-
erty list file with that basename and the .plist suffix, in the
archSettings sub-directory in each of the standard domains, in the fol-
lowing order:

~/Library/archSettings User settings

/Library/archSettings Local settings

/Network/Library/archSettings Network settings
Either prefix the architecture with a hyphen, or (for compatibility with
other commands), use -arch followed by the architecture.

If more than one architecture is specified, the operating system will try
each one in order, skipping an architecture that is not supported on the
current processor, or is unavailable in the universal binary.

The prog argument is the command to run, followed by any arguments to
pass to the command. It can be a full or partial path, while a lone name
will be lookup in the user's command search path.

If no architectures are specified on the command line, the arch command
takes the basename of the prog argument and searches for the first prop-
erty list file with that basename and the .plist suffix, in the
archSettings sub-directory in each of the standard domains, in the fol-
lowing order:

~/Library/archSettings User settings

/Library/archSettings Local settings

/Network/Library/archSettings Network settings

/System/Library/archSettings System settings

This property list contains the architecture order preferences, as well
as the full path to the real executable. For examples of the property
list format, look at the files in /System/Library/archSettings.

Example
On an intel processor:

% perl -MConfig -e 'printf "%s\n", $Config{byteorder}'
1234

shows the intel little endian byte order, while:

% arch -ppc perl -MConfig -e 'printf "%s\n", $Config{byteorder}'
4321

runs the powerpc architecture, and displays big endian byte order.

Making links to the arch command
When a link is made to arch command with a different name, that name is
used to find the corresponding property list file. Thus, other commands
can be wrapped so that they have custom architecture selection order.
Because of some internal logic in the code, hard links to the arch com-
mand may not work quite right. It is best to avoid using hard links, and
only use symbolic links to the arch command.

Environment
The environment variable ARCHPREFERENCE can be used to provide architec-
ture order preferences. It is checked before looking for the correspond-
ing property list file.

The value of the environment variable ARCHPREFERENCE is composed of one
or more specifiers, separated by semicolons. A specifier is made up of
one, two or three fields, separated by colons. Architectures specified
in order, are separated by commas and make up the last (mandatory) field.
The first field, if specified, is a name of a program, which selects this
specifier if that name matches the program name in question. If the name
field is empty or there is no name field, the specifier matches any pro-
gram name. Thus, ordering of specifiers is important, and the one with
no name should be last.

When the arch command is called directly, the prog name provides the path
information to the executable (possibly via the command search path).
When a name is specified in a ARCHPREFERENCE specifier, the path informa-
tion can alternately be specified as a second field following the name.
When the arch command is called indirectly via a link, this path informa-
tion must be specified. If not specified as a second field in a speci-
fier, the executable path will be looked up in the corresponding property
list file.

Example ARCHPREFERENCE Values
ppc,i386,ppc64,x86_64
A specifier that matches any name.

foo:ppc,i386,ppc64,x86_64
A specifier that matches the program named foo (the full executable
path is in the foo.plist file).

foo:/op/bin/boo:ppc,i386,ppc64,x86_64
A specifier with all fields specified.

baz:ppc,i386;i386,ppc
A specifier for baz and a second specifier that would match any
other name.

BUGS
BUGS
Running the arch command on an interpreter script may not work if the
interpreter is a link to the arch command, especially if a 64-bit archi-
tecture is specified (since the arch command is 2-way universal, 32-bit
only).

SEE ALSO
machine(1)

Mac OS X November 12, 2006 Mac OS X


Il est à noter que sous Debian GNU/Linux, la commande arch existe dans Debian GNU/Linux 4.0 "etch", mais a disparu de Debian GNU/Linux "lenny", car elle est considérée "obsolète". Si vous en avez malgré tout besoin, utilisez la commande uname -m. Il vous suffit de créer un petit shell script /bin/arch du genre:

#!/bin/sh
#
# Remplace la commande arch
# Renvoie l'architecture de la machine
#
# Pierre Bauduin
# Le 24 décembre 2007
#
/bin/uname -m

Certains distributions Linux ont la commande arch, d'autres ne l'ont pas.