#1 Le 16/11/2007, à 20:53
- k-o-x
Créer des profils de boot différents
Salut !
J'ai enfin réussi à faire un truc que cherche à faire depuis longtemps et qui je pense pourra servir à certains : créer un système de profils de boot. Je m'explique
J'ai un portable avec Gutsy que j'utilise dans plusieurs contextes et configs distinctes :
- à la maison, avec un deuxième écran LCD en 1024, une carte audionumérique firewire, une freebox en ethernet et un certain nombre de disques durs externes (en USB et en SATA via une carte PCMCIA)
- au studio, avec un deuxième écran LCD en 1280, une autre carte audionumérique (USB celle là ), une connexion Wifi et un autre jeu de disques durs externes
- en mobilité, avec... rien du tout, juste le portable, et éventuellement une connexion Wifi
J'ai donc besoin, entre autres :
- de plusieurs xorg.conf différents
- de plusieurs fstab différents (notamment parce que j'utilise à la maison un swap sur un disque plus rapide que mon disque interne)
- de certains fichiers/dossiers de config de programmes différents
L'idée de base est d'avoir 3 copies de ces fichiers et dossiers avec des suffixes ".maison", ".portable", ".studio". Pour les dossiers, s'ils sont un peu gros et que plusieurs profils utilisent le même, on peut se contenter d'un lien symbolique bien sur.
Le reste se passe en plusieurs étapes :
I) Configuration de Grub
On va créer autant d'entrées Grub que de profils. Il suffit de copier l'entrée voulue de /boot/grub/menu.lst (à éditer en root) autant de fois que nécessaire, en rajoutant une option supplémentaire à la fin de la ligne "kernel" (apparemment, le kernel ignore toute option inconnue que l'on pourrait lui passer, mais on peut quand même récupérer cette option plus tard). Chez moi j'ai appelé mes 3 options : profil_maison, profil_studio et profil_portable.
L'option choisie pourra etre retrouvée après le boot dans le fichier /proc/cmdline.
II) Gestion du fstab
C'est là que j'ai le plus galéré ... Après avoir dépiotté une foultitude de scripts, j'ai enfin réussi. Les problèmes principaux sont que le système de fichiers racine est monté en lecture seule dans un premier temps, et que le fstab est lu très tà´t pendant le boot. Si on veut le changer "dynamiquement", il faut se la jouer sioux...
Il faut éditer le script /etc/init.d/checkroot.sh (en root). Je remplace :
exec 9<&0 </etc/fstab
par :
FSTABFILE=/etc/fstab
PROFIL=maison
if [ "`grep profil_portable /proc/cmdline`" ]; then PROFIL=portable; fi
if [ "`grep profil_studio /proc/cmdline`" ]; then PROFIL=studio; fi
if [ -f $FSTABFILE.$PROFIL ]; then FSTABFILE=$FSTABFILE.$PROFIL; fi
exec 9<&0 <$FSTABFILE
Ici, le script lit le fstab pour savoir notamment quels swaps monter et comment remonter la racine en lecture-écriture. Juste avant je choisis le bon fstab (je vérifie que le fichier choisi existe bien par sécurité, mais sauvegardez quand même votre fstab au cas ou) et c'est celui-là que je donne à lire au script.
Ensuite, après les lignes suivantes :
#
# Remount root to final mode (rw or ro).
#
# See the comments above at the previous "mount -o remount"
# for an explanation why we try this twice.
#
if ! mount -n -o remount,$rootopts,$rootmode $fstabroot / 2>/dev/null
then
mount -n -o remount,$rootopts,$rootmode /
fi
J'ai rajouté :
if [ "$FSTABFILE" != "/etc/fstab" ]; then
[ -e /etc/fstab ] && rm /etc/fstab
ln -s $FSTABFILE /etc/fstab
fi
C'est à dire que dès que la racine est remontée en lecture-écriture, j'écrase le fstab avec celui que j'ai choisi plus haut. Ainsi les scripts de boot qui s'exécutent après liront le bon (notamment celui qui monte tous les autres systèmes de fichiers...)
Attention: si vous faites une erreur dans ce script, il se peut que vous vous retrouviez avec la racine montée en lecture seule après le boot ce qui causera plein de problèmes (notamment X qui ne démarre pas). Pour tout remettre comme il faut et corriger le script, taper les commandes suivantes dans une des consoles (Ctrl+Alt+F1) :
sudo mount -n -o remount /
sudo mount -a
sudo /etc/init.d/gdm restart
III) Choix de fichiers/dossiers selon le profil
J'ai créé un script qui se au démarrage et qui s'occupe de mettre en place les dossiers et fichiers qui varient suivant le profil. Je le lance très tà´t pour que le plus de programmes et services possibles puissent bénéficier du système de profils. Son fonctionnement est assez simple (je ne fais que des liens symboliques), il suffit de lister les fichiers et dossiers à prendre en compte au début. Attention quand même, il y a un "rm -rf" au milieu alors ne faites pas n'importe quoi avec
/etc/init.d/profil.sh :
#!/bin/sh
liste_fichiers="
/etc/X11/xorg.conf
/home/niko/.jackdrc
"
liste_dossiers="
/home/niko/Bureau
/home/niko/.cairo-dock
"
do_profil()
{
# détermination du profil
profil=maison
if [ "`grep profil_studio /proc/cmdline`" ]; then profil=studio; fi
if [ "`grep profil_portable /proc/cmdline`" ]; then profil=portable; fi
# gestion des fichiers
for f in $liste_fichiers; do
if [ -e $f.$profil ]; then
[ -e $f ] && rm $f
ln -s $f.$profil $f
fi
done
# gestion des dossiers
for d in $liste_dossiers; do
if [ -e $d.$profil ]; then
[ -e $d ] && rm -rf $d
ln -s $d.$profil $d
fi
done
}
case "$1" in
start|"")
do_profil
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
# No-op
;;
*)
echo "Usage: profil.sh [start|stop]" >&2
exit 3
;;
esac
:
Et pour le rendre exécutable et le lancer au démarrage :
sudo chmod a+x /etc/init.d/profil.sh
sudo ln -s /etc/init.d/profil.sh /etc/rcS.d/S38profil
(Je l'ai mis en S38, juste après tous les montages locaux)
Après tout est très simple puisqu'il suffit d'avoir des fichiers de config différents
Voilà , si vous avez des remarques, n'hésitez pas !
Dernière modification par k-o-x (Le 16/11/2007, à 21:14)
Hors ligne
#2 Le 16/11/2007, à 21:18
- atlas95
Re : Créer des profils de boot différents
Merci de l'astuce!
edit: Perso je cherche à mettre en place une système pour démarrer soit avec le driver nv ou le driver nvidia (en espérant que avec le nv j'ai plus d'autonomie)
J'ai trouver une doc pour gentoo mais je n'arrive pas à le faire pour ubuntu, je dois changer le fichier init mais je n'y arrive pas.
Pourrais tu m'aider?
http://gentoo-wiki.com/TIP_Switching_between_the_nv_free_driver_and_the_3D_nVidia_driver
Merci d'avance
Dernière modification par atlas95 (Le 16/11/2007, à 21:23)
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#3 Le 16/11/2007, à 21:57
- k-o-x
Re : Créer des profils de boot différents
Je pense qu'il suffit que tu suives ma méthode et que tu crées deux xorg.conf, un avec "nv" et l'autre avec "nvidia", tout simplement... Non ?
Hors ligne