Re: Invoking ‘init’ from an init.d script (Wheezy)
On Wed, Jun 3, 2015 at 6:09 PM, Konstantin Khomoutov
> On Wed, 3 Jun 2015 17:26:21 +0200
> Alexander Thomas <firstname.lastname@example.org> wrote:
> > The long story:
> > We have a setup with multiple servers (running Wheezy). When booting,
> > the servers check whether updates are available on a master server. If
> > available, they are pulled in through a dist-upgrade. This
> > check/update needs to happen before any of the normal services are
> > started, to avoid the need of taking down everything and then starting
> > it back up after the update.
> Wouldn't it be simpler to implement this check and update using
> initramfs hooks? You could bind-mount /dev, /sys and /proc to
> the root filesystem, chroot there and run there a script which would
> check for updates, apply them, if any, and exit. After that the system
> would just resume booting.
That would be an option, but it might still cause the same problem of
apt-get hanging as we currently experience when doing the update
before runlevel S.
We looked deeper into this and found out that apt-get always hangs
while installing a package before the first runlevel switch. An strace
reveals an endless loop of SIGCONT and ioctl calls. Running other
commands that use ioctl also results in a hang, so the controlling
terminal seems to lack certain capabilities at this stage. We have
found a workaround: we spawn a new terminal with agetty and run the
update script in there, this allows to perform the apt-get
dist-upgrade in runlevel S and avoid the init 1 hack.