"Müllcontainer"
Container für Anwendung, die große Mengen schwer zu pflegender Abhängigkeiten mitbringt
Pakete
Storage
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.
Vorlagen-Image für Debian erstellen
cd /var/lib/machines/
Debian Image erzeugen
debootstrap --include=systemd,dbus stable ./debian http://debian/debian
ln -sf ../../../etc/machine-id debian/var/lib/dbus/machine-id
> debian/etc/machine-id
mkdir /etc/systemd/nspawn
- /etc/systemd/nspawn/debian.nspawn
[Network]
VirtualEthernet=no
machinectl list-images
→ sollte Image mit NAME debian anzeigen
Container für Anwendung erzeugen
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
Sonstiges
Passwort setzen: 1)
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