[Logiciels et licences libres en entreprise] étape 2 : Quel OS pour un usage public limité ?
Par traaf le vendredi, 21 mars 2008, 20:08 - Ubuntu - Lien permanent
Ce billet est le second de la série commencée par :
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, là et là.
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 telnet
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} ' > $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} ' > /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







Commentaires
on pourai avoir des screen shots???
beau travail, merci du tuto!
Tu dis : "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."
J'ai fais expérimenter cette méthode sur des ordinateurs publics (basé sur un script utilisant rsync), et la maintenance est à zéro sur ces postes. Un reboot de la machine et la session public redevient comme neuve. Je vois pas en quoi c'est pas très éléguant non plus, si tu fais ça correctement, ça n'influe pas sur la sécurité du système ni sur ses fonctionnalités (et amha, ça reste bien plus simple à mettre en oeuvre (et bien plus rapide à l'utilisation) qu'une méthode basée sur un live cd).
@popi
personnellement, je trouve cette méthode plus élégante, oui !
OK, c'est un simple bureau gnome, mais je rajouterai 2/3 captures
@Goldy
l'élégance est subjective
sur une install classique, le compte principal ne reste protégé que par un mot de passe... alors que là, ce n'est pas un seul compte qui est réinitialisé au boot, mais l'ensemble du système. Les mise à jour de sécurité sont alors moins critiques et je pense pouvoir m'en abstenir sans risque.
De plus, déployer cette méthode sur plusieurs machines est très simple une fois l'image de base créée, il suffit de faire une première install et de recopier le contenu d'une carte CF à une autre, avec dd par exemple
www.bash-linux.com/unix-m...
Ca tient la route, physiquement, un système sur usb? Parce que j'ai lu diverses opinions sur le sujet. En particulier certains sont assez alarmant, disant qu'une clef usb n'est prévue que pour 1000 cycles de lecture/écriture...
J'aime bien ta solution, que je trouve assez classe. C'est vraiment zéro maintenance. Ton système ne profite pas des mises à jours (même critiques), mais ça n'est pas grave puisqu'il est réinitialisé tous les démarrages. Je vois que tu as pensé à enlever l'outil de mise à jour (ça n'aurait pas été classe de voir apparaître une popup sur le bureau qui te propose à chaque fois d'installer la dernière version de truc bidule...).
Chapeau pour l'article.
Article de grande qualité, merci !
Il me reste un seul petit problème. Comment changer la disposition du clavier ?
Est-ce que c'est un paramètre à envoyer au kernel ?
Est-ce que dpkg-reconfigure permet de choisir la disposition clavier ?
"dpkg-reconfigure console-data"
Si quelqu'un a une solution pour modifier la disposition du clavier par défaut, je suis preneur. Car choisir la langue française sélectionne automatiquement le clavier français, ce qui n'est pas le cas pour tous les pays francophone.
@Christophe-Marie
comme le live CD, le système est chargé dans la RAM sur un systeme de fichier virtuel (unionfs), les cycles d'accès en écriture sur la clé sont dont limités, voire inexistants si tu ne fait pas une petite partition de swap.
@Gianni
Une fois l'iso sur USB, tu devras la booter avec syslinux, en remplacement de isolinux
(cf l'article USBuntu)
à ce moment, la langue se défini dans lefichier syslinux.cfg qui passe ses instructions au boot avec une ligne de configuration pour le français :
append locale=fr_FR bootkbd=fr console-setup/layoutcode=fr console-setup/variantcode=nodeadkeys
je pense que tu peux modifier la disposition à ta convenance à partir de là.
si tu reste au format CD, je n'ai pas non plus essayé de mettre autre chose que fr dans le fichier lang, peut être tester un contenu fr_BE ou fr_CH (je ne sais pas quelle disposition tu veux)
merci pour les screens, jlo thème, assez clair mour les amateurs et: meebo est un bon choix
(finch est plus classe mais tanpis)
Bonjour, comment fais-tu pour avoir le pointeur de la souris sur tes captures d'écran ?
virtualbox
c'est un peu bourin comme méthode mais pour les amateurs de sun c'est une bonne méthode.
Bonjour !
Tout d'abord super tuto ! J'en avais essayé plusieurs, mais beaucoup moins clairs !
Cependant là je me heurte à quelque chose :
~/livecd$ cat extract/casper/lang
cat: extract/casper/lang: Aucun fichier ou répertoire de ce type
Une idée ?
Attention: dans le 7ème block "pre" contenant les commandes, dans la liste des paquets il y'a une erreur de frappe au début de la deuxième ligne: "gtreamer0.10-plugins-ugly" devient "gstreamer0.10-plugins-ugly"
Attention²: Autre erreur dans la partie "démarrage en français", sur la première ligne est écrit «echo "fr" | sudo tee extract/isolinux/lang», tandis que la troisième ligne est «cat extract/casper/lang». Le dossier devrait être extract/isolinux sur cette dernière.
Note: pour appliquer la manipulation dans hardy (ubuntu 8.04 beta), il faut enlever le paquet gstreamer0.10-gl de la liste car il n'existe pas. Il faut aussi, pour ajouter les dépôts medibuntu, ajouter les lignes à la main dans le /apt/sources.list
Oups, un autre soucis :
sudo mksquashfs . ../extract/casper/filesystem.squashfs
sudo: mksquashfs: command not found
Pardon, bien sûr:
Le programme 'mksquashfs' n'est pas installé actuellement. Vous pouvez l'installer en tapant :
sudo apt-get install squashfs-tools
Mais ça serait bien de le mettre en prérequis!
Encore moi...
Eh ben non finalement mksquashfs est toujours introuvable...
pardon, en fait c'est à cause d'un paquet cassé qui bloque tout, dsl !
c'est squashfs-tools qu'il faut installer
Merci à vous 2 pour la corrections des erreurs
Au passage, j'ai réaménagé la page du wiki ubuntu-fr en me basant sur cette expérience, elle devrait être bien plus claire maintenant
J'ai créé un livecd, mais je trouve le dernier paragraphe peu clair :

<<On supprime le fichier squashfs existant
~/livecd$ sudo rm extract/casper/filesystem.squashfs
Et on le recompresse, avant de recréer une image iso.>>
Je trouve la dernière ligne un peu gênante, peux-tu repréciser la procédure ?
Sinon, encore une fois superbe tuto !
PS: Ah oui, il serait peut-être bon de remplacer le nom d'utilisateur par la variable système, ça simplifierait !
et ici

~/livecd$ sudo cp -r profil/. squashfs/etc/skel
chez moi ça marchait seulment avec
~/livecd$ sudo cp -r profil squashfs/etc/skel
si tu pouvais passer sur le forum, ca m'arrangerai
Pardon, la dernière chose que j'ai dite était fausse, mea culpa, je poste trop vite !
Tu dois avoir un problème de flux rss, ca fait une dizaine de fois que ce billet réapparaît dans mon agregateur.
Pareil chez moi, je le reçois au moins une fois par jour depuis quelques temps.
effectivement
j'ai mis à jour le billet, ce qui crée un nouveau billet dans le flux au lieu de simplement répercuter la modification dans le billet existant !
cela ajouté au changement de format des URL, ca a l'air de créer un gros bordel...
je travaille dessus
Merci pour ce tuto qui correspond juste à ce que je cherchais (modifier mes squashFS sur mes clefs USB)
Cordialement