OSDN Git Service

The image operational function of slot-os
authorNIWA-Hideyuki <niwa.niwa@nifty.ne.jp>
Tue, 8 Mar 2016 08:28:01 +0000 (17:28 +0900)
committerNIWA-Hideyuki <niwa.niwa@nifty.ne.jp>
Tue, 8 Mar 2016 08:28:01 +0000 (17:28 +0900)
src/driver/docker/fulcon-setup
src/driver/docker/fulcon-setup2 [new file with mode: 0755]
src/lib/create-rootfs
src/lib/release-rootfs
src/slot-os/start [new file with mode: 0755]
src/slot-os/stop [new file with mode: 0755]
src/subcmd/setup2 [new file with mode: 0755]

index ad85b33..b810bb3 100755 (executable)
@@ -22,6 +22,7 @@ usage()
 FLG_N=0
 FLG_P=0
 FLG_D=0
+FLG_S=0
 
 while getopts dnp OPT
 do
@@ -152,49 +153,24 @@ generate_new_image()
        cd ..
 }
 
-setup_slot_image() 
-{
-       trap 'release-rootfs >& /dev/null ; exit -1' 0
-       create-rootfs $SLOTOS
-       pushd  $FULCONDIR/container/$SLOTOS/rootfs >& /dev/null
-       echo "New OS image is generated from HOST. "
-       echo "Please wait for a few minutes."
-       tar -c . 2> /dev/null | docker import - fulcon/$SLOTOS >& /dev/null
-       if [ $? -ne 0 ]; then
-               echo "error: can't create a $SLOTOS image"
-               popd >& /dev/null
-               release-rootfs $SLOTOS
-               trap 0
-               exit -1
-       fi
-       popd >& /dev/null
-       release-rootfs $SLOTOS
-       trap 0
-       echo "Generated new image."
-}
-
-if [ $FLG_D -eq 0 -a $FLG_N -eq 0 ]; then
-       setup_slot_image
-else
-       cd $DOCKERFILEDIR
-       BUILDRESULT=""
-       MATCHFLG=0
-       for i in *
-       do
-               if [ x"$IMAGENAME" == x"$i" ]; then
-                       MATCHFLG=1
-                       if [ $FLG_D -eq 1 ]; then
-                               download_new_image $i
-                       elif [ $FLG_N -eq 1 ]; then
-                               setup_new_image $i
-                       fi
+cd $DOCKERFILEDIR
+BUILDRESULT=""
+MATCHFLG=0
+for i in *
+do
+       if [ x"$IMAGENAME" == x"$i" ]; then
+               MATCHFLG=1
+               if [ $FLG_D -eq 1 ]; then
+                       download_new_image $i
+               elif [ $FLG_N -eq 1 ]; then
+                       setup_new_image $i
                fi
-       done
-
-       if [ $MATCHFLG -eq 0 ]; then
-               usage
-               exit -1
        fi
+done
+
+if [ $MATCHFLG -eq 0 ]; then
+       usage
+       exit -1
 fi
 
 (docker rmi `docker images | grep '<none>' | awk '{printf "%s ",$3}'`) >& /dev/null
diff --git a/src/driver/docker/fulcon-setup2 b/src/driver/docker/fulcon-setup2
new file mode 100755 (executable)
index 0000000..3d449a5
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# Copyright (C) 2015-2016 NIWA Hideyuki
+
+FULCONDIR=/var/lib/fulcon
+DOCKERFILEDIR=/var/lib/fulcon/driver/dockerfile
+OCFDIR=/var/lib/fulcon/OCF
+SLOTOS=slot-os
+
+usage()
+{
+       cd $DOCKERFILEDIR
+       echo "usage: setup2"
+} 
+
+
+setup_slot_image() 
+{
+       create-rootfs $SLOTOS
+       pushd  $FULCONDIR/container/$SLOTOS/rootfs >& /dev/null
+       echo "New OS image is generated from HOST. "
+       echo "Please wait for a few minutes."
+       tar -c . 2> /dev/null | docker import - fulcon/$SLOTOS >& /dev/null
+       if [ $? -ne 0 ]; then
+               echo "error: can't create a $SLOTOS image"
+               popd >& /dev/null
+               release-rootfs $SLOTOS
+               exit -1
+       fi
+       popd >& /dev/null
+       release-rootfs $SLOTOS
+       trap 0
+       echo "Generated new image."
+}
+
+setup_slot_image
+
+(docker rmi `docker images | grep '<none>' | awk '{printf "%s ",$3}'`) >& /dev/null
+echo $BUILDRESULT | awk '{split($0,a,"*");for (i in a) print a[i]}'
+echo 
+
+DEFAULTIMAGE=`fulcon default-image`
+docker images | egrep $DEFAULTIMAGE >& /dev/null
+if [ $? -ne 0 ]; then
+       DEFAULTIMAGE=""
+fi
+
+if [ x"$DEFAULTIMAGE" == x"" ]; then
+       fulcon set-default-image "fulcon/$IMAGENAME"
+       echo "fulcon/"$IMAGENAME "is set to the default image."
+fi
+
+exit 0
+
index 26efea9..9207cbf 100755 (executable)
@@ -33,6 +33,9 @@ lsdir() {
   ls -f --ind=none $1 | sed '/^\.\{1,2\}$/d'
 }
 
