Cette procédure est en cours de test.

Elle est donc amenée à être modifiée dans les prochaines semaines.

Debian 12 ("Bookworm") a été publié le 10 juin 2023! Donc on veut faire des tests de mise à jour pendant quelque temps pour trouver tous les problèmes potentiels pour ensuite pouvoir upgrader en masse. Voici des notes et références pour la mise à jour.

Voir https://redmine.koumbit.net/projects/kt-sa-debian-upgrades pour la liste complète des mises à jour et des outils de suivi de la progression.

Sommaire des changements

Les changements importants de Bookworm sont bien documentés ici, mais on peut noter rapidement:

Le manuel de mise à jour inclus également les enjeux majeurs de mise à jour.

Upgrade process

Depuis les mises à jour à Lenny, des procédures détaillées sont maintenus par Koumbit, en parallèle avec la documentation officielle. La procédure de BullseyeUpgrade servira de base à celle de Bookworm ici.

Notez aussi que notre documentation vise principalement les serveurs. Par exemple, nous suivons la procédure de temps mort minimal. La procédure devrait tout de même pouvoir être utilisée pour les desktops.

Attention: Selon la l'aide Debian pour la mise à niveau, quelques changements à l'affichage peuvent survenir:

  • " Si vous utilisez le système depuis la console locale, il est possible qu'à certains moments de la mise à niveau la console passe à une vue différente, et que la mise à niveau du système ne soit plus observable. Cela peut par exemple être le cas pour les systèmes qui ont une interface graphique, quand le gestionnaire de session est relancé. Pour revenir à la console traitant le processus de mise à niveau, utilisez les touches Ctrl+Alt+F1 (si vous avez une interface de connexion graphique) ou Alt+F1 (si vous avez une console texte locale) pour revenir au terminal virtuel 1. Remplacez F1 avec la touche Fx où x correspond au numéro du terminal sur lequel se déroule la mise à niveau. Vous pouvez aussi utiliser Alt+flèche gauche ou Alt+flèche droite pour passer d'un terminal en mode texte à un autre."

Normalement, dans les premiers cycles de mise à jour, on documente surtout les problèmes avec les différents packages ensuite, on revoit la procédure de mise à jour pour de l'optimisation.

Pre-upgrade

