[Logiciels et licences libres en entreprise] étape 2 : Quel OS pour un usage public limité ?

Publié le 21 mars 2008 par Traaf

Ce billet est le second de la série commencée par :

  1. [Logiciels et licences libres en entreprise] étape 1 : le hardware

Choix de l'OS

Le choix du matériel devant équiper les bornes d'accès libre à internet n'est pas encore définitivement arrêté, mais il est temps de se pencher sur la question de l'OS qui va y résider. Mon choix se porte naturellement sur Ubuntu :), voyons voir le cahier des charges, et comment adapter ubuntu à ces exigences.

  • navigation web performante : firefox avec ses principales extensions (flash, java, adblock, mozilla-mplayer)
  • compte utilisateur limité : pas de droits d'administration
  • zéro maintenance

Une installation classique avec un compte utilisateur limité peut s'envisager, mais un minimum de maintenance est nécessaire. De plus, à moins de verrouiller complètement la session, les utilisateurs peuvent modifier l'apparence du bureau et je ne tiens pas à avoir à le remettre en place tous les matins. J'ai bien pensé à un script qui écraserai le répertoire /home de l'utilisateur à chaque boot, mais ce n'est pas très élégant, et ça ne résout pas le problème de la maintenance du poste.

La meilleure solution serait un liveCD, ou mieux, un liveUSB. C'est facile à mettre en place sur une carte CF, j'ai déjà mis en ligne la manip avec l'article USBuntu. Il n'y a qu'a la reproduire, en shuntant l'activation du mode persistant.

Reste à personnaliser l'image iso selon mes besoins. Je me suis déjà pas mal amusé avec reconstructor, je sais que c'est faisable. Il existe aussi le script de frafa, que vous pouvez trouver sur le forum ubuntu-fr, mais je ne vois pas trop comment obtenir exactement ce que je veux. Enlever/ajouter des programmes, pas de problème, par contre, configurer firefox (page d'accueil, modules, réglages pour ne pas conserver de mots de passe et de cookies), ou modifier les applications apparaissant dans les menus...

Finalement, la solution pour cette dernière étape ne se révèle pas la plus compliquée. Je me suis largement inspiré des pages de la doc ici, et .

Après quelques essais, voici la façon dont j'ai procédé :

CREATION DE L'ESPACE DE TRAVAIL

~$ mkdir ~/livecd
~$ export CD=~/livecd

MONTAGE ET COPIE DE L'ISO


~$ sudo mount -o loop /media/Documents/iso/gutsy-desktop-i386.iso /mnt/iso
[sudo] password for traaf:
~$ cd $CD
~/livecd$ mkdir extract
~/livecd$ sudo cp -a /mnt/iso/. extract/
~/livecd$ sudo chmod -R u+w extract/
~/livecd$ sudo umount /mnt/iso
~/livecd$ cd extract/
~/livecd/extract$ sudo rm -rf bin pics disctree programs autorun.inf ubuntu.ico start.bmp start.exe start.ini wubi-cdboot.exe
~/livecd/extract$ cd $CD
~/livecd$ ls
extract

MONTAGE ET EXTRACTION DU SQUASHFS

~/livecd$ mkdir squashfs
~/livecd$ sudo mount -t squashfs -o loop /home/traaf/livecd/extract/casper/filesystem.squashfs /mnt/iso
~/livecd$ sudo cp -a /mnt/iso/. /home/traaf/livecd/squashfs
~/livecd$ sudo umount /mnt/iso
~/livecd$ ls
extract squashfs

PREPARATION DU CHROOT

je rajoute mon sources.list et je désactive certains dépôts

~/livecd$ cat /etc/apt/sources.list | sudo tee squashfs/etc/apt/sources.list
~/livecd$ sudo gedit squashfs/etc/apt/sources.list

Copie du resolv.conf pour avoir le net, et montage de /proc et /sys
/!\ Ne pas oublier de les supprimer avant de quitter le chroot) /!\

~/livecd$ sudo cp /etc/resolv.conf squashfs/etc/resolv.conf
~/livecd$ sudo mount -t proc -o bind /proc squashfs/proc
~/livecd$ sudo mount -t sys -o bind /sys squashfs/sys

