OpenVZ, Debian 7 und SysVinit

Will man eine frisch aus den Standardtemplates erstellte OpenVZ VE mit Debian 7 mittels apt-get dist-upgrade auf den neuesten Stand bringen, wird APT das vorhandene upstart entfernen und durch sysvinit ersetzen wollen. Da SysVinit ein “Essential”-Package ist, ist das Verhalten auch völlig legitim. Problematisch ist es trotzdem, da sich SysVinit nicht (mehr) mit OpenVZ(-basierter Virtualisierung) verträgt.

The following packages will be REMOVED:
  upstart
The following NEW packages will be installed:
  sysvinit

[...]

Setting up sysvinit (2.88dsf-41+deb7u1) ...
sysvinit: creating /run/initctl
sysvinit: restarting...init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
.init: timeout opening/writing control channel /run/initctl
 failed.

Hat man sich die Angaben von APT allerdings nicht durchgelesen und die Änderungen einfach abgenickt, wird die VE nach dem nächsten Reboot zu einem CPU-fressenden Problem, das sich im Init aufgehangen hat.

$ vzctl exec 105 ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1 95.3  0.0  10600   760 ?        Rs   11:34   0:08 init boot     
root         2  0.0  0.0      0     0 ?        S    11:34   0:00 [kthreadd/105]
root         3  0.0  0.0      0     0 ?        S    11:34   0:00 [khelper/105]
root        32  0.0  0.0  15260  1120 ?        Rs   11:34   0:00 ps aux

Um das Problem zuverlässig zu umgehen, empfiehlt es sich, das Paket sysvinit mit der Pin-Priority -1 zu pinnen. SysVinit soll in naher Zukunft ohnehin durch Upstart ersetzt werden.

/etc/apt/preferences

Package: sysvinit
Pin: release c=main
Pin-Priority: -1