Comment 18 for bug 745011

Revision history for this message
Stéphane Graber (stgraber) wrote :

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.