Misc Création de mon Dom0 Debian Squeeze avec DomU FreeBSD 9 HVM

2 décembre 2012 – 22:41

J’écris ce petit post plus comme un Reminder que comme un article à part entière. En fait la plupart des « astuces » ci-dessous ne sont même pas de mon fait. Dans cet article j’explique simplement le cheminement de l’installation de mes serveurs de production. J’ai utilisé des serveurs Debian Squeeze chez Ovh, sur lesquels j’installe XEN, je mets en raid mes disques servant pour les VM, puis installe mes VM Freebsd 9 en HVM sur des volumes LVM.

Préparation de l’hyperviseur

Partitionnement des disques

Pour mes serveurs j’utilise le partitionnement personnalisé dans lequel j’alloue 10G en Raid 1 à la partition / puis 512M sur chaque disque pour la swap. Une fois le serveur installé je le mets à jour afin d’éviter les surprises:


apt-get update
apt-get upgrade

Ensuite il convient de valider que les fichiers suivants sont à jours:

/etc/hosts
/etc/hostname
/etc/resolv

Ensuite et pour conserver un hyperviseur à l’heure il faut installer le service ntp

apt-get install ntp

Puis valider au moyen de la commande ntpq -p que le service s’est correctement installé.

Une fois cela fait, je crée les partitions sur lesquels je vais faire mon LVM en Raid software à l’aide de l’outil fdisk. Pour chaque partition créée, il faut y associer un type ‘fd’ pour Raid Software linux il me semble. Une fois cette opération faite, il peut être nécessaire de redémarrer afin que votre serveur affiche bien dans le /dev l’ensemble des partitions.

Création des volumes Raid software

Nous utilisons les commandes suivantes pour créer, respectivement, un volume Raid 1 ou un volume Raid 5.

mdadm --create /dev/md2 --level=mirror --raid-device=2 /dev/sda3 /dev/sdb3
mdadm --create /dev/md2 --level=5 --raid-device=4 /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3

Une fois cela fait on peut suivre la création des volumes à l’aide de la commande:

watch -n 1 cat /proc/mdstat

Avec les version récentes de mdadm, les raids ne se construisent pas automatique, il est nécessaire de lancer la commande suivante:

mdadm --readwrite /dev/md2

Une fois les volumes créés, il faut dire à mdadm de bien les lancer à chaque démarrage cela se fait via la commande:

mdadm -Es | grep md/0 >>/etc/mdadm/mdadm.conf

Installation des paquets xen

Pour l’installation des paquets Xen et faire de la virtualisation en mode HVM il faut installer les paquets suivants:

apt-get install linux-image-xen-amd64 xen-tools xen-hypervisor-4.0-amd64 xen-qemu-dm-4.0

Ensuite il faut éditer le fichier /etc/xen/xend-config.sxp et lui donner les valeurs suivantes:

# -*- sh -*-
(logfile /var/log/xen/xend.log)
(loglevel DEBUG)

(network-script 'network-bridge netdev=eth0')

(vif-script vif-bridge)

(dom0-min-mem 256)

(enable-dom0-ballooning yes)

(total_available_memory 0) 

(dom0-cpus 0)

(vncpasswd '')

(keymap 'fr')

(qemu-dm-logrotate-count 10)

(device-create-timeout 60)
(device-destroy-timeout 180)

Suite à cela, il faut redémarrer le serveur au moyen de la commande shutdown -r now

Mise en place d’un Firewall iptables

Pour cela il faut créer le fichier /etc/init.d/myFirewall contenant:

#!/bin/sh
case "$1" in
start)
 
echo - Initialisation du firewall : [OK]
 
iptables -t filter -F INPUT
iptables -t filter -F OUTPUT
echo - Vidage des regles et des tables : [OK]
 
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
echo - Interdire toutes les connexions entrantes et sortantes : [OK]
 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo - Activer le mode statefull : [OK]
 
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
 
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
 
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
 
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
 
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
 
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
 
echo - Initialisation des regles : [OK]
 
;;
status)
echo - Liste des regles :
iptables -n -L
 
;;
stop)
 
iptables -t filter -F INPUT
iptables -t filter -F OUTPUT
echo - Vidage es regles et des tables : [OK]
 
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
echo - Autoriser toutes les connexions entrantes et sortantes : [OK]
 
;;
esac
exit 0

Il faut ensuite rendre exécutable le fichier avec un chmod +x /etc/init.d/myFirewall puis activer le script lors du démarrage du serveur: update-rc.d myFirewall defaults Enfin on démarre manuellement le script via: /etc/init.d/myFirewall start

Préparation des volumes

Il faut commencer par initialiser les disques (le raid md0 dans cet exemple) via la commande:

pvcreate /dev/md0

Ensuite il faut créer un volume group (nommé vgSSD ici) via la commande:

vgcreate vgSSD /dev/md0

Enfin il faut créer les volumes qui vont servir de disque pour les machines virtuelles.

lvcreate -L 25G -n serveur1.domaine.fr-disk /dev/vgSSD
lvcreate -L 1G -n serveur1.domaine.fr-swap /dev/vgSSD

Dans ce dernier exemple, j’ai créé deux volumes de 25 et 1 Go chacun, nommé au moyen de ma convention après le -n et pris sur les volumes groups /dev/vgSSD.

