• Und wer ist…?
  • Holiday Berichte
    • Urlaub Schottland 2013
    • Urlaub Griechenland 2013
  • Services
  • Kontakt/GnuPG

KOKOLOR.ES

Hier geht's einfach mal um alles und nichts!

virtualization

LXC Container starten nicht durch AppArmor

4. Oktober 2014 by Sebastian Leave a Comment

Ich habe heute mal meinen Server neugestartet, worauf ein paar LXC Container laufen. Nach dem Neustart weigerten sich aber alle Container automatisch oder manuell zu starten. Nachdem ich dann mal einen Container mit

lxc-start -n db -l info -o outfile

gestartet habe fand ich folgende Zeilen im outfile:

lxc-start 1412384089.536 ERROR    lxc_apparmor - lsm/apparmor.c:mount_feature_enabled:61 - Permission denied - Error mounting securityfs
      lxc-start 1412384089.536 WARN     lxc_apparmor - lsm/apparmor.c:apparmor_process_label_set:184 - Incomplete AppArmor support in your kernel
      lxc-start 1412384089.536 ERROR    lxc_apparmor - lsm/apparmor.c:apparmor_process_label_set:186 - If you really want to start this container, set
      lxc-start 1412384089.536 ERROR    lxc_apparmor - lsm/apparmor.c:apparmor_process_label_set:187 - lxc.aa_allow_incomplete = 1
      lxc-start 1412384089.536 ERROR    lxc_apparmor - lsm/apparmor.c:apparmor_process_label_set:188 - in your container configuration file

Wenn ich nun wie im outfile beschrieben, die Zeile lxc.aa_allow_incomplete = 1 in die Config des Containers einfüge startet dieser nun auch ohne zu murren.
Bei Google fand ich dazu auch direkt folgenden Eintrag auf der LXC Mailingliste. So wie ich es verstanden habe hat es was damit zu tun das ein paar Mount Restrictions von AppArmor nicht im Upstream Kernel enthalten sind. Wie ich das nun verstehe haben sie vorher die Container im ohne AppArmor Sicherung starten lassen und mit dem Config Flag werden diese nun mit Absicherung gestartet.

Bitte korrigiert mich wenn ich hier Mist schreibe, ich habs ehrlich gesagt noch nicht wirklich gecheckt, da ich mich mit AppArmor gar nicht auskenne und ich grad einfach nur müde bin. Es ist für mich immer nur ein Dienst gewesen der irgendwie immer mal dazwischen grätscht und das voll nervt. :D

Posted in: IT, Linux, Opensource Tagged: linux, lxc, ubuntu, virtualization

Container Virtualisierung mit LXC unter Debian

20. Februar 2014 by Sebastian 4 Comments

Mich interessiert das Thema rund um die Container Virtualisierung LXC seitdem ich durch Zufall über einen Vortrag von Thomas Krenn auf youtube gestolpert bin. Da hab ich mich immer mal ein bisschen zu informiert, aber hab irgendwie nie so wirklich mal selbst rumprobiert. Nach einem Beitrag über LXC in der iX 2/2014 juckte es mir dann doch gewaltig in den Fingern. Nochmal zur Erklärung was LXC überhaupt ist, für die die es nicht wissen:

LXC (LinuX Containers) ist ein leichtgewichtige Alternative zur Virtualisierung mit Hypervisoren. Besonders eignet es sich, wenn sehr viele Linux-Gäste auf einem Host laufen sollen oder für die Isolierung einzelner Anwendendungen auf einem Host. Sie erlauben eine bessere Ressourcenauslastung bei nahezu nativer Performance der Container. Außerdem sind sie wesentlich schlanker als ihre Hypervisor-Pendants. Gastssysteme werden als einfache Unterverzeichnisse realisiert, aus denen der Host jeweils eine isolierte chroot-Umgebung startet. Der Boot Zyklus eines Containers startet dabei erst beim Aufruf von /sbin/init. Alle unterhalb dieses Punktes existierenden Ressourcen wie der Kernel, teilen sich alle Container, weshalb es auch nicht möglich ist andere Betriebssysteme wie Windows als LXC-Gast zu starten.

Ich werde heute erstmal die Installation von LXC 1.0.0-rc3 auf Debian Wheezy und die erste Benutzung niederschreiben. Es gibt zwar schon eine gute Anzahl von Anleitungen, überwiegend für Ubuntu – aber das war mir zu leicht mit ppa und so. Die Anleitungen für Debian waren irgendwie größten Teils nicht vollständig oder für ältere Versionen von LXC. Deshalb habe ich mal alles mitgeschrieben, was ich so gemacht habe und im Anschluss ist es mir auch gelungen innerhalb von 15 min das ganze lauffähig zu bekommen

Vorbereiten des Hosts

