View Sidebar
Garder ses VM Proxmox à jours

Garder ses VM Proxmox à jours

13 février 2014 21 h 22 min0 comments

Salut tout le monde,

Voilà encore un post encore assez cours mais rassurez-vous, un article de fond est toujours en cours d’écriture.

Aujourd’hui, on va parler mise à jour automatique de ses serveurs, une étape fastidieuse qu’on a tendance à oublier dès que tout fonctionne. Hors que ce soit pour la stabilité ou la sécurité, il est vivement recommandé de garder ses serveurs à jour (surtout sur des distributions dites stables).

Sans update, on va droit dans le mur

Sans update, on va droit dans le mur

Pour cet article, je vais partir du principe que vous avez déjà suivi les précédents articles sur proxmox et que vous avez une plate-forme fonctionnelle. L’update d’une machine est facile à faire, cependant on va voir comment automatiser ça sur proxmox et l’ensemble de ses VM.

1 ere méthode: à l’ancienne, du python, toujours du python

Et oui, ça n’a pas changer, je n’aime toujours pas spécialement le bash. Dès que l’occasion se présente, je préfère faire un script python que je trouve plus claire et plus lisible.

import commands
vzlist_path = "/usr/sbin/vzlist"
vzctl_path = "/usr/sbin/vzctl"

# Fonction effectuant une upgrade du serveur
def upgradeHost():
        print "Upgrade de la machine Hote";
        cmd_update = 'apt-get --yes update'
        cmd_upgrade = 'apt-get --yes upgrade'
        print " >> "+cmd_update
        print " "+str(commands.getoutput(cmd_update))
        print " >> "+cmd_upgrade
        print " "+str(commands.getoutput(cmd_upgrade))
        print ""

# Fonction effectuant une upgrade d'une VM
def upgradeVM(id):
        print "Upgrade de la VM %s",id
        cmd_update = '%s exec %s "apt-get --yes update"'%(vzctl_path, id,)
        cmd_upgrade = '%s exec %s "apt-get --yes upgrade"'%(vzctl_path, id,)
        print " >> "+cmd_update
        print " "+str(commands.getoutput(cmd_update))
        print " >> "+cmd_upgrade
        print " "+str(commands.getoutput(cmd_upgrade))
        print ""

# On parcours les VM actives pour les mettre a jour
listVM = commands.getoutput(vzlist_path+" | grep running | awk '{print $1}'").split('\n');
for vm_id in listVM:
        upgradeVM(vm_id);

# On update la machine hote
upgradeHost();

Et voilà, c’est cours et assez simple, il ne reste plus qu’à enregistrer ça sous upgrade-vm.py
On va simplement parcourir la liste des machines virtuel et exécuter « apt-get update » et « apt-get upgrade ».

Vous pouvez dès à présent tester votre script :

python upgrade-vm.py

2 eme méthode: le package cron-apt

Au lieu de mettre à jour toutes ses VM depuis la machine host, il y a toujours la possibilité de le faire VM par VM lors de la configuration.
Pour ça, c’est assez simple :

apt-get install cron-apt

Malheureusement, pour obtenir le comportement que l’on souhaite, il va falloir faire quelques modifications.
1 – Activer l’installation des mises à jour (par défaut, il verifie juste s’il y en a sans les installer)

echo "dist-upgrade -y -o APT::Get::Show-Upgraded=true" > /etc/cron-apt/action.d/5-install

2 – Limiter les mises à jours à celles de sécurités, pour cela, dans le fichier /etc/apt/security.sources.list

# squeeze security
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

Et appliquer ce fichier à apt-cron, dans /etc/cron-apt/config:

OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"

Dorénavant Cron-APT utilisera uniquement le fichier /etc/cron-apt/security.sources.list pour vérifier la présence de mises à jour, et ignorera donc les mises à jour autres que celles de sécurité.

Attention quand même !

Attention au dérapage !

Attention au dérapage !

Attention cependant, cette opération n’est pas magique et des problèmes peuvent survenir suite à la mise à jour d’un package.
C’est pour ça que l’utilisation de monit (ou autre système de monitoring) est vivement recommandé pour détecter le moindre problème si un process foire après une update.
Une fois que tout est bon, il est facile de rajouter cette étape en crontab (genre tous les lundi à 8h du matin).

Par la meme, ca ne vous dispense pas de temps en temps de faire des dist-upgrade sur les VM (update majeur de l’os).

Allez, à la prochaine

Leave a reply


Trackbacks