Container für Anwendung, die große Mengen schwer zu pflegende Abhängigkeiten mitbringt
epel-release
installieren (fügt neues Repository hinzu)systemd-nspawn kann die Snapshot Features von Btrfs nutzen:
mkfs.btrfs /dev/???
Btrfs nach /var/lib/machines/ mounten:
mount /srv/machines.btrfs.img /var/lib/machines/ tail -n1 /proc/mounts >> /etc/fstab chmod 700 /var/lib/machines/
Bei RedHat basierten Distributionen gibt es keinen einfachen Weg, Btrfs zu nutzen. XFS oder Ext4 tun es auch, ist halt in manchen Szenarien langsamer.
cd /var/lib/machines/
Debian Image erzeugen
debootstrap --include=systemd,dbus stable /var/lib/machines/debian http://debian/debian
ln -sf ../../../etc/machine-id debian/var/lib/dbus/machine-id > debian/etc/machine-id
mkdir /etc/systemd/nspawn vim /etc/systemd/nspawn/debian.nspawn
[Network] VirtualEthernet=no
machinectl list-images
→ sollte debian anzeigen
machinectl clone debian etherpad
machinectl show-image etherpad
→ sollte Details zu dem neuen Image anzeigen
btrfs subvolume list /var/lib/machines
→ sollte subvolume „etherpad“ anzeigen
echo etherpad > etherpad/etc/hostname
machinectl start etherpad
machinectl status etherpad
→ container sollte laufen
machinectl shell etherpad /bin/bash
→ danach anwendungsspezifisch weiter, z.B. etherpad
Passwort setzen:
systemd-nspawn -D stretch passwd
SSH-Schlüssel hinein kopieren:
install -d -m 700 stretch/root/.ssh install -m 600 /home/nutzer24/.ssh/id_rsa.pub stretch/root/.ssh/authorized_keys
Netzwerk per DHCP:
cat <<EOF >> debian/etc/network/interfaces auto host0 iface host0 inet dhcp EOF
Container test1 starten:
tmux new -s test1 systemd-nspawn --template=debian --directory=test1 -M test1 --network-veth -b
DHCP-Server auf dem Host starten:
ip addr add 10.0.0.1/24 dev ve-test1 # per udev automatisieren? oder systemd.device? ip link set up dev ve-test1 dnsmasq -d --bind-dynamic --listen-address 10.0.0.1 --dhcp-range 10.0.0.10,10.0.0.20
ssh -i /home/nutzer24/.ssh/id_rsa 10.0.0.15 uname -a
Container test1 stoppen:
machinectl status test1 machinectl terminate test1
Image test1 entfernen:
machinectl show-image test1 machinectl remove test1