serveurs:mise-a-jour:systeme-debian

Ceci est une ancienne révision du document !


Mise à jour du système Debian

Procédure de mise à jour

  • Informer à l'avance les principaux utilisateurs de l'instance de la mise à jour en cours.
  • Vérifier que l'instance à mettre à jour a bien été sauvegardée par le mécanisme de snapshot d'OVH.
  • Vérifier que la sauvegarde via Borgmatic du système et des éventuelles base de données a bien été réalisé.
  • Connectez vous en tant que root à l'instance depuis la console VNC du manager OVH. Cela permettra de surveiller l'instance lors des redémarrages.
  • Vérifiez et noter le système d’exploitation actuellement installé sur votre machine : lsb_release -a
  • Vérifiez et noter le noyau actuellement installé : uname -mrs
  • Vérifier et noter la version de Debian : cat /etc/debian_version
  • Sauvegarder les éléments qui pourrait s'avérer nécessaire une fois la mise à jour lancée :
    cd /home/admin/dwl/
    dpkg --get-selections "*" > system-$(lsb_release --codename|cut -f2)-$(date +"%Y-%m-%d")_installed_packages.txt
    tar -cjf system-$(lsb_release --codename|cut -f2)-$(date +"%Y-%m-%d")-var-lib-dpkg.tar.bz2  /var/lib/dpkg
    tar -cjf system-$(lsb_release --codename|cut -f2)-$(date +"%Y-%m-%d")-var-lib-apt-extended_states.tar.bz2 /var/lib/apt/extended_states
    tar -cjf system-$(lsb_release --codename|cut -f2)-$(date +"%Y-%m-%d")-etc.tar.bz2 /etc
    chmod 600 system-*
    chown admin: system-*
  • En local sur votre machine, créer un dossier qui stockera les éléments les plus important avant la mise à jour : mkdir -p ~/Data/sinp-<region>/system-upgrade/<instance>-srv/
    • Placez vous dans ce dossier : cd ~/Data/sinp-<region>/system-upgrade/<instance>-srv/
    • Récupérer les éléments présent sur le serveur : scp admin@<instance>-<region>-sinp:/home/admin/dwl/system-* .
  • Téléchargez et installez les derniers paquets et les mises à jour en attente sur votre version actuelle de Debian :
    apt update
    apt upgrade
    apt full-upgrade
    apt autoremove --purge
  • Lister les paquets obsolètes pour les supprimer si possible avec les commandes suivantes :
    apt list ~o
    apt list ?obsolete
    aptitude search '~o'
    • Suppression des paquets listés avec apt remove <nom-paquet-1> <nom-paquet-1> <nom-paquet-…>
  • Supprimer les paquets n'appartenant pas aux dépôts officiel Debian et qui ne sont pas utile sur le serveur. Il faut bien sûr garder les paquets nécessaire (Ex. Docker, Postgreql). Utiliser la commande :
    apt list --installed "?not(?origin(debian))"
  • Chercher et supprimer les anciens fichier de configuration devenus inutiles : find /etc -name "*.dpkg-*" -o -name "*.ucf-*" -o -name "*.merge-error"
    • Utilisation de diff pour voir les différences et application des changements aux fichiers de config existants.
    • Suppression du fichier .dpkg-* après correction.
  • Vérifier l'absence de paquet dans un mauvais état d'installation :
    • dpkg --audit
    • dpkg --get-selections "*" > ~/curr-pkgs.txt
    • Chercher les paquets "hold" : dpkg --get-selections | grep 'hold$'
  • Redémarrez le système pour installer le dernier noyau Linux et les autres mises à jour : systemctl reboot
  • Vérifier les sources de paquets extérieurs à la distribution Debian dans : ll /etc/apt/sources.list.d/ et aussi dans le fichier vi /etc/apt/sources.list
    • Si des sources extérieures de paquets extérieures à Debian sont référencées dans le fichier sources.list les déplacer dans des fichiers indépendant dans le dossier /etc/apt/sources.list.d/.
      • Normalement, nous devrions avoir : docker et postgresql.
    • Il faudra les mettre à jour également vers la nouvelle version de Debian lorsque nous le ferons pour le fichier principal : sources.list ⇒ changement du nom de la version de Debian.
  • Mettez à jour les dépôts du fichier sources.list vers ceux de la nouvelle version de Debian :
    • Debian 11 vers 12 ⇒ bullseye par bookworm : sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
    • Debian 10 vers 11 ⇒ buster par bullseye : sed -i 's/buster/bullseye/g' /etc/apt/sources.list
  • Vérifier que tout a bien été remplacé correctement : vi /etc/apt/sources.list
  • Remplacer également les occurrences de l'ancien nom de version par le nouveau dans tous les fichiers du dossier /etc/apt/sources.list.d/
  • ⚠ IMPORTANT : Lancer une session screen pour pouvoir retrouver l'état de la mise à jour en cas de déconnexion réseau : screen -S upgrade-system
  • Mettez à jour les paquets :apt update
  • Effectuer une mise à niveau minimale (met à niveau tous les paquets existants sans installer ni supprimer d’autres paquets) : apt upgrade --without-new-pkgs
  • Au cours du processus de mise à niveau, vous recevrez sans doute diverses questions comme « Voulez-vous redémarrer le service ? » ou bien « Que faire avec ce fichier de configuration ? ». D’une manière générale, répondez Oui pour redémarrez les services et appuyez sur Entrée pour conserver les fichier de configurations existants, sauf si vous savez ce que vous faites.
  • Effectuer la mise à niveau complète : apt full-upgrade
  • Une fois la mise à niveau vers la nouvelle version de Debian terminée, redémarrez votre machine : systemctl reboot
  • Vérifiez que la nouvelle version de Debian a bien été installé : lsb_release -a et cat /etc/debian_version
  • Supprimez les paquets obsolètes : apt autoremove --purge
  • Vérifier que tous les paquets sont bien à jour. Il reste quelques fois des paquets nécessitant une mise à jour :
    apt update
    apt upgrade
    apt full-upgrade
    apt autoremove --purge
  • Plutôt que d'attendre la prochaine mise à jour de Debian, vous pouvez dès maintenant chercher et supprimer les anciens fichier de configuration devenus inutiles : find /etc -name "*.dpkg-*" -o -name "*.ucf-*" -o -name "*.merge-error"
    • Utilisation de diff pour voir les différences et application des changements aux fichiers de config existants. L'idée est de garder les modifications que nous avons fait et d'introduire les changements effectués par le mainteneur du paquet…
    • Lorsqu'il n'y a plus que nos changements comme différence, nous pouvons supprimer le fichier .dpkg-*.

