diff --git a/newkernel/README.md b/newkernel/README.md new file mode 100644 index 00000000..3f78a091 --- /dev/null +++ b/newkernel/README.md @@ -0,0 +1,8 @@ +# newkernel + +Installs and configures a script to help manages to reboot on a new kernel. +This script will send an mail when a new kernel is available to plan a reboot. + +## Tasks + +Installation and configuration are performed via `tasks/main.yml`. diff --git a/newkernel/defaults/main.yml b/newkernel/defaults/main.yml new file mode 100644 index 00000000..3f72fbff --- /dev/null +++ b/newkernel/defaults/main.yml @@ -0,0 +1,3 @@ +--- +general_alert_email: "root@localhost" +listupgrade_alert_email: Null diff --git a/newkernel/meta/main.yml b/newkernel/meta/main.yml new file mode 100644 index 00000000..29c56478 --- /dev/null +++ b/newkernel/meta/main.yml @@ -0,0 +1,28 @@ +galaxy_info: + author: Evolix + description: Installation and configuration of the listupgrade script + + issue_tracker_url: https://gitea.evolix.org/evolix/ansible-roles/issues + + license: GPLv2 + + min_ansible_version: 2.2 + + platforms: + - name: Debian + versions: + - jessie + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is + # a keyword that describes and categorizes the role. + # Users find roles by searching for tags. Be sure to + # remove the '[]' above if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of + # alphanumeric characters. Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. + # Be sure to remove the '[]' above if you add dependencies + # to this list. diff --git a/newkernel/tasks/main.yml b/newkernel/tasks/main.yml new file mode 100644 index 00000000..3335224d --- /dev/null +++ b/newkernel/tasks/main.yml @@ -0,0 +1,54 @@ +--- + +- include_role: + name: remount-usr + +- name: Scripts dir is present + file: + path: "/usr/share/scripts" + state: directory + owner: root + group: root + mode: "0700" + +- name: Copy newkernel script + template: + src: newkernel.sh.j2 + dest: "/usr/share/scripts/newkernel.sh" + mode: "0700" + owner: root + group: root + force: yes + +- name: Create /etc/evolinux + file: + path: /etc/evolinux + state: directory + owner: root + group: root + mode: "0700" + +- name: Copy newkernel config + template: + src: newkernel.cnf.j2 + dest: /etc/evolinux/newkernel.cnf + mode: "0600" + owner: root + group: root + force: no + +- name: Cron.d is present + file: + path: "/etc/cron.d" + state: directory + mode: "0755" + owner: root + group: root + +- name: Enable newkernel cron + template: + src: newkernel_cron.j2 + dest: /etc/cron.d/newkernel + mode: "0600" + owner: root + group: root diff --git a/newkernel/templates/newkernel.cnf.j2 b/newkernel/templates/newkernel.cnf.j2 new file mode 100644 index 00000000..473f4813 --- /dev/null +++ b/newkernel/templates/newkernel.cnf.j2 @@ -0,0 +1,4 @@ +#date="entre 18h00 et 23h00" +#clientmail="client@evolix.net" +#mailto="{{ listupgrade_alert_email or general_alert_email | mandatory }}" +#hostname="" diff --git a/newkernel/templates/newkernel.sh.j2 b/newkernel/templates/newkernel.sh.j2 new file mode 100644 index 00000000..b8973920 --- /dev/null +++ b/newkernel/templates/newkernel.sh.j2 @@ -0,0 +1,68 @@ +#!/bin/bash + +set -e + +configFile="/etc/evolinux/newkernel.cnf" + +template=$(mktemp --tmpdir=/tmp evoupdate.XXX) +clientmail=$(grep EVOMAINTMAIL /etc/evomaintenance.cf | cut -d'=' -f2) +mailto=$clientmail +# By default, plan the reboot next month thursday +date="$(date --date="next thursday + 3 weeks" +%A\ %d\ %B)" +hour="entre 18h00 et 23h00" +hostname=$(grep HOSTNAME /etc/evomaintenance.cf | cut -d'=' -f2) +hostname=${hostname%%.evolix.net} +# If hostname is composed with -, remove the first part. +if [[ $hostname =~ "-" ]]; then + hostname=$(echo $hostname | cut -d'-' -f2-) +fi +# Edit $configFile to override some variables. +[ -r $configFile ] && . $configFile + +# Remove temporary files on exit. +trap "rm $template" EXIT + +# No updates? Exit! +nextKernel=$(grep -m1 -aEo "#1 SMP Debian .* \([0-9]{4}-[0-9]{2}-[0-9]{2}\)" /vmlinuz) +currentKernel=$(uname -v) +if [ "$nextKernel" = "$currentKernel" ]; then + exit 0 +fi + +#To: ${clientmail} +cat << EOT > $template +Content-Type: text/plain; charset="utf-8" +Reply-To: equipe@evolix.fr +From: equipe@evolix.net +To: $clientmail +Subject: Prochain creneau pour redemarrage de votre serveur $hostname +X-Date: $date + +Bonjour, + +Le noyau de votre serveur doit être mis à jour. Pour cela nous devons +redémarrer votre machine ${hostname}. + +Sauf indication contraire de votre part, le prochain créneau prévu pour +mettre à jour le noyau de votre serveur est : +Le ${date}, ${hour}. + +Si nous intervenons, un redémarrage complet du serveur sera réalisé, entraînant +plusieurs minutes de coupures. Nous nous assurerons de vérifier le bon +démarrage de la machine ainsi que de ses services. Si nous ne sommes pas +intervenus sur ce créneau, vous recevrez une nouvelle notification le mois +prochain. + +Votre version actuelle du noyau : $currentKernel +Après redémarrage votre version sera : $nextKernel + +N'hésitez pas à nous faire toute remarque sur ce créneau d'intervention le plus +tôt possible. + +Cordialement, +-- +Équipe Evolix +Evolix - Hébergement et Infogérance Open Source http://www.evolix.fr/ +EOT + +<$template /usr/sbin/sendmail $mailto diff --git a/newkernel/templates/newkernel_cron.j2 b/newkernel/templates/newkernel_cron.j2 new file mode 100644 index 00000000..6636c6cd --- /dev/null +++ b/newkernel/templates/newkernel_cron.j2 @@ -0,0 +1 @@ +42 9 1 * * root /usr/share/scripts/newkernel.sh