In Ubuntu gibt es mindestens drei "geeignete" Möglichkeiten, um Startup-Dinge zu erledigen (vorausgesetzt, Sie möchten sie nicht nur mounten), die hier in absteigender Reihenfolge aufgeführt sind:
/etc/init/*.conf
(Emporkömmling)
/etc/init.d/*
(sysvinit)
/etc/rc.local
(Runlevel Change Script)
Es gibt auch die Möglichkeit, udev-Regeln zu verwenden, diese sind jedoch kompliziert. Ich empfehle dagegen. Das Sysvinit-Skript ist für so eine kleine Sache zu viel des Guten, also werde ich mich auf die beiden anderen Optionen konzentrieren. Das Skript zum Ändern des Runlevels ist am einfachsten (wenn auch am wenigsten bevorzugt), also fange ich dort an.
Die /etc/rc.local
Datei wird einfach vom /etc/init.d/rc.local
sysvinit-Skript ausgeführt, das (standardmäßig) zuletzt ausgeführt wird, wenn Sie zu einem normalen Runlevel "on" wechseln (z. B. wenn Sie normal booten, aber nicht, wenn Sie herunterfahren oder in den Wiederherstellungsmodus wechseln). Um das Einrichten des Startgeräts zu implementieren, fügen Sie dies einfach am Ende von hinzu /etc/rc.local
, vorausgesetzt, Ihre Datei wird aufgerufen /srv/diskimage
und Sie möchten sie /dev/loop0
als Loop-Gerät verwenden:
losetup /dev/loop0 /srv/diskimage
Das ist wirklich alles was dazu gehört. Ersetzen Sie die Dateinamen natürlich durch die Namen, die für Ihr Setup am besten geeignet sind.
Wenn Sie etwas genauer darauf eingehen möchten, können Sie einen Upstart-Job dafür erstellen, der ihn einrichtet, sobald das Dateisystem, das ihn enthält, eingehängt wurde. Ein Beispiel wäre das Folgende, vorausgesetzt, dass /srv
es sich um den Einhängepunkt handelt, der Ihre diskimage
Datei enthält:
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
Dies sollte einfach genug sein, um es konzeptionell zu befolgen: Die erste Zeile ist nur ein Kommentar für den menschlichen Leser, und es enthält Anweisungen für Upstart, um zu warten, bis das /srv
Dateisystem bereitgestellt ist, den Prozess losetup auszuführen und sich als beendet zu betrachten, wenn der Prozess erfolgreich beendet wird (a " Task ", im Gegensatz zu einem Dienst, der persistent ist). Fügen Sie diese Inhalte einfach in eine Datei ein, die übereinstimmt /etc/init/*.conf
. Ich würde selbst wählen /etc/init/losetup.conf
.
Die Vorteile von Upstart-Jobs /etc/rc.local
für so eine einfache Sache sind klein, aber wichtig. Erstens /etc/rc.local
ist es veraltet und seine Verwendung als "unordentlicher Sandkasten, um Dinge zu erledigen" wird heutzutage von so ziemlich jedem missbilligt. Einige Programme, die diese Datei verwenden, können unter anderem den Inhalt überschreiben, und es ist schwierig, verschiedene Skripts zu synchronisieren, die in dieselbe Datei aufgenommen werden müssen. Zweitens erledigt Upstart die Abhängigkeitsprüfung für Sie (stellen Sie sicher, dass das Dateisystem zuerst gemountet ist). Wenn also Probleme beim Mounten des Dateisystems auftreten, wird dies nicht der Fall seinVersuchen Sie, das Loop-Gerät einzurichten, aber sobald Sie es aufgelöst und gemountet haben. Drittens ist Upstart wesentlich flexibler: Sie können beispielsweise festlegen, dass ein unbenutztes Loop-Gerät gefunden werden soll, und dieses Loop-Gerät zur Verwendung in anderen Upstart-Jobs "ausgeben", ähnlich wie wir es mit der Variablen "MOUNTPOINT" getan haben in diesem Beispiel oben.
/etc/init.d/something
oder gehen/etc/rc.local
, aber ich schlage vor, mit welcher Methode auch immer zu bleiben, die funktioniert.