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).
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 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
Trackbacks