Marking dh_python as invalid; it was added originally on the theory that
we may have needed to patch the prerm fallback but this has thankfully
turned out to be unnecessary.

** Description changed:

+ [ Impact ]
+ 
+ With the current version of python3-defaults in jammy and noble,
+ packages which utilize py3compile and py3clean in their maintscripts
+ (which is more or less any package which includes Python modules), and
+ which also are affected by diversions installed by dpkg-divert, will
+ fail to install/upgrade/remove on systems with non-UTF-8 locales, which
+ include non-ASCII characters in their localized dpkg -L messages (and
+ which therefore produce output that is not valid UTF-8).
+ 
+ As this has the potential to break apt upgrade, the impact is quite
+ severe (especially if this occurs during a dist-upgrade). However, the
+ scope is probably *fairly* limited given this only affects systems with
+ non-UTF-8 locales (something that has not been the default for many
+ years), and which produce non-ASCII output (e.g. French characters with
+ diacriticals) in their localized messages for dpkg -L.
+ 
+ [ Rectification Plan ]
+ 
+ Firstly, python3-defaults must be patched in oracular, noble, and jammy.
+ doko has uploaded the fix upstream and synced this to oracular. Benjamin
+ has sponsored the noble and jammy SRUs.
+ 
+ Next, affected packages must be patched to include a "Breaks" line on
+ earlier versions of python3-minimal (the python3-defaults binary package
+ containing py3clean and py3compile).
+ 
+ Packages which install Python modules are easily selected, but those
+ affected by diversions are (computationally) impossible to select (see
+ comment 18 for details). Thus, determining the set of affected packages
+ was non-trivial, but Benjamin has kindly produced such a list by
+ empirical means (see comment 24). These will be added to the ticket as
+ they are uploaded.
+ 
+ [ Test Plan ]
+ 
+ Where $series is jammy or noble as appropriate, and $package is the name
+ of the affected package being SRU'd:
+ 
+ $ lxc launch ubuntu:$series py3clean-test
+ $ lxc shell py3clean-test
+ # locale-gen fr_FR
+ Generating locales (this might take a while)...
+   fr_FR.ISO-8859-1... done
+ Generation complete.
+ # update-locale LANG=fr_FR
+ # exit
+ # adjust terminal to ISO-8859-1
+ $ lxc shell py3clean-test
+ # apt update && apt install --reinstall $package
+ 
+ With the current version of python3-defaults in jammy and noble this
+ should fail at the final apt install --reinstall step. With the proposed
+ version, it should succeed.
+ 
+ [ What Could Go Wrong? ]
+ 
+ The potential for regression is low since the python3-defaults changes
+ are minimal and have been reasonably tested, and the only change to
+ affected packages is the addition of a Breaks clause (i.e. the content
+ of the packages are unaffected, just the meta-data).
+ 
+ The major cause for concern is that we are not 100% certain that the
+ Breaks addition is sufficient to fix this. The Debian policy manual is
+ ambiguous as to whether Breaks implies that the fixed package must be
+ unpacked *before* the prerm maintscript of the package it breaks is
+ executed; the policy manual mentions this must happen before the
+ "unpack" phase, but prerm scripts run *before* the unpack phase.
+ However, in all experiments run so far, this did indeed resolve the
+ problem.
+ 
+ Still, as an extra hedge against failure here, we intend that the
+ python3-defaults SRU is released ASAP, and that we then delay a week to
+ allow it to propagate before releasing SRUs for the affected packages.
+ 
+ [ Original Description ]
+ 
  We noticed this in bug 2060769 but think it is a separate issue.
  
  dh_python3 is putting a py3clean invocation into package prerm
  maintainer scripts. When that runs, it explodes if the system character
  set is for example ISO-8859-1.
  
  This appears to affect every package for which dh_python3 has inserted a
  call to py3clean into the package prerm.
  
  python3-minimal 3.12.3-0ubuntu1
  
  In this reproducer, cloud-init is at 24.1.3-0ubuntu3.3.
  
  Steps to reproduce:
  
  $ lxc launch ubuntu:noble rbasak-pro-l8n
  $ lxc shell rbasak-pro-l8n
  # locale-gen fr_FR
  Generating locales (this might take a while)...
-   fr_FR.ISO-8859-1... done
+   fr_FR.ISO-8859-1... done
  Generation complete.
  # update-locale LANG=fr_FR
  # exit
  # adjust terminal to ISO-8859-1
  $ lxc shell rbasak-pro-l8n
  # apt update && apt install --reinstall cloud-init
  
  Expected results: success
  
  Actual results:
  
  Lecture des listes de paquets... Fait
  Construction de l'arbre des dépendances... Fait
- Lecture des informations d'état... Fait        
+ Lecture des informations d'état... Fait
  0 mis à jour, 0 nouvellement installés, 1 réinstallés, 0 à enlever et 5 non 
mis à jour.
  Il est nécessaire de prendre 598 ko dans les archives.
  Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
  Réception de :1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 
cloud-init all 24.1.3-0ubuntu3.3 [598 kB]
  598 ko réceptionnés en 1s (926 ko/s)
  Préconfiguration des paquets...
  (Lecture de la base de données... 34406 fichiers et répertoires déjà 
installés.)
  Préparation du dépaquetage de .../cloud-init_24.1.3-0ubuntu3.3_all.deb ...
  Traceback (most recent call last):
