Outils pour utilisateurs

Outils du site


machines:grifon:erispoe

Erispoe

Administrateurs

  • alarig
  • dotux
  • gizmo

Serveur:

Dell R210 II

Configuration :

  • CPU : Intel X3450 @ 2.67GHz
  • Ram : 44Go DDR3 ECC * OS : HGST HTS725050A7E630 * Stockage : 22To Western Digital Red
  • Cache : Samsung SSD 850 EVO mSATA 120GB
  • Réseau : Broadcom Corporation NetXtreme II BCM5716 *2 (intégrées)

Hyperviseur :

Proxmox 4.2-4

Linux erispoe 4.4.8-1-pve #1 SMP Thu May 12 13:25:49 CEST 2016 x86_64 GNU/Linux

Réseau :

  • VMBR0 : Lan Admin Grifon (Eth0)
  • VMBR1 : Lan Public (Eth1)

Stockage :

Le stockage est assuré par un Raid1 géré par zfs sur 2*2To Western Digital Red avec les deux niveaux de caches déportés (L2ARC et ZLOG) sur un SSD mSATA afin d'apporter de la rapidité au Raid1.

Deux partitions sont créées sur ce SSD:

  • Dédiée aux logs (ZLOG) : 16G
  • Dédiée au cache intermédiaire (L2ARC) : 95.8G
root@erispoe:~# zpool status
  pool: tank
 state: ONLINE
  scan: resilvered 223G in 8h36m with 0 errors on Sun Jun  5 02:13:35 2016
config:

	NAME                                          STATE     READ WRITE CKSUM
	tank                                          ONLINE       0     0     0
	  mirror-0                                    ONLINE       0     0     0
	    sdb                                       ONLINE       0     0     0
	    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M5PRF7D7  ONLINE       0     0     0
	logs
	  sdd1                                        ONLINE       0     0     0
	cache
	  sdd2                                        ONLINE       0     0     0

errors: No known data errors

Le cache ARC (cache en RAM) est limité à 5G:

root@erispoe:~# arcstat.py 
    time  read  miss  miss%  dmis  dm%  pmis  pm%  mmis  mm%  arcsz     c  
19:28:33     0     0      0     0    0     0    0     0    0   4.9G  5.0G 

Custom :

Le prefetch au niveau ZFS a été désactivé afin de pouvoir gagner en rapidité.

root@erispoe:~# cat /etc/modprobe.d/zfs.conf 
# Desactive le prefetch des fichiers, meilleurs iops
options zfs zfs_prefetch_disable=1

Déploiement de VM (old)

Nous avons un script pour le déploiement des VMs. Son principe de base est de prendre le template, de le cloner, d’agrandir le disque en fonction de la taille demandée et de copier le conf (réseau, hostname, etc.) sur le VM par SSH.

#!/bin/sh
 
usage() {
	printf "Usage of $0:\n"
	printf "\t-h, --help\tAffiche ce message d’aide\n"
	printf "\t-u, --user\tNom d’utilisateur a qui appartiendera la VM\n"
	printf "\t-m, --email\tAdresse mail à qui envoyer les informations \
relatives à la VM\n"
	printf "\t-f, --firstname\tPrénom du propriétaire\n"
	printf "\t-l, --lastname\tNom de famille du propriétaire\n"
	printf "\t-t, --template\tTemplate de VM à utiliser\n"
	printf "\t-s, --size\tTaille de la VM\n"
	printf "\t-n, --hostname\tNom de la VM\n"
	printf "\t-i, --id\tNuméro servant à la génération des IPs\n"
}
 
nargs=$(($#/2))
 
OPTS=$(getopt -o u:,m:,f,l,t:,s:,n:,i:,h \
 -l user:,email:,firstname,lastname,template:,size:,hostname:,id:,help \
 -- "$@")
if [ $? != 0 ]; then
	exit 1
fi
 
if [ $# -eq 0 ]; then
	usage
	exit 1
fi
 
_mendarg() {
 
	echo "Argument $1"
	echo "Valeur $2"
 
	if ! [ "$2" ]; then
		echo "$1 : argument obligatoire"
		exit 1
	fi
}
 
eval set -- "$OPTS"
 
while :; do
	case "$1" in
		-h | --help)	usage;
				exit 0;;
		-u | --user)	USER="$2";
				shift 2;;
		-m | --email)	EMAIL="$2";
				shift 2;;
		-f | --firstname) FIRSTNAME="$2";
				shift 2;;
		-l | --lastname) LASTNAME="$2";
				shift 2;;
		-t | --template) TMP_BASE="$2";
				shift 2;;
		-s | --size)	SIZE="$2";
				shift 2;;
		-n | --hostname) hostname="$2";
				host=1
				shift 2;;
		-i | --id)	IPid="$2";
				shift 2;;
		--) shift; break;;
	esac