Attention! Je me suis rendu compte que les volumes de plus d’un Tera étaient mal supportés lors de l’installation de Freebsd.

Voilà notre hyperviseur prêt il ne nous reste plus qu’à créer les machines virtuelles.

Création de la machine virtuelle

Tout d’abord il faut créer un fichier de description de la machine virtuelle et de ses paramètres; /etc/xen/serveur1.cfg:

name = 'serveur1'

kernel = "/usr/lib/xen-4.0/boot/hvmloader"
builder = 'hvm'

memory = 4096
shadow_memory = 8
vcpus = 4

device_model = '/usr/lib/xen-4.0/bin/qemu-dm'

disk = [
     'phy:/dev/loop0,ioemu:hdd:cdrom,r',
     'phy:/dev/vgSSD/serveur1.domaine.com-disk,ioemu:hda,w',
     'phy:/dev/vgSSD/serveur1.domaine.com-swap,ioemu:hdb,w'
]

vif = ['ip=133.73.133.7,mac=00:00:DE:AD:BE:EF,bridge=eth0' ]

boot='dc'
serial = 'pty'

sdl=0
vnc=1
vnclisten='127.0.0.1'
vncconsole=1
stdvga=0

on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

Ensuite il faut mapper l’iso de Freebsd 9 sur /dev/loop0 au moyen de la commande:

losetup -f /root/FreeBSD-9.0-RELEASE-amd64-disc1.iso

Il ne reste qu’à démarrer la VM avec:

xm create /etc/xen/serveur1.cfg

Durant l’installation, il faut sélectionner les sources et ne pas configurer le réseau.
Une fois le serveur virtuel installé, dans l’installeur, on choisit de l’arrêter. Puis on détruit la VM afin de détacher le cdrom.

xm destroy serveur1
losetup -d /dev/loop0

Puis on modifie le fichier /etc/xen/serveur1.cfg par:

name = 'serveur1'

kernel = "/usr/lib/xen-4.0/boot/hvmloader"
builder = 'hvm'

memory = 4096
shadow_memory = 8
vcpus = 4

device_model = '/usr/lib/xen-4.0/bin/qemu-dm'

disk = [
     'phy:/dev/vgSSD/serveur1.domaine.com-disk,ioemu:hda,w',
     'phy:/dev/vgSSD/serveur1.domaine.com-swap,ioemu:hdb,w'
]

vif = ['ip=133.73.133.7,mac=00:00:DE:AD:BE:EF,bridge=eth0' ]

boot='cd'
serial = 'pty'

sdl=0
vnc=1
vnclisten='127.0.0.1'
vncconsole=1
stdvga=0

on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

 

Préparation de la machine Freebsd pour son fonctionnement sous Xen

Avant de commencer, il faut lancer la machine virtuelle:

xm start /etc/xen/serveur1.cfg

Ensuite je créer un fichier de configuration /usr/src/sys/amd64/conf/SERVEUR1 contenant:

include		GENERIC
ident		SERVEUR1

makeoptions	MODULES_OVERRIDE="linux"

options 	NO_ADAPTIVE_MUTEXES
options 	NO_ADAPTIVE_RWLOCKS
options 	NO_ADAPTIVE_SX

options		QUOTA

# Xen HVM support
options 	XENHVM
device		xenpci
device		pf
device		pflog
device		pfsync

Avant d’aller plus avant, il faut modifier le fichier /etc/fstab dans lequel il faut changer tous les adaXpY par des adXpYsous peine d’avoir du mal à redémarrer après la mise à jour du noyau.


serveur1# mergemaster -p

Un fois cela fais, nous allons entrer en mode “single user” afin de compiler plus rapidement et d’éviter que d’autres utilisateurs ne nous “volent” pas de ressources:


serveur1# shutdown now
serveur1# fsck -p
serveur1# mount -u /
serveur1# mount -a -t ufs
serveur1# swapon -a

Après cela il faut compiler donc nous allons lancer:


serveur1# cd /usr/src
serveur1# make -j4 buildworld
serveur1# make buildkernel KERNCONF=SERVEUR1
serveur1# make installkernel KERNCONF=SERVEUR1

Nous utilisons le flag -j4 afin que le système lance 4 compilations à la fois (ce qui est un bon réglage en “single user” pour un mono processeur). Ensuite afin d’installer le reste des binaires, nous allons redémarrer la machine via la commande suivante mais on fera attention à sélectionner le single user mode (6).


serveur1# shutdown -r now
#TAPER 6 AU MENU DE BOOT
serveur1# fsck -p
serveur1# mount -u /
serveur1# mount -a -t ufs
serveur1# swapon -a
serveur1# cd /usr/src
serveur1# make installworld
serveur1# mergemaster
serveur1# shutdown -r now

Voilà nous avons un système tout beau tout neuf et à jour.

Sources

http://wiki.toulonux.tuxfamily.org/doku.php?id=docs_en_vrac:virtualisation_xen_2

http://deadmemes.net/2011/02/26/howto-freebsd-8-2-release-hvm-guest-on-xen-4-debian-squeeze/

http://en.wikipedia.org/wiki/Mdadm
http://fclose.com/b/linux/2611/duplicating-and-backing-up-lvm-backed-xen-domu-from-a-remote-server/

Tags: , , , , , , ,

You must be logged in to post a comment.