I have also hit this bug while backporting openssh from unstable to bullseye
(ironically so I can avoid the need to use dpkg-divert)
I've redone the patch proposed above so that it applies against the
unpacked source package:
apt-mirror@aptmirror17:/mnt/mirror/local-debs (master)$ cat main/u/ucf/ucf.patch
diff -urN ucf-3.0043.orig/ucf ucf-3.0043/ucf
--- ucf-3.0043.orig/ucf 2020-06-16 05:37:53.000000000 +0000
+++ ucf-3.0043/ucf 2020-06-16 05:37:53.000000000 +0000
@@ -439,16 +439,10 @@
fi
# Follow dpkg-divert as though we are installed as part of $opt_package
-divert_line=$(dpkg-divert --list "$dest_file")
+divert_line=$(dpkg-divert --listpackage "$dest_file")
if [ -n "$divert_line" ]; then
- if [ echo "$divert_line" | grep "^local" ]; then
- # local diversion; pick something not in the package namespace
- divert_package="LOCAL"
- else
- # extract the name of the diverted package.
- # The fact that this requires output parsing is bug #485012
- divert_package=$(dpkg-divert --listpackage "$dest_file")
- fi
+ # name of the package or 'LOCAL' for a local diversion
+ divert_package="$divert_line"
if [ "$divert_package" != "$opt_package" ]; then
dest_file=$(dpkg-divert --truename "$dest_file")
diff -urN ucf-3.0043.orig/ucfr ucf-3.0043/ucfr
--- ucf-3.0043.orig/ucfr 2020-06-16 05:37:53.000000000 +0000
+++ ucf-3.0043/ucfr 2020-06-16 05:37:53.000000000 +0000
@@ -112,10 +112,18 @@
awk '{print $1;}' );
if [ "$pkg" != "$old_pkg" ]; then
- if [ "X$FORCE" = "X" ]; then
- echo >&2 "$progname: Attempt from package $pkg to take
${real_conf_file} away from package $old_pkg";
- echo >&2 "ucfr: Aborting.";
- exit 4;
+ divert_package=$(dpkg-divert --listpackage "$conf_file")
+ if [ -n "$divert_package" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "$progname: Package $pkg will not take
away diverted ${conf_file} from package $divert_package";
+ fi
+ exit 0;
+ else
+ if [ "X$FORCE" = "X" ]; then
+ echo >&2 "$progname: Attempt from package $pkg to
take ${real_conf_file} away from package $old_pkg";
+ echo >&2 "ucfr: Aborting.";
+ exit 4;
+ fi
fi
else
if [ "X$VERBOSE" != "X" ]; then
And I can confirm that it fixes my issue.
root@proxy19:~# apt-get install --reinstall openssh-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 432 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://aptmirror17.home.woodall.me.uk/local bullseye/main amd64
openssh-server amd64 1:8.7p1-2+tjw11r1 [432 kB]
...
Setting up openssh-server (1:8.7p1-2+tjw11r1) ...
/usr/bin/ucf: 444: [: missing ]
grep: ]: No such file or directory
Restarting OpenBSD Secure Shell server: sshd.
root@proxy19:~# apt-get upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
ucf
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 74.1 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://aptmirror17.home.woodall.me.uk/local bullseye/main amd64 ucf all
3.0043+tjw11r1 [74.1 kB]
Fetched 74.1 kB in 0s (359 kB/s)
(Reading database ... 22805 files and directories currently installed.)
Preparing to unpack .../ucf_3.0043+tjw11r1_all.deb ...
Unpacking ucf (3.0043+tjw11r1) over (3.0043) ...
Setting up ucf (3.0043+tjw11r1) ...
root@proxy19:~# apt-get install --reinstall openssh-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 0 B/432 kB of archives.
After this operation, 0 B of additional disk space will be used.
(Reading database ... 22805 files and directories currently installed.)
Preparing to unpack .../openssh-server_1%3a8.7p1-2+tjw11r1_amd64.deb ...
Unpacking openssh-server (1:8.7p1-2+tjw11r1) over (1:8.7p1-2+tjw11r1) ...
Setting up openssh-server (1:8.7p1-2+tjw11r1) ...
Restarting OpenBSD Secure Shell server: sshd.