done
 
if ! [ $host ]; then
	printf "L’argument de nom d’hôte n’est pas déclaré, utilisation du nom \
d’utilisateur à la place.\n"
	hostname=$USER
	nargs=$((nargs+1))
fi
 
#if [ $nargs -ne 8 ]; then
#	printf "Tous les arguments ne sont pas présents\n"
#	usage
#	exit 1
#fi
 
# Récupération des identifiants des templates
case "$TMP_BASE" in 
	deb) TEMPLATE=900 ;;
	ubt-512) TEMPLATE=902 ;;
	ubt-1) TEMPLATE=903 ;;
	blank-512) TEMPLATE='blank-512' ;;
	blank-1) TEMPLATE='blank-1' ;;
	*) echo "Template inconnue"; exit 1;; 
esac
 
# Génération du mot de passe
echo "1 - Génération du mot de passe"
PASSWORD="$(head -c 12 /dev/urandom | base64)"
 
# Vérification de l’existence du pool
echo "2 - Vérification de l’existence du pool"
CHECK_POOL=`pvesh get /pools/$USER`
 
# Création du pool réservé à l’utilisateur
if [ "$CHECK_POOL" != "" ]; then
	echo "Le pool existe déjà"
else
	echo "3 - Création du pool utilisateur"
	pvesh create /pools -poolid $USER
fi
 
# Vérification de l’existence de l’utilisateur
echo "4 - Vérification de l’utilisateur local"
CHECK_USER=$(grep $USER /etc/passwd | cut -d':' -f1)
 
# Création de l’utilisateur local
if [ "$CHECK_USER" != "" ]; then
	echo "L’utilisateur existe déjà"
else
	echo "5 - Création de l’utilisateur local"
	useradd --no-create-home --password $(openssl passwd -1 $PASSWORD) $USER
	echo $PASSWORD
fi
 
# Vérification de l’existence de l’utilisateur GUI
echo "6 - Vérification de l’utilisateur GUI"
CHECK_USER_GUI=`cat /etc/pve/user.cfg | grep $USER`
 
if [ "$CHECK_USER_GUI" != "" ]; then
	echo "L’utilisateur existe déjà"
else
	# Création de l’utilisateur GUI
	echo "7 - Création de l’utilisateur GUI"
	pveum useradd $USER@pam -groups "Membres" -email $EMAIL \
	 -firstname $FIRSTNAME -lastname $LASTNAME
	pveum aclmod /pool/$USER -roles "PVEVMUser" -users $USER@pam
fi
 
 
# $(($(qm list | grep -v -e "Tmp.*deb" -e "Tmp.*ubt" | wc -l) + 100)) sert à
# déterminer l’id de la VM
echo "8 - Déploiement du template"
#ID_VM="$(($(qm list | grep -vi -e "tmp-deb" -e "tmp.*ubt" | wc -l) + 100))"
GET_ID="$(pvesh get /cluster/nextid > /tmp/id)"
ID_VM="$(cat /tmp/id | sed 's/"//g')"
echo $ID_VM
qm clone $TEMPLATE $ID_VM -full -name $hostname -pool $USER -storage Raid1
rm /tmp/id
 
# Gros bourrin powa, j’agrandis le disque puis je redimensionne la partition
# directement depuis erispoe
# Ne pas le faire quand la VM est bootée, sinon on ne reboote pas
qm resize $ID_VM virtio0 +${SIZE}G
parted /dev/zvol/tank/vm-$ID_VM-disk-1 resizepart 1 $(($SIZE+1))GB
e2fsck -fp /dev/zvol/tank/vm-$ID_VM-disk-1-part1
resize2fs /dev/zvol/tank/vm-$ID_VM-disk-1-part1
e2fsck -fp /dev/zvol/tank/vm-$ID_VM-disk-1-part1
 
