[Bug 2107604] Re: Python error when upgrading to 25.04 - lsof command missing in minimal
Launchpad Bug Tracker
2107604 at bugs.launchpad.net
Thu Oct 2 15:23:03 UTC 2025
This bug was fixed in the package ubuntu-advantage-tools - 37ubuntu0
---------------
ubuntu-advantage-tools (37ubuntu0) questing; urgency=medium
* d/apparmor/ubuntu_pro_[apt_news|esm_cache].jinja2: update coreutils path
Thanks to Georgia Garcia <georgia.garcia at canonical.com> (LP: #2123870)
* New upstream release 37: (LP: #2125453)
- attach: don't show a notice if attaching a one-time token set for a
future release (GH: #3485)
- enable: add the --auto option to enable all default services based on
the contract
- entitlements:
+ add esm-infra-legacy support
+ add esm-apps-legacy support
- fips: show correct kernel versions when downgrading on clouds (GH: #3488)
- upgrade-lts-contract: (LP: #2107604)
+ remove implicit dependency on lsof
+ fix the logic to hold the apt lock while performing operations
-- Renan Rodrigo <renanrodrigo at canonical.com> Mon, 22 Sep 2025
21:51:46 -0300
** Changed in: ubuntu-advantage-tools (Ubuntu)
Status: Fix Committed => Fix Released
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to ubuntu-release-upgrader in
Ubuntu.
https://bugs.launchpad.net/bugs/2107604
Title:
Python error when upgrading to 25.04 - lsof command missing in minimal
Status in ubuntu-advantage-tools package in Ubuntu:
Fix Released
Status in ubuntu-release-upgrader package in Ubuntu:
Invalid
Bug description:
[ Impact ]
Users running minimal server installation will see errors on do-
release upgrade, because ubuntu-pro-client has a post-execution hook
to update services which uses the `lsof` command to check for APT
locks.
There are two problems there: first, checking if the lock is open is a
good indicator but not a guarantee the lock is held/released. Second,
the client does not depend on `lsof` and this package is not seeded in
server-minimal.
The solution here is: stop depending on `lsof`, removing the implicit
dependency and improving the logic to hold apt locks.
[ Test plan ]
There are acceptance tests for the Pro Client covering do-release-upgrade, which are part of the verification of LP #2125453.
Manual verification of server-minimal upgrades will be executed as part of the specifics on removing `lsof`:
- launch a <release> VM using a minimal server installation
- attach a pro subscription
- try to upgrade and check for the `lsof` error
- launch another VM using the same installation
- attach a pro subscription
- install the package from proposed
- verify that do-release-upgrade runs smoothly
[ Where problems could occur ]
This is changing the logic used to wait for the APT lock after a do-
release-upgrade. Mistakes in the implementation here would lead either
to errors in the post-execution hook, not updating the services as
expected, or never executing anything at all if we don't recognize the
lock as released. To avoid these situations, we have passing
integration tests with updates from all supported releases, and we had
Julian Klode (julian.klode at canonical.com) review it as the APT expert.
[ Original Description ]
Hello everyone - I got an error from Python when upgrading a VM from
24.10 to 25.04 (Ubuntu Server, AMD64). This was a minimized install
(using the option selected when installing the system). I had also
uninstalled Snap using https://askubuntu.com/a/1035917/ I was able to
reproduce this with two different VMs (same version of Ubuntu on
both).
The upgrade appeared to work, so I'm not sure if this is a major
issue, but it seemed worth reporting.
Here is the error:
```none
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/uaclient/system.py", line 701, in _subp
proc = subprocess.Popen( # nosec B603
bytes_args,
...<2 lines>...
env=merged_env,
)
File "/usr/lib/python3.13/subprocess.py", line 1039, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pass_fds, cwd, env,
^^^^^^^^^^^^^^^^^^^
...<5 lines>...
gid, gids, uid, umask,
^^^^^^^^^^^^^^^^^^^^^^
start_new_session, process_group)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/subprocess.py", line 1969, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: b'lsof'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/uaclient/system.py", line 710, in _subp
out_result = out.decode("utf-8", errors="ignore") if out else ""
^^^
UnboundLocalError: cannot access local variable 'out' where it is not associated with a value
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/ubuntu-advantage/upgrade_lts_contract.py", line 17, in <module>
upgrade_lts_contract.process_contract_delta_after_apt_lock(cfg)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
File "/usr/lib/python3/dist-packages/uaclient/upgrade_lts_contract.py", line 58, in process_contract_delta_after_apt_lock
out, _err = system.subp(["lsof", "/var/lib/apt/lists/lock"], rcs=[0, 1])
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/uaclient/system.py", line 775, in subp
out, err = _subp(
~~~~~^
args,
^^^^^
...<4 lines>...
pipe_stdouterr=pipe_stdouterr,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3/dist-packages/uaclient/system.py", line 719, in _subp
raise exceptions.ProcessExecutionError(cmd=redacted_cmd)
uaclient.exceptions.ProcessExecutionError: Invalid command specified 'lsof /var/lib/apt/lists/lock'.
```
Running apt-cache policy ubuntu-release-upgrader simply produced 'N:
Unable to locate package do-release-upgrade'. If it helps, lsof was
not installed on the system.
I was expecting it to upgrade without an error. Instead, it produced
an error. Despite said error, it did appear to successfully upgrade,
and the log noted 'System upgrade is complete.' I also attached part
of the upgrade log in case it's useful (from do-release-upgrade, I
saved it using tmux).
Thanks,
cocomac
ProblemType: Bug
DistroRelease: Ubuntu 25.04
Package: ubuntu-release-upgrader-core 1:25.04.14
ProcVersionSignature: Ubuntu 6.11.0-24.24-generic 6.11.11
Uname: Linux 6.11.0-24-generic x86_64
ApportVersion: 2.32.0-0ubuntu5
Architecture: amd64
CasperMD5CheckResult: pass
CrashDB: ubuntu
CrashReports:
644:0:0:0:2025-04-17 21:57:33.181000000 +0000:2024-12-10 23:39:46.349000000 +0000:/var/crash/kdump_lock
640:0:0:25638:2025-04-17 23:31:51.230280620 +0000:2025-04-17 23:31:51.230280620 +0000:/var/crash/_usr_lib_ubuntu-advantage_upgrade_lts_contract.py.0.crash
Date: Fri Apr 18 00:11:55 2025
InstallationDate: Installed on 2024-12-10 (128 days ago)
InstallationMedia: Ubuntu-Server 24.10 "Oracular Oriole" - Release amd64 (20241007.1)
PackageArchitecture: all
ProcEnviron:
LANG=C.UTF-8
PATH=(custom, no user)
SHELL=/bin/bash
TERM=tmux-256color
XDG_RUNTIME_DIR=<set>
RebootRequiredPkgs: Error: path contained symlinks.
SourcePackage: ubuntu-release-upgrader
Symptom: ubuntu-release-upgrader
UpgradeStatus: Upgraded to plucky on 2025-04-17 (0 days ago)
VarLogDistupgradeXorgFixuplog:
INFO:root:/usr/bin/do-release-upgrade running
INFO:root:No xorg.conf, exiting
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ubuntu-advantage-tools/+bug/2107604/+subscriptions
More information about the foundations-bugs
mailing list