Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue

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é hmm... 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 smile

/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 smile

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