Procédure post mise à jour

  • A priori, l'utilisation de iptables-legacy comme alternative d'Iptables force la désinstallation de Firewalld et de Docker-CE avant la mise à jour. Il et donc nécessaire de les ré-installer ensuite.
  • Ré-installation de Firewalld : apt install firewalld
    • Mise à jour de l'alternative iptables : update-alternatives --config iptables choisir "iptables-legacy"
    • Il ne semble pas nécessaire de recréer les règles du parefeu qui semble continuer à utiliser "iptables-legacy".
  • Ré-installation de Docker, en suivant la même procédure que pour l'installation initiale
    • Relancer les stacks Docker Compose : docker compose down ; docker compose up -d
    • Vérifier avec Portainer (https://manager.<domaine-sin>/) le bon fonctionnement des containers.
  • La mise à jour du système semble rendre non-fonctionnel les venv Python créé sous l'ancienne version du système. Il faut donc les recréer :
    • Recréation du venv du script /opt/srvstatus :
      • Sauvegarder l'ancien venv : mv venv "venv.save$(date +"%Y-%m-%d")"
      • Réinstaller en suivant la documentation (inule de cloner à nouveau, mettre à jour seulement avec git pull).
  • Pour le serveur db-srv, il a été nécessaire de :
    • désinstaller la dernière version de Postgresql (16) qui s'est installé automatiquement :
      • voir les version actuelles de Postgresql qui fonctionnent : pg_lscluster
      • chercher les paquets Postgresql installés : apt list –installed|grep postgresql
    • Corriger les collations des bases de données Postgresql :
      • Passer en utilisateur postgres : su - postgres
      • Lancer Psql : psql
      • Lister les problèmes de collations vis à vis des bases de données :
        SELECT datname,
          datcollate,
          datcollversion,
          pg_database_collation_actual_version(oid)
        FROM pg_database;
      • Pour chaque base avec une collation datcollversion différente de pg_database_collation_actual_version, il faut :
        • Basculer sur la base (Ex. pour geonature2db) : \c geonature2db
        • Liste les éventuels objets à reconstruire :
          SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",  
            pg_describe_object(classid, objid, objsubid) AS "Object"  
          FROM pg_depend d JOIN pg_collation c  
            ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid  
          WHERE c.collversion <> pg_collation_actual_version(c.oid)  
          ORDER BY 1, 2;
        • Mettre à jour la collation, une fois les objets reconstruits :
          ALTER DATABASE geonature2db REFRESH COLLATION VERSION;
    • Se connecter à web-srv pour Relancer les services SystemD de GeoNature, GeoNature-Atlas, TaxHub et UsersHub. L'arrêt de la base de données Postgresql semble leurs poser problème dans certains cas.
  • Pour le serveur web-srv, il a été nécessaire de :
    • Recréer les venv de :
      • GeoNature
      • GeoNature-Atlas
      • TaxHub
      • UsersHub
    • Relancer les services SystemD de GeoNature, GeoNature-Atlas, TaxHub et UsersHub.
  • Pour le serveur bkp-srv, il a été nécessaire de recréer les venv suivant :
  • Résultat de lsb_release -a :
    No LSB modules are available.
    Distributor ID: Debian
    Description:    Debian GNU/Linux 11 (bullseye)
    Release:        11
    Codename:       bullseye
  • Résultat de uname -mrs :
    Linux 5.10.0-27-cloud-amd64 x86_64
  • Résultat de cat /etc/debian_version :
    11.8
  • Résultat de apt list ~o :
    gcc-8-base/now 8.3.0-6 amd64  [installé, local]
    libapt-inst2.0/now 1.8.2.3 amd64  [installé, local]   
    libapt-pkg5.0/now 1.8.2.3 amd64  [installé, local]
    libboost-iostreams1.67.0/now 1.67.0-13+deb10u1 amd64  [installé, local]
    libboost-system1.67.0/now 1.67.0-13+deb10u1 amd64  [installé, local]
    libcwidget3v5/now 0.5.17-11 amd64  [installé, local]  
    libdns-export1104/now 1:9.11.5.P4+dfsg-5.1+deb10u9 amd64  [installé, local]
    libffi6/now 3.2.1-9 amd64  [installé, local]
    libgcc1/now 1:8.3.0-6 amd64  [installé, local]
    libhogweed4/now 3.4.1-1+deb10u1 amd64  [installé, local]
    libicu63/now 63.1-6+deb10u3 amd64  [installé, local]  
    libip4tc0/now 1.8.2-4 amd64  [installé, local]
    libip6tc0/now 1.8.2-4 amd64  [installé, local]
    libisc-export1100/now 1:9.11.5.P4+dfsg-5.1+deb10u9 amd64  [installé, local]
    libjson-c3/now 0.12.1+ds-2+deb10u1 amd64  [installé, local]
    libmpdec2/now 2.4.2-2 amd64  [installé, local]
    libnettle6/now 3.4.1-1+deb10u1 amd64  [installé, local]
    libprocps7/now 2:3.3.15-2 amd64  [installé, local]
    libpython3.7-minimal/now 3.7.3-2+deb10u6 amd64  [installé, local]
    libpython3.7-stdlib/now 3.7.3-2+deb10u6 amd64  [installé, local]
    libreadline7/now 7.0-5 amd64  [installé, local]
    linux-image-4.19.0-26-cloud-amd64/now 4.19.304-1 amd64  [installé, local]
    python3.7-minimal/now 3.7.3-2+deb10u6 amd64  [installé, local]
  • Résultat de find /etc -name "*.dpkg-*" -o -name "*.ucf-*" -o -name "*.merge-error" :
    /etc/default/rkhunter.ucf-dist
    /etc/firewalld/firewalld.conf.dpkg-dist
    /etc/ca-certificates.conf.dpkg-old
    /etc/ssh/sshd_config.ucf-dist
    /etc/sysctl.conf.dpkg-dist
    /etc/rkhunter.conf.dpkg-dist
    /etc/cron.daily/bsdmainutils.dpkg-remove
    /etc/cron.daily/rkhunter.dpkg-dist
    /etc/apt/apt.conf.d/50unattended-upgrades.ucf-dist
    /etc/cloud/cloud.cfg.dpkg-dist
  • Fichier sources.list pour Debian 12 :
    1. # Main
    2. deb http://deb.debian.org/debian bookworm main
    3. deb-src http://deb.debian.org/debian bookworm main
    4. # Security
    5. deb http://security.debian.org/debian-security bookworm-security main
    6. deb-src http://security.debian.org/debian-security bookworm-security main
    7. # Update
    8. deb http://deb.debian.org/debian bookworm-updates main
    9. deb-src http://deb.debian.org/debian bookworm-updates main
    10. # Backports
    11. deb http://deb.debian.org/debian bookworm-backports main contrib non-free
    12. deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free
  • Résultat de lsb_release -a :
    No LSB modules are available.
    Distributor ID:	Debian
    Description:	Debian GNU/Linux 10 (buster)
    Release:	10
    Codename:	buster
  • Résultat de uname -mrs :
    • db-srv :
      • SINP-PACA :
        Linux 4.19.0-22-cloud-amd64 x86_64
      • SINP-AURA :
        Linux 4.19.0-23-cloud-amd64 x86_64
    • web-srv :
      • SINP-PACA :
        Linux 4.19.0-24-cloud-amd64 x86_64
      • SINP-AURA :
    • bkp-srv :
      • SINP-AURA :
        Linux 4.19.0-25-cloud-amd64 x86_64
  • Résultat de cat /etc/debian_version :
    10.13
  • Fichier sources.list de Debian 11 :
    1. # Main
    2. deb http://deb.debian.org/debian bullseye main
    3. deb-src http://deb.debian.org/debian bullseye main
    4. # Security
    5. deb http://security.debian.org/debian-security bullseye-security main
    6. deb-src http://security.debian.org/debian-security bullseye-security main
    7. # Update
    8. deb http://deb.debian.org/debian bullseye-updates main
    9. deb-src http://deb.debian.org/debian bullseye-updates main
    10. # Backports
    11. deb http://deb.debian.org/debian bullseye-backports main contrib non-free
    12. deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free
  • serveurs/mise-a-jour/systeme-debian.1706095927.txt.gz
  • Dernière modification : 2024/01/24 11:32
  • de jpmilcent