Fabriquer et installer les binaires de SysVinit est assez simple. Il y a juste une petit manipulation à faire dans le fichier Makefile, situé dans le sous-répertoire src/. Dans les 4 dernières lignes, vous devez placer $(ROOT) juste devant /dev/initctl. Par exemple :
@ if [ ! -p /dev/initctl ]; then \ |
devient :
@ if [ ! -p $(ROOT)/dev/initctl ]; then \ |
Le fichier spécial initctl est un moyen de communication avec init. Par exemple, la page de manuel d'init indique que ce fichier doit être utilisé de préférence au signal SIGPWR pour demander à init d'arrêter le système lorsque l'alimentation électrique à basculé sur batterie suite à une panne de courant. Cette manipulation permet de s'assurer que ce fichier se trouvera dans le système cible, et non dans le système source.
Une fois que c'est fait, placez-vous dans le sous-répertoire src, et entrez :
make ROOT=/mnt/cible make install |
Il existe aussi beaucoup de scripts associés à init. Il y a des scripts d'exemple fournis dans le paquet SysVinit, qui fonctionnent bien. Mais vous devez les installer manuellement. Ils sont rangés hiérarchiquement sous debian/etc dans l'arborescence du code source. Vous pouvez recopier toute cette hiérarchie dans le répertoire etc du système cible, avec une commande du style cd ../debian/etc; cp -r * /mnt/cible/etc. Évidement, vous voudrez les examiner avant de les recopier.
Tout est désormais en place pour permettre au noyau cible de lancer init au redémarrage. Le problème, cette fois, viendra des scripts qui ne pourront être exécutés car bash ne sera pas là pour les interpréter. init tentera également de lancer des getty, qui sont eux aussi inexistants. Redémarrez le système, et assurez-vous que tout le reste fonctionne correctement.