Running dpkg in debug mode, I see: root@stgraber-upgrade:/var/cache/apt/archives# dpkg -D10 -i udev_167-0ubuntu1_amd64.deb 2>&1 | grep udevadm Adding 'diversion of /sbin/udevadm to /sbin/udevadm.upgrade by udev' D000010: tarobject ti->name='./sbin/udevadm' mode=100755 owner=0.0 type=48(-) ti->linkname='' namenode='/sbin/udevadm' flags=2 instead='/sbin/udevadm.upgrade' D000010: namenodetouse namenode=`/sbin/udevadm' pkg=udev D000010: namenodetouse ... useinstead=/sbin/udevadm.upgrade camefrom=<none> pkg=udev return /sbin/udevadm D000010: ensure_pathname_nonexisting `/sbin/udevadm.dpkg-tmp' D000010: ensure_pathname_nonexisting `/sbin/udevadm.dpkg-new' D000010: tarobject ti->name='./usr/share/man/man8/udevadm.8.gz' mode=100644 owner=0.0 type=48(-) ti->linkname='' namenode='/usr/share/man/man8/udevadm.8.gz' flags=2 instead='<none>' D000010: ensure_pathname_nonexisting `/usr/share/man/man8/udevadm.8.gz.dpkg-tmp' D000010: ensure_pathname_nonexisting `/usr/share/man/man8/udevadm.8.gz.dpkg-new' D000010: namenodetouse namenode=`/sbin/udevadm' pkg=udev D000010: namenodetouse ... useinstead=/sbin/udevadm.upgrade camefrom=<none> pkg=udev return /sbin/udevadm D000010: deferred extract of '/sbin/udevadm' D000010: namenodetouse namenode=`/sbin/udevadm' pkg=udev D000010: namenodetouse ... useinstead=/sbin/udevadm.upgrade camefrom=<none> pkg=udev return /sbin/udevadm D000010: deferred extract of '/usr/share/man/man8/udevadm.8.gz' D000010: process_archive not overwriting any `/sbin/udevadm' (overriding, `/sbin/udevadm.upgrade') D000010: process_archive looking for overwriting `/usr/share/man/man8/udevadm.8.gz' D000010: namenodetouse namenode=`/sbin/udevadm' pkg=udev D000010: namenodetouse ... useinstead=/sbin/udevadm.upgrade camefrom=<none> pkg=udev return /sbin/udevadm D000010: namenodetouse namenode=`/sbin/udevadm' pkg=udev D000010: namenodetouse ... useinstead=/sbin/udevadm.upgrade camefrom=<none> pkg=udev return /sbin/udevadm D000010: ensure_pathname_nonexisting `//sbin/udevadm.dpkg-tmp' D000010: ensure_pathname_nonexisting `//usr/share/man/man8/udevadm.8.gz.dpkg-tmp' Removing 'diversion of /sbin/udevadm to /sbin/udevadm.upgrade by udev'
The above shows that the diversion is indeed probably registered but that for some reason it still returns the old path instead of "useinstead".
The condition that's producing this result is:
r= (namenode->divert->useinstead && namenode->divert->pkgset != pkg->set) ? namenode->divert->useinstead : namenode;
I tried adding the following to the namenodetouse() function in help.c: printf("divert_useinstead=%s, divert_pkgset=%s, pkgset=%s, namenode=%s, using=%s\n",namenode->divert->useinstead,namenode->divert->pkgset,pkg->set,namenode,r);
That would have given me more details on exactly what's going on but dpkg doesn't seem to build today because of another unrelated issue: https://launchpad.net/~stgraber/+archive/foundation-build/+buildjob/2427483
From the debug output we get, the "useinstead" is set properly, so the issue is with the pkgset part of that check.
Running dpkg in debug mode, I see: upgrade: /var/cache/ apt/archives# dpkg -D10 -i udev_167- 0ubuntu1_ amd64.deb 2>&1 | grep udevadm upgrade by udev' './sbin/ udevadm' mode=100755 owner=0.0 type=48(-) ti->linkname='' namenode= '/sbin/ udevadm' flags=2 instead= '/sbin/ udevadm. upgrade' `/sbin/ udevadm' pkg=udev /sbin/udevadm. upgrade camefrom=<none> pkg=udev return /sbin/udevadm pathname_ nonexisting `/sbin/ udevadm. dpkg-tmp' pathname_ nonexisting `/sbin/ udevadm. dpkg-new' './usr/ share/man/ man8/udevadm. 8.gz' mode=100644 owner=0.0 type=48(-) ti->linkname='' namenode= '/usr/share/ man/man8/ udevadm. 8.gz' flags=2 instead='<none>' pathname_ nonexisting `/usr/share/ man/man8/ udevadm. 8.gz.dpkg- tmp' pathname_ nonexisting `/usr/share/ man/man8/ udevadm. 8.gz.dpkg- new' `/sbin/ udevadm' pkg=udev /sbin/udevadm. upgrade camefrom=<none> pkg=udev return /sbin/udevadm `/sbin/ udevadm' pkg=udev /sbin/udevadm. upgrade camefrom=<none> pkg=udev return /sbin/udevadm man/man8/ udevadm. 8.gz' udevadm. upgrade' ) man/man8/ udevadm. 8.gz' `/sbin/ udevadm' pkg=udev /sbin/udevadm. upgrade camefrom=<none> pkg=udev return /sbin/udevadm `/sbin/ udevadm' pkg=udev /sbin/udevadm. upgrade camefrom=<none> pkg=udev return /sbin/udevadm pathname_ nonexisting `//sbin/ udevadm. dpkg-tmp' pathname_ nonexisting `//usr/ share/man/ man8/udevadm. 8.gz.dpkg- tmp' upgrade by udev'
root@stgraber-
Adding 'diversion of /sbin/udevadm to /sbin/udevadm.
D000010: tarobject ti->name=
D000010: namenodetouse namenode=
D000010: namenodetouse ... useinstead=
D000010: ensure_
D000010: ensure_
D000010: tarobject ti->name=
D000010: ensure_
D000010: ensure_
D000010: namenodetouse namenode=
D000010: namenodetouse ... useinstead=
D000010: deferred extract of '/sbin/udevadm'
D000010: namenodetouse namenode=
D000010: namenodetouse ... useinstead=
D000010: deferred extract of '/usr/share/
D000010: process_archive not overwriting any `/sbin/udevadm' (overriding, `/sbin/
D000010: process_archive looking for overwriting `/usr/share/
D000010: namenodetouse namenode=
D000010: namenodetouse ... useinstead=
D000010: namenodetouse namenode=
D000010: namenodetouse ... useinstead=
D000010: ensure_
D000010: ensure_
Removing 'diversion of /sbin/udevadm to /sbin/udevadm.
The above shows that the diversion is indeed probably registered but that for some reason it still returns the old path instead of "useinstead".
The condition that's producing this result is:
r= >divert- >useinstead && namenode- >divert- >pkgset != pkg->set) >divert- >useinstead : namenode;
(namenode-
? namenode-
I tried adding the following to the namenodetouse() function in help.c: "divert_ useinstead= %s, divert_pkgset=%s, pkgset=%s, namenode=%s, using=% s\n",namenode- >divert- >useinstead, namenode- >divert- >pkgset, pkg->set, namenode, r);
printf(
That would have given me more details on exactly what's going on but dpkg doesn't seem to build today because of another unrelated issue: https:/ /launchpad. net/~stgraber/ +archive/ foundation- build/+ buildjob/ 2427483
From the debug output we get, the "useinstead" is set properly, so the issue is with the pkgset part of that check.