Upgrade depuis la mise en production en date du 12 janvier 2020¶
Turlux a travaillé à l'upgrade de COIN, i.e. mise-à-jour et upgrade de l'OS et mise-à-jour de COIN pour être sur la dernière version maintenue par les copains de FAIMaison.
Cette page sert de documentation de l'upgrade de la machine et de COIN qui s'est faite lors de la session de travail adminsys du 12 janvier 2020.
Introduction¶
Nous allons mettre à jour la machine qui heberge COIN.
Il s'agit de pallando (pallando.illyse.org) qui est une VM hébergée chez Tétaneutral.
Ce matin, Turlux a demandé à Tétaneutral de faire un snapshot de la VM au cas ou nous n'aurions pas le temps de finir et/ou si nous avions besoin de revenir en arrière.
Mise à jour de l'OS¶
La machine est actuellement sous Débian wheezie 7, il va falloir la mettre à jour, d'abord sous jessie 8, puis sous stretch 9, puis sous buster 10.
Dans un premier temps, il faut modifier le fichier /etc/apt/sources.list et remplacer les entrées par defaut par:
http://archive.debian.org/debian/ wheezy main http://archive.debian.org/debian-security/ wheezy/updates main
Avant de passer à jessie, faire apt-get update
puis apt-get upgrade
.
Ensuite, dans le meme fichier, changer wheezy par jessie, toujours en utilisant archive.debian.org
.
Ensuite, faire la mise à jour des dépots avec apt-get update
.
Il se peut que lors du apt-get update
, il y ai des problèmes avec l'entrée ayant debian-security
dans l'url, il faut alors commenter les lignes correspondantes et refaire un apt-get update
.
Enfin, mettre à jour les paquets avec apt-get upgrade
et vérifier que l'upgrade ne désinstalle rien ou des choses peu importante.
ATTENTION ! Une fois l'upgrade lancée, un message s'affiche disant qu'il faut un bootloader. IL NE FAUT DONC PAS OUBLIER D'INSTALLER GRUB AVANT LE PROCHAIN REBOOT !!!!
Il peut aussi y avoir un message d'information disant que le paquet postres9.1
est obsolete. Le message fournis les informations nécessaire pour faire la MAJ de postgres
9.1 vers 9.4, i.e. script d'installation et le fait que débian créé une base vide.
Il peut y avoir aussi un problème avec la MAJ du paquet gunicorn. Gunicor est utilisé par COIN. Mais pour l'instant ce n'est pas grave car la cela sera traité par la MAJ de coin.
Ensuite, on fait un apt-get dist-upgrade
. Consulter avec attention ce qui va être installé et surtout désinstallé !!
Si c'est bon, continuer.
Durant l'installation, il peut être notifié que certains fichiers modifiés par nous peuvent être remplacer par la mise à jour du paquet, par exemple pour nscd.
A ce moment, si vous n'ếtes pas sûr, consultez la différence entre les deux fichiers (l'ancien modifié par nous et le nouveau qui sera installé) et/ou regarder le contenu du même fichier sur une autre machine.
Une fois le dist-upgrade, tout de suite installer grub et désinstaller l'ancien bootloader :
apt get install grub-pc apt get remove extlinux
Un fois grub-pc
installé on peut redémarrer la machine. S'assurer que la MAJ a fonctionnée en tapant:
hostnamectl # ou cat /etc/debian_version
Si c'est bon, on peut retirer le cache des paquets téléchargés en tapant :
apt-get autoremove
Juste pour être sur du disque sur lequel est installé
grub-pc, taper la commande:
dpkg-reconfigure grub-pc
Avant d'aller plus loin, il faut migrer la BDD postgresql de la version 9.1 à la version 9.4.
D'abord arrêter postgres:
systemctl postgresql stop
On drop ensuite le "cluster" postgres 9.4 par defaut:
pg_dropcluster --stop 9.4 main
Ensuite on upgrade le "cluster" postgres 9.1 vers 9.4:
pg_upgradecluster 9.1 main
On controle l'état de la conf et du "cluster" postgres:
pg_lsclusters
On arrête ensuite le "cluster" postgres 9.1:
pg_ctlcluster 9.1 main stop
Enfin on retire le paquet postresql 9.1
.
apt-get autoremove postgresql-9.1 postgresql-client-9.1
On redemarre le service postgres et on s'assure qu'il tourne
systemctl restart postgres systemctl status postgres
Maintenant, on va faire la MAJ de jessie vers strech.
Dans le fichier /etc/apt/sources.list
, remplacer les url:
http://archive.debian.org/debian/ jessie main http://archive.debian.org/debian-security/ jessie/updates main
par
http://ftp.rezopole.net.debian.org/debian/ stretch main http://ftp.rezopole.net.debian.org/debian-security/ stretch/updates main
Ensuite, comme précédemmnent, on fait une MAJ des dépots, puis un upgrades des paquets avec les commanges suivantes:
apt-get update apt-get upgrade apt-get dist-upgrade
Comme précedement, il y a des fichiers qui peuvent être remplacés par des fichiers par défaut du à la mise à jours des paquets. Controler alors les changements et conserver la version qui nous intéresse (souvent celle modifiée par nos soins).
Après le dist-upgrade
, on peut faire un reboot.
Après le reboot, faire la migration de postgres 9.4 vers 9.6 comme précédemment, ATTENTION AU CHANGEMENT DE VERSION DE POSTGRES !
systemctl postgresql stop pg_dropcluster --stop 9.6 main pg_upgradecluster 9.4 main pg_lsclusters pg_ctlcluster 9.4 main stop apt-get autoremove postgresql-9.4 postgresql-client-9.4 systemctl restart postgres systemctl status postgres
Puis répéter l'opération pour passer de stretch vers buster.
Dans ce cas, postgres passera de la version 9.6 à 9.11
Après la dernière MAJ vers buster, il y a un problème avec slapd qui doit se
lancer avant bind.
Pour cela, il fault modifier le fichier de service, taper la commande
systemctl edit --full bind
Et ajouter la ligne dans la section [Unit]
Requires=slapd.server
Ensuite, on recharge le fichier de service
systemctl daemon-reload
Et on reboot.
TODO : Ce n'est pas sûr que cela fonctionne, dans notre cas, bind9 ne tournais pas. Donc pour l'instant, il faut lancer bind9 manuellement après chaque redémarrage de pallando.
MAJ de COIN¶
On change d'utilisateur et on se met en coin
su - coin
Ensuite, on va cloner le code de coin dans coin-git
git clone https://code.ffdn.org/FFDN/coin.git coin-git
Ensuite, on créer le virtualenv coin
virtualenv coin-venv
On source l'environment virtuel
source coin-venv/bin/activate
On va dans le dossier coin-git
cd git-coin
On met à jour pip
pip install --ugprade pip
On se crée une branch de travail
git checkout -b illyse-prod
On édite le fichier coin-git/requirements.txt en modifant la ligne
psycopg==2.5.4
vers
psycopg>=2.5.4
Puis on install les dépendences pythons dans l'environnement virtuel:
pip install -r requirements.txt
Ensuite on install gunicorn dans l'environnement virtuel:
pip install gunicorn==19.9.0
Il va falloir crée le fichier de configuration configuration coin-git/coin/settings_local.py or ce fichier n'est pas tracker par git car il comporte des mots de passes et des informations sensibles.
On choisi de faire un dossier coin-conf dans lequel on mettra le fichier settings_local.py puis un lien symbolique de coin-conf/settings_local.py dans
coin-git/coin/settings_local.py
cp ~/coin/coin/settings_local.py ~/coin-conf chmod o-r ~/coin-conf/settings_local.py ln -s /home/coin/coin-conf/settings_local.py /home/coin/coin-git/settings_local.py
Maintenant, il faut modifier le fichier coin-conf/settings_local.py.
Il faut modifier les ligine USER et PASSWORD dans la BDD du LDAP aux alentours
des lignes 27,28 en ajoutant un u
devant, par exemple:
'USER': u'cn=coin,ou=service,....',
Et faire pareil avec les variables LDAP_USER_BASE_DN
, LDAP_GROUP_BASE_DN
,VPN_CONF_BASE_DN
et DSL_CONF_BASE_DN
aux alentours des lignes 61,64. Par
exemple:
LDAP_USER_BASE_DN = u"ou=users,ou=..."
Modifier aussi les lignes suivantes::
SENDFILE_ROOT= " /.../.../..."
en
SENDFILE_ROOT = /home/coin/coin-git/smedia
Ajouter les lignes suivantes:
EXTRA_INSTALLED_APP = ( 'vpn', 'dsl_ldap', )
Verifier les droits du fichier /home/coin-conf/settings_local.py
ls -alht /home/coin/coin-conf
Et s'assurer que le fichier /home/coin/coin-conf/ appartiennent à coin, donc en root :
chmod 640 settings_local.py chown coin:coin settings_local.py
Ensuite on va faire la migration de la BDD dans django, on va donc dans le
dossier coin-git.
cd /home/coin/coin-git
Et on tape la command
./manage.py migrate
On crée ensuite les fichier static
./manage.py collectstatic
Un message indique qu'il va ecraser tous les fichiers d'un dossier, taper yes
et continuer.
Pour stocker les media, facture, pdf, on décide de créer un dossier
coin-data/smedia
mkdir -p coin-data/smedia
On rappatrie ensuite ceux déjà générés
cp -vr /home/coin/coin/smedia/invoices/ coin-data/smedia/
On fait maintenant le lien symbolique de coin-data/smedia vers coin-git/smedia
ln -s /home/coin/coin-data/smedia /home/coin/coin-git/smedia
Maintenant, il va falloir modifier la configuration nginx.
vim /etc/nginx/sites-enabled/coin.illyse.org
Et modifier les entrées static
et protected
comme suit :
server { listen [::]:443 ssl; listen 443 ssl; (...) location /static/ { alias /home/coin/coin-git/coin/static/ ; } localtion /protected/ { internal; alias /home/coin/coin-git/smedia/; }
Maintenant lancer le serveur manauellement pour s'assurer que ça fonctionne
cd ~ cd coin-git ./manage.py runserver http://127.0.0.1:8282
Vérifier que COIN tourne en s'y connectant en tapant coin.illyse.org dans votre
navigateur web. NE PAS FERMER LE TERMINAL car il affichera les log d'accès au
serveur django.
Si tout est bon, on va maintenant faire quelques modifications dans l'interface
d'administration pour s'assurer que tout fonctionne.
Dans notre cas, on a modifié le nom/prénom d'un utilisateur et voir si cela se
répercute bien dans le LDAP.
Ensuite, on crée le service systemd pour lancer coin au démarrage, voir le
fichier /etc/systemd/systemd/coin.service
On le lance:
systemctl start coin
Si tout est bon, on autorise le service au démarrage:
systemctl enable coin
Maintenant on désinstalle le paquet gunicorn car il est utiliser dans l'environment virtuel python de coin.
apt autoremove --purge gunicorn
Ensuite, on met à jour les cron de l'utilisateur coin.
Il faut changer tous les chemin d'appel des scripts, dans notre cas, on a replacer les chemins suivant :
/home/coin/COIN/bin/python
par
/home/coin/coin-venv/bin/python
et
/home/coin/coin/manage.py
par
/home/coin/coin-git/manage.py
Maintenant, on deplace tout ce qui est ancien dans une archive:
cd /home/coin mkdir archive mv coin archive mv COIN archive
Voila, maintenant, ça devrait être, donc, vérifier que la commande ls affiche
les dossiers que nous avons créé qui sont :
- coin-git
- coin-venv
- coin-data
- coin-conf
Enfin, on redémarre la machine pour être sur que tout est bon.
Bonus : gitolite
pallendo heberge également une instance gitolite.
Cette dernière ne fonctionnait plus suite à la MAJ (ou bien ca ne marchait déjà plus...)
Après diagnostique : la version de gitolite était en v3.6.2, la dernière release est la v3.6.11
J'ai donc appliqué la procédure suivante pour effectuer la MAJ :
- passer sous l'user git
sudo -u git -i
- récupérer la dernière version
cd gitolite
git fetch
git checkout v3.6.11
- pour effectuer la MAJ, selon la doc (https://gitolite.com/gitolite/install.html#upgrades), il faut re-executer l'install avec les meme paramètres qu'à l'install initiale. Merci la commande history :p
./install -ln ~/bin
- puis, toujours selon la doc, effectuer la commande suivante :
gitolite setup
Et voila, cela semble refonctionner correctement.
TODO : Dans notre cas, nginx semblait ne pas redémarrer comme il faut. Donc pour l'instant on redémarre manuellement nginx après un reboot de la machine.
VOILA ! C'est fini.
Updated by Baptiste Berton over 2 years ago · 22 revisions