Esistono almeno tre modi "appropriati" per eseguire le operazioni di avvio in Ubuntu (supponendo che non si desideri semplicemente montarlo), elencati qui in ordine di preferenza decrescente:
/etc/init/*.conf
(Upstart)
/etc/init.d/*
(Sysvinit)
/etc/rc.local
(runlevel change script)
C'è anche la possibilità di usare le regole udev, ma sarà contorto. Lo sconsiglio. Lo script sysvinit è eccessivo per una cosa così piccola, quindi mi concentrerò sulle altre due opzioni. Lo script di modifica del runlevel è il più semplice (anche se il meno preferito), quindi inizierò da lì.
Il /etc/rc.local
file viene semplicemente eseguito dallo /etc/init.d/rc.local
script sysvinit, che (per impostazione predefinita) viene eseguito per ultimo quando si passa a un normale runlevel "on" (ad esempio quando si avvia normalmente, ma non quando si chiude o si passa alla modalità di ripristino). Per implementare la configurazione del dispositivo di avvio, basta aggiungerlo alla fine di /etc/rc.local
, supponendo che il file sia chiamato /srv/diskimage
e che si desidera utilizzare /dev/loop0
come dispositivo loop:
losetup /dev/loop0 /srv/diskimage
Questo è davvero tutto ciò che c'è da fare. Ovviamente, sostituisci i nomi dei file con quelli che funzionano meglio sulla tua configurazione.
Se vuoi essere un po 'più specifico a riguardo, puoi creare un processo Upstart per esso che lo configura una volta che il filesystem che lo contiene è stato montato. Un esempio sarebbe il seguente, supponendo che /srv
fosse il punto di montaggio contenente il tuo diskimage
file:
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
Questo dovrebbe essere abbastanza semplice da seguire concettualmente: la prima riga è solo un commento per i lettori umani, ed è istruzioni per Upstart di attendere fino al /srv
montaggio del filesystem, eseguire il processo losetup e considerarti finito quando il processo termina correttamente (un " compito ", al contrario di un servizio persistente). Basta mettere quei contenuti in un file corrispondente /etc/init/*.conf
. Vorrei scegliere /etc/init/losetup.conf
me stesso.
I vantaggi dei lavori Upstart rispetto /etc/rc.local
a una cosa così semplice sono piccoli ma importanti. In primo luogo, /etc/rc.local
è deprecato e il suo uso come un "sandbox disordinato per fare le cose" è visto di buon occhio da quasi tutti in questi giorni. Tra le altre ragioni per aggrottare le sopracciglia sul suo utilizzo, alcuni programmi che usano quel file sovrascriveranno semplicemente il contenuto ed è difficile riconciliare diversi script che devono andare nello stesso file. In secondo luogo, Upstart gestisce effettivamente il controllo delle dipendenze (assicurandosi che il filesystem sia montato per primo), quindi se c'è un problema con il montaggio del filesystem non lo faràprova a configurare il dispositivo loop .... ma una volta risolto e montato. Terzo, Upstart è molto più flessibile: ad esempio, è possibile che sia abbastanza intelligente da trovare un dispositivo loop inutilizzato ed "emettere" quel dispositivo loop per l'uso in altri lavori upstart, in modo simile a come abbiamo usato la variabile "MOUNTPOINT" in questo esempio sopra.
/etc/init.d/something
, o/etc/rc.local
, ma suggerisco di rimanere con qualsiasi metodo che funzioni.