Benutzer-Werkzeuge

Webseiten-Werkzeuge


it-wiki:proxmox:lxccontainer

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
it-wiki:proxmox:lxccontainer [2018/06/05 10:32] – [Alternative feine Variante] markoit-wiki:proxmox:lxccontainer [2025/06/22 09:46] (aktuell) – [LXC Container Template erstellen] marko
Zeile 1: Zeile 1:
 ====== LXC Container ====== ====== LXC Container ======
 +* [[usb_passthrough|USB Device an Container durchreichen]]\\
 +* [[hdd_passthrough|Festplatte an Container durchreichen]]\\
 +* [[docker_in_lxc|Docker in einem LXC Container betreiben]]\\
 +* [[apache_private_tmp|Apache permission denied]]
 +===== Tastaturlayout und Locale setzen nach lxc Template installation =====
 +<code bash>
 +dpkg-reconfigure locales
 +</code>
  
 ===== LXC Container Template erstellen ===== ===== LXC Container Template erstellen =====
Zeile 11: Zeile 19:
 rm /etc/resolv.conf rm /etc/resolv.conf
 rm /etc/hostname</code> rm /etc/hostname</code>
 +Puppet Agent Zertifikat bereinigen
 +<code bash>
 +On the master:
 +  puppet cert clean template.tuxnet.lan
 +On the agent:
 +  1a. On most platforms: find /var/lib/puppet/ssl -name template.tuxnet.lan.pem -delete
 +  1b. On Windows: del "\var\lib\puppet\ssl\certs\template.tuxnet.lan.pem" /f
 +</code>
   - Container verlassen   - Container verlassen
   - In der Proxmox Webgui alle Netzwerkinterfaces des Containers entfernen   - In der Proxmox Webgui alle Netzwerkinterfaces des Containers entfernen
-  - Über die Webgui ein Backup vom Container erstellen\\ Mode: Stop\\ Compression: Gzip\\ Die Compression muss Gzip sein weil die Proxmox Webgui das Template später sonst nicht anzeigt+  - Über die Webgui ein Backup vom Container erstellen\\ Mode: Stop\\ Compression: ZSTD\\ Die Compression muss Gzip sein weil die Proxmox Webgui das Template später sonst nicht anzeigt
   - Per SSH auf dem Proxmox Host in den allgemeinen Container Backupordner wechseln\\ Standardmäßig **/var/lib/vz/dump/**\\ In dem Ordner liegt jetzt das Backup als .tar.gz mit .log File   - Per SSH auf dem Proxmox Host in den allgemeinen Container Backupordner wechseln\\ Standardmäßig **/var/lib/vz/dump/**\\ In dem Ordner liegt jetzt das Backup als .tar.gz mit .log File
   - Das .tar.gz File muss in den richtigen Ordner für Container Templates geschoben werden\\ Standardmäßig **/var/lib/vz/template/cache/[Templatename].tar.gz**\\ Der Templatename kann frei vergeben werden. Was hier eingetragen wird, wird später in der Webgui angezeigt. Ich benenne es immer nach dem Schema [distribution-version_templatedatum_architecture].tar.gz Also z.B. **ubuntu-16.04-standard_2017-05-17_amd64.tar.gz**   - Das .tar.gz File muss in den richtigen Ordner für Container Templates geschoben werden\\ Standardmäßig **/var/lib/vz/template/cache/[Templatename].tar.gz**\\ Der Templatename kann frei vergeben werden. Was hier eingetragen wird, wird später in der Webgui angezeigt. Ich benenne es immer nach dem Schema [distribution-version_templatedatum_architecture].tar.gz Also z.B. **ubuntu-16.04-standard_2017-05-17_amd64.tar.gz**
