Gérer sa Debian SID

Voici simplement quelques règles de base afin de garder une debian SID à jour sans prendre [trop] de risques.

Installer SID

Le plus simple est de récupérer une iso de testing, de l'installer puis de modifier le sources.list afin de le faire correspondre à celui d'une SID et de l'upgrader en SID.

Le fichier sources.list

Le plus simple :

cat /etc/apt/sources.list deb http://deb.debian.org/debian/ sid main non-free contrib

ou

cat /etc/apt/sources.list deb http://deb.debian.org/debian/ unstable main non-free contrib

ou

apt edit-sources

Les tags main non-free contrib : le main est indispensable, les 2 autres à votre guise.

Éviter, notamment le dépôt deb-multimedia.

L'upgrade en SID

Exécutez les opération de mise à jour suivantes:

apt apt update apt full-upgrade

Vous devriez vous retrouver en SID

L'iso mini.iso

Alternative : partir d'un de ces mirroirs debian https://www.debian.org/mirror/list en suivant debian/dists/unstable/main/installer-*/current/images/netboot/

Durant l'installation choisissez « Advanced options » → « Expert install » ; À l'étape « Choose a mirror of the Debian archive » choisissez la version « sid - unstable ».

L'upgrade en SID

Exécutez les opération de mise à jour suivantes:

apt apt update apt full-upgrade

Vous devriez vous retrouver en SID

L'iso mini.iso

Alternative : partir d'un de ces mirroirs debian https://www.debian.org/mirror/list en suivant debian/dists/unstable/main/installer-*/current/images/netboot/

Durant l'installation choisissez « Advanced options » → « Expert install » ; À l'étape « Choose a mirror of the Debian archive » choisissez la version « sid - unstable ».

Maintenir sa SID

Installer apt-listbugs

C'est le paquet essentiel pour maintenir une debian SID à jour. Une fois les paquets à mettre à jour, télécharger, il scannera les changelog à la recherche des bugs existants et non résolus. Si bug(s) il y a, vous serez prévenu sur quel paquet et ce sera à vous d'opter pour la bonne solution : installer ou non le paquet.

Il est recommandé de mettre à jour sa SID au moins une fois semaine.

Que faire en cas de paquet(s) buggué(s)

Plusieurs étapes sont alors à respecter :

Lecture du rapport de big

Pin les paquets problématiques

Alternative : Geler / dégeler les paquets (hold/unhold)

Etape 1 : Lecture du rapport de bug

La première chose à faire est de lire la remontée de bug et de voir si le bug vous concerne.

Soit l'architecture de votre système n'est pas concernée

Soit le paquet est présent mais pas utilisé car présence de beaucoup de paquets redondants

Soit l'une utilisation de ce paquet est très basique du paquet et le bug ne l'impacte pas

Soit l'utilisation de ce paquet sera laissée de côté le temps de la résolution (exemple bz2 est bugué, tant pis xz prendra le relais pendant quelques temps)

Soit le bug est classé serious mais n'est pas sérieux

Soit le bug ne touche pas directement le paquet mais une de ses extensions que vous n'utilisez pas ou une version que vous n'utilisez pas.

En fonction du bug, vous déciderez donc

d'installer quand ce paquet (votre cas sus-cité)

de ne pas installer ce paquet.

On se rend souvent compte qu'à peine ~10% des bugs signalés par apt-listbugs nous concernent vraiment.

Etape 2 : apt-listbugs et pin de paquet buggué

Dans le cas où le bug affecterait le programme dans votre utilisation. L'outil apt-listbugs permet de le marquer comme non upgradable le temps de la mise à jour. Le système installera alors les paquets non buggués et laissera en attente les autres paquets, pinnés buggués.

Concrétement quand apt-listbugs listera des bugs, il suffira de répondre “p” (pour “pin”) ce qui va étiqueter ces paquets via un fichier sous /etc/apt/preferences.d/, de manière à en empêcher la mise-à-jour vers la version qui a un souci. Une fois le bug corrigé, le fichier sous /etc/apt/preferences.d/ est automatiquement mis à jour.

Alternative non recommandée : Gel / dégel de paquet

Une autre méthode mais qui semble non recommandée est le gel / dégel de paquet via l'attribut hold / unhold d'aptitude ou de apt-mark

On appelle gel de paquet la mise en place d'un marqueur afin qu'apt ne prenne pas en compte ce paquet lors de la mise à jour.

Action	aptitude	apt-mark
Geler un paquet	aptitude hold <le_paquet_a_geler>	apt-mark hold <le_paquet_a_geler>
Degeler un paquet	aptitude unhold <le_paquet_a_geler>	apt-mark unhold <le_paquet_a_geler>
Lister les paquets gelés	aptitude search “~ahold”	apt-mark showhold