Installieren von Paketen die LXC benötigt, wobei bridge-utils optional ist, je nachdem für welche Netzwerkkonfiguration man sich entscheidet

apt-get install debootstrap bridge-utils

Als nächstes muss man das cgroup Dateisystem automatisch einhängen lassen. Dazu muss die /etc/fstab um folgende Zeile ergänzt werden

cgroup  /sys/fs/cgroup  cgroup  defaults  0   0

Um den Memory cgroup support (CONFIG_CGROUP_MEM_RES_CTLR) und Swap cgroup support (CONFIG_CGROUP_MEM_RES_CTLR_SWAP) zu aktivieren, welcher zwar seit Kernel 2.6.39-bpo60-2 integriert ist, aber per default deaktiviert ist, muss man folgendes in der /etc/default/grub ändern, bzw. ergänzen

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

Anschließend den grub updaten

update-grub

und einen Neustart.

Kompilieren

Als erstes mal git installieren

apt-get install git

und anschließend die Sourcen runterladen

git clone git://github.com/lxc/lxc

Noch ein paar Pakete zum kompilieren installieren

apt-get install build-essential automake pkg-config

Nun die autogen.sh im Ordner lxc ausführen, welche die configure Datei generiert

cd lxc/
./autogen.sh

Nochmal ein bzw. zwei zusätzliche Paket installieren, denn das Paket docbook2x wird nur benötigt falls ihr bei configure die Option für Manuals mit übergebt

apt-get install libcap-dev docbook2x

Jetzt sollte configure ohne Probleme durchlaufen. Ich habe noch ein paar zusätzliche Optionen für Pfade übergeben, aber die kann man sich auch im Help von configure durchlesen

./configure --enable-doc --with-init-script=sysvinit --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib --includedir=/usr/include --datarootdir=/usr/share --sysconfdir=/etc --localstatedir=/var
  • –enable-doc – Erstell manpages
  • –with-init-script=sysvinit – Welche Typen von initscripts installiert werden sollen

Sollte das geklappt haben kann man den Spass nun kompilieren und installieren

make
make install

Anlegen eines ersten Containers mit Netzwerk

Sollte die Installation ohne Probleme durchgelaufen sein ist LXC installiert und es kann mit lxc-checkconfig geprüft werden ob alle Voraussetzungen erfüllt sind

lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.2.0-4-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Einen neuen Container legt man wie folgt an

lxc-create -n c1 -t debian

-n gibt dabei den Namen des Containers und -t das Template (verfügbare Templates liegen unter /usr/share/lxc/templates) an. In früheren Versionen ist das Debian Template übrigens kaputt (z.B. Version im Repository), dafür kann man dann dieses Template verwenden.
Das erste anlegen eines Containers dauert etwas, da er erstmal die Dateien herunter laden muss. Das anlegen künftiger Container geschieht in wenigen Sekunden, da die Dateien lediglich aus dem Cache in den Ordner des neuen Containers gesynct werden.
Standartmäßig wird mit diesem Befehl im Verzeichnis /var/lib/lxc ein Unterverzeichnis mit dem Containernamen erstellt, welcher die Containerkonfiguration und das rootfs enthält. In unserem Fall also /var/lib/lxc/c1. Die config Datei sollte wie folgt aussehen

# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template:
# For additional config options, please look at lxc.conf(5)
lxc.network.type = empty
lxc.rootfs = /var/lib/lxc/c1/rootfs

# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf

# Container specific configuration
lxc.mount = /var/lib/lxc/c1/fstab
lxc.utsname = c1
lxc.arch = amd64

Als Netzwerktyp ist derzeit noch empty angegeben, da wir aber eine Netzwerkverbindung haben wollen ergänzen wir die Datei mit folgenden Einträgen

# Network configuration
lxc.network.name = veth0           # Name des Interfaces im Container
lxc.network.flags = up
lxc.network.link = br0             # Bridge Interface auf dem Host
lxc.network.veth.pair = veth0-sid  # Interface auf dem Host welches benutzt wird um LXC zum Host zu connecten
lxc.network.ipv4 = 192.168.1.1/24  # IP Adresse des Containers
lxc.network.ipv4.gateway = 192.168.1.254

In der Zeile lxc.network.type muss noch das empty durch veth ersetzt werden. Andere Beispiele liegen unter /usr/share/doc/lxc/examples.
Meine /etc/network/interfaces auf dem Host habe ich dann wie folgt angepasst:

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
        up iptables -t nat -F POSTROUTING
        up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

auto br0
iface br0 inet static
      address 192.168.1.254
      netmask 255.255.255.0
      bridge_ports none

Nun muss noch das IPv4 Forwarding aktiviert werden. In der Datei /etc/sysctl.conf folgende Zeile hinzufügen oder die vorhandene suchen und unkommentieren (mir fällt grad das Wort nicht ein :D )

