GNU/Linux >> LINUX-Kenntnisse >  >> Debian

So richten Sie virtuelle Container mit LXC- und Quota-Unterstützung unter Debian 8 ein

Quota-Unterstützung ist eine häufig nachgefragte Funktion in lxc. Das Linux-Dateisystemkontingent ist erforderlich, wenn Sie mehreren Benutzern Zugriff auf einen Container gewähren und steuern möchten, dass ein Benutzer nicht den gesamten Speicherplatz belegt. Quota wird auch für Webhosting-Server benötigt, z. mit ISPConfig 3, aus dem gleichen Grund:Eine Website soll nicht in der Lage sein, die gesamte Festplatte zu füllen. Dieses Howto zeigt Ihnen, wie Sie lxc verwenden können mit Festplattenkontingent mit qemu nbd mit einer qcow-Image-Datei auf Debian 8 .

Voraussetzungen

Um lxc zu verwenden, benötigen Sie die qemu-Dienstprogramme und das lxc-Paket selbst. Installieren Sie sie, indem Sie Folgendes aufrufen:

apt-get install lxc qemu-utils

Das Installationsprogramm fordert Sie auf, das Verzeichnis auszuwählen, in dem die lxc-Images der virtuellen Maschine später installiert werden. Dieses Verzeichnis sollte sich auf einer Partition mit viel freiem Speicherplatz befinden. Wenn Sie genug Platz in /var haben, akzeptieren Sie den Standardwert /var/lib/lxc, andernfalls wählen Sie ein freies Verzeichnis auf Ihrer größten Partition. Wenn Sie einen nicht standardmäßigen Pfad verwenden, stellen Sie sicher, dass Sie den Pfad in allen Befehlen und Konfigurationsdateien unten ändern.

Vorbereitung

Überprüfen Sie, ob das Kernel-Loop-Modul geladen ist mit:

lsmod | grep '^loop'

Wenn Sie kein Ergebnis erhalten, können Sie das Modul aktivieren, indem Sie Folgendes ausführen:

modprobe loop

Erstellen Sie die virtuelle Maschine

Jetzt können wir mit der Erstellung der VM beginnen. In diesem Tutorial werde ich Debian Jessie sowohl im Host als auch im Container verwenden, aber Sie können natürlich auch andere lxc-Vorlagen verwenden, z. g. Debian wheezy oder ubuntu.

lxc-create -B loop -t debian -n mydebianvm --fssize=20G -- -r jessie

Das -t Argument wählt das Haupt-Template -r aus entscheidet, welche Version verwendet wird. Um die Festplattengröße für die virtuelle Maschine festzulegen, können Sie --fssize ändern Streit. Angenommen, Sie möchten eine Festplatte mit 50 Gigabyte erstellen, Sie würden das Argument in --fssize=50G ändern .
Das Argument -n legt den Namen der VM fest. Ich habe mydebianvm verwendet in diesem Tutorial. Bitte ändern Sie den Namen in allen folgenden Befehlen entsprechend Ihrer Auswahl.

Da wir keine Raw-Image-Datei verwenden möchten, müssen wir das Disk-Image in das qemu qcow2 konvertieren Format. Dies geschieht durch den folgenden Befehl

qemu-img convert -O qcow2 /var/lib/lxc/mydebianvm/rootdev /var/lib/lxc/mydebianvm/rootdev.qcow2

Um später das Backup-Handling zu vereinfachen, erstellen wir ein Image-Datei-Set, d. e. eine zweite Datei, die alle Änderungen am Gerät aufzeichnet.

qemu-img create -f qcow2 -b /var/lib/lxc/mydebianvm/rootdev.qcow2 /var/lib/lxc/mydebianvm/rootdev-live.qcow2

Sie können jetzt die ursprüngliche Rohbilddatei löschen mit:

rm /var/lib/lxc/mydebianvm/rootdev

Netzwerkbrücke konfigurieren

Installieren Sie die Bridge-Dienstprogramme:

apt-get install bridge-utils

Öffnen Sie die Debian-Netzwerkkonfigurationsdatei /etc/network/interfaces in einem Editor

vim /etc/network/interfaces

und fügen Sie die folgenden Zeilen hinzu:

