Quoting Michael H. Warfield ([email protected]): > 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 <[email protected]>
It's unfortunate (especially 'the whole bottom half'), but if it's needed it's needed... thanks. Acked-by: Serge E. Hallyn <[email protected]> > --- > 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 | [email protected] > /\/\|=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 > [email protected] > http://lists.linuxcontainers.org/listinfo/lxc-devel _______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
