This basically seems OK; but one possible failure mode comes to mind. If the old libc6.postinst is run with the new upstart, then it will run 'telinit u' and that will send SIGTERM to upstart, which will faithfully re-exec and will now have no job state. Is it worth adding some kind of packaging metadata, perhaps Breaks, to try to avoid that?
This basically seems OK; but one possible failure mode comes to mind. If the old libc6.postinst is run with the new upstart, then it will run 'telinit u' and that will send SIGTERM to upstart, which will faithfully re-exec and will now have no job state. Is it worth adding some kind of packaging metadata, perhaps Breaks, to try to avoid that?