+# clear rootfs
+release-rootfs $LXCNAME
+
 # create root dir
 mkdir -p $rootfs
 
@@ -40,7 +43,9 @@ mkdir -p $rootfs
 for i in `lsdir /`
 do
        if [ -L /$i ] ; then
-               cp -a /$i $rootfs/$i
+               if [ ! -x $rootfs/$i ]; then
+                       cp -a /$i $rootfs/$i
+               fi
        elif [ -d /$i ]; then
                mkdir -p $rootfs/$i
                DIRATTR=`stat --format='%a' /$i`
@@ -49,27 +54,33 @@ do
 done
 
 # create /usr
+umount $rootfs/usr >& /dev/null
 mount --bind /usr $rootfs/usr
 
 # create /bin
 if [ ! -L $rootfs/bin ]; then
+       umount $rootfs/bin >& /dev/null
        mount --bind /bin $rootfs/bin
 fi
 
 # create /sbin
-if [ ! -L $rootfs//sbin ]; then
+if [ ! -L $rootfs/sbin ]; then
+       umount $rootfs/sbin >& /dev/null
        mount --bind /sbin $rootfs/sbin
 fi
 
 # create /lib
 if [ ! -L $rootfs/lib ]; then
-       cp -a /lib $rootfs
-       rm -rf $rootfs/lib/modules
-       rm -rf $rootfs/lib/firmware
+       if [ ! -x $rootfs/lib ]; then
+               cp -a /lib $rootfs
+               rm -rf $rootfs/lib/modules
+               rm -rf $rootfs/lib/firmware
+       fi
 fi
 
 # create /lib64
 if [ ! -L $rootfs/lib64 ]; then
+       umount $rootfs/lib64 >& /dev/null
        mount --bind /lib64 $rootfs/lib64
 fi
 
@@ -107,6 +118,7 @@ for i in `lsdir /var` ; do
                DIRATTR=`stat --format='%a' /var/$i`
                chmod $DIRATTR $rootfs/var/$i
                if [ x"$i" != x"log" -a x"$i" != x"lib" ]; then
+                       umount $rootfs/var/$i >& /dev/null
                        mount --bind /var/$i $rootfs/var/$i
                fi
        fi
@@ -121,7 +133,8 @@ for i in `lsdir /var/lib`; do
                chmod $DIRATTR $rootfs/var/lib/$i
                if [ x"$i" != x"fulcon" -a x"$i" != x"tmp" -a \
                                x"$i" != x"log" -a x"$i" != x"docker" -a \
-                               x"$i" != x"libvirt" -a x"$i" != x"fulcon" ]; then
+                               x"$i" != x"libvirt" -a x"$i" != x"slot-os" ]; then
+                       umount $rootfs/var/lib/$i >& /dev/null
                        mount --bind /var/lib/$i $rootfs/var/lib/$i
                fi
        fi
@@ -139,6 +152,12 @@ done
 # clear /etc/fstab
 cat /dev/null > $rootfs/etc/fstab
 
