Mises à jour automatiques

De VK Wiki
Aller à : navigation, rechercher

Afin de maintenir un fonctionnement fiable et sécuritaire des serveurs, il est important d'effectuer régulièrement des mises à jour du système. Ceci peut être fait à l'aide de des instruction apt-get update suivie d'apt-get upgrade, mais il est plus confortable de programmer le système pour que les mises à jour se fassent de façon autonome.


Selon les conseil qui nous ont été prodigués par Libéo, le mieux est de n'effectuer que les mises à jour dites de sécurité. En effet, si les mises à jour de sécurités garantissent la continuité du fonctionnement du système, les mises à jour de fonctionnalités peuvent avoir des effets non maîtrisés ; il vaut mieux donc ne les effectuer que lorsque l'on a moyen de vérifier immédiatement que tout fonctionne, et de revenir en arrière dans le cas contraire.


Typiquement, les mises à jours complètes sont faites lors de l'installation d'un nouveau serveur pour avoir la dernière version de tous les éléments, sans risquer d'altérer quoi que ce soit, puisque le serveur est vierge.


Désactivation de maj de fonctionnalités

Toutes les commandes ci-dessous doivent se faire avec des droits de super-utilisateur, il faut avant de commencer passer en mode super-utilisateur

su

Une fois en mode super-utilisateur, ouvrir le fichier des sources de l'application apt-get (apt-get est l'outil qui se charge d'installer, désinstaller et de mettre à jour tout logiciel) nano /etc/apt/sources.list


Le fichier devrait ressembler au format ci-dessous

#
# deb cdrom:[Debian GNU/Linux 8.3.0 _Jessie_ - Official amd64 NETINST Binary-1 20160123-18:59]/ jessie main
#deb cdrom:[Debian GNU/Linux 8.3.0 _Jessie_ - Official amd64 NETINST Binary-1 20160123-18:59]/ jessie main
deb http://debian.mirror.rafal.ca/debian/ jessie main
deb-src http://debian.mirror.rafal.ca/debian/ jessie main


deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main


# jessie-updates, previously known as 'volatile'
deb http://debian.mirror.rafal.ca/debian/ jessie-updates main
deb-src http://debian.mirror.rafal.ca/debian/ jessie-updates main

#php7
debhttp://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx


Pour désactiver les mises à jours fonctionnelles, il faut commenter - en plaçant un signe dièse # en début de ligne - les lignes de la source correspondantes.

Il s'agit du premier et du troisième blocs :

deb http://debian.mirror.rafal.ca/debian/ jessie main
deb-src http://debian.mirror.rafal.ca/debian/ jessie main

vers

#deb http://debian.mirror.rafal.ca/debian/ jessie main
#deb-src http://debian.mirror.rafal.ca/debian/ jessie main

et --

deb http://debian.mirror.rafal.ca/debian/ jessie-updates main
deb-src http://debian.mirror.rafal.ca/debian/ jessie-updates main

vers

#deb http://debian.mirror.rafal.ca/debian/ jessie-updates main
#deb-src http://debian.mirror.rafal.ca/debian/ jessie-updates main


Les adresses du fichier à modifier peuvent différer de celles indiquées ci-dessus, par exemple http://ftp3.nrc.ca/debian/ au lieu de http://debian.mirror.rafal.ca L'important est de ne pas modifier les lignes qui contiennent le mot security et idéalement celles concernant php7 et nginx.


Quitter l'éditeur de texte Ctrl + X

Création du script de mise à jour

Créer un répertoire admin dans /home/ s'il n'existe pas déjà ainsi qu'un répertoire log dans ce répertoire.

mkdir /home/admin

mkdir /home/admin/log

dans ce répertoire, créer un fichier script upgrade.sh

nano /home/admin/upgrade.sh

et le remplir avec les lignes suivantes :

#!/bin/bash
_now=$(date +"%Y_%m_%d_%H%M%S")
_file="/home/admin/log/upgrade_$_now.log"
apt-get update > /dev/null
apt-get -y upgrade > "$_file"
echo "Fin mise à jour système cf: $_file"

Explication :

la première ligne #!/bin/bash indique au système le langage utilisé pour le script. Dans le cas présent, il s'agit d'un script standard en bash ; s'il s'agissait d'un script en node/javascript - ce qui n'est pas le cas ici - cette première ligne serait #!/urs/bin/env node.


Ensuite on détermine la date courante, que l'on enregistre dans une variable _now : _now=$(date +"%Y_%m_%d_%H%M%S")


Puis on utilise cette information pour indiquer dans quel fichier log les informations de la mise à jour seront enregistrées. Ce fichier se trouvera dans le répertoire /home/admin/log et son nom sera upgrade.log avec la date courante avant l'extension .log. _file="/home/admin/log/upgrade_$_now.log"


On lance la recherche de mises à jour ; la redirection > /dev/null indique au système que l'on ne veut afficher le résultat ni à l'écran, ni dans un fichier. /dev/null est synonyme de néant : apt-get update > /dev/null


On lance la mise à jour en forçant les interrogations à oui (option -y), et on enregistre le résultat dans le fichier log préparé deux lignes au dessus. apt-get -y upgrade > "$_file"


Enfin on indique que le traitement est terminé et qu'il n'a pas planté en cours de route echo "Fin mise à jour système cf: $_file"


Le fichier terminé, il faut le rendre exécutable à l'aide de l'instruction chmod +x /home/admin/upgrade.sh

Mise en place de l'automatisme

L'automatisme se fait par l'utilitaire cron de Linux.[1]

Pour créer une nouvelle entrée Crontab, entrer la commande crontab -e. Le sélecteur -e signifie éditer ; pour afficher les commande déjà programmées, on peut utiliser le sélecteur -l crontab -l

La structure du fichier cron est la suivante :

minutes (0-59) | heure (0-23) | jour du mois (1-31) | mois (1-12) | jour de la semaine (0-6) / Dimanche=0 | commande à exécuter


Avec un espace séparant deux colonnes. Ainsi, pour que notre script se répète tous les lundis de chaque semaine à 6h00 du matin, il faut entrer la ligne suivante : 0 6 * * 1 /home/admin/upgrade.sh

Le joker * signifie "n'importe quel" ; par exemple une étoile * dans la colonne mois signifie tous les mois, une étoile dans la colonne jour du mois signifie tous les jours du mois que l'on peut affiner avec la colonne jour de la semaine.

Quitter avec la commande Ctrl-x et c'est prêt !


  1. http://www.adminschoice.com/crontab-quick-reference