For office machines, jump over points in the following list that are about backups and monitoring.

  1. Take a look at this page's Problèmes rencontrés section to spot which applications will possibly have issues with the upgrade.

  2. inform users
  3. check to make sure the backup job will not start while the upgrade takes place!
    • grep when /etc/backupninja.conf
  4. check backups on backup server. If the client's backups aren't on our server, make sure we have access to it so we can retrieve it if needed.
  5. check the motd: some important information might be documented there
  6. (Si c'est une node Ganeti)

    • Pour simplifier l'upgrade, on recommande fortement de mettre à jour ganeti avant de commencer la mise à jour de l'OS. On utilise généralement les packages $(release)-backports pour avoir la version de la release debian suivante avant de passer l'OS à cette version là

      • Par contre: noter qu'à ce jour (2023-06) la version dans bullseye-backports n'est pas la même que dans bookworm. La version upstream de ganeti reste la même entre les deux releases debian et donc on peut très probablement tout simplement faire l'upgrade d'OS directement.
    • Important: pour les nodes Ganeti, voir GanetiConfiguration#Mise_.2BAOA_jour

      xen packages for i386 platform do NOT exist since Jessie. All servers should by now already have been migrated to using KVM instead. If the server you are upgrading is a 32bit machine and still uses Xen, you have a problem that needs to be addressed before upgrading. TODO link to documentation about migrating ganeti nodes and instances to KVM.

  7. Put servers in maintenance in Icinga.

  8. (If the server is a physical machine)

    • verify the list of ganeti instances on the node. if netboot0 is hosted on the machine that you want to upgrade, move it to another node (in case a problem happens, you wouldn't be able to netboot). See: GanetiMaintenance#Changer_une_instance_de_node

    • connectez-vous à sa console série pour être prêt.e dans un cas de problème
    • Important: vérifiez que les mots de passe de crypto qu'on a dans le password manager fonctionnent. Voir: LuksMaintenance#Tester_si_on_a_le_bon_mot_de_passe_pour_une_des_clefs_actives

    • assurez-vous d'avoir en main le mot de passe root, au cas où vous tomberiez dans le shell d'urgence
  9. (If for some reason you cannot use bolt to automate the upgrade process), you'll have to jump over to #Proc.2BAOk-dure_d.27upgrade_manuelle_.28utiliser_seulement_si_vous_n.27utilisez_pas_bolt.29

  10. Run the task to prepare the machine for the upgrade process:
    • bolt task run --no-verbose --stream --run-as root --sudo-password-prompt k::debian_upgrade \
        --targets foo.koumbit.net stage=prep

Upgrading the packages

Launch the automated package upgrade procedure with the bolt task:

bolt task run --no-verbose --stream --run-as root --sudo-password-prompt k::debian_upgrade \
  --targets foo.koumbit.net stage=packages

Once this is done, if all went well, proceed to next section!

If however there was an error in the upgrade process, you'll need to fix the situation by ssh'ing in and figuring things out with apt install -f and other such tools.

Re-enable and run puppet!

  1. verify that puppet doesn't break anything:
    • (puppet agent --enable; puppet agent -t --noop --no-report; puppet agent --disable "verifications post-upgrade to bookworm") 2>&1 | less -SR
  2. Re-enable puppet if everything seems ok:
    • puppet agent --enable && puppet agent -t

Things to do after the upgrade

  1. remove nrpe since we don't use it anymore. En cas d'erreur lors de la suppression de /etc/nagios/nrpe.d, retirer manuellement.
    • apt purge nagios-nrpe-server apticron cron-apt
  2. Install the package koumbit-scripts if it's not already there:

    • apt-get install koumbit-scripts-vps

    If sources are missing, add it (see debian.koumbit.net)

  3. check the updates on configuration files, by looking for .dpkg-* or .ucf-* files in /etc, or by using the clean_conflicts script in koumbit-scripts 1.2:

    • /opt/bin/clean_conflicts
  4. On all but Xen domU servers, rerun grub and make sure the right drives are configured for a reboot (e.g.: both sda and sdb).

    • dpkg-reconfigure grub-pc

      Machines that run with grub in EFI mode will probably not have grub-pc installed. The equivalent command would be dpkg-reconfigure grub-efi-amd64 except it won't show a list of disks to install to since grub is installed to the EFI.

  5. Suivre tout les autres procédures applicables (voir la #Autres_procédures)

  6. Minimize the list of packages that were marked as manually installed. This might let apt decide at some point that some packages are not needed anymore.
    • apt-mark minimize-manual
  7. Remove obsolete packages

    • apt autoremove --purge -y
  8. Reboot one last time and monitor for problems in the boot sequence (lags, or errors, fsck, maybe console output failure). If you can't reboot, see PratiquesRécupérationServeur

    • reboot
  9. Cleanup packages that are not in any current apt sources.
    • First have a look at the list of packages to be removed.
    • # list all packages not in any installed sources.
      aptitude search '?narrow(?not(?archive("^[^n][^o].*$")),?version(CURRENT))'
      • First look at the list to see if anything needs to be kept around (like Facter). If so, remove other packages manually from that list.

      If (only if) everything can be removed, you can do so with one command:

      • # uninstall anything that shouldn't be kept around.
        aptitude purge '?narrow(?not(?archive("^[^n][^o].*$")),?version(CURRENT))'
  10. Empty apt cache
    • apt clean
  11. Run puppet again

    puppet agent -t
  12. Si la VM n'est pas dans puppet et que le/les fichiers source de bullseye portaient des noms comme bullseye.list, les renommer.
  13. Vérifier qu'il y a assez d'espace restant pour que les backups aient lieux.
  14. Bien sûr, vérifier que les services offerts par la machine fonctionnent toujours. Tester les vrais services (e.g. accéder à une page web, faire un appel -- accéder à ce que chaque service est supposé offrir), et aussi vérifier l'état dans icinga.

  15. Retirer incron qui provoque un problème avec alternC. On peut vérifier que les processus ne s'accumulent pas avec ps faux | grep incron | wc -l (voir rm#31784). Pour retirer incron  rm /etc/incron.d/alternc_* 

  16. Vérifier les stats du serveur sur http://stats0.koumbit.net/

  17. Enlever le downtime dans icinga.
  18. Vérifier dans la file roots@rt.k.n si la file est spammé par des erreurs suite à votre mise à jour!

  19. update the wiki documentation to reflect the new release; you're now done!

Autres procédures

logrotate

Si vous utilisez toujours rsyslog, assurez-vous que la configuration de certains logs ne soit pas dupliquée, notamment par une conf default /etc/logrotate.d/rsyslog. Les confs sont normalement gérées par puppet, et cela entraînerait des erreurs lorsque la cron roulerait de type:

error: rsyslog_syslog:4 duplicate log entry for /var/log/syslog
error: found error in file rsyslog_syslog, skipping
run-parts: /etc/cron.daily/logrotate exited with return code 1

Finir upgrade Postgresql 13 -> 15

Cette procédure est un copié-collé de celle dans BullseyeUpgrade avec les numéros de versions modifiés. Il faut tester si elle fonctionne bien pour l'upgrade à la version 15.

TODO checker l'affaire des grants.

Faire celà pour enlever l'ancien cluster.

  1. Lister les clusters postgres:

    pg_lsclusters
    # normalement 13 est démarré, et 15 est "down"
    
    
  2. Backup

    sudo -u postgres pg_dumpall > /tmp/pg11.backup
    
  3. Arrêt pgsql:

    service postgresql stop
    
  4. Upgrade cluster

    pg_upgradecluster -m upgrade 13 main
    
  5. Start pgsql:

    service postgresql start
    
  6. List clusters

    pg_lsclusters
    # Normalement 13 devrait maintenant être down, puis 15 up
    
    
  7. Tester la base de données (e.g. se connecter à la base de données, vérifier qu'une application qui l'utilise fonctionne bien)
  8. Enlever l'ancien cluster

     sudo pg_dropcluster 13 main --stop
    

Problèmes rencontrés

Apache

Il est possible que Apache cherche à enabler le mod prefork alors qu'on utilisait mod event, et ne reparte pas. Il suffit de disabler le mod conflictuel avec a2dismod et repartir apache.

Procédure d'upgrade manuelle (utiliser seulement si vous n'utilisez pas bolt)

Pre-upgrade

  1. Follow all of the steps in #Pre-upgrade up until the bolt command

  2. Run (as root) in tmux and record the session
    • ttyrec -e tmux /var/log/upgrade-bookworm.ttyrec
      
  3. Run puppet once to see if there's any outstanding issues. If so, try to fix them.
    • puppet agent -t
  4. backup configuration:
    • NEXT_RELEASE=bookworm
      cd /etc; git tag pre-${NEXT_RELEASE}
      git gc --prune # make /etc smaller for backup
      tar cfz /var/backups/pre-${NEXT_RELEASE}-backup.tgz /etc /var/lib/dpkg /var/lib/apt/extended_states /var/lib/aptitude/pkgstates # Note: it may be /var/lib/apt/extended_states in jessie, depending on installed software and history
      dpkg --get-selections "*" > /var/backups/dpkg-selections-pre-${NEXT_RELEASE}.txt
      chmod 0600 /var/backups/pre-${NEXT_RELEASE}-backup.tgz /var/backups/dpkg-selections-pre-${NEXT_RELEASE}.txt
      

Prepare and check system

TODO! We'll be upgrading puppet to 7.x since the master is also going to be 7.x.

  1. disable puppet, pinning and check for packages on hold or broken
    • puppet agent --disable "upgrading system to bookworm" # Disable puppet so it won't overwrite apt's config while we upgrade:
      rm -f /etc/apt/preferences /etc/apt/preferences.d/* #  Check for pinned (on hold) packages, and possibly disable
      rm -f /etc/apt/sources.list.d/testing.list # or other similar backports or sources from later releases
      apt-mark showhold
      dpkg --audit   # searches for  packages  that  have been installed only partially on your system or that have missing, wrong or obsolete control data or files. dpkg will suggest what to do with them  to get them fixed.
  2. Remove any stray apt config files from jessie/stretch:

    rm -f /etc/apt/apt.conf.d/{50jessie,99no_check_until}
  3. Run any pending upgrade:
    • apt update && apt -y upgrade
    • En cas de warning de type --force-yes is deprecated, use one of the options starting with --allow instead, vérifier si un fichier from_puppet est présent dans /etc/apt/apt.conf.d/ avec une option APT::Get::force-yes true;

      Si tel est le cas, commenter la ligne. Cela provoque un warning APT dans icinga (unhandled)

      Ces configurations ne sont pas dans puppet. Il y a un billet dans redmine à ce sujet: #33642.

Preparing sources.list

  1. This mostly means changing bullseye to bookworm.

    • sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list /etc/apt/sources.list.d/*
      rm -f /etc/apt/sources.list.d/buster-backports.list

      Note that in some cases, additional sources are defined in /etc/apt/sources.list.d and that you should review these sources to ensure they are still relevant:

      ls /etc/apt/sources.list.d

      we want to keep the following APT repository sources:

      /etc/apt/sources.list.d/aegir-stable.list
      /etc/apt/sources.list.d/koumbit.list
      /etc/apt/sources.list.d/stretch* # necessary for puppet 4 hosts since puppet wipes out sources.list

      Puppet tends to automatically delete sources that are unmanaged so if there is something in there that is not managed it will get automatically deleted. So you can probably just leave things there if they don't seem like they'll cause trouble and then let puppet manage things.

Upgrading the packages

  1. Update the package list and check disk space:
  2. Download packages:
    • apt -y -d upgrade && apt -y -d dist-upgrade
  3. Warn users of potential downtime, if relevant
    • look at the list of packages downloaded above to see if any key service may be disrupted

  4. preseed some answers:
    • debconf-set-selections <<EOF
      console-data    console-data/keymap/policy      select  Don't touch keymap
      localepurge     localepurge/use-dpkg-feature    boolean true
      libpam-runtime  libpam-runtime/override boolean false
      libnss-ldap     libnss-ldap/override    boolean false
      libpam-ldap     libpam-ldap/override    boolean false
      libc6   libraries/restart-without-asking        boolean true
      EOF
  5. Minimal upgrade run:
    • Préparez-vous à possiblement rencontrer des problèmes pour les logiciels à cette étape-ci. Référez-vous à la section des problèmes connus pour les régler.

      env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=mail apt upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'
  6. On physical servers (dom0):

    • Pendant le reboot ci-dessous, utiliser la console série pour aller dans le BIOS et vérifier que la redirection série est configurée à "VT-UTF8" et non "VT-100".

  7. Upgrade the rest of the system:
    • env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=mail apt dist-upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'
  8. Reboot

    reboot
    sudo ttyrec -e tmux /var/log/upgrade-bookworm-phase2.ttyrec

Si on n'arrive plus à booter, voir PratiquesRécupérationServeur

Finish upgrade

At this point you can merge back to the main procedure above, starting with #Re-enable_and_run_puppet.21

Références

Liens utiles

Autres distributions


CategoryDebian

BookwormUpgrade (last edited 2024-02-07 21:23:38 by nina)