|
imported>Pierre |
Ligne 1 : |
Ligne 1 : |
− | === conversion d'une image linux en LXC ===
| |
| | | |
− | Un serveur virtuel LXC est la partie utilisateur ("userland") par opposition à la partie noyau ("kernel").
| |
− |
| |
− | Pour convertir une image c'est assez simple en ce sens qu'on va plutôt enlever des choses qu'en mettre:
| |
− | * tout les scripts de démarrage servant a faire l'initialisation matérielle
| |
− | * les scripts chargeant les modules kernel
| |
− |
| |
− | Très bien, enlevons, mais d'abord, quels sont les scripts lancé au démarrage. La réponse pourrait être simple,
| |
− | c'est les script rc du système V et c'est marre.
| |
− |
| |
− | Oui mais, avec Squeeze, Debian introduit 2 changements importants dans ces scripts:
| |
− | # il existe maintenant 2 modes de démarrage (classique systemV et "makefile like" avec startpar)
| |
− | # même dans le mode classique, (rcN.d/[KS]XYscript.sh) les numéros d'execution (le XY) ne sont plus
| |
− | forcément figés, ils sont calculé par la commande "insserv". L'installation d'un paquet peut donc
| |
− | potentiellement faire changer l'ordre de démarrage.
| |
− |
| |
− | Restons calme, il s'agit de machine virtuelles, donc l'ordre d'exécution des scripts de démarrage
| |
− | est moins critique que sur une machine physique.
| |
− | Une machine physique doit savoir jongler avec des trucs comme: j'ai besoin de monter un volume raid,
| |
− | mais les binaires qui me permettront de le manipuler se trouve sur le volume raid en question...
| |
− | C'est précisément dans ce genre de cas que l'ordre d'exécution des scripts de démarrage est critique
| |
− | et que l'utilisation d'initrd et des modules noyau est indispensable.
| |
− |
| |
− | Sur une machine virtuelle on va essentiellement lancer des applicatifs. Lancer apache longtemps avant
| |
− | la base de donnée sur laquelle il va travailler n'est pas une bonne idée, mais ça reste (la plupart
| |
− | du temps) plus une gêne au démarrage qu'un plantage pur et simple.
| |
− |
| |
− | Bref, revenons à ces scripts de démarrage qu'il faut élaguer:
| |
− | # Quel est le type de démarrage ?
| |
− | * Lenny -> sysV
| |
− | * Squeeze:
| |
− | ** si CONCURRENCY=none dans /etc/default/rcS ou si /etc/init.d/.legacy-bootordering existe -> sysV
| |
− | ** sinon, si les fichiers /etc/init.d/.depend.{boot,start,stop} existent et ne sont pas vide -> "startpar" version "makefile"
| |
− | ** tout les autres cas -> sysV
| |
− |
| |
− | Voir le détail sur l'ordre d'exécution des scripts de démarrage [[script_rc_debian]]
| |
− |
| |
− | <pre>
| |
− | Attention le tableau suivant est encore en développement
| |
− | </pre>
| |
− |
| |
− | {| border="1"
| |
− | !|
| |
− | Script /etc/init.d
| |
− | !|
| |
− | Lenny/Squeeze
| |
− | |-
| |
− | !|
| |
− | a désactiver
| |
− | absolument
| |
− | ||
| |
− | * '''udev''' (masque /dev avec rien)
| |
− | * '''umountroot''' (dans le cas d'un montage dedie au lxc, peut remonter celui-ci en read-only)
| |
− | |-
| |
− | !|
| |
− | à garder
| |
− | ||
| |
− | * '''networking''' (dans lxc, la configuration réseau se fait surtout dans l'invité)
| |
− | * '''sendsigs'''
| |
− | * '''killproc'''
| |
− | * '''single'''
| |
− | * '''rmnologin'''
| |
− | * '''mountall-bootclean.sh''' (nettoie /tmp/ /var/run/ /var/lock/) Sous Squeeze, ajouter un /etc/insserv/override coupant la dépendance à mountall ou utilisez '''insserv -f -r''' pour forcer la suppression du script
| |
− | * mtab.sh (met a jour la mtab)
| |
− | * '''procps''' (permet de configurer sysctl - ce qui est possible avec lxc)
| |
− | * '''mountdevsubfs''' (permet de monter /dev/shm sous forme d'un tmpfs)
| |
− | |-
| |
− | !|
| |
− | à désactiver
| |
− | (ca fait moins d'erreurs et ca démarre plus vite)
| |
− | ||
| |
− | * Dans quasiment toutes les images (vserver, debootstrap, etc.)
| |
− | ** '''hwclock.sh'''
| |
− | ** '''hwclockfirst.sh'''
| |
− | ** '''checkfs'''
| |
− | ** '''checkroot'''
| |
− | ** '''mountall.sh'''
| |
− | ** '''mountkernfs'''
| |
− | ** '''mountnfs.sh'''
| |
− | ** '''mountnfs-bootclean'''
| |
− | ** '''mountoverflowtmp'''
| |
− | ** '''umountfs'''
| |
− | ** '''umountnfs.sh'''
| |
− | ** '''umountroot'''
| |
− | * Plutôt rencontré dans le cas d'une conversion de machine native
| |
− | ** '''lvm2'''
| |
− | ** '''udev'''
| |
− | ** '''udev-mtab'''
| |
− | ** '''fixudev'''
| |
− | ** '''module-init-tool'''
| |
− | ** '''hdparm'''
| |
− | ** '''fuse'''
| |
− | * Plutôt dans le cas d'une machine avec serveur X
| |
− | ** '''kbd'''
| |
− | ** '''keyboard-setup'''
| |
− | ** '''keymap.sh'''
| |
− | ** '''lm-sensor'''
| |
− | |}
| |
− |
| |
− | === comment enlever les scripts au démarrage ===
| |
− |
| |
− | Voila ma methode:
| |
− |
| |
− | * Sous Lenny,
| |
− | ** je crée tout d'abord un répertoire '''/etc-before-lxc'''
| |
− | ** puis je déplace les scripts visés de '''/etc/rc?.d''' a '''/etc-before-lxc/rc?.d'''. Cela permet de restaurer facilement un script sans changer l'ordre ni le runlevel (c'est le nom du lien symbolique qui contient cette information).
| |
− | ** UPDATE: eviter de supprimer/deplacer les fichiers dans /etc/init.d/ car un apt-get dist-upgrade va verifier que certain script existent (mountall, mountnfs.sh, umountroot etc...)
| |
− |
| |
− |
| |
− | # Creation des repertoires cible
| |
− | for RL in S 0 1 2 3 4 5 6 ; do mkdir -p "/etc-before-lxc/rc${RL}.d" ; done
| |
− |
| |
− | # deplacement des liens symboliques dans /etc-before-lxc
| |
− | for SRV in udev umountroot hwclock.sh hwclockfirst.sh checkfs checkroot \
| |
− | mountall.sh mountkernfs mountnfs.sh mountnfs-bootclean mountoverflowtmp \
| |
− | umountfs umountnfs.sh lvm2 udev udev-mtab fixudev module-init-tool hdparm \
| |
− | fuse kbd keyboard-setup keymap.sh lm-sensor
| |
− | do for ISRV in /etc/rc?.d/???${SRV} ; do [ -f $ISRV ] && mv "$ISRV $(echo $ISRV | sed 's/etc/etc-before-lxc/')" ; done ; done
| |
− |
| |
− |
| |
− |
| |
− | * Sous Squeeze, j'opte plutôt pour '''insserv''':
| |
− | ** je retire le script visé: '''insserv -f -r ''' ''<script1>...<scriptN>''
| |
− | ** on peut aussi déplacer les scripts dans /etc/init.disabled (mais c'est facultatif)
| |
− | ** pour restaurer, j'execute '''insserv script''' voire '''insserv -f script'''
| |
− |
| |
− | pour éviter d'utiliser l'option ''force'' '''-f''' d'insserv, il suffit de recopier l'entête du script incriminé dans '''/etc/insserv/overrides/''' et d'en supprimer les dépendances obligatoires: '''Required-Start:''' ''<vide>''
| |
− | -> Vous n'avez ainsi pas touché aux scripts initiaux, et vous avez toujours la possibilité de revenir aux dépendances initiales.
| |