Wie Sie wahrscheinlich wissen, wird dieser Dienst standardmäßig aktiviert und automatisch gestartet, wenn Sie ein Paket auf einem Debian- oder Ubuntu-basierten System installieren, wenn das Paket einen Dienst enthält.
Das ist ein Problem für mich.
Ich musste Vorlagen zum Erstellen von LXC-Containern verwalten. Es gibt mehrere Container, die jeweils einer Debian- oder Ubuntu-Version entsprechen. (Es gibt auch Red Hat-basierte Container, die hier jedoch nicht relevant sind.)
/var/lib/libvirt/filesystems/debian6_template
/var/lib/libvirt/filesystems/debian7_template
/var/lib/libvirt/filesystems/ubuntu1004_template
/var/lib/libvirt/filesystems/ubuntu1204_template
Gelegentlich stelle ich fest, dass die Vorlagen ein fehlendes Paket haben oder eine andere Änderung benötigen, sodass ich mich in sie einarbeiten werde, um das Paket zu installieren. Wenn ich das tue, werden leider mehrere Kopien des Paketdienstes ausgeführt!
Ich habe zum Beispiel festgestellt, dass die Vorlagen keinen Syslog-Daemon haben, also habe ich einen installiert:
for template in /var/lib/libvirt/filesystems/{debian,ubuntu}*_template; do
chroot $template apt-get install rsyslog
done
Und schnell mit vier Kopien von rsyslog beendet. Ganz zu schweigen von zwei Kopien von exim4. Hoppla!
Ich habe irgendwo gelesen (obwohl ich es jetzt nicht wieder finde), dass es keine Dienste starten soll, wenn es in einer Chroot läuft, aber das passiert hier eindeutig nicht.
Ein potenziell realisierbarer böser Hack erfordert das vorübergehende Ersetzen der verschiedenen Befehle, mit denen die Dienste tatsächlich gestartet werden, z. B. start-stop-daemon
und initctl
, obwohl dies viel mehr Arbeit ist, als ich eigentlich wollte. Wenn ich aber keine andere Wahl habe ...
Die ideale Lösung wäre hier, wenn Debian-basierte Systeme diesen Mist nicht mehr machen, aber wenn dies nicht gelingt, vielleicht eine undurchsichtige oder undokumentierte Befehlszeilenoption für apt-get
?
Falls es nicht klar war, möchte ich alles, was mit der Verwaltung der Vorlagen zu tun hat, nach Möglichkeit außerhalb der Vorlagen belassen.
quelle
Du kannst tun:
Ich habe es nicht mit Chroot getestet, aber es sollte funktionieren. Zuerst wird die Umgebungsvariable RUNLEVEL gesetzt, sodass von apt-get initiierte Prozesse keine Dienste starten , da sie annehmen, dass das System im Einzelmodus ausgeführt wird. Da die Umgebung so geändert wird, wie es sich auf zukünftige Befehle auswirkt, muss die Shell beendet werden, wenn die geänderte Umgebung nicht mehr benötigt wird. Dies erfolgt durch den Befehl exit am Ende. Es kann sein , einige (selten?) Pakete , die nicht richtig im Single - Modus installiert werden sollen (aber AFAIK sollte dies in den meisten Fällen nicht Problem sein).
quelle
export RUNLEVEL=1
der wichtige Teil hier? Was genau bewirkt das?rsyslog
es eines der "seltenen" Pakete, die beim Versuch, auf diese Weise zu installieren, völlig in die Luft gejagt sind. Dies kann dennoch nützlich sein, sodass Sie die positive Bewertung behalten können :)