unattended-upgrade --help raises UnicodeEncodeError when stdout encoding is ascii

Bug #1806076 reported by errors.ubuntu.com bug bridge
16
This bug affects 1 person
Affects Status Importance Assigned to Milestone
apt (Ubuntu)
Fix Released
Undecided
Unassigned
Xenial
New
Undecided
Unassigned
Bionic
Fix Released
Undecided
Unassigned
unattended-upgrades (Ubuntu)
Won't Fix
Undecided
Unassigned
Xenial
Won't Fix
Undecided
Unassigned
Bionic
Won't Fix
Undecided
Unassigned

Bug Description

[Impact]

 * unattended-upgrades --help crashes in apt.systemd.daily script when locale is not in UTF-8.

[Test Case]

In the fixed case no crash is observed.

rbalint@yogi:~$ lxc launch ubuntu:18.04 bb-lp-1806076
Creating bb-lp-1806076
Starting bb-lp-1806076
rbalint@yogi:~$ lxc shell bb-lp-1806076
mesg: ttyname failed: No such device
root@bb-lp-1806076:~# apt install -yqq language-pack-ru-base
The following package was automatically installed and is no longer required:
  libfreetype6
Use 'apt autoremove' to remove it.
The following additional packages will be installed:
  language-pack-ru
The following NEW packages will be installed:
  language-pack-ru language-pack-ru-base
0 upgraded, 2 newly installed, 0 to remove and 7 not upgraded.
Need to get 2310 kB of archives.
After this operation, 11.8 MB of additional disk space will be used.
Selecting previously unselected package language-pack-ru-base.
(Reading database ... 28536 files and directories currently installed.)
Preparing to unpack .../language-pack-ru-base_1%3a18.04+20180712_all.deb ...
Unpacking language-pack-ru-base (1:18.04+20180712) ...
Selecting previously unselected package language-pack-ru.
Preparing to unpack .../language-pack-ru_1%3a18.04+20180712_all.deb ...
Unpacking language-pack-ru (1:18.04+20180712) ...
Setting up language-pack-ru (1:18.04+20180712) ...
Setting up language-pack-ru-base (1:18.04+20180712) ...
Generating locales (this might take a while)...
  ru_RU.UTF-8... done
  ru_UA.UTF-8... done
Generation complete.

root@bb-lp-1806076:~# echo LANG=ru_RU | tee /etc/default/locale
LANG=ru_RU
root@bb-lp-1806076:~#
/usr/lib/apt/apt.systemd.daily update
Traceback (most recent call last):
  File "/usr/bin/unattended-upgrade", line 2171, in <module>
    (options, args) = parser.parse_args() # type: ignore
  File "/usr/lib/python3.6/optparse.py", line 1387, in parse_args
    stop = self._process_args(largs, rargs, values)
  File "/usr/lib/python3.6/optparse.py", line 1427, in _process_args
    self._process_long_opt(rargs, values)
  File "/usr/lib/python3.6/optparse.py", line 1501, in _process_long_opt
    option.process(opt, value, values, self)
  File "/usr/lib/python3.6/optparse.py", line 785, in process
    self.action, self.dest, opt, value, values, parser)
  File "/usr/lib/python3.6/optparse.py", line 807, in take_action
    parser.print_help()
  File "/usr/lib/python3.6/optparse.py", line 1647, in print_help
    file.write(self.format_help())
UnicodeEncodeError: 'ascii' codec can't encode characters in position 126-133: ordinal not in range(128)

root@bb-lp-1806076:~# echo LANG=ru_RU.UTF-8 | tee /etc/default/locale
LANG=ru_RU.UTF-8
root@bb-lp-1806076:~# /usr/lib/apt/apt.systemd.daily update
root@bb-lp-1806076:~#

[Where problems could occur]

* Nowhere, really. The fix is setting LC_ALL=C.UTF-8 for u-u --help and it is processed by grep then.

[Original Bug Text]

The Ubuntu Error Tracker has been receiving reports about a problem regarding unattended-upgrades. This problem was most recently seen with package version 1.1ubuntu1.18.04.6, the problem page at https://errors.ubuntu.com/problem/b3e3265e302351558260f54ae37c7b4c193dfc95 contains more details, including versions of packages affected, stacktrace or traceback, and individual crash reports.
If you do not have access to the Ubuntu Error Tracker and are a software developer, you can request it at http://forms.canonical.com/reports/.

Also seen in:
 * https://errors.ubuntu.com/problem/936bb1c75c4efe018f968a5773b820bcf52c298a

Balint Reczey (rbalint)
summary: - /usr/bin/unattended-upgrade:UnicodeEncodeError:/usr/bin/unattended-
- upgrade@1983:parse_args:_process_args:_process_long_opt:process:take_action:print_help
+ unattended-upgrade --help raises UnicodeEncodeError when stdout encoding
+ is ascii
Revision history for this message
Balint Reczey (rbalint) wrote :

Unattended-upgrades does not print to stdout by default thus it can operate properly in the environments triggering the bug, but apt.systemd.daily executes u-u --help that may crash.

To avoid the crash apt could set LC_ALL=C.UTF8 when running unattended-upgrades --help as proposed in the MR below:

https://salsa.debian.org/apt-team/apt/merge_requests/34

description: updated
tags: added: patch-forwarded-debian
tags: added: patch
Balint Reczey (rbalint)
description: updated
Changed in apt (Ubuntu):
status: New → Fix Committed
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package apt - 1.8.0~alpha3

