Migrieren unprivilegierter LXC-Container

vorhergehende Artikel in: Linux Virtualisierung
13.01.2023

Hauptsächlich zu meiner Erinnerung...

Ich schreib das hier mal auf, damit ich beim nächsten Mal sofort weiß, wie man das macht... Hauptgrund für die Art und Weise, die ich hier vorstellen möchte war, dass ich einen meiner Server entlasten wollte, dessen Massenspeicherfüllstand sich gefährlich auf 90% zu bewegte. Aus diesem Grund war auch ein einfaches Einpacken per tar nicht möglich - das entstehende Archiv hätte nicht mehr auf den Massenspeicher gepasst.

Also entschied ich mich für die direkte Variante: Transparentes Verpacken mittels tar und senden des Archivstreams per ssh zum Zielrechner, wo das Archiv transparent aus der Standardeingabe sofort wieder entpackt wird. Das Kommando dafür lautet:

sudo tar -C ~/.local/share/lxc/ -cpf - <container_name> | \
pv | \
ssh -Y <remote_user>@<target_host> \
"SUDO_ASKPASS=<path_to>/ssh-askpass sudo -A tar --same-owner -C /home/<remote_user>/.local/share/lxc -xf -"

Dabei ist <container_name> der Name des Containers, der zu migrieren ist (Vor der Migration ist dieser natürlich zunächst mittels lxc-stop -n <container_name> anzuhalten). <target_host> ist der Name des Rechners, auf den der Container migriert werden soll, <remote_user> ist der Nutzername des Nutzers, der den Container nach der Migration ausführen soll.

Nun zu den einzelnen Bestandteilen des Kommandos:

sudo tar -C ~/.local/share/lxc/ - sudo muss hier verwendet werden, da nicht alle Dateien in einem Container dem aktuellen Nutzer gehören, aber alle kopiert werden müssen. die Option -C legt das Verzeichnis fest, in dem tar arbeiten soll.

-cpf - - -p gibt hier an, dass die Permissions der Dateien und Verzeichnisse mit im Archiv übertragen werden sollen, -f - spezifiziert, dass das resultierende Archiv auf der Standardausgabe ausgegeben werden soll.

pv - realisiert eine rudimentäre Fortschrittsanzeige während des Prozesses

ssh -Y @ - die Option -Y gibt hier an, dass es ermöglicht werden soll, die GUI graphischer Anwendungen vom Zielrechner zu übertragen - das wird für die Anzeige der Authentifizierungsdialoge für das remote ausgeführte sudo zu ermöglichen.

SUDO_ASKPASS=/ssh-askpass sudo -A - Hier wird abgegeben, welche Anwendung zur Abfrage der Authentifizierungsinformationen für sudo verwendet werden soll (muss auf <target_host> installiert sein) und - mittels -A - dass sudo einen askpass Agenten dafür benutzen soll.

tar --same-owner -C /home//.local/share/lxc - tar wird schließlich angewiesen, in welchem Verzeichnis es arbeiten soll und dass die Zuordnung zu Nutzern und Gruppen wiederhergestellt werden soll. Diese Option --same-owner ist auch der Grund, warum hier sudo benötigt wird!

-xf - - schließlich gibt an, dass ein auf der Standardeingabe verfügbare Archiv entpackt werden soll.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Neueste Artikel

  • Compartmentalization and Privilege Drop

    Eine Präsentation zum besseren Verständnis einiger Konzepte sicherer Softwareentwicklung

    Weiterlesen
  • OpenSSH PKI

    Ich habe ja bereits eine kleine Präsentation zum Thema PKI und OpenSSH verfasst - hier folgt nun - mit einigen Links zu externen Ressourcen zu diesem Thema angereichert - eine strukturierte Zusammenfassung diverser Use Cases und deren Lösung mit einer OpenSSH PKI

    Weiterlesen
  • Der Gumowski-Mira Attractor

    Und wieder habe ich mich mit einem System beschäftigt, das sich in die Themen Chaos und Fraktale oder Strange Attractors einordnen lässt.

    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.