So this does in fact seem to be caused completely by init holding libraries open. I patched /etc/init.d/umountfs to save the output of lsof just before unmounting root:
clint@natty-alpha1:~$ grep DEL /lastlsof
init 1 root DEL REG 251,0 399654 /lib/libnss_files-2.12.2.so
init 1 root DEL REG 251,0 399653 /lib/libnss_nis-2.12.2.so
init 1 root DEL REG 251,0 399639 /lib/libnsl-2.12.2.so
init 1 root DEL REG 251,0 399659 /lib/libnss_compat-2.12.2.so.dpkg-new
init 1 root DEL REG 251,0 399660 /lib/libc-2.12.2.so
init 1 root DEL REG 251,0 399629 /lib/librt-2.12.2.so
init 1 root DEL REG 251,0 399662 /lib/libpthread-2.12.2.so
init 1 root DEL REG 251,0 399663 /lib/ld-2.12.2.so
This is odd, because upstart claims to suport 'telinit u' in its man page, but it actually doesn't do anything thanks to this revision in upstart's codebase:
------------------------------------------------------------
revno: 977
committer: Scott James Remnant <email address hidden>
branch nick: upstart
timestamp: Thu 2008-06-05 01:26:10 +0100
message:
* init/main.c: Also remove SIGTERM handling, we don't re-exec
properly and this is a dangerous signal to use anyway.
(term_handler): Drop function.
So, I think glibc is doing its job calling 'telinit u' in the postinst. This is upstart's bug. Setting to Critical in upstart now, and Invalid in eglibc.
This is also a regression of bug #188925 , which was present in hardy, and fixed in intrepid. Tagging regression-release.
So this does in fact seem to be caused completely by init holding libraries open. I patched /etc/init. d/umountfs to save the output of lsof just before unmounting root:
clint@natty- alpha1: ~$ grep DEL /lastlsof files-2. 12.2.so nis-2.12. 2.so 2.12.2. so compat- 2.12.2. so.dpkg- new 2.12.2. so -2.12.2. so
init 1 root DEL REG 251,0 399654 /lib/libnss_
init 1 root DEL REG 251,0 399653 /lib/libnss_
init 1 root DEL REG 251,0 399639 /lib/libnsl-
init 1 root DEL REG 251,0 399659 /lib/libnss_
init 1 root DEL REG 251,0 399660 /lib/libc-2.12.2.so
init 1 root DEL REG 251,0 399629 /lib/librt-
init 1 root DEL REG 251,0 399662 /lib/libpthread
init 1 root DEL REG 251,0 399663 /lib/ld-2.12.2.so
This is odd, because upstart claims to suport 'telinit u' in its man page, but it actually doesn't do anything thanks to this revision in upstart's codebase:
------- ------- ------- ------- ------- ------- ------- ------- ----
revno: 977
committer: Scott James Remnant <email address hidden>
branch nick: upstart
timestamp: Thu 2008-06-05 01:26:10 +0100
message:
* init/main.c: Also remove SIGTERM handling, we don't re-exec
properly and this is a dangerous signal to use anyway.
(term_handler): Drop function.
So, I think glibc is doing its job calling 'telinit u' in the postinst. This is upstart's bug. Setting to Critical in upstart now, and Invalid in eglibc.
This is also a regression of bug #188925 , which was present in hardy, and fixed in intrepid. Tagging regression-release.