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:31] markoit-wiki:proxmox:lxccontainer [2023/10/06 03:19] (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
Zeile 249: Zeile 265:
 <code bash> <code bash>
 chmod +x /Pool1/Save chmod +x /Pool1/Save
-</bash>+</code>
 Wenn wir den nächsten CT erstellen, steht nebst dem Orginal auch unser neues Template.tar.gz zur Verfügung. Im weiteren Verlauf werde ich ausschliesslich das eigene verwenden, dann muss ich nich jedes mal meine Pakete enspielen und die Konfig (dash, locale, tzdata, editor) sind auch bereits erledigt. Wenn wir den nächsten CT erstellen, steht nebst dem Orginal auch unser neues Template.tar.gz zur Verfügung. Im weiteren Verlauf werde ich ausschliesslich das eigene verwenden, dann muss ich nich jedes mal meine Pakete enspielen und die Konfig (dash, locale, tzdata, editor) sind auch bereits erledigt.
  
Zeile 257: Zeile 273:
 <code bash> <code bash>
 0 1 6 * * /Pool1/Save 0 1 6 * * /Pool1/Save
-</bash>+</code>
 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.1528194664.txt.gz · Zuletzt geändert: 2018/06/05 10:31 von marko