GNU/Linux >> Tutoriels Linux >  >> Debian

Comment configurer des conteneurs virtuels avec LXC et la prise en charge des quotas sur Debian 8

La prise en charge des quotas est une fonctionnalité souvent demandée dans lxc. Le quota de système de fichiers Linux est requis lorsque vous souhaitez donner à plusieurs utilisateurs l'accès à un conteneur et que vous souhaitez contrôler qu'un utilisateur n'utilise pas tout l'espace disque. Un quota est également requis pour les serveurs d'hébergement Web, par ex. avec ISPConfig 3, pour la même raison :un site Web ne pourra pas remplir tout le disque. Ce guide vous montre comment utiliser lxc avec quota de disque dur en utilisant qemu nbd avec un fichier image qcow sur Debian 8 .

Prérequis

Pour utiliser lxc, vous avez besoin des utilitaires qemu et du package lxc lui-même. Installez-les en appelant :

apt-get install lxc qemu-utils

Le programme d'installation vous demandera de choisir le répertoire dans lequel les images de la machine virtuelle lxc seront installées ultérieurement. Ce répertoire doit se trouver sur une partition avec beaucoup d'espace libre. Si vous disposez de suffisamment d'espace dans /var, acceptez la valeur par défaut /var/lib/lxc, sinon, choisissez un répertoire libre sur votre plus grande partition. Lorsque vous utilisez un chemin autre que celui par défaut, assurez-vous de modifier le chemin dans toutes les commandes et fichiers de configuration ci-dessous.

Préparation

Vérifiez si le module de boucle du noyau est chargé avec :

lsmod | grep '^loop'

Si vous n'obtenez aucun résultat, vous pouvez activer le module en exécutant :

modprobe loop

Créer la machine virtuelle

Nous pouvons maintenant commencer à créer la VM. Dans ce didacticiel, j'utiliserai Debian Jessie à la fois dans l'hôte et dans le conteneur, mais vous pouvez bien sûr utiliser d'autres modèles lxc, par exemple. g. Debian wheezy ou ubuntu.

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

Le -t l'argument sélectionne le modèle principal, -r décide quelle version utiliser. Pour définir la taille du disque dur de la machine virtuelle, vous pouvez modifier le --fssize argument. Supposons que vous vouliez créer un disque de 50 gigaoctets, vous changeriez l'argument en --fssize=50G .
L'argument -n définit le nom de la vm. J'ai utilisé mydebianvm dans ce tutoriel. Veuillez modifier le nom dans toutes les commandes suivantes en fonction de ce que vous avez choisi.

Comme nous ne voulons pas utiliser un fichier image brut, nous devons convertir l'image disque en qemu qcow2 format. Ceci est fait par la commande suivante

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

Pour faciliter la gestion des sauvegardes, plus tard, nous créons un ensemble de fichiers image, c'est-à-dire. e. un deuxième fichier qui enregistre toutes les modifications apportées à l'appareil.

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

Vous pouvez maintenant supprimer le fichier image brut d'origine avec :

rm /var/lib/lxc/mydebianvm/rootdev

Configurer le pont réseau

Installez les utilitaires bridge :

apt-get install bridge-utils

Ouvrez le fichier de configuration du réseau Debian /etc/network/interfaces dans un éditeur

vim /etc/network/interfaces

et ajoutez les lignes suivantes :

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

Remplacez l'adresse et le masque de réseau par les valeurs de votre réseau local.

Activez ensuite le pont réseau avec la commande :

ifup br0

Configurer la VM

Sauvegardez l'ancien fichier de configuration :

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

Et créez la configuration du conteneur :

vim /var/lib/lxc/mydebianvm/config

Et ajoutez le contenu suivant dans le fichier :

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

Remplacez l'adresse IP 192.168.1.101 par une adresse IP libre de votre réseau.

Ajoutez le script de prédémarrage /var/lib/lxc/prestart-nbd.sh

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

avec le contenu suivant :

#!/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

et rendez-le exécutable :

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

Ajoutez le script poststop /var/lib/lxc/poststop-nbd.sh

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

avec le contenu suivant :

#!/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

et rendez-le exécutable :

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

Démarrer la VM et configurer le quota

Nous pouvons maintenant démarrer le conteneur en arrière-plan en tapant :

lxc-start -n mydebianvm -d

Installez les packages nécessaires pour le quota. Nous n'avons pas besoin d'entrer dans le conteneur pour cela. En utilisant lxc-attach, nous pouvons exécuter des commandes depuis l'extérieur du conteneur.

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

Il n'est pas possible d'activer le quota via lxc-attach. Nous créons donc un script bash, qui est exécuté au prochain démarrage du conteneur

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

avec le contenu suivant :

#!/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

Le script se supprimera et videra ensuite le /etc/rc.local du conteneur.
Assurez-vous maintenant que le script bash est exécutable et appelé au démarrage :

Rendez-le exécutable :

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

Ajoutez l'appel au fichier rc.local de la machine virtuelle :

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

Une fois tous les prérequis configurés, vous pouvez maintenant redémarrer le conteneur. Si vous avez suivi les étapes correctement, cela activera le quota.

lxc-stop -r -n mydebianvm

Vérifier les résultats

Vous devriez maintenant vérifier si le quota fonctionne. Passez au conteneur.

lxc-attach -n mydebianvm

À l'intérieur du type de conteneur :

repquota -avug

Vous devriez maintenant voir le quota utilisé d'utilisateurs et de groupes.

Destruction de la machine virtuelle

C'est très important pour utiliser les commandes dans le bon ordre. Avant de pouvoir déconnecter l'appareil nbd, vous devez arrêter le conteneur s'il est en cours d'exécution :

lxc-stop -n mydebianvm

Ensuite, vous devez démonter le root fs.

umount /var/lib/lxc/mydebianvm/rootfs

La dernière étape consiste à déconnecter le nbd. Assurez-vous de sélectionner le bon numéro d'appareil.
JAMAIS déconnectez le nbd avant de démonter le rootfs. Cela entraînera de nombreux problèmes et nécessitera un redémarrage forcé complet de votre hôte.

qemu-nbd -d /dev/nbd0

Sauvegarder la VM

Parce que nous avons créé deux fichiers lors de la création du fichier image pour le conteneur, nous pouvons facilement sauvegarder sans arrêter la vm. Nous devons d'abord valider les modifications apportées entre-temps au fichier de base.

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

Le /var/lib/lxc/mydebianvm/rootdev.qcow2 contient maintenant l'état actuel du disque dur de la machine virtuelle, vous pouvez donc sauvegarder ce fichier.


Debian
  1. Comment installer et configurer l'hôte Docker minimaliste de Debian 8

  2. Comment configurer le serveur et le client NTP sur Debian 9 Stretch Linux

  3. Comment configurer un serveur de messagerie avec Exim4 et DBMail sur un VPS Debian 7

  4. Comment configurer Nginx avec la prise en charge HTTP/2 sur Debian 9

  5. Comment créer et lancer des conteneurs Linux LXC avec les commandes LXC

Hébergement virtuel avec Proftpd et MySQL (avec quota) sur Debian Lenny

Hébergement virtuel avec vsftpd et MySQL sur Debian Squeeze

Comment installer et configurer le serveur Web Apache avec l'hôte virtuel sur Debian 10

Comment configurer l'hôte virtuel Apache sur Debian 10

Lxc et comment commencer ?

Comment installer et configurer les conteneurs Linux LXC sur CentOS / RHEL / Ubuntu