Es ist ja nun schon etwas her… da hab ich über mein initales Setup der LXC Container (ja ich weiss, das ist wie HIV Virus sagen) gebloggt. Jedenfalls hat sich mein Setup, wie die Tools mittlerweile weiterentwickelt und Dinge haben sich geändert.
LXC Directory
Will man einen anderen Platz für seine LinuxContainer, dann kann man diesen
in /etc/default/lxc
definieren
# Directory containing the container configurations
CONF_DIR=/etc/lxc
# Start /etc/lxc/example.conf, /etc/lxc/autostart.conf, etc.
#CONTAINERS="example autostart container"
LXC_DIRECTORY="/home/lxc"
FHS Konformität ist was anderes… aber zwecks meiner Partitionierung und Verschlüsselungstechnisch macht das auf meinem Thinkpad einfach mehr Sinn.
Meine Container
Ich nutze meine Container teils als Sandboxing, teils um der Dependency Hell zu entkommen und Teils um Dingen nur bestimmte Ressourcen zuzuweisen. Das spiegelt sich auch in meiner Übersicht wieder:
/home/lxc
├── vm10-core
├── vm11-stable
├── vm12-testing
├── vm13-sid
├── vm14-experimental
├── vm20-redis
├── vm21-matomat
├── vm22-bind
└── vm25-graylog2
vm10 ist eine Art Management VM. Hostet verschiedene Dinge. vm{11..14} sind dabei meine Testcases für jeden Kanal von Debian. Ab vm20 befinden sich dann meine Sandkästen zum spielen. Hier räume ich auch regelmäßig immer mal wieder auf und schmeisse Dinge weg.
Netze & DNS
Konvention ist alles. Die Ziffern nach vm kommen wie man sich vielleicht denken konnte nicht von ungefähr. Sie beinhalten das letzte Oktett der jeweiligen der IP des Containers
Innerhalb des 10.10.0.0/24 Netzes, dass über dnsmasq auch DHCP macht, regel ich “DNS” über /etc/hosts Einträge. Hier gibt schon bestrebungen das automatisch zu machen. Dauert aber noch.
# LXC Setup
10.10.0.10 vm10.lxc.local
10.10.0.11 vm11.lxc.local
10.10.0.12 vm12.lxc.local
10.10.0.13 vm13.lxc.local
10.10.0.14 vm14.lxc.local
10.10.0.20 vm20.lxc.local
10.10.0.21 vm21.lxc.local
10.10.0.22 vm22.lxc.local
10.10.0.25 vm25.lxc.local
und zur Erleichterung dann noch ein search lxc.local
in die /etc/resolv.conf
Cloning new Containers
Hier kommt wieder einmal raus, warum lxc m.E. noch nicht fertig ist. Es gibt
lxc-clone
. Hört sich gut an. Nur nicht wenn man das default Home
verändert hat. Mit der Ausgangsconfig
# mounts point
lxc.mount.entry=proc /home/lxc/vm11-stable-template/rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry=devpts /home/lxc/vm11-stable-template/rootfs/dev/pts devpts defaults 0 0
lxc.mount.entry=sysfs /home/lxc/vm11-stable-template/rootfs/sys sysfs defaults 0 0
Wird aus dem geclonten Container (lxc-clone -o vm11-stable-template -n vm12-testing-template
)
# mounts point
lxc.mount.entry=proc /home/lxc/vm11-stable-template/rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry=devpts /home/lxc/vm11-stable-template/rootfs/dev/pts devpts defaults 0 0
lxc.mount.entry=sysfs /home/lxc/vm11-stable-template/rootfs/sys sysfs defaults 0 0
lxc.utsname = vm12-testing-template
lxc.rootfs = /var/lib/lxc/vm12-testing-template/rootfs
Das Default Config File scheint hier keine Rolle zu spielen. Deshalb hab ich mir hier auch meine eigene Clone Komponente geschrieben, da kann ich auch gleich das richtige Netzwerk konfigurieren.
function vm_clone () {
if [ -z "$1" -o -z "$2" ] || [ ! -d "$LXC_DIRECTORY/$1" ]; then
echo "ERROR: non-correct usage - see help"
echo "ERROR: $LXC_DIRECTORY/$2 may exist or $LXC_DIRECTORY/$1 doesn't."
exit 3
fi
# Copy configuration
echo "INFO: Copying container..."
cp -a $LXC_DIRECTORY/$1 $LXC_DIRECTORY/$2
echo "INFO: Changing lxc config..."
sed -i "s/$1/$2/g" $LXC_DIRECTORY/$2/config
# ATTENTION!
# This requries a convention of vm$IP-name-of-vm
echo "INFO: Getting last octet from vmXX..."
OCTET=$(echo $2 | sed 's#vm\(..\).*#\1#')
echo "INFO: Making network config with 10.10.0.$OCTET..."
sed -i "s/address.*/address 10.10.0.$OCTET/" $LXC_DIRECTORY/$2/rootfs/etc/network/interfaces
}
mlxc 2.0
Außerdem hab ich viel an mlxc gebaut. Habe den gist aktualisiert.
Changelog
- VM stoppen
- Alle VMs stoppen
- Cloning
- Besseres Help
- Einheitlicher Output