+# disable selinux
+if [ -x /sys/fs/selinux ]; then
+       printf "\numount /sys/fs/selinux\n" >> $rootfs/etc/rc.d/rc.local
+       chmod +x $rootfs/etc/rc.d/rc.local
+fi
+
 # setup systemd
 rm -f $rootfs/etc/systemd/system/plymouth-quit.service
 ln -s /dev/null $rootfs/etc/systemd/system/plymouth-quit.service
@@ -173,8 +192,25 @@ ln -s /dev/null $rootfs/etc/systemd/system/systemd-modules-load.service
 rm -f $rootfs/etc/systemd/system/abrtd.service
 ln -s /dev/null $rootfs/etc/systemd/system/abrtd.service
 
-# setup basic.target
+rm -f $rootfs/etc/systemd/system/getty.target
+rm -f $rootfs/etc/systemd/system/getty.target.wants/*
+ln -s /dev/null $rootfs/etc/systemd/system/getty.target
+
+rm -f $rootfs/etc/systemd/system/graphical.target
+rm -f $rootfs/etc/systemd/system/graphical.target.wants/*
+ln -s /dev/null $rootfs/etc/systemd/system/graphical.target
+
+rm -f $rootfs/etc/systemd/system/sysinit.target.wants/*
+
+rm -f $rootfs/etc/systemd/system/basic.target.wants/*
+rm -f $rootfs/etc/systemd/system/default.target.wants/*
+rm -f $rootfs/etc/systemd/system/multi-user.target.wants/*
+ln -s /usr/lib/systemd/system/sshd.service $rootfs/etc/systemd/system/multi-user.target.wants/sshd.service
+rm -f $rootfs/etc/systemd/system/graphical.target.wants/*
+
+# setup multi-user.target
 rm -f $rootfs/etc/systemd/system/default.target
-ln -s /lib/systemd/system/basic.target $rootfs/etc/systemd/system/default.target
+ln -s /lib/systemd/system/multi-user.target $rootfs/etc/systemd/system/default.target
+
 
 exit 0
index 312bb1e..44f47bf 100755 (executable)
@@ -36,29 +36,33 @@ lsdir() {
 # release root dir
 
 # release /usr
-umount $rootfs/usr
-rmdir  $rootfs/usr
+if [ -x $rootfs/usr/bin ] ; then
+       umount $rootfs/usr >& /dev/null
+fi
+rmdir  $rootfs/usr >& /dev/null
 
 # release /bin
 if [ ! -L $rootfs/bin ]; then
-       umount $rootfs/bin
-       rmdir  $rootfs/bin
+       if [ -x $rootfs/bin/ls ]; then
+               umount $rootfs/bin >& /dev/null
+       fi
+       rmdir  $rootfs/bin >& /dev/null
 else
        rm -f $rootfs/bin
 fi
 
 # release /sbin
 if [ ! -L $rootfs/sbin ]; then
-       umount $rootfs/sbin
-       rmdir  $rootfs/sbin
+       umount $rootfs/sbin >& /dev/null
+       rmdir  $rootfs/sbin >& /dev/null
 else
        rm -f $rootfs/sbin
 fi
 
 # release /lib64
 if [ ! -L $rootfs/lib64 ]; then
-       umount $rootfs/lib64
-       rmdir  $rootfs/lib64
+       umount $rootfs/lib64 >& /dev/null
+       rmdir  $rootfs/lib64 >& /dev/null
 else
        rm -f $rootfs/lib64
 fi
@@ -67,42 +71,46 @@ fi
 for i in `lsdir /var/lib`; do
        if [ -d $rootfs/var/lib/$i ] ; then
                if [ x"$i" != x"fulcon" -a x"$i" != x"tmp" -a \
-                               x"$i" != x"log" -a x"$i" != x"docker" -a \
-                               x"$i" != x"libvirt" -a x"$i" != x"fulcon" ]; then
-                       umount $rootfs/var/lib/$i
-                       rmdir  $rootfs/var/lib/$i
+                               x"$i" != x"docker" -a \
+                               x"$i" != x"libvirt" -a x"$i" != x"slot-os" ]; then
+                       umount $rootfs/var/lib/$i >& /dev/null
+                       rmdir  $rootfs/var/lib/$i >& /dev/null
                else
                        rmdir  $rootfs/var/lib/$i
                fi
        fi
-       rm -f $rootfs/var/lib/$i
 done
 
 # release /var
 rm -rf $rootfs/var/log
 for i in `lsdir /var` ; do
-       if [ ! -L $rootfs/var/$i -a -d $rootfs/var/$i ] ; then
+       if [ -L $rootfs/var/$i ] ; then
+               rm -f $rootfs/var/$i
+       elif [ -d $rootfs/var/$i ] ; then
                if [ x"$i" == x"lib" ]; then
-                       rmdir  $rootfs/var/$i
+                       rmdir  $rootfs/var/$i >& /dev/null
                else
-                       umount $rootfs/var/$i
-                       rmdir  $rootfs/var/$i
+                       umount $rootfs/var/$i >& /dev/null
+                       rmdir  $rootfs/var/$i >& /dev/null
                fi
        fi
-       rm -f $rootfs/var/$i
 done
 
+rm -f  $rootfs/run/run
+rm -rf $rootfs/run
 rm -rf $rootfs/etc
 rm -rf $rootfs/home
 rm -rf $rootfs/lib
 rm -rf $rootfs/root
 rm -rf $rootfs/tmp
+rm -rf $rootfs/.autorelabel
 
 for i in `lsdir /` ; do
-       if [ -d $rootfs/$i ] ; then
+       if [ -L $rootfs/$i ] ; then
+               rm -f $rootfs/$i
+       elif [ -d $rootfs/$i ] ; then
                rmdir $rootfs/$i
        fi
-       rm -f $rootfs/$i
 done
 
 exit 0
diff --git a/src/slot-os/start b/src/slot-os/start
new file mode 100755 (executable)
index 0000000..d0de46d
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Copyright (C) 2016 NIWA Hideyuki
+
+FULCONDRIVER=`fulcon driver-name`
+PATH=/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
+
+SLOTOSDIR=/var/lib/slot-os
+
+usage()
+{
+       echo "usage: start NUMBER ..."
+}
+
+lsdir() {
+  ls -f --ind=none $1 | sed '/^\.\{1,2\}$/d'
+}
+
+
+if [ $# -lt 1 ]; then
+       usage
+       exit -1
+fi
+
+RCODE=0
+
+SNUMS=$1
+for SNUM in $SNUMS
+do
+       if [ ! -x $SLOTOSDIR/slot/$i ]; then
+               printf "error: slot%2d is not exist" $SNUM
+               RCODE=-1
+       fi
+
+       NAME=`cat $SLOTOSDIR/slot/$SNUM/fulcon`
+       if [ x"$NAME" == "-" ]; then
+               printf "error: slot%2d has not a container" $SNUM
+               RCODE=-1
+       fi
+
+       fulcon start $NAME
+
+done
+
+exit $RCODE
+
diff --git a/src/slot-os/stop b/src/slot-os/stop
new file mode 100755 (executable)
index 0000000..b7a6df3
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Copyright (C) 2016 NIWA Hideyuki
+
+FULCONDRIVER=`fulcon driver-name`
+PATH=/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
+
+SLOTOSDIR=/var/lib/slot-os
+
+usage()
+{
+       echo "usage: stop NUMBER ..."
+}
+
+lsdir() {
+  ls -f --ind=none $1 | sed '/^\.\{1,2\}$/d'
+}
+
+
+if [ $# -lt 1 ]; then
+       usage
+       exit -1
+fi
+
+RCODE=0
+
+SNUMS=$1
+for SNUM in $SNUMS
+do
+       if [ ! -x $SLOTOSDIR/slot/$i ]; then
+               printf "error: slot%2d is not exist" $SNUM
+               RCODE=-1
+       fi
+
+       NAME=`cat $SLOTOSDIR/slot/$SNUM/fulcon`
+       if [ x"$NAME" == "-" ]; then
+               printf "error: slot%2d has not a container" $SNUM
+               RCODE=-1
+       fi
+
+       fulcon stop $NAME
+
+done
+
+exit $RCODE
+
diff --git a/src/subcmd/setup2 b/src/subcmd/setup2
new file mode 100755 (executable)
index 0000000..254a956
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Copyright (C) 2015-2016 NIWA Hideyuki
+
+FULCONDRIVER=`fulcon driver-name`
+PATH=/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
+
+. fulcon-setup2 $@
+
+exit 0