[lxc-devel] [PATCH] [Cancel] Additional logic for dealing with container shutdown / reboot

Michael H. Warfield mhw at WittsEnd.com
Mon Jan 13 16:20:29 UTC 2014


On Mon, 2014-01-13 at 09:25 -0600, Serge Hallyn wrote: 
> Quoting Michael H. Warfield (mhw at WittsEnd.com):
> > This patch hasn't made it into the repository yet and there have been a

> Hm.  I applied this patch quite some time ago, but indeed even then
> the create_hwaddr fn was already gone.  So only the halt handling code
> was added to both templates.

Oh?  Ok.  Then my reissued patch will have some extraneous comments in
it about the halting code.

I basically rebased by pulling a new repository and installing the two
templates.  That does explain WHY one the patches complained it had
already been installed.  I just copied over the templates and did the
updates for the "mktemp" filtering and root pattern logic over top.  So
it means the comments about the halting code really don't apply and it's
just the root password and hwaddress logic in the reissued patch.
> -serge

Thanks.

> > lot of other changes.  I'm canceling this and will reissue a patch which
> > includes some additional changes from discussion with Serge and others.
> > Please drop this change.
> > 
> > On Sat, 2013-12-28 at 12:35 -0500, Michael H. Warfield wrote: 
> > > Additional logic for dealing with container shutdown / reboot
> > > 
> > > Fix a problem with CentOS containers and legacy Fedora (<16) containers
> > > not shutting down or rebooting properly.  Copy /etc/init.d/halt to
> > > /etc/init.d/lxc-halt, deleting everything from the "hwclock save" and
> > > all after and append a force halt or reboot at the end of the new
> > > script, to prevent reexecing init.  Link that script in as
> > > S00lxc-halt in rc0.d and S00lxc-reboot in rc6.d to intercept the
> > > shutdown process before it gets to S01halt / S01reboot causing the hang.
> > > 
> > > Fixed some typos in the CentOS template that were introduced in the
> > > previous patch for hwaddr settings and missed in regression testing.
> > > 
> > > Cleaned up some instruction typos and tabs from previous patch.
> > > 
> > > Signed-off-by: Michael H. Warfield <mhw at WittsEnd.com>
> > > ---
> > >  templates/lxc-centos.in | 40 ++++++++++++++++++++++++++++++++++------
> > >  templates/lxc-fedora.in | 35 +++++++++++++++++++++++++++++++++--
> > >  2 files changed, 67 insertions(+), 8 deletions(-)
> > > 
> > > diff --git a/templates/lxc-centos.in b/templates/lxc-centos.in
> > > index 5bb5349..3fbb5a9 100644
> > > --- a/templates/lxc-centos.in
> > > +++ b/templates/lxc-centos.in
> > > @@ -178,7 +178,35 @@ configure_centos()
> > >          )
> > >      fi
> > >  
> > > -   # configure the network using the dhcp
> > > +    # Deal with some dain bramage in the /etc/init.d/halt script.
> > > +    # Trim it and make it our own and link it in before the default
> > > +    # halt script so we can intercept it.  This also preventions package
> > > +    # updates from interferring with our interferring with it.
> > > +    #
> > > +    # There's generally not much in the halt script that useful but what's
> > > +    # in there from resetting the hardware clock down is generally very bad.
> > > +    # So we just eliminate the whole bottom half of that script in making
> > > +    # ourselves a copy.  That way a major update to the init scripts won't
> > > +    # trash what we've set up.
> > > +    if [ -f ${rootfs_path}/etc/init.d/halt ]
> > > +    then
> > > +        sed -e '/hwclock/,$d' \
> > > +            < ${rootfs_path}/etc/init.d/halt \
> > > +            > ${rootfs_path}/etc/init.d/lxc-halt
> > > +
> > > +        echo '$command -f' >> ${rootfs_path}/etc/init.d/lxc-halt
> > > +        chmod 755 ${rootfs_path}/etc/init.d/lxc-halt
> > > +
> > > +        # Link them into the rc directories...
> > > +        (
> > > +             cd ${rootfs_path}/etc/rc.d/rc0.d
> > > +             ln -s ../init.d/lxc-halt S00lxc-halt
> > > +             cd ${rootfs_path}/etc/rc.d/rc6.d
> > > +             ln -s ../init.d/lxc-halt S00lxc-reboot
> > > +        )
> > > +    fi
> > > +
> > > +    # configure the network using the dhcp
> > >      cat <<EOF > ${rootfs_path}/etc/sysconfig/network-scripts/ifcfg-eth0
> > >  DEVICE=eth0
> > >  BOOTPROTO=dhcp
> > > @@ -434,8 +462,8 @@ install_centos()
> > >  
> > >  create_hwaddr()
> > >  {
> > > -    echo $(dd if=/dev/urandom bs=8 count=1 2>/dev/null | md5sum
> > > -        | sed -e 's/\(..\)\(..\)\(..\)\(..\)\(..\).*/fe:\1:\2:\3:\4:\5/')
> > > +    echo $(dd if=/dev/urandom bs=8 count=1 2>/dev/null | md5sum |
> > > +        sed -e 's/\(..\)\(..\)\(..\)\(..\)\(..\).*/fe:\1:\2:\3:\4:\5/')
> > >  }
> > >  
> > >  copy_configuration()
> > > @@ -455,12 +483,12 @@ lxc.rootfs = $rootfs_path
> > >          # This should catch variable expansions from the default config...
> > >          if expr "${LINE}" : '.*\$' > /dev/null 2>&1
> > >          then
> > > -		LINE=$(eval "echo \"${LINE}\"")
> > > +                LINE=$(eval "echo \"${LINE}\"")
> > >          fi
> > >  
> > >          # There is a tab and a space in the regex bracket below!
> > >          # Seems that \s doesn't work in brackets.
> > > -        KEY=$(expr $LINE : '\s*\([^	 ]*\)\s*=')
> > > +        KEY=$(expr "${LINE}" : '\s*\([^	 ]*\)\s*=')
> > >  
> > >          if [[ "${KEY}" != "lxc.network.hwaddr" ]]
> > >          then
> > > @@ -724,7 +752,7 @@ echo "The temporary password for root is: '$root_password'
> > >  
> > >  You may want to note that password down before starting the container.
> > >  
> > > -The password set up as "expired" and will require it to be changed it at
> > > +The password is set up as "expired" and will require it to be changed it at
> > >  first login, which you should do as soon as possible.  If you lose the
> > >  root password or wish to change it without starting the container, you
> > >  can change it from the host by running the following command (which will
> > > diff --git a/templates/lxc-fedora.in b/templates/lxc-fedora.in
> > > index b0c214a..0ae394e 100644
> > > --- a/templates/lxc-fedora.in
> > > +++ b/templates/lxc-fedora.in
> > > @@ -147,6 +147,37 @@ configure_fedora()
> > >          )
> > >      fi
> > >  
> > > +    # Deal with some dain bramage in the /etc/init.d/halt script.
> > > +    # Trim it and make it our own and link it in before the default
> > > +    # halt script so we can intercept it.  This also preventions package
> > > +    # updates from interferring with our interferring with it.
> > > +    #
> > > +    # There's generally not much in the halt script that useful but what's
> > > +    # in there from resetting the hardware clock down is generally very bad.
> > > +    # So we just eliminate the whole bottom half of that script in making
> > > +    # ourselves a copy.  That way a major update to the init scripts won't
> > > +    # trash what we've set up.
> > > +    #
> > > +    # This is mostly for legacy distros since any modern systemd Fedora
> > > +    # release will not have this script so we won't try to intercept it.
> > > +    if [ -f ${rootfs_path}/etc/init.d/halt ]
> > > +    then
> > > +        sed -e '/hwclock/,$d' \
> > > +            < ${rootfs_path}/etc/init.d/halt \
> > > +            > ${rootfs_path}/etc/init.d/lxc-halt
> > > +
> > > +        echo '$command -f' >> ${rootfs_path}/etc/init.d/lxc-halt
> > > +        chmod 755 ${rootfs_path}/etc/init.d/lxc-halt
> > > +
> > > +        # Link them into the rc directories...
> > > +        (
> > > +             cd ${rootfs_path}/etc/rc.d/rc0.d
> > > +             ln -s ../init.d/lxc-halt S00lxc-halt
> > > +             cd ${rootfs_path}/etc/rc.d/rc6.d
> > > +             ln -s ../init.d/lxc-halt S00lxc-reboot
> > > +        )
> > > +    fi
> > > +
> > >      # configure the network using the dhcp
> > >      cat <<EOF > ${rootfs_path}/etc/sysconfig/network-scripts/ifcfg-eth0
> > >  DEVICE=eth0
> > > @@ -925,7 +956,7 @@ lxc.rootfs = $rootfs_path
> > >          # This should catch variable expansions from the default config...
> > >          if expr "${LINE}" : '.*\$' > /dev/null 2>&1
> > >          then
> > > -		LINE=$(eval "echo \"${LINE}\"")
> > > +                LINE=$(eval "echo \"${LINE}\"")
> > >          fi
> > >  
> > >          # There is a tab and a space in the regex bracket below!
> > > @@ -1222,7 +1253,7 @@ echo "The temporary password for root is: '$root_password'
> > >  
> > >  You may want to note that password down before starting the container.
> > >  
> > > -The password set up as "expired" and will require it to be changed it at
> > > +The password is set up as "expired" and will require it to be changed it at
> > >  first login, which you should do as soon as possible.  If you lose the
> > >  root password or wish to change it without starting the container, you
> > >  can change it from the host by running the following command (which will
> > > -- 
> > > 1.8.3.1
> > > 
> > > 
> > > 
> > 
> > -- 
> > Michael H. Warfield (AI4NB) | (770) 978-7061 |  mhw at WittsEnd.com
> >    /\/\|=mhw=|\/\/          | (678) 463-0932 |  http://www.wittsend.com/mhw/
> >    NIC whois: MHW9          | An optimist believes we live in the best of all
> >  PGP Key: 0x674627FF        | possible worlds.  A pessimist is sure of it!
> > 
> 
> 
> 
> > _______________________________________________
> > lxc-devel mailing list
> > lxc-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-devel
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
> 

-- 
Michael H. Warfield (AI4NB) | (770) 978-7061 |  mhw at WittsEnd.com
   /\/\|=mhw=|\/\/          | (678) 463-0932 |  http://www.wittsend.com/mhw/
   NIC whois: MHW9          | An optimist believes we live in the best of all
 PGP Key: 0x674627FF        | possible worlds.  A pessimist is sure of it!

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 465 bytes
Desc: This is a digitally signed message part
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140113/a18e1949/attachment-0001.pgp>


More information about the lxc-devel mailing list