qm start $ID_VM
 
# TODO: utiliser salt ou cloud-init
 
MAC=$(grep net0 /etc/pve/qemu-server/$ID_VM.conf | cut -d '=' -f 2 | \
 cut -d ',' -f 1)
FE80=$(ipv6calc --action prefixmac2ipv6 --in prefix+mac \
 --out ipv6addr fe80:: $MAC)
 
sleep 20 # attendre que la VM démarre
 
# ne pas enregistrer ni vérifier le fingerprint
SSH_OPT="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
 
echo $hostname > /tmp/etchostname
scp $SSH_OPT /tmp/etchostname root@[$FE80%vmbr1]:/etc/hostname
 
echo "127.0.0.1	localhost
89.234.186.$IPid	$hostname
2a00:5884:$((8200+$IPid))::1	$hostname
 
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters" > /tmp/etchosts
scp $SSH_OPT /tmp/etchosts root@[$FE80%vmbr1]:/etc/hosts
 
echo "# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
source /etc/network/interfaces.d/*
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
	address 89.234.186.$IPid
	netmask 255.255.255.255
	network 89.234.186.0
	broadcast 89.234.186.255
 
	#Route statique vers la passerelle
	up ip route add default via 89.234.186.1 dev eth0 onlink
 
	dns-nameservers 89.234.186.1
	dns-search grifon.fr
 
iface eth0 inet6 static
	address	2a00:5884:$((8200+$IPid))::1
	netmask	48
	gateway	fe80::215:17ff:fe39:f01b" > /tmp/eni
scp $SSH_OPT /tmp/eni root@[$FE80%vmbr1]:/etc/network/interfaces
 
# détermination du fingerprint
file=$(mktemp)
ssh-keyscan $FE80%vmbr1 >$file 2>/dev/null
SSH_FP="$(ssh-keygen -l -f $file)"
rm $file
 
ssh $SSH_OPT root@$FE80%vmbr1 'rm ~/.bash_history'
ssh $SSH_OPT root@$FE80%vmbr1 'echo "" > /root/.ssh/authorized_keys ; reboot'
 
#qm shutdown $ID_VM
#qm start $ID_VM
 
echo "Déploiement terminé."
 
echo "9 - Envoi du mail d’info"
 
SUBJECT=$(perl -wse "use utf8; use Encode qw(encode); print encode(\"MIME-Q\",\
 \"Votre machine virtuelle $hostname vient d’être créée\");")
 
echo "From: Adminsys grifon <adminsys@grifon.fr>
To: $EMAIL
Cc: adminsys@grifon.fr
Content-Type: text/plain; charset=UTF-8
Subject: $SUBJECT
 
Bonjour,
Votre machine virtuelle vient d’être créée.
L’adresse d’accès est : https://hv-access.grifon.fr
Il vous faudra demander un certificat client à adminsys@grifon.fr¹
Votre identifiant: $USER
Votre mot de passe: $PASSWORD
 
Vous pouvez vous connecter en SSH avec le mot de passe « degermatagrifon » via
ssh root@89.234.186.$IPid
ssh root@2a00:5884:$((8200+$IPid))::1
 
Nous vous recommendons très vivement de changer ce mot de passe ainsi que 
d’interdire la connexion par SSH en tant que root sans mot de passe.
 
Voir pouvez donc vous connecter, démarrer votre machine virtuelle 
et la configurer comme vous le souhaitez.
 
Le fingerprint SSH de votre VM est :
$SSH_FP
 
Si vous souhaitez avoir un reverse DNS, vous pouvez contacter
adminsys@grifon.fr en précisant si vous souhaitez une délagation ou en donnant
le FQDN.
 
 
1	https://grifon.fr/adminsys/cacert-client.html
 
Cordialement,
-- 
Les adminsys de grifon" | /usr/sbin/sendmail -f adminsys@grifon.fr -t
 
echo "Script terminé"
 
printf "Route à ajouter sur nominoe : \
ipv6_route_$hostname=\"2a00:5884:$((8200+$IPid))::/48 "$FE80"%%em1\"\n"
 
exit 0
machines/grifon/erispoe.txt · Dernière modification : 2019/06/05 18:16 de 127.0.0.1