From: Dwight Engen Date: Thu, 1 May 2014 14:33:48 +0000 (-0400) Subject: lxc-oracle: fix warnings/errors from some rpm scriptlets X-Git-Tag: lxc-1.0.4~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04c2f6f88c10e36b755857427a9be37d585bf470;p=thirdparty%2Flxc.git lxc-oracle: fix warnings/errors from some rpm scriptlets - Some scriptlets expect fstab to exist so create it before doing the yum install - Set the rootfs selinux label same as the hosts or else the PREIN script from initscripts will fail when running groupadd utmp, which prevents creation of OL4.x containers on hosts > OL6.x. - Move creation of devices into a separate function Signed-off-by: Dwight Engen Signed-off-by: Serge Hallyn --- diff --git a/templates/lxc-oracle.in b/templates/lxc-oracle.in index e88309e8a..37bb7aca4 100644 --- a/templates/lxc-oracle.in +++ b/templates/lxc-oracle.in @@ -306,10 +306,6 @@ EOF # this file has to exist for libvirt/Virtual machine monitor to boot the container touch $container_rootfs/etc/mtab - # don't put devpts,proc, nor sysfs in here, it will already be mounted for us by lxc/libvirt - cat < $container_rootfs/etc/fstab -EOF - # sem_open(3) checks that /dev/shm is SHMFS_SUPER_MAGIC, so make sure to mount /dev/shm (normally done by dracut initrd) as tmpfs if [ $container_release_major = "4" -o $container_release_major = "5" ]; then echo "mount -t tmpfs tmpfs /dev/shm" >>$container_rootfs/etc/rc.sysinit @@ -386,42 +382,6 @@ exec init 0 EOF fi - # create required devices. note that /dev/console will be created by lxc - # or libvirt itself to be a symlink to the right pty. - # take care to not nuke /dev in case $container_rootfs isn't set - dev_path="$container_rootfs/dev" - if [ $container_rootfs != "/" -a -d $dev_path ]; then - rm -rf $dev_path - mkdir -p $dev_path - if can_chcon; then - # ensure symlinks created in /dev have the right context - chcon -t device_t $dev_path - fi - fi - mknod -m 666 $dev_path/null c 1 3 - mknod -m 666 $dev_path/zero c 1 5 - mknod -m 666 $dev_path/random c 1 8 - mknod -m 666 $dev_path/urandom c 1 9 - mkdir -m 755 $dev_path/pts - mkdir -m 1777 $dev_path/shm - mknod -m 666 $dev_path/tty c 5 0 - mknod -m 666 $dev_path/tty0 c 4 0 - mknod -m 666 $dev_path/tty1 c 4 1 - mknod -m 666 $dev_path/tty2 c 4 2 - mknod -m 666 $dev_path/tty3 c 4 3 - mknod -m 666 $dev_path/tty4 c 4 4 - mknod -m 666 $dev_path/full c 1 7 - mknod -m 600 $dev_path/initctl p - - # set selinux labels same as host - if can_chcon; then - for node in null zero random urandom pts shm \ - tty tty0 tty1 tty2 tty3 tty4 full ; - do - chcon --reference /dev/$node $dev_path/$node 2>/dev/null - done - fi - # start with a clean /var/log/messages rm -f $container_rootfs/var/log/messages @@ -492,8 +452,50 @@ container_rootfs_clone() fi } +container_rootfs_dev_create() +{ + # create required devices. note that /dev/console will be created by lxc + # or libvirt itself to be a symlink to the right pty. + # take care to not nuke /dev in case $container_rootfs isn't set + dev_path="$container_rootfs/dev" + if [ $container_rootfs != "/" -a -d $dev_path ]; then + rm -rf $dev_path + fi + mkdir -p $dev_path + if can_chcon; then + # ensure symlinks created in /dev have the right context + chcon -t device_t $dev_path + fi + mknod -m 666 $dev_path/null c 1 3 + mknod -m 666 $dev_path/zero c 1 5 + mknod -m 666 $dev_path/random c 1 8 + mknod -m 666 $dev_path/urandom c 1 9 + mkdir -m 755 $dev_path/pts + mkdir -m 1777 $dev_path/shm + mknod -m 666 $dev_path/tty c 5 0 + mknod -m 666 $dev_path/tty1 c 4 1 + mknod -m 666 $dev_path/tty2 c 4 2 + mknod -m 666 $dev_path/tty3 c 4 3 + mknod -m 666 $dev_path/tty4 c 4 4 + mknod -m 666 $dev_path/full c 1 7 + mknod -m 600 $dev_path/initctl p + + # set selinux labels same as host + if can_chcon; then + for node in null zero random urandom pts shm \ + tty tty0 tty1 tty2 tty3 tty4 full ; + do + chcon --reference /dev/$node $dev_path/$node 2>/dev/null + done + fi +} + container_rootfs_create() { + if can_chcon; then + chcon --reference / $container_rootfs 2>/dev/null + fi + cmds="rpm wget yum" if [ $container_release_major -lt "6" ]; then if [ $host_distribution = "Ubuntu" -o $host_distribution = "Debian" ]; then @@ -581,6 +583,11 @@ container_rootfs_create() sed -i "s|enabled=1|enabled=0|" $container_rootfs/etc/yum.repos.d/$repofile sed -i "/\[$repo\]/,/\[/ s/enabled=0/enabled=1/" $container_rootfs/etc/yum.repos.d/$repofile + container_rootfs_dev_create + + # don't put devpts,proc, nor sysfs in here, it will already be mounted for us by lxc/libvirt + echo "" >$container_rootfs/etc/fstab + # create rpm db, download and yum install minimal packages mkdir -p $container_rootfs/var/lib/rpm rpm --root $container_rootfs --initdb