[Bug 1796081] Re: dpkg frontend locking
Jarno Suni
1796081 at bugs.launchpad.net
Wed Dec 25 21:07:06 UTC 2019
I think it can be made to work. I do not know how apt/dpkg is
implemented, but I made an example by Bash:
script.sh file:
#!/bin/bash
#
exec {var}>/tmp/lock
flock -n $var || { echo already locked; exit 1; }
LOCK= /path/to/subscript.sh # edit this path
subscript.sh file:
#!/bin/bash
#
[[ -v LOCK ]] && { kill $PPID; sleep 3; } # kill the caller
exec {var}>/tmp/lock
flock -n $var && echo was not locked || echo was locked
The subscript.sh above kills the caller (if LOCK variable is set in its environment). The subscript shows the lock is set even thereafter until the subscript finishes.
Anyway I am missing something: Even if I lock /var/lib/dpkg/lock or
/var/lib/dpkg/lock-frontend this way (instead of locking /tmp/lock),
that does not prevent installing a package by apt install or dpkg
--install. But if I run Synaptic package manager by pkexec
"/usr/sbin/synaptic", it locks the files and prevents installing by apt
or dpkg from outside.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to dpkg in Ubuntu.
https://bugs.launchpad.net/bugs/1796081
Title:
dpkg frontend locking
Status in dpkg package in Ubuntu:
Fix Released
Status in dpkg source package in Xenial:
Fix Released
Status in dpkg source package in Bionic:
Fix Released
Status in dpkg source package in Cosmic:
Fix Released
Bug description:
[Impact]
Frontends of dpkg such as apt and programs using the apt libraries currently acquire the dpkg "lock" lock file. They need to release it before running dpkg, as dpkg also acquires it. Therefore, there is a race condition: In case the application needs to run dpkg multiple times, another application could steal the lock from under it, and the running application would fail in the middle of the install, potentially rendering the system broken.
This fixes the problem by introducing an additional "lock-frontend"
file that frontends do not release when calling dpkg. When dpkg is not
called by a frontend using that file, it will try to acquire the
frontend lock as well, preventing it from interfering with such
frontends.
[Test case]
1. Hold lock, check that dpkg fails to run
2. Hold frontend lock, check that dpkg fails to run
3. Hold frontend lock, run dpkg with DPKG_FRONTEND_LOCKED set, it should succeed
[Regression potential]
This is an isolated change adding a new lock file. Therefore, regressions can only be expected in the form of that locking failing.
[Other info]
This is part of a wider series of SRUs 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://lists.debian.org/debian-dpkg/2017/01/msg00044.html
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/1796081/+subscriptions
More information about the foundations-bugs
mailing list