Ich denke, ich habe eine bessere Lösung gefunden als die derzeit hier vorgestellten. Zum einen, weil cgmanager, soweit ich das beurteilen kann, tot ist, zum anderen, weil sich meine Lösung nicht wie eine hackige Problemumgehung anfühlt, sondern zum größten Teil, weil diese Diskussion immer noch auftaucht, wenn nach einer Lösung für das Problem gesucht wird. Eigentlich ist es ziemlich einfach: Verwenden Sie den Systemd-Benutzermodus .
Zugegeben, wenn Sie systemd nicht verwenden, hilft diese Lösung nicht weiter. In diesem Fall würde ich Ihnen raten, herauszufinden, ob Ihr Init-System es nicht privilegierten Benutzern ermöglicht, Dienste beim Booten auszuführen und dies als Ausgangspunkt zu verwenden.
Verwenden des Systemd-Benutzermodus zum automatischen Starten nicht privilegierter lxc-Container
Ich gehe davon aus, dass Sie nicht privilegierte lxc-Container haben, die ordnungsgemäß funktionieren und die ausgeführt werden, lxc-autostart
wenn der Benutzer des Containers arbeitet. Wenn ja, gehen Sie wie folgt vor:
- Erstellen Sie die Datei
~/.config/systemd/user/lxc-autostart.service
in der Startseite des Benutzers, der über die lxc-Container verfügt:
[Unit]
Description="Lxc-autostart for lxc user"
[Service]
Type=oneshot
ExecStart=/usr/bin/lxc-autostart
ExecStop=/usr/bin/lxc-autostart -s
RemainAfterExit=1
[Install]
WantedBy=default.target
- Führen Sie dann als dieser Benutzer Folgendes aus:
systemctl --user enable lxc-autostart
(Beachten Sie, dass die --user
Option systemctl mitteilt, dass Sie es im Benutzermodus verwenden. Alle Dinge, die ich normalerweise mit systemctl, start, stop, statuc, enable usw. mache, funktionieren mit --user.)
- Führen Sie dann Folgendes aus, wobei
$user
der Name des Benutzers lautet, der über die lxc-Container verfügt:
sudo loginctl enable-linger $user
Dies ist erforderlich, damit systemd $user
beim Booten eine systemd-Benutzerinstanz für startet . Andernfalls würde im Moment nur eine $user
Anmeldung gestartet .
Für weitere Informationen würde ich die archlinux wiki systemd / timer Seite und die systemd Manpages empfehlen .
Zugriff auf die systemd-Instanz eines Benutzers als root
Sie können den systemd-Dienst eines Benutzers als root starten / stoppen / was auch immer. Dazu müssen Sie jedoch die XDG_RUNTIME_DIR
Umgebungsvariable festlegen . Angenommen, es $user
handelt sich um den Benutzer, auf dessen Instanz Sie zugreifen möchten, und um $uid
die UID. Auf diese Weise starten Sie den oben definierten lxc-autostart.service:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemctl --user start lxc-autostart
Sie können sogar systemd-run
beliebige Befehle als Benutzer so ausführen, dass lxc nicht beschädigt wird. Ich verwende die folgenden Befehle, um meine Container vor / nach der Sicherung zu stoppen / zu starten. Dabei $name
lautet der Name des lxc-Containers, der gesichert wird:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --wait lxc-stop -n $name
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --scope lxc-start -n $name
(Beachten Sie, dass ohne --wait
systemd-run nicht blockiert wird, bis der Container gestoppt wird.)