net.ipv4.ip_forward=1

Mit diesen Einstellungen sollte der Container mit der Außenwelt kommunizieren können. Um das zu testen tut man folgendes

sysctl net.ipv4.ip_forward=1
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ifup br0

lxc-start -n c1 -d

-n gibt den Namen des Containers an und -d das er als Daemon laufen soll. Mit dem Befehl

lxc-console -n c1

kann man sich nun mit dem Container verbinden und auf diesem mit root root einloggen.

So das soll es erstmal gewesen sein. Ich werde denke mal in Zukunft weiter berichten, wenn ich damit noch mehr rummgespielt hab.

Quellen: Debian Wiki – LXC, coderwall – Clean LXC + NAT configuration (Debian Wheezy)

Posted in: Allgemein, IT, Linux, Opensource Tagged: cgroup, debian, linux, lxc, virtualization, wheezy

LVM: Merge Snapshot

29. August 2013 by Sebastian Leave a Comment

Ich hatte gestern das erste mal beim Mergen einen LVM Snapshots das Phänomen das er mir sagte:

Can't merge over open origin volume
Merging of snapshot lv_XXXX-snapshot will start next activation.

Ok, da die VM noch läuft, welche das LVM nutzt, dacht ich mir fährste die mal runter. Sonst hab ich die auch immer nur im abgeschalteten Zustand gemergt. Nun tauchte auch ein neues Attribut auf wenn ich lvs aufrief:

LV                          VG   Attr   LSize   Origin  Snap%  Move Log Copy%  Convert
XXXX                        vg   Owi-a-  25,00g

Die steht für (O)rigin with merging snapshot wenn man im Manual nachliest. Da es kurz vor Feierabend war und ich es auch falsch übersetzte dacht ich mir: „Ok es mergt, lassen wirs mal laufen.“ Heute morgen, wen wundert, Status unverändert. Nach kurzem googlen fand ich auch die Lösung. Man muss das betroffene Volume einmal deaktivieren und aktivieren, was man wie folgt tut:

root@virt:~# lvchange -an /dev/mapper/XXXX
root@virt:~# lvchange -ay /dev/mapper/XXXX

Nun sieht die Ausgabe von lvs auch schon vertrauter aus:

LV                          VG   Attr   LSize   Origin  Snap%  Move Log Copy%  Convert
XXXX                        vg   Owi-a-  25,00g         4,56

Die Prozentzahl unter Snap% wird nun immer kleiner, woran man erkennt das es mergt.

Posted in: Arbeit, IT, Linux, Opensource Tagged: kvm, linux, lvm, virtualization

Social Shit

Fediverse PGP-Key XMPP Matrix Git Github

Kategorien

  • Allgemein
  • Android
  • Anime
  • Arbeit
  • Entertainment
  • Games
  • Handy
  • IT
  • Linux
  • Monitoring
  • Netzwerk
  • Opensource
  • Privates
  • QEK Junior
  • Rattis
  • Showtime Ost
  • Showtime West
  • Windows

Interessantes

  • Lainblog
  • chr.istoph's Blog
  • World of Edolas
  • 5222.de

Archive

  • Juni 2023
  • August 2019
  • Oktober 2018
  • März 2018
  • Dezember 2017
  • Juli 2017
  • Juni 2017
  • Mai 2017
  • März 2017
  • Februar 2017
  • Januar 2017
  • Dezember 2016
  • November 2016
  • September 2016
  • August 2016
  • Juli 2016
  • Juni 2016
  • Mai 2016
  • April 2016
  • März 2016
  • Februar 2016
  • Dezember 2015
  • November 2015
  • September 2015
  • August 2015
  • Juli 2015
  • Juni 2015
  • Mai 2015
  • April 2015
  • März 2015
  • Februar 2015
  • November 2014
  • Oktober 2014
  • August 2014
  • Juli 2014
  • Juni 2014
  • Mai 2014
  • April 2014
  • März 2014
  • Februar 2014
  • Dezember 2013
  • November 2013
  • Oktober 2013
  • September 2013
  • August 2013
  • Juli 2013
  • April 2013
  • März 2013
  • Februar 2013
  • Januar 2013
  • Dezember 2012
  • November 2012
  • September 2012
  • Juli 2012
  • Juni 2012
  • Mai 2012
  • Februar 2012
  • Januar 2012

Tags

android anime apt bash bugs debian freifunk freifunk-aachen gnome hardware htpc kernel linux lucid lxc mdadm mint monitoring mysql network nginx openwrt outdoor package pgp php postgres precise raid redmine squeeze telekom testing trusty ubuntu virtualization vserver wheezy windows xbmc xenial xorg xubuntu zabbix zarafa

Datenschutzerklärung | Impressum

Copyright © 2025 KOKOLOR.ES.

Omega WordPress Theme by ThemeHall