Project

General

Profile

Actions

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 :

  1. passer sous l'user git
    sudo -u git -i
  1. récupérer la dernière version
    cd gitolite
    git fetch
    git checkout v3.6.11
  1. 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
  1. 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