Zeile 260: Zeile 276:
 Dieser CT wird natürlich nicht automatisch gestartet!  Dieser CT wird natürlich nicht automatisch gestartet! 
 Und wir lassen ihn auch ausgeschaltet. Und wir lassen ihn auch ausgeschaltet.
 +
 +==== Weitere Alternative ====
 +
 +=== Software (nach)installieren ===
 +
 +Ich gehe hier davon aus, dass folgende Pakete bereits in einem der vorherigen Schritte Einzug auf dem Server gefunden haben:
 +  * mdadm
 +  * lvm2
 +  * xfsprogs
 +
 +<code>
 +# aptitude install lxc
 +</code>
 +
 +=== logisches Volume erstellen ===
 +
 +Ich gehe hier davon aus, dass folgende Voraussetzungen bereits in einem der vorherigen Schritte konfiguriert wurden: 
 +  * eine Netzwerkbrücke (z. B. "br0")
 +  * ein Software-RAID1 (z. B. "/dev/md3") als pysikalisches Volume für LVM2
 +  * eine Volume-Gruppe für logische Volumen (z. B. "sys")
 +
 +<code>
 +# lvcreate -L2G -n lxc_template sys
 +</code>
 +
 +=== Dateisystem erstellen und einhängen ===
 +
 +<code>
 +# mkfs.xfs -L template /dev/sys/lxc_template
 +# mkdir /var/lib/lxc/template
 +# mount /dev/mapper/sys-lxc_template /var/lib/lxc/template
 +</code>
 +
 +=== LinuX Container erstellen ===
 +
 +<code>
 +# lxc-create -n template -t debian -- -r jessie
 +</code>
 +
 +In der letzten Ausgabe des Befehls, erfährt man das root-Passwort für den Container.
 +
 +Wer mag, kann es sich aufschreiben, in wenigen Minuten werden wir es jedoch selber "von außen" ändern.
 +
 +=== LXC anpassen ===
 +
 +== Netzwerkkonfiguration ==
 +
 +<code>
 +# cat <<EOF >> /var/lib/lxc/template/config
 +lxc.network.type = veth
 +lxc.network.flags = up
 +lxc.network.link = br0
 +lxc.network.ipv4 = 192.168.0.254/24
 +lxc.network.ipv4.gateway = 192.168.0.1
 +lxc.network.hwaddr = 02:34:56:78:90:fe
 +EOF
 +</code>
 +
 +== Debian Repository ==
 +
 +<code>
 +# cat <<EOF > /var/lib/lxc/template/rootfs/etc/apt/sources.list
 +deb http://ftp.de.debian.org/debian jessie main contrib non-free
 +deb http://ftp.de.debian.org/debian jessie-updates main contrib non-free
 +deb http://security.debian.org/ jessie/updates main contrib non-free
 +EOF
 +</code>
 +
 +=== (mein persönliches) "sauberes" Update-/Upgrade-Skript ===
 +
 +<code>
 +# wget https://raw.githubusercontent.com/casualscripter/debian-stuff/master/usr/local/sbin/clean_upgrade \
 +  -O /var/lib/lxc/template/rootfs/usr/local/sbin/clean_upgrade
 +# chown root:root /var/lib/lxc/template/rootfs/usr/local/sbin/clean_upgrade
 +# chmod 700 /var/lib/lxc/template/rootfs/usr/local/sbin/clean_upgrade
 +</code>
 +
 +== /etc/hosts ==
 +
 +<code>
 +# echo "192.168.0.254 template.domain template" > /var/lib/lxc/template/rootfs/etc/hosts.tmp
 +# cat /var/lib/lxc/template/rootfs/etc/hosts" >> /var/lib/lxc/template/rootfs/etc/hosts.tmp
 +# mv /var/lib/lxc/template/rootfs/etc/hosts{.tmp,}
 +</code>
 +
 +== /root/.bashrc ==
 +
 +<code>
 +# mv /var/lib/lxc/template/rootfs/root/.bashrc{,_DEBIAN}
 +# cp /var/lib/lxc/template/rootfs/etc/skel/.bashrc /var/lib/lxc/template/rootfs/root/.bashrc
 +</code>
 +
 +<code>
 +# sed 's/HISTSIZE=1000/&0/' /var/lib/lxc/template/rootfs/root/.bashrc > /var/lib/lxc/template/rootfs/root/.bashrc.tmp
 +# mv /var/lib/lxc/template/rootfs/root/.bashrc{.tmp,}
 +</code>
 +
 +<code>
 +# sed 's/HISTFILESIZE=2000/&0/' /var/lib/lxc/template/rootfs/root/.bashrc > /var/lib/lxc/template/rootfs/root/.bashrc.tmp
 +# mv /var/lib/lxc/template/rootfs/root/.bashrc{.tmp,}
 +</code>
 +
 +<code>
 +# sed 's/#force_color_prompt=yes/force_color_prompt=yes/' > /var/lib/lxc/template/rootfs/root/.bashrc.tmp
 +# mv /var/lib/lxc/template/rootfs/root/.bashrc{.tmp,}
 +</code>
 +
 +Die Zeile
 +<code>
 +  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
 +</code>
 +durch
 +<code>
 +  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\[\033[01;35m\](lxc)\[\033[01;31m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
 +</code>
 +ersetzten (z. B. mit "nano").
 +
 +<code>
 +# sed "s/#alias grep='grep --color=auto'/alias grep='grep --color=auto'/" > /var/lib/lxc/template/rootfs/root/.bashrc.tmp
 +# mv /var/lib/lxc/template/rootfs/root/.bashrc{.tmp,}
 +</code>
 +
 +<code>
 +# sed "s/#alias ll='ls -l'/alias ll='ls -lisa'/" > /var/lib/lxc/template/rootfs/root/.bashrc.tmp
 +# mv /var/lib/lxc/template/rootfs/root/.bashrc{.tmp,}
 +</code>
 +
 +<code>
 +# echo 'HISTTIMEFORMAT="%F %T "' >> /var/lib/lxc/template/rootfs/root/.bashrc
 +</code>
 +
 +== root-Passwort ändern ==
 +
 +<code>
 +# echo "Change password for root in the LXC template:"
 +# passwd -R /var/lib/lxc/template/rootfs
 +</code>
 +
 +== öffentlichen SSH-Schlüssel (ggf. erstellen und) integrieren ==
 +
 +Wenn man für root auf dem Host noch keinen SSH-Schlüsselpaar erzeugt hat, muss man es wie folgt nachholen:
 +<code>
 +# ssh-keygen -b 2048 -t rsa -N "" -f /root/.ssh/id_rsa
 +</code>
 +
 +Danach kopieren wir den öffentlichen Schlüssel in den LXC, damit wir uns später per SSH vom Host aus im Gast anmelden können:
 +<code>
 +# cp /root/.ssh/id_rsa /var/lib/lxc/template/rootfs/root/.ssh/authorized_keys
 +</code>
 +
 +===== LX Container convert privileged to unprivileged Container =====
 +<code>
 +vzdump 204 --exclude-path /var/spool/postfix/dev/random --exclude-path /var/spool/postfix/dev/urandom --dumpdir /mnt/pve/backupvm/dump/
 +pct restore 204 vzdump-lxc-204-2019_05_04-13_59_11.tar --storage pool2_ct --unprivileged
 +</code>
 +
 +\\
 +\\
 +\\
 + --- //[[marko.oldenburg@cooltux.net|Marko Oldenburg]] 2023/02/11 08:27//
it-wiki/proxmox/lxccontainer.1528194737.txt.gz · Zuletzt geändert: von marko