[Lxc-users] * fix cached rootfs update * fix rootfs path * add handling of systemd (aka >f15)

rhanna at informatiq.org rhanna at informatiq.org
Tue Mar 6 15:27:50 UTC 2012


systemd can detect virt env so i guess longterm solution would be to patch systemd for that

--
Sent from my Nokia N9On 6.3.2012 17:11 Serge Hallyn wrote:
Yes, I think ideally you'd have a single

/var/lib/lxc/fedora-devs

mounted from a single loopback or block device, with each container
having a /var/lib/lxc/fedora-devs/<containername> directory, populated,
for its dev, bind-mounted in through lxc.mount.entry.

-serge

Quoting rhanna at informatiq.org (rhanna at informatiq.org):
> i can do that but i didn't do it brcause it could be done differently for different backingsrorage
> I'll do it anyway and send patch later
> 
> --
> Sent from my Nokia N9On 6.3.2012 16:59 Serge Hallyn wrote:
> Quoting Ramez Hanna (rhanna at informatiq.org):
> > 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
> 
> Could the template create a 1M loopback file,
> /var/lib/lxc/<container>/dev.loopback, populated with /dev and
> mounted by a lxc.mount.entry?
> 
> -serge
> 





More information about the lxc-users mailing list