PASSAGE EN CHROOT

~/livecd$ sudo chroot squashfs /bin/bash
id: ne peut trouver le nom de l'identificateur de groupe 1003
chroot:/# wget -q http://fr.packages.medibuntu.org/medibuntu-key.gpg -O- | apt-key add -
OK
chroot:/# apt-get update
6438ko réceptionnés en 27s (235ko/s)
Lecture des listes de paquets... Fait
chroot:/# apt-get upgrade
237 mis à jour, 0 nouvellement installés, 0 à enlever et 1 non mis à jour.
Il est nécessaire de prendre 303Mo dans les archives.
Après dépaquetage, 80,8Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ? o
...
chroot:/# apt-get dist-upgrade

Ici, je rajoute tout ce qui va bien, plugins multimédia etc...

chroot:/# apt-get install ubuntu-restricted-extras gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse 
gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-ffmpeg gstreamer0.10-fluendo-mp3
gstreamer0.10-fluendo-mpegdemux gstreamer0.10-gl gstreamer0.10-pitfdll mozilla-mplayer mplayer-fonts w32codecs
flashplugin-nonfree msttcorefonts sun-java6-plugin sun-java6-fonts gtk2-engines-murrine libggi-target-x gsfonts-x11
0 mis à jour, 65 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 64,5Mo dans les archives.
Après dépaquetage, 178Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ? o

J'enlève tous les fichiers de localisation, avant de ne réinstaller que le pack français, et j'enlève les outils de mise à jour et d'installation, ainsi que les terminaux (gnome-terminal et xterm) et 2 ou 3 autres bricoles.

chroot:/# apt-get remove language*
chroot:/# apt-get install language-pack-fr language-pack-gnome-fr language-support-fr language-pack-kde-fr language-selector
chroot:/# apt-get install console-data
chroot:/# dpkg-reconfigure console-data
chroot:/# apt-get remove --purge ubiquity pidgin gparted gnome-terminal xterm serpentine sound-juicer synaptic tomboy
chroot:/# umount /sys
chroot:/# umount /proc
chroot:/# rm /etc/resolv.conf
chroot:/# exit
exit

SORTIE DU CHROOT

Sans avoir oublié de démonter /proc /sys et effacé resolv.conf

SAUVEGARDE

Je fais une copie des répertoires après la mise à jour, pour ne pas avoir à tout retélécharger si je dois recommencer la manip

~/livecd$ mkdir squashfs.bakup
~/livecd$ sudo cp -a squashfs/. squashfs.bakup
~/livecd$ sudo mkdir extract.backup
~/livecd$ sudo rm extract/casper/filesystem.squashfs
~/livecd$ sudo cp -a extract/. extract.backup

NETTOYAGE

Purge du cache apt pour ne pas encombrer l'iso

~/livecd$ sudo chroot squashfs
chroot:/# apt-get clean
chroot:/# exit
exit

DEPLACEMENT DE FICHIERS ET THEMES

KERNEL

Après mise à jour du kernel, le copier en remplacement du kernel d'origine de l'iso

~/livecd$ sudo cp squashfs/boot/vmlinuz-2.6.22-14-generic extract/casper/vmlinuz 
~/livecd$ sudo cp squashfs/boot/initrd.img-2.6.22-14-generic extract/casper/initrd.gz

DEMARRAGE EN FRANCAIS

Pour ne pas à avoir à sélectionner la langue au démarrage

~/livecd$ echo "fr" | sudo tee extract/isolinux/lang
fr
~/livecd$ cat extract/isolinux/lang
fr

AJOUT DES THEMES

J'ai choisi les thème Murrina-Fruits (après installation du moteur GTK2 Murrine) et Murrine-rounded pour les bordures, que vous pouvez trouver ici (merci Chilperik).

Quelques captures d'écran en bas de page.

