[Lxc-users] * fix cached rootfs update * fix rootfs path * add handling of systemd (aka >f15)
Ramez Hanna
rhanna at informatiq.org
Tue Mar 6 10:07:52 UTC 2012
On Mon, Mar 5, 2012 at 10:28 PM, <rhanna at informatiq.org> wrote:
> From: InformatiQ <rhanna at informatiq.org>
>
>
> Signed-off-by: InformatiQ <rhanna at informatiq.org>
> ---
> templates/lxc-fedora.in | 35 +++++++++++++++++++++++++++--------
> 1 files changed, 27 insertions(+), 8 deletions(-)
>
> diff --git a/templates/lxc-fedora.in b/templates/lxc-fedora.in
> index e7f42a6..3f50895 100644
> --- a/templates/lxc-fedora.in
> +++ b/templates/lxc-fedora.in
> @@ -69,11 +69,6 @@ EOF
> 127.0.0.1 localhost $name
> EOF
>
> - sed -i 's|.sbin.start_udev||' ${rootfs_path}/etc/rc.sysinit
> - sed -i 's|.sbin.start_udev||' ${rootfs_path}/etc/rc.d/rc.sysinit
> - chroot ${rootfs_path} chkconfig udev-post off
> - chroot ${rootfs_path} chkconfig network on
> -
> dev_path="${rootfs_path}/dev"
> rm -rf $dev_path
> mkdir -p $dev_path
> @@ -99,6 +94,23 @@ EOF
>
> return 0
> }
> +configure_fedora_init()
> +{
> + sed -i 's|.sbin.start_udev||' ${rootfs_path}/etc/rc.sysinit
> + sed -i 's|.sbin.start_udev||' ${rootfs_path}/etc/rc.d/rc.sysinit
> + chroot ${rootfs_path} chkconfig udev-post off
> + chroot ${rootfs_path} chkconfig network on
> +}
> +
> +configure_fedora_systemd()
> +{
> + unlink ${rootfs_path}/etc/systemd/system/default.target
> + touch ${rootfs_path}/etc/fstab
> + chroot ${rootfs_path} ln -s /dev/null //etc/systemd/system/udev.service
> + chroot ${rootfs_path} ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
> + #dependency on a device unit fails it specially that we disabled udev
> + sed -i 's/After=dev-%i.device/After=/' ${rootfs_path}/lib/systemd/system/getty\@.service
> +}
>
> download_fedora()
> {
> @@ -170,7 +182,8 @@ copy_fedora()
>
> update_fedora()
> {
> - chroot $cache/rootfs yum -y update
> + YUM="yum --installroot $cache/rootfs -y --nogpgcheck"
> + $YUM update
> }
>
> install_fedora()
> @@ -353,7 +366,7 @@ if [ "$(id -u)" != "0" ]; then
> fi
>
>
> -rootfs_path=$path/$name/rootfs
> +rootfs_path=$path/rootfs
> config_path=$default_path/$name
> cache=$cache_base/$release
>
> @@ -362,7 +375,7 @@ revert()
> echo "Interrupted, so cleaning up"
> lxc-destroy -n $name
> # maybe was interrupted before copy config
> - rm -rf $path/$name
> + rm -rf $path
> rm -rf $default_path/$name
> echo "exiting..."
> exit 1
> @@ -388,6 +401,12 @@ if [ $? -ne 0 ]; then
> exit 1
> fi
>
> +type /bin/systemd >/dev/null 2>&1
> +if [ $? -ne 0 ]; then
> + configure_fedora_init
> +else
> + configure_fedora_systemd
> +fi
>
> if [ ! -z $clean ]; then
> clean || exit 1
> --
> 1.7.7.6
>
there is only problem about systemd not addressed by this script
is that it does mount /dev which stops getty from starting on tty1
so either make it start on any tty higher than what your host is using
and allow that in your lxc cgroup conf
or mount the $rootfs/dev to a different block dev that way systemd
won't mount /dev
the script below does it nicely in the case you don't have a free
block device. the script create a non persistant mount which you don't
need if you are using lvm
[rhanna at hovercraft bin]$ cat lxc-start-fedora
#! /bin/bash
options=$(getopt -o n: -l name: -- "$@")
eval set -- "$options"
while true
do
case "$1" in
-n|--name) name=$2; shift 2;;
--) shift
break;;
*) break ;;
esac
done
if [ -z $name ]; then
echo "container name must be set, use -n|--name"
exit 1
fi
lxc-ls |grep $name >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Container does not exist"
exit 1
fi
lxc-info -s -n$name|grep RUNNING >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "container already started"
exit 1
fi
mount |grep /tmp/lxc/$name > /dev/null 2>&1
if [ $? -eq 0 ]; then
umount /tmp/lxc/$name
fi
rm -rf /tmp/lxc/$name
mkdir -p /tmp/lxc/$name
mount none /tmp/lxc/$name -t tmpfs
rsync -a /var/lib/lxc/$name/rootfs/dev/ /tmp/lxc/$name
mount /tmp/lxc/$name f16/rootfs/dev/ -obind
lxc-start $* -n $name
--
BR
RH
http://informatiq.org
More information about the lxc-users
mailing list