Une fois le tag hold positionner, reprendre la procédure autant de fois qu'il y a des paquets buggués.

Cas pratique

apt update apt upgrade [....] 22,0 Mo réceptionnés en 6s (3626 ko/s) Récupération des rapports de bogue… Fait Analyse des informations Trouvé/Corrigé… Fait bogues de gravité serious sur firefox-esr (78.6.0esr-1 → 78.6.1esr-1) <En attente de traitement> b1 - #979612 - firefox-esr: after upgrade from 78.6.0esr-1~deb10u1 to 78.6.1esr-1~deb10u1 gnome interface behave erratically Résumé : firefox-esr(1 bogue) Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...]

A cette étape, il faut être prudent, saisissez ? pour voir les choix offerts

Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...] ? y - poursuivre l'installation avec APT. n - interrompre l'installation avec APT. <num> - interroger le numéro de bogue indiqué (utilise querybts en tant qu'utilisateur ragnarok). #<num> - identique à <num>. b<id> - comme <num>, mais interrogeant le bogue identifié par <id>. r - afficher les listes de bogues. c - créer la liste de bogues en HTML. w - afficher la liste des bogues en HTML (utilise sensible-browser en tant qu'utilisateur ragnarok). d <num>… - éviter les bogues <num> en épinglant les paquets affectés (APT doit être relancé pour activer cette option). d b<id>… - éviter les bogues identifiés par <id> en épinglant les paquets affectés (APT doit être relancé pour activer cette option). p <pqt>… - épingler les paquets <pqt> (APT doit être relancé pour activer cette option). p - épingler tous les paquets ci-dessus (APT doit être relancé pour activer cette option). i <num> - marquer comme étant ignoré le bogue numéro <num>. i b<id> - marquer comme étant ignoré le bogue identifié par <id>. i - marquer tous les bogues ci-dessus comme ignorés. u - annuler toutes les opérations éviter/épingler/ignorer effectuées jusqu'à présent. ? - afficher cette aide.

Si vous voulez voir le détail du bug, saisissez le numéro de bug. Par exemple, dans le cas sus-cité

Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...] #979612 Retrieving report #979612 from Debian bug tracking system...

Le rapport de bug s'affichera automatiquement. Saisissez “q” pour quitter.

Si le rapport ne vous concerne pas, vous pouvez accepter la mise à jour du paquet, sinon épingler ce paquet (letttre “p”)

Cas pratique 2

apt install python3-rgain3 mp3gain Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les NOUVEAUX paquets suivants seront installés : mp3gain python3-rgain3 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 62,5 ko dans les archives. Après cette opération, 184 ko d'espace disque supplémentaires seront utilisés. Réception de :1 http://deb.debian.org/debian sid/main amd64 mp3gain amd64 1.6.2-2 [39,9 kB] Réception de :2 http://deb.debian.org/debian sid/main amd64 python3-rgain3 all 1.0.0-1 [22,7 kB] 62,5 ko réceptionnés en 0s (405 ko/s) Récupération des rapports de bogue… Fait Analyse des informations Trouvé/Corrigé… Fait bogues de gravité serious sur python3-rgain3 (→ 1.0.0-1) <Transférés> b1 - #968186 - python3-rgain3: API is potentially about to break Résumé : python3-rgain3(1 bogue) Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...]

Vous ne savez pas quelle décision prendre ? Appuyer sur ?