---------------
apt (1.8.0~alpha3) unstable; urgency=medium

  [ Manuel A. Fernandez Montecelo ]
  * Remove "Ultimedia" config for Acquire::Changelogs
  * Remove "Tanglu" config for Acquire::Changelogs and as vendor

  [ Julian Andres Klode ]
  * Adjust libapt-pkg Breaks aptitude to << 0.8.9
  * Print useful error on "apt changelog" without arguments
  * test-pdiff-usage: make transaction failure test case more robust
  * Provide a "autopurge" shortcut.
    Thanks to Michael Vogt for the initial work
  * Override FileFd copy constructor to prevent copying
  * Add support for /etc/apt/auth.conf.d/*.conf (netrcparts)
  * Set PATH=/usr/sbin:/usr/bin:/sbin:/bin when running dpkg

  [ David Kalnischkies ]
  * Allow setting Referer header for http method
  * Use quoted tagnames in config dumps

  [ Алексей Шилин ]
  * Russian program translation update (Closes: #914096)

  [ Balint Reczey ]
  * Set LC_ALL=C.UTF-8 for unattended-upgrades environment when parsing its --help
    (LP: #1806076)

  [ Milo Casagrande ]
  * [l10n] Update Italian translation

 -- Julian Andres Klode <email address hidden> Tue, 18 Dec 2018 15:02:11 +0100

Changed in apt (Ubuntu):
status: Fix Committed → Fix Released
Balint Reczey (rbalint)
Changed in unattended-upgrades (Ubuntu):
status: New → Won't Fix
Changed in apt (Ubuntu Bionic):
status: New → Triaged
Balint Reczey (rbalint)
Changed in unattended-upgrades (Ubuntu Xenial):
status: New → Won't Fix
Changed in unattended-upgrades (Ubuntu Bionic):
status: New → Won't Fix
Balint Reczey (rbalint)
description: updated
Revision history for this message
Łukasz Zemczak (sil2100) wrote : Please test proposed package

Hello errors.ubuntu.com, or anyone else affected,

Accepted apt into bionic-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/apt/1.6.13 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, what testing has been performed on the package and change the tag from verification-needed-bionic to verification-done-bionic. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-bionic. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in apt (Ubuntu Bionic):
status: Triaged → Fix Committed
tags: added: verification-needed verification-needed-bionic
Revision history for this message
Ubuntu SRU Bot (ubuntu-sru-bot) wrote : Autopkgtest regression report (apt/1.6.13)

All autopkgtests for the newly accepted apt (1.6.13) for bionic have finished running.
The following regressions have been reported in tests triggered by the package:

apport/2.20.9-0ubuntu7.23 (amd64, i386)

Please visit the excuses page listed below and investigate the failures, proceeding afterwards as per the StableReleaseUpdates policy regarding autopkgtest regressions [1].

https://people.canonical.com/~ubuntu-archive/proposed-migration/bionic/update_excuses.html#apt

[1] https://wiki.ubuntu.com/StableReleaseUpdates#Autopkgtest_Regressions

Thank you!

Revision history for this message
Julian Andres Klode (juliank) wrote :

I installed 1.6.13 and could verify that the regression wrt --help is fixed. unattended-upgrades still logged a lot of errors because for some reason gettext returned utf8 despite being on non-UTF-8 locale, but that's all from the APT side.

tags: added: verification-done verification-done-bionic
removed: verification-needed verification-needed-bionic
Revision history for this message
Julian Andres Klode (juliank) wrote :
Download full text (10.3 KiB)

Log:

+ /usr/lib/apt/apt.systemd.daily lock_is_held update
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.6/logging/__init__.py", line 996, in emit
    stream.write(msg)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 29-34: ordinal not in range(128)
Call stack:
  File "/usr/bin/unattended-upgrade", line 2193, in <module>
    sys.exit(main(options))
  File "/usr/bin/unattended-upgrade", line 1750, in main
    " ".join(blacklisted_pkgs))
Message: '\u041f\u0430\u043a\u0435\u0442\u044b \u0432 \u044...

Balint Reczey (rbalint)
description: updated
Revision history for this message
Chris Halse Rogers (raof) wrote : Update Released

The verification of the Stable Release Update for apt has completed successfully and the package is now being released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package apt - 1.6.13

---------------
apt (1.6.13) bionic; urgency=medium

  [ David Kalnischkies ]
  * Fix incorrect base64 encoding due to int promotion (LP: #1916050)
  * Harden test for no new acquires after transaction abort (Closes: #984966)
    (LP: #1918920)

  [ Julian Andres Klode ]
  * Implement update --error-on=any (Closes: #594813) (LP: #1693900)
  * Include all translations when building the cache (LP: #1907850)
  * Add basic support for the Protected field
  * Do not require force-loopbreak on Important packages
    (Closes: #983014) (LP: #1916725)
  * Protect currently running kernel at run-time (LP: #1615381)
  * Make ADDARG{,C}() macros expand to single statements
  * Improve immediate configuration handling (LP: #1871268)
    - Do not immediately configure m-a: same packages in lockstep
    - Ignore failures from immediate configuration. This does not change the
      actual installation ordering - we never passed the return code to the
      caller and installation went underway anyway if it could be ordered at a
      later stage, this just removes spurious after-the-fact errors.
      (Closes: #973305, #188161, #211075, #649588)
  * Default Acquire::AllowReleaseInfoChange::Suite to "true" (Closes: #931566)
    (LP: #1918907)

  [ Balint Reczey ]
  * Set LC_ALL=C.UTF-8 for unattended-upgrades environment when parsing its --help
    (LP: #1806076)

 -- Julian Andres Klode <email address hidden> Fri, 12 Mar 2021 14:09:15 +0100

Changed in apt (Ubuntu Bionic):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.