~/livecd$ sudo cp -ra /home/traaf/.themes/Murrina-Fruits/ /home/traaf/livecd/squashfs/usr/share/themes/
~/livecd$ sudo cp -ra /home/traaf/.themes/MurrineRounded/ /home/traaf/livecd/squashfs/usr/share/themes/
~/livecd$ sudo cp -a /home/traaf/Images/backgrounds/ubunlight-or_by_harrypopof.png /home/traaf/livecd/squashfs/usr/share/backgrounds/
~/livecd$ sudo chown -R root:root /home/traaf/livecd/squashfs/usr/share/themes
~/livecd$ sudo chown -R root:root /home/traaf/livecd/squashfs/usr/share/backgrounds
~/livecd$ sudo rm -rf squashfs/etc/skel/Examples

MODIFICATION DU USER

L'étape qui m'a donné le plus de mal, merci frafa pour le coup de pouce

~/livecd$ sudo gedit squashfs/etc/casper.conf 
export USERNAME="nectarin"
export USERFULLNAME="nectarin"
export HOST="nectarin"
export BUILD_SYSTEM="Nectarin"

MODIFICATION DES DROITS

~/livecd$ mkpasswd -s motdepasse
E/RzddfzlTY0A
~/livecd$ sudo gedit squashfs/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
set passwd/root-password-crypted E/RzddfzlTY0A
set passwd/user-password-crypted E/RzddfzlTY0A

MISE A JOUR INITRD

Indispensable pour que la modification de l'utilisateur et des droits s'appliquent au boot

~/livecd$ sudo chroot squashfs
chroot:/# sudo update-initramfs -k all -u
chroot:/# exit
exit
~/livecd$ sudo cp squashfs/boot/initrd.img-2.6.22-14-generic extract/casper/initrd.gz

RECONTRUCTION DU SQUASHFS

~/livecd$ sudo chmod a+w /home/traaf/livecd/extract/casper/filesystem.manifest
~/livecd$ sudo chroot /home/traaf/livecd/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > $CD/extract/casper/filesystem.manifest
~/livecd$ sudo chmod go-w /home/traaf/livecd/extract/casper/filesystem.manifest
~/livecd$ sudo chmod a+w /home/traaf/livecd/extract/casper/filesystem.manifest-desktop
~/livecd$ sudo chroot /home/traaf/livecd/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > /home/traaf/livecd/extract/casper/filesystem.manifest-desktop
~/livecd$ sudo chmod go-w /home/traaf/livecd/extract/casper/filesystem.manifest-desktop
~/livecd$ cd squashfs
~/livecd/squashfs$ sudo mksquashfs . ../extract/casper/filesystem.squashfs
~/livecd/squashfs$ cd ..
~/livecd$ sudo mkisofs -r -V "Nectarin Live CD" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o nectarin-i386.iso extract
...
~/livecd$ sudo chown traaf:traaf nectarin-i386.iso

TEST DE L'IMAGE ISO ET REGLAGES DU PROFIL

Pour cette étape, pas de code à taper. Je boote sur l'iso, toutes mes modifications sont bien effectives. Je procède alors aux réglages du compte utilisateur en appliquant les thèmes que j'ai ajoutés, je configure firefox bien comme il faut et je modifie un peu la disposition des menus. Quelques liens bien choisis en évidence sur le bureau avec des icônes sympa.

Pour la sauvegarde, j'opte pour la simplicité : ouvrir nautilus, remonter d'un niveau pour atteindre /home, un clic droit sur le dossier utilisateur > créer une archive. Et je me l'envoie par email

AJOUT DES INFOS PROFIL

je décompresse mon dossier utilisateur dans un repertoire que je nomme profil, et je recopie sont contenu dans /etc/skel

~/livecd$ sudo cp -r profil/. squashfs/etc/skel
~/livecd$ sudo chown -R root:root /etc/skel

RECONSTRUCTION DE LA NOUVELLE ISO

On supprime le fichier squashfs existant

~/livecd$ sudo rm extract/casper/filesystem.squashfs

Et on le recompresse, avant de recréer une image iso.

Le résultat est très satisfaisant, et une fois installé sur clé USB, le système est très fluide, ne consomme que 103 Mo de RAM au démarrage, et l'utilisation du moteur GTK2 murrine apporte vraiment une impression de légèreté, si vous le l'avez pas encore testé, je vous le recommande très vivement, les temps de réaction sont très courts et l'affichage est très agréable

Un aperçu de ce que ça donne :