-   File "/usr/bin/py3clean", line 210, in <module>
-     main()
-   File "/usr/bin/py3clean", line 196, in main
-     pfiles = set(dpf.from_package(options.package))
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/usr/share/python3/debpython/files.py", line 54, in from_package
-     stdout = str(stdout, 'utf-8')
-              ^^^^^^^^^^^^^^^^^^^^
+   File "/usr/bin/py3clean", line 210, in <module>
+     main()
+   File "/usr/bin/py3clean", line 196, in main
+     pfiles = set(dpf.from_package(options.package))
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/usr/share/python3/debpython/files.py", line 54, in from_package
+     stdout = str(stdout, 'utf-8')
+              ^^^^^^^^^^^^^^^^^^^^
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2417: 
invalid continuation byte
  dpkg: avertissement: le sous-processus ancien paquet cloud-init script 
pre-removal a renvoyé un état de sortie d'erreur 1
  dpkg: tentative d'exécution du script du nouveau paquet à la place...
  Traceback (most recent call last):
-   File "/usr/bin/py3clean", line 210, in <module>
-     main()
-   File "/usr/bin/py3clean", line 196, in main
-     pfiles = set(dpf.from_package(options.package))
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/usr/share/python3/debpython/files.py", line 54, in from_package
-     stdout = str(stdout, 'utf-8')
-              ^^^^^^^^^^^^^^^^^^^^
+   File "/usr/bin/py3clean", line 210, in <module>
+     main()
+   File "/usr/bin/py3clean", line 196, in main
+     pfiles = set(dpf.from_package(options.package))
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/usr/share/python3/debpython/files.py", line 54, in from_package
+     stdout = str(stdout, 'utf-8')
+              ^^^^^^^^^^^^^^^^^^^^
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2417: 
invalid continuation byte
  dpkg: erreur de traitement de l'archive 
/var/cache/apt/archives/cloud-init_24.1.3-0ubuntu3.3_all.deb (--unpack) :
-  le sous-processus nouveau cloud-init paquet pre-removal script a renvoyé un 
état de sortie d'erreur 1
+  le sous-processus nouveau cloud-init paquet pre-removal script a renvoyé un 
état de sortie d'erreur 1
  dmesg: read kernel buffer failed: Operation not permitted
-                                                          Traceback (most 
recent call last):
-   File "/usr/bin/py3compile", line 323, in <module>
-     main()
-   File "/usr/bin/py3compile", line 302, in main
-     compile(files, versions,
-   File "/usr/bin/py3compile", line 185, in compile
-     for fn, versions_to_compile in filter_files(files, e_patterns, versions):
-   File "/usr/bin/py3compile", line 128, in filter_files
-     for fpath in files:
-   File "/usr/share/python3/debpython/files.py", line 71, in filter_public
-     for fn in files:
-   File "/usr/share/python3/debpython/files.py", line 54, in from_package
-     stdout = str(stdout, 'utf-8')
-              ^^^^^^^^^^^^^^^^^^^^
+                                                          Traceback (most 
recent call last):
+   File "/usr/bin/py3compile", line 323, in <module>
+     main()
+   File "/usr/bin/py3compile", line 302, in main
+     compile(files, versions,
+   File "/usr/bin/py3compile", line 185, in compile
+     for fn, versions_to_compile in filter_files(files, e_patterns, versions):
+   File "/usr/bin/py3compile", line 128, in filter_files
+     for fpath in files:
+   File "/usr/share/python3/debpython/files.py", line 71, in filter_public
+     for fn in files:
+   File "/usr/share/python3/debpython/files.py", line 54, in from_package
+     stdout = str(stdout, 'utf-8')
+              ^^^^^^^^^^^^^^^^^^^^
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2417: 
invalid continuation byte
  dpkg: erreur lors du nettoyage:
-  le sous-processus paquet cloud-init script post-installation installé a 
renvoyé un état de sortie d'erreur 1
+  le sous-processus paquet cloud-init script post-installation installé a 
renvoyé un état de sortie d'erreur 1
  Des erreurs ont été rencontrées pendant l'exécution :
-  /var/cache/apt/archives/cloud-init_24.1.3-0ubuntu3.3_all.deb
+  /var/cache/apt/archives/cloud-init_24.1.3-0ubuntu3.3_all.deb
  E: Sub-process /usr/bin/dpkg returned an error code (1)

** Changed in: python3-defaults (Ubuntu)
       Status: New => Confirmed

** Changed in: python3-defaults (Ubuntu Jammy)
   Importance: Undecided => Critical

** Changed in: python3-defaults (Ubuntu Jammy)
       Status: New => Confirmed

** Changed in: python3-defaults (Ubuntu Noble)
   Importance: Undecided => Critical

** Changed in: python3-defaults (Ubuntu Noble)
       Status: New => Confirmed

** Changed in: dh-python (Ubuntu)
       Status: New => Invalid

** Changed in: dh-python (Ubuntu Jammy)
       Status: New => Invalid

** Changed in: dh-python (Ubuntu Noble)
       Status: New => Invalid

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2075337

Title:
  [SRU] py3clean fails when using alternate character set

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/2075337/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to