Contents
Voici la doc d'upgrade d'Alternc sur nos serveurs.
historique
Une fois la mise à jour terminé ne pas oublier de tester.
Mise à jour 3.5.x vers 3.5.y
Cette procédure s'applique pour des mises à jour de versions Koumbit à Koumbit (~rc ou ~nmu).
À partir de bookworm, on passe aux sources upstream.
Avant de commencer, assurez-vous que tout roule et que vous avez l'espace disque disponible. Ça peut valoir la peine de se faire un courriel de test par exemple. Il est bon également d'avoir en main un courriel extérieur à l'installation pour pouvoir communiquer en cas de problème.
Cette procédure prend environ 45 minutes et implique généralement un downtime de quelques minutes.
- Noter la version actuelle d'AlternC
- Il y a une version de package, ex.: 3.5.0~rc1+0~20191218224408.56~1.gbp
- Mais aussi la version taguée dans Git, ex.: 3.5.0.4
- backup du code d'AlternC
# whereis alternc alternc: /usr/sbin/alternc.install /usr/lib/alternc /etc/alternc /usr/share/alternc
- /usr/sbin/alternc.install est un symlink donc on n'a pas à le conserver
- /usr/lib/alternc : ce sont les scripts. On fait un git init / git add / git commit de tout
- /etc/alternc : config. faire un commit dans /etc vu qu'il y devrait déjà y avoir un dépôt Git pour etckeeper
- /usr/share/alternc : le code. On fait un git init / git add / git commit de tout
- Backup de la base de données
mkdir ~/YYYYMMDD_backups_pre_upgrade_altc mysqldump alternc > ~/YYYYMMDD_backups_pre_upgrade_altc/alternc.sql
- Vérfier que les derniers backups se sont terminés sans erreurs.
tail /var/log/backupninja.log # Voir le motd.d pour la commande exacte qui peut être avec borg rdiff-backup -l backup-server.koumbit.net@backup.koumbit.net::/backup/server.koumbit.net//rdiff-backup
- Vérifier l'état des paquets
apt-mark showhold apt-cache policy $(aptitude search ~i~nalternc -F %p | tr -s '\n' ' ') # et ensuite apt-cache policy des autres paquets on hold
Pour une vue rapide: for i in $(apt-mark showhold); do echo $i; apt-cache policy $i | grep -A 1 Installed; done. S'il y a des updates dispos, checker ce que c'est pour avoir une idée de l'impact.
- Assurer que les dernières mises à jour ont bien été appliquées
Dans la base de données d'AlternC, la "value" de la ligne dont le "name" est "alternc_version" dans la table "alternc_status" devrait correspondre au dernier fichier de /usr/share/alternc/install/upgrades/3.5.0.x.xxx. Ou autrement dit :
> SELECT value FROM alternc_status WHERE name='alternc_version'; - Retirer le hold sur les paquets à upgrader En général, il s'agit des paquets suivants :
apt-mark unhold alternc alternc-certificate-provider-letsencrypt alternc-roundcube roundcube roundcube-mysql roundcube-plugins
- Faire la mise-à-jour
apt update apt upgrade
Le upgrade mentionne des changements dans certains fichiers et nous demande de choisir quelle version conserver. Prenez note de ces changements en regardant le diff, mais en général on veut prendre les versions fournies par les paquets. Puppet va remettre les configurations nécessaires à priori.
S'il y a roundcube, il est possible que ça demande s'il faut configurer la base de données de roundcube. À priori non puisqu'on a déjà une installation fonctionnelle lors d'un upgrade.
- Bon, dans un cas, le service apache2 n'est plus capable de repartir après ça, mais les sites fonctionnent toujours (?!) Et AlternC indique la nouvelle version ...
- Remettre les paquets on hold Encore une fois, il s'agit des paquets suivants en général :
apt-mark hold alternc alternc-certificate-provider-letsencrypt alternc-roundcube roundcube roundcube-mysql roundcube-plugins
ATTENTION ça va vouloir installer alternC rc~2 de upstream à priori! -- Normalement c'est réglé, à double-checker et mettre à jour cette doc -- Il vaut mieux laisser le hold sur tout paquets installés de Koumbit puis les faire manuellement pour installer la version souhaitée! On devrait avoir de quoi dans puppet pour pinner ça... (truc ajouté, noramelemnt c'est bon, mais bien checker avec apt-cache policy ce qui va être installé!!). Au besoin, en attendant, on peut spécifier d'installer la version qui vient des sources de koumbit, par exemple :
apt install alternc=3.5.0~rc1+0~20230602174409.86~1.gbpa261aa
Faut y aller un paquet à la fois et remettre sur hold après.
- Appliquer la mise-à-jour On a fait un upgrade des paquets, mais la mise-à-jour n'a pas encore été totalement installée dans AlternC. Généralement ici le restart de apache va planter, coupant le service quelques minutes (jusqu'à ce qu'on roule puppet).
/usr/sbin/alternc.install
- Rouler puppet et assurer que tout est beau! La première run de Puppet va potentiellement faire un alternc.install (dépendamment des modifs apportées aux fichiers de conf de alternC par la nouvelle version), ce qui va faire un reload de Apache.
- Remettre le thème de Roundcube
Roundcube revient généralement à son thème original. Il faut changer le fichier /etc/roundcube/config.inc.php et changer la string 'larry' par 'elastic' (responsive) pour la skin utilisée par Roundcube.
- Assurer que tous les services fonctionnent!
- Si le module alternc-php-fpm est utilisé, bien vérifier que tous les services phpx.x-fpm sont repartis
Vérifier qu'il n'y ait pas de problème qui ressortent dans la file root
Mesures à prendre lors de l'upgrade vers Bullseye
Ces mesures sont temporaires pendant que l'on fait le switch de AlternC 3.5 buster à AlternC compatible avec bullseye
- Désactiver Mailman (mettre mailman à "false" dans puppet, et unhold les packages alternc-mailman et mailman suffit. Faut rouler puppet plusieurs fois. Il y a aussi une cron à supprimer manuellement sinon ça va spammer la file root en essayant de rouler un script qui n'existe pas : /etc/cron.d/alternc-mailman )
- Spécifier le path du webroot pour les certs en ajoutant dans les hiera (seulement si on a installé alternc-certificate-provider-letsencrypt de unstable) :
profile::letsencrypt::webroot_path: '/var/lib/acme'
MAJ 3.3.11 (stretch) -> 3.5pre
Une documentation plus à jour est disponible côté upstream: https://aide.alternc.org/300/Mise-a-jour-3-3-x-vers-3-5-x
En date du 27 mai 2019! 29971 Note, on vise l'intégration à puppet4 après la maj.
- Vérifier les configurations de debconf de votre alternc. Ça va vous aider si jamais puppet écrase certaines configurations.
# debconf-get-selections | grep alternc > /root/MAJalternc-debconfsetting.txt # cat !$
- rouler alternc.install et raccorder les changements au templates
- Avant de partir analyser le setup de vhost d'AlternC sur la base de données alternc
MariaDB [alternc]> select count(0), type from sub_domaines group by type;
- installer alternc-ssl (sinon, alternc3.5 va dire que certains table comme alternc.certificates n'existe pas)
- stop puppet : puppet agent --disable
sources de koumbit dépot alternc35 : http://debian.koumbit.net/debian/dists/alternc35/ :
echo 'deb http://debian.koumbit.net/debian alternc35 main' > /etc/apt/sources.list.d/alternc35.list apt update- enlèver les sources d'upstream ou de 3.3 de kt
faire un backup de la base de données :
mysqldump alternc > "/root/alternc-pre-upgrade-`date +%F`.sql"
update les packages :
apt remove alternc-ssl
- Retirer la cron-job qui n'est pas supprimé quand on supprime le package.
rm /etc/cron.d/alternc-ssl
apt upgrade alternc alternc-roundcube alternc-mailman
- Retirer la cron-job qui n'est pas supprimé quand on supprime le package.
mettre la ligne (sans quotes) ALTERNC_REQUEST_CERTIFICATES=system dans /etc/alternc/local.sh
Ceci fera en sorte que alternc-certificate-provider-letsencrypt ne demande seulement que les certificats de système lors d'alternc.install (e.g. ça évite d'attendre que des centaines de noms de domaines demandent soudainement un certificat)
dans la base de données d'alternc: assurer que les variables fqdn_dovecot, etc. sont correcte dans le système :
update variable set value = 'mail.<domaine>' where name in ('fqdn_postfix', 'fqdn_dovecot'); update variable set value = 'ftp.<domaine>' where name = 'fqdn_proftpd'; update variable set value = 'listes.<domaine>' where name = 'mailman_url';
- rouler alternc.install
erreur
Running upgrade script 3.5.0.1.sql ERROR 1146 (42S02) at line 23: Table 'alternc.certificates' doesn't exist ERROR 1146 (42S02) at line 41: Table 'alternc.certif_hosts' doesn't exist ERROR 1062 (23000) at line 69: Duplicate entry 'fqdn_dovecot' for key 'PRIMARY' ERROR 1062 (23000) at line 73: Duplicate entry 'fqdn_postfix' for key 'PRIMARY' ERROR 1062 (23000) at line 77: Duplicate entry 'fqdn_proftpd' for key 'PRIMARY' Running upgrade script 3.5.0.2.sql ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE alternc_status SET value='3.5.0.2.sql' WHERE name='alternc_version'' at line 5 Running upgrade script 3.5.0.3.sql ERROR 1071 (42000) at line 3: Specified key was too long; max key length is 1000 bytes alter table sub_domaines drop index compte; alter table sub_domaines modify column valeur VARCHAR(1024);
- débogguer ce bris
- remplace webmail CNAME avec roundcube webmail access
- réactiver puppet
MAJ d'alternc de wheezy à stretch
En 2017/2018, nous avons mis à jour alternc dans le cadre de mise à jour des systèmes d'exploitation.
Listes des installatinos d'AlternC qui devront être mis à jour bientôt.. 25205
- listes des installation d'AlternC qui ont été mis à jour
MAJ d'alternc de bullseye à bookworm
À partir de debian bookworm, on passe des sources Koumbit (branche PU) aux sources upstream.
Page d'aide alternC: https://aide.alternc.org/300/Mise-a-jour-3-5-rcX-vers-3-5-0
Avant de commencer, assurez-vous que toutes les fonctionnalités d'alternC roulent sans problème, et que vous avez l'espace disque suffisant.
Se créer un courriel test est une bonne idée.
Il est bon également d'avoir en main un courriel extérieur à l'installation pour pouvoir communiquer en cas de problème.
Cette procédure n'a pas été testée sur un serveur roulant mailman3
Préparation
Avant toute chose, assurez-vous d'avoir des backups à jour!
On recommande également de faire des git init/commit dans les dossiers alternc (/usr/share/alternc/ et /usr/lib/alternc/), et dans /etc. Enfin, un backup de la DB alternC devrait être fait.
Si alternc-php-fpm doit être mis à jour, il est préférable de le faire avant. On veut minimalement la version 3.4.1~3+0~20260116, les versions précédentes ayant une incompatibilité avec php 8.x (voir 51284).
Module pour les certificats
Si l'installation utilise toujours le module alternc-certificate-provider-letsencrypt, on va vouloir le retirer pour utiliser plutôt le module upstream, renommé à alternc-acme.
En date de décembre 2025, le paquet transitionnel alternc-certificate-provider-letsencrypt upstream semble brisé, avec un conflit de dépendances. On va donc simplement le supprimer.
- Supprimer le module et installer alternc-acme
# apt remove alternc-certificate-provider-letsencrypt # apt install alternc-acme
- Appliquer le changement à alternC
# alternc.install
- Faire des commits si besoin
Passage de puppet 5.x à puppet 7.x
Si le serveur est géré par puppet, faire le changement de puppetmaster en vue de l'upgrade à bookworm: PuppetConfiguration#Switch_de_puppet5_.2BAOA_puppet7
Ré-installation de alternC depuis les sources upstream
Normalement, aucune coupure n'est à prévoir.
- S'assurer que les sources upstream sont bien présentes sur le serveur (si géré par puppet, ça devrait)
Si le serveur est dans puppet: switcher la version à upstream dans les hiera (profile::alternc::alternc_version) et rouler puppet [TOFIX: ça retire les sources alternc35 Koumbit, mais on peut en avoir encore besoin pour par exemple alternc-nss et alternc-php-fpm)
Supprimer les scripts d'upgrade de alternC: rm /usr/share/alternc/install/upgrades/*
Ré-installer alternC: apt install alternc --reinstall
- si debconf demande des confs / changements
"Enable SFTP support with Proftp" -> off
modif de /etc/alternc/templates/dovecot/conf.d/95_alternc.conf -> ok (puppet remettra ce qu'il faut)
modif de /etc/alternc/templates/opendkim.conf -> ok (puppet remettra ce qu'il faut)
modif de la conf proftpd -> ok (puppet remettra ce qu'il faut)
- si debconf demande des confs / changements
- Rouler alternc.install
Modifier la version d'update dans la DB: UPDATE alternc_status SET value="3.4.10.sql" WHERE name="alternc_version";
Rouler le check d'upgrade pour appliquer: /usr/share/alternc/install/upgrade_check.sh
Faire un dernier apt install alternc --reinstall suivi d'un alternc.install
Si le serveur est dans puppet, la run suivante va venir modifier les mots de passe alternC dans les confs postfix/dovecot, et les courriels cessent alors de fonctionner correctement. Dès qu'on a roulé puppet pour que les mots de passe gérés soient remis en place, il faut refaire un alternc.install pour que alternC les utilise et les applique aux confs. On fait ensuite une dernière run puppet pour remettre en place certaines chose que alternc.install écrase...
Pour finir, refaites des commits dans les dossiers alternC et /etc.
OS upgrade
La version de PHP par défaut sera 8.2 après l'upgrade. Tous les sites "Locally hosted" vont ainsi passer de 7.4 à 8.2, ce qui pourrait provoquer des erreurs! Si alternc-php-fpm n'est pas installé, soyez prudents et anticipez le changement de version de PHP avant d'aller de l'avant.
Si alternc-php-fpm est installé, vous serez toujours en mesure de passer les sites Locally Hosted à php7.4-fpm s'ils venaient à cesser de fonctionner. S'il y a beaucoup de sites, vous pourriez envisager de tout passer à 7.4-fpm *avant* l'upgrade.
On peut maintenant faire l'upgrade à Bookworm: voir BookwormUpgrade.
Upgrade roundcube
Si vous étiez avec roundcube 1.4.15, l'interface aura cessé de fonctionner, n'étant pas compatible avec PHP 8.2. Il vous faut donc upgrader roundcube, ainsi que le module alternC pour roundcube (on passe à upstream).
- alternc-roundcube vient directement de alternC, sa version disponible devrait être la même que alternC (3.5.4 en date de rédaction)
Le paquet devrait être on hold, installer la version de alternC upstream: apt install alternc-roundcube=3.5.4
- Rouler alternc.install
- Rouler puppet si le serveur est géré par puppet
Retirer le hold sur les paquets roundcube: apt-mark unhold php-net-sieve roundcube-core roundcube roundcube-mysql roundcube-plugins
Rouler apt update && apt upgrade
- si changement de conf: keep the local configuration file
- Remettre les paquets sur hold
- Rouler puppet (doit reloader apache)
Le webmail devrait maintenant loader correctement!
Étapes finales
- Assurer que le service proftpd est reparti correctement, sinon restarter
Assurer que opcache ne soit pas chargé plusieurs fois (php -v)
- dans deux cas, on avait 05-opcache.ini ET 10-opcache.ini, il faut virer celui de trop!
- vérifier côté /etc/php/8.2/cli/ ET /etc/php/x.x/fpm/
- Vérifier les courriels à root afin d'assurer qu'il n'y a aucun problème
il est arrivé que le lock file de alternC ne soit pas correctement retiré, provoquant l'envoi de plusieurs courriels aux 5mn lorsque les crons roulent: There is a file /run/alternc/jobs-lock [...]
- alternc.install crée ce lock, et est censé le supprimer à la fin... si toujours là, le supprimer
- Bien sûr, vérifier que tous les services fonctionnent correctement!
Si AlternC n'est pas dans puppet
Il faut faire bien attention avec le clean_conflicts vu que puppet ne pourra pas remettre les bonnes confs.
Si jamais opendkim a des problèmes, vérifier que la conf dans /etc/opendkim.conf est bien comme celle dans /etc/alternc/templates/opendkim.conf. Si ce n'est pas le cas, on peut la remplacer.
Ce genre de problème pourrait aussi arriver avec d'autres fichiers de configuration.
Le Wiki Koumbit