Debian 10 ("Buster") a été publié le 6 juillet 2019! 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 Buster 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 StretchUpgrade servira de base à celle de Buster 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: cette procédure peut échouer si elle est roulée à partir de l'interface graphique, qui est redémarrée durant la procédure, selon cette note de Debian. TODO: Vérifier si c'est toujours un problème dans Buster.

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

If running puppet 2.7, you need to update to puppet4 before the upgrade. Otherwise, the sources from wheezy will create conflicts in packages.

  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!
  4. check backups on backup server
  5. If the server is a fresh jessie install, run  apt install ttyrec screen  and avoid the puppet and sudo's below

  6. Run in tmux and record the session
    • sudo ttyrec -e tmux /var/log/upgrade-buster.ttyrec
  7. Run puppet once to see if there's any outstanding issues. If so, try to fix them.
    • puppet agent -t
  8. backup configuration:
    • NEXT_RELEASE=buster
      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
  9. Put servers in maintenance in Icinga.

Prepare and check system

We are upgrading puppet to 5.x since the master is also 5.x. It's the first OS upgrade in a while for which Koumbit upgrades puppet and is not staying behind!

  1. disable puppet, pinning and check for packages on hold or broken
    • puppet agent --disable "upgrading system to buster" # Disable puppet so it won't overwrite apt's config while we upgrade:
      rm /etc/apt/preferences /etc/apt/preferences.d/* #  Check for pinned (on hold) packages, and possibly disable
      rm /etc/apt/sources.list.d/testing.list # or other similar backports or sources from later releases
      apt-mark showhold
      dpkg --audit
  2. Run any pending upgrade:
    • apt update && apt -y upgrade

Preparing sources.list

  1. This mostly means changing stretch to buster.

    • sed -i 's/stretch/buster/g' /etc/apt/sources.list /etc/apt/sources.list.d/stretch*
      rm /etc/apt/sources.list.d/stretch-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

NOTE If the the sources from Wheezy are still arround from puppet 2.7, they will create conflicts. Update to puppet4 or disable puppet 2.7 and remove the sources before the OS upgrade.

https://redmine.koumbit.net/issues/29088#note-7

Upgrading the packages

  1. on physical servers: make sure the serial console works

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

  5. 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
  6. 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'
  7. On physical servers (dom0):

    • xen packages for i386 platform do NOT exist since Jessie. If you are upgrading a 32bit system, ignore the purge command below and pin the xen packages to keep the ones from wheezy. (TODO we might want to change this recommendation to switch to KVM because keeping wheezy around in buster is really, really sketcy)

    • Using XEN/ganeti see their sections below for details #Xen #Ganeti

      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".

      reboot
      sudo ttyrec -e tmux /var/log/upgrade-buster-phase2.ttyrec
  8. 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'

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 buster"
  2. Re-enable puppet if everything seems ok:
    • puppet agent --enable && puppet agent -t

Things to do after the upgrade

  1. remove debsecan. for some reason the upgrade from stretch to buster pulls in debsecan, which then starts sending us emails daily about CVEs for package that are installed on that host -- this is really annoying.
    • apt purge debsecan
  2. Install the package koumbit-scripts if it's not already there:

    • apt-get install koumbit-scripts-vps
  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 dom0 servers, rerun grub and make sure the right drives are configured for a reboot

    • dpkg-reconfigure grub-pc
  5. Suivre tout les autres procédures applicables (voir la section plus bas)
  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
  8. 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. 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))'
  9. Empty apt cache
    • apt-get clean
  10. Reboot one last time and monitor for problems in the boot sequence (lags, or errors, fsck, maybe console output failure)
    • reboot
  11. Vérfier qu'il y a assez d'espace restant pour que les backups aient lieux.
  12. 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.

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

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

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

Autres procédures

Finir upgrade Postgresql 9.6 -> 11

Faire celà pour enlèver l'ancien cluster.

  1. Lister les clusters postgres:

    pg_lsclusters
    # normalement 9.6 est commencé, est 11 est "down"
  2. Backup

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

    service postgresql stop
  4. Upgrade cluster

    pg_upgradecluster -m upgrade 9.6 main
  5. Start mysql:

    service postgresql start
  6. List clusters

    pg_lsclusters
    # Normale 9.6 devrait être down, puis 11 up
  7. Test
  8. Enlèver l'ancienc cluster

     sudo pg_dropcluster 9.6 main --stop

Changements de config dovecot 2.3

La configuration de dovecot a plusieurs changements pour la version 2.3 et ça se peut que l'ancienne ne fonctionne pas super bien.

Voir: https://wiki2.dovecot.org/Upgrading/2.3

Après avoir lu la page ci-dessus, c'est fortement recommandé d'intégrer les changements aux fichiers de config (avec extension .ucf-diff.

Aussi, le fichier de paramètres DH doit probablement être regénéré pour être plus gros (la commande est en exemple dans 10-ssl.conf):

openssl dhparam -out /etc/dovecot/dh.pem 4096

Problèmes rencontrés

Les sources de wheezy crée des conflits dans les packets

Voir la note plut haut #Preparing_sources.list

https://redmine.koumbit.net/issues/29088#note-7

php est pas mis à jour automatiquement

Comme quand on arrive à stretch, la nouvelle version de PHP n'est pas activée automatiquement. Donc c'est encore 7.0 qui roule jusqu'à ce qu'on active 7.3 dans apache.

Apache

apt install php7.3
dpkg --list | grep -oe 'php7.0-[a-z0-9]\+' | xargs apt remove -y
a2dismod php7.0
a2enmod php7.3
apache2ctl graceful

AlternC

Après un reboot dans le kernel de buster, la configuration d'AlternC pour bind ne fonctionne pas avec le profile AppArmor qui est activé par défaut: bind refuse de démarrer parce qu'il ne peut pas accéder à certains fichiers référencés.

On veut ajouter des permissions dans le profile AppArmor de bind pour que le service puisse accéder aux fichiers d'alternc:

cat >> /etc/apparmor.d/local/usr.sbin.named <<EOF
/var/lib/alternc/bind/** rw,
EOF
apparmor_parser -r /etc/apparmor.d/usr.sbin.named
service bind9 restart
service bind9 status # -> devrait montrer que le service est en marche

A plus long terme, ça serait bien d'investiguer si on peut faire déployer ce fichier là par le package d'alternc. Le fichier d'override est un fichier de configuration du package bind9, donc si alternc gère ce fichier comme un fichier de conf ça va créer des confilts :\

# dpkg -S /etc/apparmor.d/local/usr.sbin.named 
bind9: /etc/apparmor.d/local/usr.sbin.named

TODO: trouver comment déployer "qqch" par le package alternc pour ajouter les permissions nécessaires au profile apparmor de bind

phpmyadmin

buster n'a pas de package pour phpmyadmin!

Il faut donc l'installer à partir de debian sid.

Références


CategoryDebian

BusterUpgrade (last edited 2019-09-09 19:40:47 by gabriel)