auto br0 
iface br0 inet static
     address 192.168.1.254
     netmask 255.255.255.0
     bridge_ports eth0
     bridge_stp off
     bridge_fd 2
     bridge_maxwait 20

Ersetzen Sie die Adresse und die Netzmaske durch Werte für Ihr lokales Netzwerk.

Aktivieren Sie dann die Netzwerkbrücke mit dem Befehl:

ifup br0

VM konfigurieren

Sichern Sie die alte Konfigurationsdatei:

mv /var/lib/lxc/mydebianvm/config /var/lib/lxc/mydebianvm/config_bak

Und erstellen Sie die Konfiguration für den Container:

vim /var/lib/lxc/mydebianvm/config

Und fügen Sie den folgenden Inhalt in die Datei ein:

lxc.rootfs = /var/lib/lxc/mydebianvm/rootfs
lxc.rootfs.options = usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

lxc.hook.pre-start = /var/lib/lxc/prestart-nbd.sh
lxc.hook.post-stop = /var/lib/lxc/poststop-nbd.sh

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

# only if bridge is set up (or use other method)
lxc.network.type = veth
lxc.network.name = veth0
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.1.101/24
lxc.network.ipv4.gateway = 0.0.0.0

# Container specific configuration
lxc.mount = /var/lib/lxc/mydebianvm/fstab
lxc.utsname = debian8
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0

Ersetzen Sie die IP-Adresse 192.168.1.101 durch eine freie IP aus Ihrem Netzwerk.

Fügen Sie das Prestart-Skript /var/lib/lxc/prestart-nbd.sh

hinzu
vim /var/lib/lxc/prestart-nbd.sh

mit folgendem Inhalt:

#!/bin/bash
CHK=$(lsmod | grep '^nbd');
if [[ "$CHK" == "" ]] ; then
modprobe nbd nbds_max=64 max_part=8
fi
DEV=""

for D in /dev/nbd* ; do
F=$(basename $D)
if [[ $(lsblk | grep "^${F} ") == "" ]] ; then
DEV="$D"
break;
fi
done

echo "Next free NBD is $DEV";

CHK=$(lsof /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 | grep 'qemu-nbd' | awk '{ print $2 }');
if [[ "$CHK" == "" ]] ; then
if [[ "$DEV" == "" ]] ; then
print "No free nbd device found";
exit 1;
fi
echo "Connecting $DEV to /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2"
qemu-nbd -c ${DEV} -n --aio=native /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2
else
NBD=$(lsof -p ${CHK} | grep '/dev/nbd' | awk '{ print $9 }');
if [[ "$NBD" != "" ]] ; then
echo "/var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 is already connected to $NBD"
DEV="$NBD";
else
echo "/var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 is used by suspicious PID";
exit 1;
fi
fi

CHK=$(mount | grep " /var/lib/lxc/${LXC_NAME}/rootfs ")
if [[ "$CHK" == "" ]] ; then
echo "/var/lib/lxc/${LXC_NAME}/rootfs not mounted";
echo "Mounting ${DEV} to /var/lib/lxc/${LXC_NAME}/rootfs"
mount ${DEV} /var/lib/lxc/${LXC_NAME}/rootfs
fi
echo "${DEV} ${DEV:1} none bind,create=file,optional 0 0" > /var/lib/lxc/${LXC_NAME}/fstab

und ausführbar machen:

chmod +x /var/lib/lxc/prestart-nbd.sh

Fügen Sie das Poststop-Skript /var/lib/lxc/poststop-nbd.sh

hinzu
vim /var/lib/lxc/poststop-nbd.sh

mit folgendem Inhalt:

#!/bin/bash
CHK=$(mount | grep " /var/lib/lxc/${LXC_NAME}/rootfs " | awk '{ print $1 }')
if [[ "$CHK" != "" ]] ; then
echo "Unmounting ${CHK} from /var/lib/lxc/${LXC_NAME}/rootfs"
echo "Disconnecting ${CHK}"
umount /var/lib/lxc/${LXC_NAME}/rootfs && qemu-nbd -d ${CHK}
fi

und ausführbar machen:

chmod +x /var/lib/lxc/poststop-nbd.sh

Starten Sie die VM und richten Sie das Kontingent ein

Wir können den Container jetzt im Hintergrundmodus starten, indem wir Folgendes eingeben:

lxc-start -n mydebianvm -d

