Proper support for frontend lock
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
unattended-upgrades (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Xenial |
Fix Released
|
Undecided
|
Unassigned | ||
Bionic |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
[Impact]
Apt and dpkg implemented the Frontend Locking API and unattended-upgrades needs to adopt it to not leave the packaging system unlocked while passing control to python-apt and dpkg to perform package installations and removals. Leaving the packaging system unlocked caused many crashes of u-u when other tools took the lock and in the worse case let other package management tools operate on dpkg's database breaking systems.
The change takes advantage of python-apt's new API and keeps the frontend lock during the run of u-u and unlocks only the inner locks for committing changes.
[Test case]
Run strace unattended-upgrades to upgrade several packages and check that lock-frontend is acquired at the beginning and not released until the end (not reacquired repeatedly).
Unfixed u-u's output is like this:
# strace unattended-upgrade --verbose --dry-run 2>&1 | grep lock
openat(AT_FDCWD, "/var/run/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/cache/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
...
Fixed u-u's output is like that:
# strace unattended-upgrade --dry-run --verbose 2>&1 | grep lock
openat(AT_FDCWD, "/var/run/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/cache/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/cache/
openat(AT_FDCWD, "/var/lib/
openat(AT_FDCWD, "/var/cache/
openat(AT_FDCWD, "/var/lib/
...
[Regression potential]
Incorrect lock API usage can make unattended-upgrades to crash, but it is unlikely to hang since the lock handling operations are non-blocking. Failing to reserve the locks can also cause problems by allowing other package management tools to install packages in parallel, but this problem existed in the past, too.
[Additional Info]
This is part of a wider series of changes for frontend locking
- dpkg (bug 1796081)
- apt (bug 1781169)
- python-apt (bug 1795407)
- packagekit (bug 1795614)
- unattended-upgrades (bug 1789637)
- aptdaemon (no bug filed yet)
Further details about frontend locking can be found in https:/
description: | updated |
description: | updated |
Changed in unattended-upgrades (Ubuntu Bionic): | |
status: | New → In Progress |
Changed in unattended-upgrades (Ubuntu Xenial): | |
status: | New → Confirmed |
Status changed to 'Confirmed' because the bug affects multiple users.