12731
Commentaire:
|
12968
|
Texte supprimé. | Texte ajouté. |
Ligne 364: | Ligne 364: |
* pour résoudre ce problème, j'ai désactivé ls quotas ('''heureusement j'en avais pas besoin sur ce serveur là, puisque celui-ci est complètement isolé sur une partition à part''') dans le fichier /etc/vz/vz.conf. L'autre alternative pour résoudre ce problème aurait été de réinitialiser les quotas pour cette machine en faisant: {{{ # vzquota init 101 -b 2097152 -B 2097152 -e 01w -i 200000 -I 220000 -n 01w -p /var/lib/vz/private/101 }}} |
* pour résoudre ce problème, j'ai désactivé ls quotas ('''heureusement j'en avais pas besoin sur ce serveur là, puisque celui-ci est complètement isolé sur une partition à part''') dans le fichier /etc/vz/conf/101.conf (en le modifiant dans le fichier /etc/vz/vz.conf, on interdit carrément l'usage des quotas disque pour toutes les machines virtuelles). L'autre alternative pour résoudre ce problème aurait été de réinitialiser les quotas pour cette machine en faisant (en prenant les paramètres DISKSPACE, DISKINODES et QUOTATIME du fichier /etc/vz/conf/101.conf): {{{ # vzquota init 101 -b 1048576 -B 1153024 -e 0D -i 200000 -I 220000 -n 0D -p /var/lib/vz/private/101 }}} |
Installation d'un serveur OpenVZ - ma version de l'histoire
Objectif: laisser des traces de ma propre expérience de la mise en place d'un serveur openvz et les soucis particuliers que j'ai rencontrés.
Installation
Fiche serveur
- Sur le noeud physique:
Services |
openssh, openvz (noyau) |
Sécurité |
tripwire, iptables |
|| Suivi/Outils || iproute, ntp, tcpdump, dig, mtr ||
- Sur chaque serveur virtuel
Services |
ça dépend |
Sécurité |
sudo, sXid, Logcheck, PortSentry |
Suivi/Outils |
Git, iproute, mtr, trafshow, tcpdump, dig |
Schéma de partitionnement
/ => 1 Go
- reste en lvm
Configuration réseau
- 2 interfaces actives:
- 1 interface d'administration: elle est configurée complètement
- 1 autre pour le pont ethernet.
Tâches supplémentaires à exécuter
- corriger le fichier /etc/apt/sources.list: utilisation des dépôts locaux.
- mise à jour du système (notamment les mises à jour de sécurité).
- Editer le fichier /etc/hostname
- Editer le fichier /etc/resolv.conf
- Editer le fichier /etc/hosts et supprimer les fichiers /etc/hosts.allow et /etc/hosts.deny
- Installer le noyau correspondant le mieux à l'architecture du serveur et supprimer la version antérieur (après redémarrage bien sûr).
Installation des logiciels
Sudo
# aptitude install sudo # visudo -f /etc/sudoers # /etc/sudoers ... # User privilege specification root ALL=(ALL) ALL nacer ALL=(ALL) ALL
SSH
Suivre la démarche décrite ici.
Ajouter le compte d'administration (ici nacer) au groupe ssh:
$ sudo usermod -a -G ssh nacer
Copier ma clé publique sur le serveur, à partir d'une clé usb par exemple:
$ sudo mount -t vfat /dev/sda1 /mnt/ $ mkdir .ssh $ cat /mnt/id_dsa.pub >> .ssh/authorized_keys $ chmod u=rw,go=r .ssh/authorized_keys
Tester la configuration en essayant de se connecter à partir du poste d'administration.
tripwire
ntp (client)
- Installation:
$ sudo aptitude install ntp ntp-simple ntpdate
- Configuration (fichier /etc/ntp.conf):
... #Paramètres du serveur: server 192.168.100.2 #Restreindre le type d'accès: restrict default notrust nomodify nopeer # configuration de l'hôte local restrict 192.168.100.2 restrict 127.0.0.1 ...
- Activer la configuration:
$ sudo ntpdate 192.168.100.2
- Relancer le service:
$ sudo invoke-rc.d ntp restart
- Corriger l'heure de l'horloge matérielle:
$ sudo hwclock --systohc
- Vérifier avec quel(s) serveur(s) on est synchronisé:
$ ntpdc -p remote local st poll reach delay offset disp ======================================================================= *192.168.100.2 10.45.0.242 14 64 77 0.00027 0.004907 0.43616
Logcheck
PortSentry
sXid
Git
Voir ici
GnuPG
Création d'une image OpenVZ
- installation de quelques logiciels nécessaires:
$ sudo aptitude install quota debootstrap
Il vaut mieux à ce stade avoir /var/lib/vz sur une partition à part
- création de l'image:
mkdir /var/lib/vz/template/debian-etch/ debootstrap --arch i386 etch /var/lib/vz/template/debian-etch/ http://miroir.cm.refer.org/debian/
- Ajuster le fichier de configuration du serveur virtuel:
# sudo vzctl set 240 --applyconfig vps.basic --save
- Ajuster la variable VE OSTEMPLATE
# sudo sh -c 'echo "OSTEMPLATE=debian-4.0" >> /etc/vz/conf/240.conf'
- Ajuster l'adresse IP du serveur virtuel:
# sudo vzctl set 240 --ipadd 10.45.0.240 --save
- Configurer le DNS de la machine virtuelle:
# sudo vzctl set 240 --nameserver 192.168.100.2 --save
- Copier l'image du système pour créer celle du serveur:
# mkdir /var/lib/vz/private/240; cp -r /var/lib/vz/template/debian-etch/* /var/lib/vz/private/240/
Organiser le réseau. Voir les explications de la méthode pont ethernet:
# aptitude install bridge-utils
- mise en place de l'interface veth: vérifier que les modules correspondant sont bien chargés:
# lsmod | grep vzeth vzethdev 12480 0 vzmon 38152 5 vzethdev,vznetdev,vzrst,vzcpt vzdev 3620 4 vzethdev,vznetdev,vzmon,vzdquota
- et sinon:
# modprobe vzethdev
- Rendre persistante la configuration du pont
- éditer le fichier de configuration du serveur virtuel /etc/vz/conf/240.conf
- commenter toute entrée IP_ADDRESS afin d'éviter la création uniquement du périphérique de type VENET dans l'environnement virtuel
- ajouter (ou modifier) l'entrée CONFIG_CUSTOMIZED comme ceci:
CONFIG_CUSTOMIZED="yes"
- ajouter les entrées (en prévision du script à utiliser. Voir la note qui suit).
VZHOSTBR="veth240.0" VETH_IP_ADDRESS=10.45.0.240
- et indiquer un script personnalisé à lancer au démarrage du serveur virtuel, comme par exemple:
# /usr/sbin/vznetaddroute # a script to bring up virtual network interfaces (veth's) in a VE CONFIGFILE=/etc/vz/conf/$VEID.conf . $CONFIGFILE VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'` if [ ! -n "$VETH_IP_ADDRESS" ]; then echo "According to $CONFIGFILE VE$VEID has no veth IPs configured." exit 1 fi if [ ! -n "$VZHOSTIF" ]; then echo "According to $CONFIGFILE VE$VEID has no veth interface configured." exit 1 fi for IP in $VETH_IP_ADDRESS; do echo "Adding interface $VZHOSTIF and route $IP for VE$VEID to CT0" /sbin/ifconfig $VZHOSTIF 0 echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding /sbin/ip route add $IP dev $VZHOSTIF done exit 0
- et le rendre exécutable
# chmod 0500 /usr/sbin/vznetaddbr
Note: le script proposé ici, pris dans la documentation officielle de openvz à l'avantage de prendre en compte une partie de la configuration des interfaces réseaux impliquées, côté noeud physique.
- ajuster le lien vers ce script:
# cat /etc/vz/vznet.conf EXTERNAL_SCRIPT=/usr/local/sbin/vzaddbr
- lier l' interface eth0 de la machine virtuelle à l'interface virtuelle veth240.0 de l'hôte physique:
# vzctl set 240 --netif_add "eth0,00:01:23:45:67:8A,veth240.0,00:01:23:45:67:8B" --save
- Configurer les interfaces sur l'hote physique (eth1 est l'interface ethernet associée au pont sur le noeud physique):
# echo 0 > /proc/sys/net/ipv4/conf/eth1/forwarding # echo 0 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
- Configurer les interfaces et la table de routage dans le VE
# vzctl start 240 # vzctl enter 240 # cat /etc/network/interfaces ... auto eth0 iface eth0 inet static address 10.45.0.240 netmask 255.255.254.0 up route add -net 10.45.0.0 netmask 255.255.254.0 dev eth0 up route add default gw 10.45.0.254 dev eth0 ... # ifconfig eth0 0 # route add default gw 10.45.0.254 dev eth0
- Configurer la table de routage sur l'hote physique (normalement effectué par le script. si c'est pas le cas redémarrer vz)
- Tâches post installation de base dans le serveur virtuel:
- Edition des sources de paquets:
# cat /etc/apt/sources.list deb http://miroir.cm.refer.org/debian/ etch main contrib non-free deb http://miroir.cm.refer.org/debian-security/ etch/updates main contrib non-free
- Mise à jour du système:
# aptitude update # aptitude upgrade
- Installer quelques paquets supplémentaires
# aptitude install ssh quota
- Permissions pour le répertoire /root:
# chmod 700 /root
- Désactivation de la connexion en root par défaut:
#usermod -L root
- Désactiver les sessions getty sur les terminaux du serveur virtuel, vu que le serveur virtuel n'en a pas:
# sed -i -e '/getty/d' /etc/inittab
- Désactiver sync() pour syslog afin d'améliorer les performances d'E/S:
# sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/syslog.conf
- Ajuster /etc/mtab:
# rm -f /etc/mtab # ln -s /proc/mounts /etc/mtab
- Enlever les paquets inutiles: vu que notre installation s'est faite à partir du système débian de base, il n'y a pas grand chose à enlever (s'il y a même quelque chose).
- Désactiver les services non utilisés/nécessaires
#update-rc.d -f klogd remove #update-rc.d -f inetd remove
- Configurer/copier les clés SSH
- Nettoyer le cache des paquets installés
# aptitude clean
- sortir de la machine virtuelle:
# exit
- Effacer les configurations enregistrées dont on n'a plus besoin et arrêter la machine virtuelle:
# sudo vzctl set 240 --ipdel all --save # sudo vzctl stop 240
- Zipper le répertoire de la machine virtuelle:
# cd /var/lib/vz/private/240 # sudo tar -zcf /var/lib/vz/template/cache/debian-4.0-i386-minimal.tar.gz . # ls -lh /var/lib/vz/template/cache total 56M -rw-r--r-- 1 root root 56M 2008-05-30 19:54 debian-4.0-i386-minimal.tar.gz
Création d'une machine virtuelle OpenVZ
- Créer la machine virtuelle à partir du modèle (image) crée précédemment:
# sudo vzctl create 101 --ostemplate debian-4.0-i386-minimal
- Rendre persistante la configuration du pont comme précédemment:
- éditer le fichier de configuration du serveur virtuel /etc/vz/conf/240.conf
- commenter toute entrée IP_ADDRESS
- ajouter (ou modifier) les entrées CONFIG_CUSTOMIZED, VZHOSTBR et VETH_IP_ADDRESS:
... CONFIG_CUSTOMIZED="yes" VZHOSTBR="veth101.0" VETH_IP_ADDRESS=10.45.0.101
- Paramétrer le réseau:
# vzctl set 101 --netif_add "eth0,20:01:23:45:67:8A,veth101.0,20:01:23:45:67:8B" --save virtual1:~# cat /var/lib/vz/private/101/etc/network/interfaces ... auto eth0 # configuration de l'interface eth0 iface eth0 inet static address 10.45.0.101 netmask 255.255.254.0 up route add -net 10.45.0.0 netmask 255.255.254.0 dev eth0 up route add default gw 10.45.0.254 dev eth0 auto venet0 iface venet0 inet static address 127.0.0.1 netmask 255.255.255.255 broadcast 0.0.0.0 up route add -net 192.0.2.1 netmask 255.255.255.255 dev venet0 #up route add default gw 192.0.2.1
- Lancer la machine virtuelle et voilà!
Quelques problèmes rencontrés
- Problèmes de routage
- eth0 est configuré et connecté sur le réseau. S'assurer que proc.sys.net.ipv4.conf.{eth0, vethxxx}.{proxy_arp, forwarding}=1
- J'ai créé une machine virtuelle (et donc son espace privé /var/lib/vz/private/xxx) et ensuite j'ai créé des partitions lvm pour différentes sous arborescence du système de fichiers de cette VE. J'ai migré les données de sorte à monter les partitions aux points correspondants (/var/log, /var/spool, / et /tmp). Voici ma situation:
virtual1:~# cat /etc/fstab ... /dev/mapper/serveurs-var--vz /var/lib/vz ext3 defaults 0 3 /dev/mapper/serveurs-root--asterisk /var/lib/vz/private/101 ext3 defaults,userquota 0 4 /dev/mapper/serveurs-log--asterisk /var/lib/vz/private/101/var/log ext3 defaults 0 5 /dev/mapper/serveurs-spool--asterisk /var/lib/vz/private/101/var/spool ext3 defaults 0 6 /dev/mapper/serveurs-temp--asterisk /var/lib/vz/private/101/tmp ext3 defaults 0 7 ...
On peut y voir les quatres partitions (asterisk) correspondants à ma VE.
Mais après cette manipulation (et montage de ces partitions), à chaque tentative de démarrage de la VE j'obtiens le message suivant:"vzquota : (error) Quota on syscall for 101: Device or resource busy"
pour résoudre ce problème, j'ai désactivé ls quotas (heureusement j'en avais pas besoin sur ce serveur là, puisque celui-ci est complètement isolé sur une partition à part) dans le fichier /etc/vz/conf/101.conf (en le modifiant dans le fichier /etc/vz/vz.conf, on interdit carrément l'usage des quotas disque pour toutes les machines virtuelles).
L'autre alternative pour résoudre ce problème aurait été de réinitialiser les quotas pour cette machine en faisant (en prenant les paramètres DISKSPACE, DISKINODES et QUOTATIME du fichier /etc/vz/conf/101.conf):
# vzquota init 101 -b 1048576 -B 1153024 -e 0D -i 200000 -I 220000 -n 0D -p /var/lib/vz/private/101