Installieren Sie die erforderlichen Pakete für Quota. Dafür müssen wir den Container nicht betreten. Mit lxc-attach können wir Befehle von außerhalb des Containers ausführen.

lxc-attach -n mydebianvm -- apt-get -y update
lxc-attach -n mydebianvm -- apt-get -y install quota

Es ist nicht möglich, Quota über lxc-attach zu aktivieren. Also erstellen wir ein Bash-Skript, das beim nächsten Booten des Containers ausgeführt wird

vim /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh

mit folgendem Inhalt:

#!/bin/bash
mount -o remount,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 /
touch /aquota.user /aquota.group
chmod 0600 /aquota.*
quotacheck -cmug /
quotaon -avug
echo '#!/bin/sh -e
exit 0' > /etc/rc.local
rm -f /opt/actquota.sh

Das Skript löscht sich selbst und leert anschließend die /etc/rc.local des Containers.
Stellen Sie nun sicher, dass das Bash-Skript ausführbar ist und beim Start aufgerufen wird:

Ausführbar machen:

chmod 700 /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh

Fügen Sie den Aufruf zur rc.local-Datei der VM hinzu:

echo '#!/bin/bash
if [[ -e "/opt/actquota.sh" ]] ; then
/opt/actquota.sh
fi' > /var/lib/lxc/mydebianvm/rootfs/etc/rc.local

Wenn alle Voraussetzungen erfüllt sind, können Sie den Container jetzt neu starten. Wenn Sie die Schritte korrekt befolgt haben, wird das Kontingent aktiviert.

lxc-stop -r -n mydebianvm

Überprüfen Sie die Ergebnisse

Sie sollten jetzt überprüfen, ob Quota funktioniert. Wechseln Sie in den Container.

lxc-attach -n mydebianvm

Innerhalb des Containertyps:

repquota -avug

Sie sollten jetzt das verbrauchte Kontingent von Benutzern und Gruppen sehen.

Zerstören der virtuellen Maschine

Es ist sehr wichtig um die Befehle in der richtigen Reihenfolge zu verwenden. Bevor Sie das nbd-Gerät trennen können, müssen Sie den Container stoppen, falls er ausgeführt wird:

lxc-stop -n mydebianvm

Danach müssen Sie das Root-fs aushängen.

umount /var/lib/lxc/mydebianvm/rootfs

Der letzte Schritt besteht darin, das nbd zu trennen. Achten Sie darauf, die richtige Gerätenummer auszuwählen.
NIEMALS Trennen Sie das nbd, bevor Sie das rootfs aushängen. Dies führt zu vielen Problemen und erfordert einen vollständigen erzwungenen Neustart Ihres Hosts.

qemu-nbd -d /dev/nbd0

VM sichern

Da wir beim Erstellen der Image-Datei für den Container zwei Dateien erstellt haben, können wir problemlos sichern, ohne die VM zu stoppen. Zuerst müssen wir die zwischenzeitlich erfolgten Änderungen in die Basisdatei übertragen.

qemu-img commit /var/lib/lxc/mydebianvm/rootdev-live.qcow2

Die Datei /var/lib/lxc/mydebianvm/rootdev.qcow2 enthält jetzt den aktuellen Zustand der Festplatte der VM, sodass Sie diese Datei sichern können.


Debian
  1. So installieren und konfigurieren Sie den minimalistischen Docker-Host von Debian 8

  2. Richten Sie Apache und Php mit mod_fcgid auf Ubuntu/Debian ein

  3. Wie man einen Mailserver mit Exim4 und DBMail auf einem Debian 7 VPS einrichtet

  4. So richten Sie Nginx mit HTTP/2-Unterstützung unter Debian 9 ein

  5. So erstellen und starten Sie LXC-Linux-Container mit LXC-Befehlen

Virtuelles Hosting mit Proftpd und MySQL (inkl. Quote) auf Debian Lenny

Virtuelles Hosting mit vsftpd und MySQL auf Debian Squeeze

So installieren und konfigurieren Sie den Apache-Webserver mit virtuellem Host unter Debian 10

So richten Sie den virtuellen Host Apache unter Debian 10 ein

Lxc und wie fange ich an?

So installieren und richten Sie LXC-Linux-Container unter CentOS / RHEL / Ubuntu ein