Il existe au moins trois façons "appropriées" de faire des choses de démarrage dans Ubuntu (en supposant que vous ne voulez pas simplement le monter), répertoriées ici par ordre décroissant de préférence:
/etc/init/*.conf
(Parvenu)
/etc/init.d/*
(sysvinit)
/etc/rc.local
(script de changement de niveau d'exécution)
Il y a aussi la possibilité d'utiliser les règles udev, mais ce sera compliqué. Je le déconseille. Le script sysvinit est exagéré pour une si petite chose, donc je vais me concentrer sur les deux autres options. Le script de changement de niveau d'exécution est le plus simple (bien que le moins préféré), donc je vais commencer par là.
Le /etc/rc.local
fichier est simplement exécuté par le /etc/init.d/rc.local
script sysvinit, qui est (par défaut) exécuté en dernier lors du passage à n'importe quel niveau d'exécution "activé" (par exemple lorsque vous démarrez normalement, mais pas lorsque vous arrêtez ou passez en mode de récupération). Pour implémenter la configuration du périphérique de démarrage, ajoutez simplement ceci à la fin de /etc/rc.local
, en supposant que votre fichier est appelé /srv/diskimage
et que vous souhaitez utiliser /dev/loop0
comme périphérique de boucle:
losetup /dev/loop0 /srv/diskimage
C'est vraiment tout ce qu'il y a à faire. Bien sûr, remplacez les noms de fichiers par ceux qui fonctionnent le mieux dans votre configuration.
Si vous voulez être un peu plus précis à ce sujet, vous pouvez créer pour lui un travail Upstart qui le configure une fois que le système de fichiers qui le contient a été monté. Un exemple serait le suivant, en supposant que /srv
c'était le point de montage contenant votre diskimage
fichier:
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
Cela devrait être assez simple pour suivre conceptuellement: la première ligne est juste un commentaire pour les lecteurs humains, et il s'agit d'instructions à Upstart d'attendre que le /srv
système de fichiers soit monté, d'exécuter le processus losetup et de vous considérer comme terminé lorsque le processus se termine avec succès (un " ", par opposition à un service persistant). Mettez simplement ces contenus dans un fichier correspondant /etc/init/*.conf
. Je choisirais /etc/init/losetup.conf
moi-même.
Les avantages des travaux Upstart par rapport /etc/rc.local
à une chose aussi simple sont petits mais importants. Tout d'abord, il /etc/rc.local
est obsolète, et son utilisation en tant que «bac à sable en désordre pour faire avancer les choses» est mal vue par presque tout le monde de nos jours. Entre autres raisons de froncer les sourcils sur son utilisation, certains programmes qui utilisent ce fichier écraseront simplement le contenu, et il est difficile de réconcilier différents scripts qui doivent aller dans le même fichier. Deuxièmement, Upstart gère en fait la vérification des dépendances pour vous (en vous assurant que le système de fichiers est monté en premier), donc s'il y a un problème lors du montage du système de fichiers, il ne le fera pas.essayez de configurer le périphérique de boucle .... mais le sera une fois que vous l'avez résolu et monté. Troisièmement, Upstart est beaucoup plus flexible: vous pouvez, par exemple, le faire être assez intelligent pour trouver un périphérique de boucle inutilisé et «émettre» ce périphérique de boucle pour une utilisation dans d'autres travaux parvenus, comme nous avons utilisé la variable «MOUNTPOINT» dans cet exemple ci-dessus.
/etc/init.d/something
, ou/etc/rc.local
, mais je suggère de rester avec la méthode qui fonctionne.