GNU/Linux >> Linux Esercitazione >  >> Debian

Come configurare contenitori virtuali con LXC e supporto per le quote su Debian 8

Il supporto delle quote è una caratteristica spesso richiesta in lxc. La quota del filesystem Linux è richiesta quando si desidera concedere a più utenti l'accesso a un container e si desidera controllare che un utente non stia utilizzando tutto lo spazio su disco. La quota è richiesta anche per i server di web hosting, ad es. con ISPConfig 3, per lo stesso motivo:un sito Web non deve essere in grado di riempire l'intero disco. Questo howto ti mostra come usare lxc con la quota del disco rigido utilizzando qemu nbd con un file immagine qcow su Debian 8 .

Prerequisiti

Per utilizzare lxc, sono necessarie le utilità qemu e il pacchetto lxc stesso. Installali chiamando:

apt-get install lxc qemu-utils

Il programma di installazione ti chiederà di scegliere la directory in cui verranno installate le immagini della macchina virtuale lxc in un secondo momento. Questa directory dovrebbe trovarsi su una partizione con molto spazio libero. Se hai spazio sufficiente in /var, accetta l'impostazione predefinita /var/lib/lxc, altrimenti scegli una directory libera sulla partizione più grande. Quando utilizzi un percorso non predefinito, assicurati di modificare il percorso in tutti i comandi e nei file di configurazione seguenti.

Preparazione

Controlla se il modulo del ciclo del kernel è caricato con:

lsmod | grep '^loop'

Se non ottieni risultati, puoi abilitare il modulo eseguendo:

modprobe loop

Crea la macchina virtuale

Ora possiamo iniziare a creare la VM. In questo tutorial, userò Debian Jessie sia nell'host che nel contenitore, ma puoi ovviamente usare altri modelli lxc, ad es. g. Debian wheezy o Ubuntu.

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

Il -t argomento seleziona il modello principale, -r decide quale versione utilizzare. Per impostare la dimensione del disco rigido per la macchina virtuale, puoi modificare --fssize discussione. Supponiamo che tu voglia creare un disco con 50 gigabyte, cambieresti l'argomento in --fssize=50G .
L'argomento -n imposta il nome della vm. Ho usato mydebianvm in questo tutorial. Per favore cambia il nome in tutti i seguenti comandi in base a ciò che hai scelto.

Poiché non vogliamo utilizzare un file immagine non elaborato, dobbiamo convertire l'immagine del disco in qemu qcow2 formato. Questo viene fatto dal seguente comando

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

Per semplificare la gestione del backup, in seguito creiamo un set di file immagine, i. e. un secondo file che registra tutte le modifiche al dispositivo.

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

Ora puoi eliminare il file di immagine raw originale con:

rm /var/lib/lxc/mydebianvm/rootdev

Configura il bridge di rete

Installa bridge-utils:

apt-get install bridge-utils

Apri il file di configurazione della rete Debian /etc/network/interfaces in un editor

vim /etc/network/interfaces

e aggiungi le seguenti righe:

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

Sostituisci l'indirizzo e la netmask con i valori della tua rete locale.

Attivare quindi il bridge di rete con il comando:

ifup br0

Configura la VM

Eseguire il backup del vecchio file di configurazione:

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

E crea la configurazione per il contenitore:

vim /var/lib/lxc/mydebianvm/config

E aggiungi il seguente contenuto nel file:

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

Sostituisci l'indirizzo IP 192.168.1.101 con un IP libero dalla tua rete.

Aggiungi lo script di preavvio /var/lib/lxc/prestart-nbd.sh

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

con il seguente contenuto:

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

e rendilo eseguibile:

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

Aggiungi lo script poststop /var/lib/lxc/poststop-nbd.sh

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

con il seguente contenuto:

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

e rendilo eseguibile:

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

Avvia la VM e imposta la quota

Ora possiamo avviare il contenitore in modalità background digitando:

lxc-start -n mydebianvm -d

Installa i pacchetti necessari per la quota. Non dobbiamo entrare nel contenitore per questo. Usando lxc-attach possiamo eseguire comandi dall'esterno del contenitore.

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

Non è possibile attivare la quota tramite lxc-attach. Quindi creiamo uno script bash, che viene eseguito al prossimo avvio del contenitore

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

con il seguente contenuto:

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

Lo script si cancellerà da solo e in seguito svuoterà /etc/rc.local del contenitore.
Ora assicurati che lo script bash sia eseguibile e chiamato all'avvio:

Rendilo eseguibile:

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

Aggiungi la chiamata al file rc.local della macchina virtuale:

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

Con tutti i prerequisiti impostati ora puoi riavviare il container. Se hai seguito correttamente i passaggi, questo attiverà la quota.

lxc-stop -r -n mydebianvm

Verifica i risultati

Ora dovresti controllare se la quota funziona. Passa al contenitore.

lxc-attach -n mydebianvm

All'interno del tipo di contenitore:

repquota -avug

Dovresti vedere la quota utilizzata di utenti e gruppi ora.

Distruggere la macchina virtuale

È molto importante per utilizzare i comandi nell'ordine corretto. Prima di poter disconnettere il dispositivo nbd devi fermare il contenitore se è in esecuzione:

lxc-stop -n mydebianvm

Successivamente, devi smontare il root fs.

umount /var/lib/lxc/mydebianvm/rootfs

L'ultimo passaggio è disconnettere il nbd. Assicurati di selezionare il numero di dispositivo corretto.
MAI disconnetti l'nbd prima di smontare il rootfs. Ciò porterà a molti problemi e richiederà un riavvio forzato completo del tuo host.

qemu-nbd -d /dev/nbd0

Esegui il backup della VM

Poiché abbiamo creato due file durante la creazione del file immagine per il contenitore, possiamo facilmente eseguire il backup senza interrompere il vm. Per prima cosa dobbiamo eseguire il commit delle modifiche avvenute nel frattempo nel file di base.

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

/var/lib/lxc/mydebianvm/rootdev.qcow2 ora contiene lo stato corrente del disco rigido della macchina virtuale, quindi puoi eseguire il backup di questo file.


Debian
  1. Come installare e configurare l'host Docker minimalista di Debian 8

  2. Come configurare server e client NTP su Debian 9 Stretch Linux

  3. Come configurare la replica di streaming PostgreSQL con slot di replica su Debian 10

  4. Come configurare Nginx con supporto HTTP/2 su Debian 9

  5. Come creare e avviare container LXC Linux con i comandi LXC

Hosting virtuale con Proftpd e MySQL (quota inclusa) su Debian Lenny

Hosting virtuale con vsftpd e MySQL su Debian Squeeze

Come installare e configurare Apache Web Server con Virtual Host su Debian 10

Come configurare l'host virtuale Apache su Debian 10

Lxc e come iniziare?

Come installare e configurare i contenitori Linux LXC su CentOS / RHEL / Ubuntu