La liste des options apparaîtra :

Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...] ?
y - poursuivre l'installation avec APT.
n - interrompre l'installation avec APT.
<num> - interroger le numéro de bogue indiqué
(utilise querybts en tant qu'utilisateur ragnarok).
#<num> - identique à <num>.
b<id> - comme <num>, mais interrogeant le bogue identifié par <id>.
r - afficher les listes de bogues.
c - créer la liste de bogues en HTML.
w - afficher la liste des bogues en HTML
(utilise sensible-browser en tant qu'utilisateur ragnarok).
d <num>… - éviter les bogues <num> en épinglant les paquets affectés
(APT doit être relancé pour activer cette option).
d b<id>… - éviter les bogues identifiés par <id> en épinglant les paquets
affectés (APT doit être relancé pour activer cette option).
p <pqt>… - épingler les paquets <pqt>
(APT doit être relancé pour activer cette option).
p - épingler tous les paquets ci-dessus
(APT doit être relancé pour activer cette option).
i <num> - marquer comme étant ignoré le bogue numéro <num>.
i b<id> - marquer comme étant ignoré le bogue identifié par <id>.
i - marquer tous les bogues ci-dessus comme ignorés.
u - annuler toutes les opérations éviter/épingler/ignorer
effectuées jusqu'à présent.
? - afficher cette aide.
Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...]

SI vous saisissez le numéro du bug vous obtiendrez sa description :

Êtes-vous certain(e) de vouloir installer/mettre à niveau les paquets ci-dessus ? [Y/n/?/...]#968186

Un écran affichera la descrition du bug :

Upstream changes in rgain3 have broken the import ABI. This doesn't mean
anything for the replaygain and collectiongain CLI tools, but would
break compatibility if we had packages in Debian that imported it as a
library.
I've asked for clarification on whether this was intentional, but until
I get an answer, this library probably shouldn't migrate.
smcv

Lisez le attentivement et ensuite prenez la décision la plus appropriée. Appuyer sur q pour revenir à l'affichage précédent.

Retrieving report #968186 from Debian
bug tracking system... What do you want to do now [x|O|r|b|e|q|?]? ?
x - Provide extra information.
O - (default) Show other bug reports (return to bug listing).
r - Redisplay this message.
b - Launch web browser to read full log.
e - Launch e-mail client to read full log.
q - I'm bored; quit please.
? - Display this help.
What do you want to do now [x|O|r|b|e|q|?]?

Répondez q et décidez ou non de pinner le paquet.

Des utilitaires pratiques

On peut utiliser ces utilitaires en parallèle :

apt-listchanges

apt-listchanges : à l'issue de la mise à jour, les changements importants apportés seront affichés à l'écran (appui sur q pour quitter l'affichage)

Relire un log ou un bug

Un changelog

Si jamais vous avez regardé trop vite la description et souhaitez la revisionner plus tard, utiliser l'attribut changelog d'apt ou d'aptitude.

Exemple:

apt changelog apt

Affichera

apt (2.1.16) unstable; urgency=medium
[ Faidon Liambotis ]
* Various fixes to http and connect method
- basehttp: also consider Access when a Server's URI
- connect: convert a C-style string to std::string
- connect: use ServiceNameOrPort, not Port, as the cache key
[ Julian Andres Klode ]
* patterns: Add dependency patterns ?depends, ?conflicts, etc.
Note that the -broken- variants are not implemented yet.
* Rewrite of the kernel autoremoval code:
- Determine autoremovable kernels at run-time (LP: #1615381), this fixes the
issue where apt could consider a running kernel autoremovable
- Automatically remove unused kernels on apt {full,dist}-upgrade.
This helps ensuring that we don't run out of /boot space.
- Only keep up to 3 (not 4) kernels.
Ubuntu boot partitions were sized for 3 kernels, not 4.

Appuyer sur “q” pour quitter.

Un bug

Pour revoir un bug, utiliser apt-listbugs:

apt-listbugs list apt Récupération des rapports de bogue… Fait Analyse des informations Trouvé/Corrigé… Fait bogues de gravité serious sur apt (→ ) <En attente de traitement> b1 - #922223 - apt: terminate called after throwing an instance of 'std::logic_error' ... Aborted bogues de gravité serious sur apt (→ ) <Résolus dans une version donnée> b2 - #931566 - Don't complain about suite changes (Acquire::AllowReleaseInfoChange::Suite should be "true") (Corrigé : apt/2.1.10) Résumé : apt(2 bogues)

2 options complémentaires sont intéressantes :

-s <gravités> : Restreindre l'affichage aux bogues avec ces gravités (“all” pour les voir tous, sinon [critical,grave,serious]).

-S <états> : Restreindre l'affichage aux bogues correspondant à ces états : [pending,forwarded,pending-fixed,fixed,done].

needrestart

needrestart : si la mise à jour a touché des programmes nécessitant la redémarrage de services, vous serez notifié et on vous demandera si vous désirez ou non redémarrer ces services (oui en général)

Full Upgrade mensuel & autoremove

Full-upgrade:

Une fois par mois environ, penser à lancer un full-upgrade afin de nettoyer les paquets dont le système n'a plus besoin

apt full-upgrade Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Calcul de la mise à jour... Fait Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires : coinor-libcbc3 coinor-libcgl1 coinor-libclp1 coinor-libcoinmp1v5 coinor-libcoinutils3v5 coinor-libosi1v5 colord-data cups-client cups-pk-helper dnsmasq-base espeak-ng-data exfalso exfat-fuse exfat-utils fonts-font-awesome gconf-defaults-service gconf-service gconf2 gconf2-common gdisk gir1.2-gtksource-3.0 gir1.2-javascriptcoregtk-4.0 gir1.2-notify-0.7 gir1.2-packagekitglib-1.0 gir1.2-polkit-1.0 gir1.2-secret-1 gir1.2-soup-2.4 gir1.2-webkit2-4.0 gnome-accessibility-themes gnome-keyring gnome-keyring-pkcs11 gnome-themes-extra gnome-themes-extra-data gparted-common gstreamer1.0-gtk3 gtk2-engines-pixbuf gvfs-common gvfs-libs hyphen-en-us libao-common libao4 libappstream4 libatasmart4 libatk-adaptor libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libblockdev-crypto2 libblockdev-fs2 libblockdev-loop2 libblockdev-part-err2 libblockdev-part2 libblockdev-swap2 libblockdev-utils2 libblockdev2 libbluetooth3 libbrlapi0.8 libcdr-0.1-1 libcolorhug2 libdotconf0 libept1.6.0 libespeak-ng1 libfreehand-0.1-1 libgconf-2-4 libgusb2 libjim0.79 libjs-sphinxdoc libjs-underscore liblightdm-gobject-1-0 liblouis-data liblouis20 libmbim-glib4 libmbim-proxy libmm-glib0 libmspub-0.1-1 libndp0 libnm0 libnma-common libnma0 libntfs-3g883 libpackagekit-glib2-18 libpagemaker-0.0-0 libpam-gnome-keyring libparted-fs-resize0 libpcaudio0 libplymouth5 libpolkit-agent-1-0 libqmi-glib5 libqmi-proxy libqxp-0.0-0 libreoffice-calc libreoffice-draw libreoffice-gtk3 libreoffice-help-en-us libreoffice-impress libsane libspeechd2 libstemmer0d libteamdctl0 libudisks2-0 libvisio-0.1-1 libvolume-key1 libzmf-0.0-0 lightdm-gtk-greeter lp-solve mobile-broadband-provider-info modemmanager mythes-en-us ntfs-3g orca p11-kit p11-kit-modules perl-tk python3-brlapi python3-cups python3-cupshelpers python3-feedparser python3-louis python3-musicbrainzngs python3-mutagen python3-pyatspi python3-pyinotify python3-smbc python3-speechd quodlibet sound-icons speech-dispatcher speech-dispatcher-audio-plugins speech-dispatcher-espeak-ng sphinx-rtd-theme-common system-config-printer system-config-printer-common system-config-printer-udev usb-modeswitch usb-modeswitch-data xbrlapi xkbset xsane xsane-common Veuillez utiliser « apt autoremove » pour les supprimer. Les paquets suivants seront ENLEVÉS : colord dbus-user-session gconf-editor gparted gvfs gvfs-daemons libnss-systemd libpam-systemd light-locker lightdm network-manager network-manager-gnome packagekit packagekit-tools plymouth plymouth-label policykit-1 policykit-1-gnome rtkit synaptic task-xfce-desktop udisks2 xiccd Les NOUVEAUX paquets suivants seront installés : initscripts insserv startpar sysv-rc Les paquets suivants ont été conservés : apt apt-utils cups-client exim4-daemon-light firefox-esr firefox-esr-l10n-fr libcups2 libcurl3-gnutls libgnutls-dane0 libgnutls30 libjs-jquery libnm0 libsmbclient libsystemd0 libwbclient0 ppp samba-libs systemd systemd-timesyncd wget 0 mis à jour, 4 nouvellement installés, 23 à enlever et 20 non mis à jour. Il est nécessaire de prendre 185 ko dans les archives. Après cette opération, 45,7 Mo d'espace disque seront libérés. Souhaitez-vous continuer ? [O/n] y

Autoremove: Ainsi que

apt autoremove

A noter : la dernière version d'apt (2.1.16) intègre un autoremove. Elle permet de déterminer les noyaux auto-amovibles au moment de l'exécution.

Corrige le problème où apt pourrait envisager de supprimer un noyau en cours d'exécution amovible

Supprime automatiquement les noyaux inutilisés sur apt {full, dist} -upgrade.

Cela permet de garantir que nous ne manquons pas d'espace / boot.

Ne garde que 3 noyaux (et non 4).

Vider le cache d'apt

Comme les mises à jour sont fréquentes, pensez à vider régulièrement le cache d'apt.

Ne vider pas trop vite le cache d'apt, car il se peut que vous soyez amener à réinstaller un paquet dans une version précédente sans connexion internet (cas rare mais possible).

apt clean

Sauvegarde du système

La documentation officielle préconise une sauvegarde du système et la réalisation d'instantanées avec un outil style timeshift afin de se prémunir de toutes mauvaises surprises. Personnellement, je ne le fais pas, mais c'est vrai que cela peut être un filet supplémentaire.