OSDN Git Service

The operation of suspend and resume is improved.
authorNIWA Hideyuki <niwa.niwa@nifty.ne.jp>
Fri, 25 Mar 2016 04:48:54 +0000 (13:48 +0900)
committerNIWA Hideyuki <niwa.niwa@nifty.ne.jp>
Fri, 25 Mar 2016 04:48:54 +0000 (13:48 +0900)
src/Makefile
src/lib/lib-resume
src/lib/lib-suspend
src/slot-os/restart [new file with mode: 0755]
src/slot-os/resume
src/slot-os/suspend
src/subcmd/restart [new file with mode: 0755]
src/subcmd/resume
src/subcmd/stop
src/subcmd/suspend

index 98c42a2..5443b2d 100644 (file)
@@ -30,6 +30,7 @@ install-subcmd :
        install -m 755 subcmd/erase $(DESTDIR)$(libdir)/fulcon/sbin/erase
        install -m 755 subcmd/start $(DESTDIR)$(libdir)/fulcon/sbin/start
        install -m 755 subcmd/stop $(DESTDIR)$(libdir)/fulcon/sbin/stop
+       install -m 755 subcmd/restart $(DESTDIR)$(libdir)/fulcon/sbin/restart
        install -m 755 subcmd/suspend $(DESTDIR)$(libdir)/fulcon/sbin/suspend
        install -m 755 subcmd/resume $(DESTDIR)$(libdir)/fulcon/sbin/resume
        install -m 755 subcmd/rename $(DESTDIR)$(libdir)/fulcon/sbin/rename
@@ -101,6 +102,7 @@ install-slot-os:
        install -m 755 slot-os/list $(DESTDIR)$(libdir)/slot-os/sbin/list
        install -m 755 slot-os/start $(DESTDIR)$(libdir)/slot-os/sbin/start
        install -m 755 slot-os/stop $(DESTDIR)$(libdir)/slot-os/sbin/stop
+       install -m 755 slot-os/restart $(DESTDIR)$(libdir)/slot-os/sbin/restart
        install -m 755 slot-os/suspend $(DESTDIR)$(libdir)/slot-os/sbin/suspend
        install -m 755 slot-os/resume $(DESTDIR)$(libdir)/slot-os/sbin/resume
        install -m 755 slot-os/update-prog $(DESTDIR)$(libdir)/slot-os/sbin/update-prog
index 7b81d37..e578322 100755 (executable)
@@ -18,7 +18,7 @@ fi
 
 STAT=`fulcon list | awk '($1=="'$NAME'"){print $2}'`
 if [ x"$STAT" != x"PAUSED" ]; then
-       echo "error: not PAUSED" 
+       echo "error: not PAUSED $NAME
        exit -1
 fi
 
index 3ae0bf9..bc50de6 100755 (executable)
@@ -18,7 +18,7 @@ fi
 
 STAT=`fulcon list | awk '($1=="'$NAME'"){print $2}'`
 if [ x"$STAT" != x"RUNNING" ]; then
-       echo "error: not RUNNING" 
+       echo "error: not RUNNING $NAME
        exit -1
 fi
 
diff --git a/src/slot-os/restart b/src/slot-os/restart
new file mode 100755 (executable)
index 0000000..3ded516
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+# Copyright (C) 2016 NIWA Hideyuki
+
+FULCONDRIVER=`fulcon driver-name`
+PATH=/usr/lib/slot-os/lib:/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
+
+FULCONDIR=/var/lib/fulcon
+SLOTOSDIR=/var/lib/slot-os
+
+usage()
+{
+       echo "usage: restart NUMBER ..."
+       echo "usage: restart all"
+}
+
+lsdir() {
+  ls -f --ind=none $1 | sed '/^\.\{1,2\}$/d'
+}
+
+
+if [ $# -lt 1 ]; then
+       usage
+       exit -1
+fi
+
+RCODE=0
+
+SNUMS=$*
+if [ x"$1" == x"all" ]; then
+       SNUMS=`ls $SLOTOSDIR/slot | sort -n`
+fi
+
+for SNUM in $SNUMS
+do
+       if [ ! -x $SLOTOSDIR/slot/$SNUM ]; then
+               printf "error: slot%2d is not exist\n" $SNUM
+               RCODE=-1
+               continue
+       fi
+
+       NAME=`cat $SLOTOSDIR/slot/$SNUM/fulcon`
+       if [ x"$NAME" == x"-" -o x"$NAME" == x"" ]; then
+               printf "error: slot%2d has not a container\n" $SNUM
+               RCODE=-1
+               continue
+       fi
+
+       rm -rf $SLOTOSDIR/slot/$SNUM/net
+       mkdir -p $FULCONDIR/container/$NAME/net
+       cp -pr $FULCONDIR/container/$NAME/net $SLOTOSDIR/slot/$SNUM/
+
+       fulcon restart $NAME
+
+done
+
+exit $RCODE
+
index 029cddd..8aee920 100755 (executable)
@@ -10,6 +10,7 @@ SLOTOSDIR=/var/lib/slot-os
 usage()
 {
        echo "usage: resume NUMBER ..."
+       echo "usage: resume all"
 }
 
 lsdir() {
@@ -25,6 +26,10 @@ fi
 RCODE=0
 
 SNUMS=$*
+if [ x"$1" == x"all" ]; then
+       SNUMS=`ls $SLOTOSDIR/slot | sort -n`
+fi
+
 for SNUM in $SNUMS
 do
        if [ ! -x $SLOTOSDIR/slot/$SNUM ]; then
index aadb654..67d8fa1 100755 (executable)
@@ -10,6 +10,7 @@ SLOTOSDIR=/var/lib/slot-os
 usage()
 {
        echo "usage: suspend NUMBER ..."
+       echo "usage: suspend all"
 }
 
 lsdir() {
@@ -25,6 +26,10 @@ fi
 RCODE=0
 
 SNUMS=$*
+if [ x"$1" == x"all" ]; then
+       SNUMS=`ls $SLOTOSDIR/slot | sort -n`
+fi
+
 for SNUM in $SNUMS
 do
        if [ ! -x $SLOTOSDIR/slot/$SNUM ]; then
diff --git a/src/subcmd/restart b/src/subcmd/restart
new file mode 100755 (executable)
index 0000000..7639d53
--- /dev/null
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+# Copyright (C) 2015-2016 NIWA Hideyuki
+
+FULCONDRIVER=`fulcon driver-name`
+PATH=/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
+
+usage()
+{
+       echo "usage: restart NAME NAME ..."
+       echo "       restart [-n REPEAT_NUMBER] NAME  ..."
+}
+
+lsdir() {
+  ls -f --ind=none $1 | sed '/^\.\{1,2\}$/d'
+}
+
+# check options
+OPT_FLG=""
+FLG_N=0
+RNUM=0
+
+while getopts n: OPT
+do
+  case $OPT in
+    "n" ) FLG_N=1 ; RNUM=$OPTARG ;;
+    \?  ) usage; exit -1;;
+  esac
+done
+
+shift `expr $OPTIND - 1`
+
+if [ $FLG_N -eq 1 ]; then
+       if [ $# -ne 1 ]; then
+               usage
+               exit -1
+       fi
+       NAME=$1
+       NAME=`echo $NAME | sed -e "s/'//g" -e 's/\"//g' -e 's/;//g' -e 's/&//g' -e 's/|//g'`
+       if [ $RNUM -gt 0 -a $RNUM -lt 1000 ]; then
+               for i in `seq $RNUM`
+               do
+                       N=`printf "%04d" $i`
+                       if [ x"`fulcon-status $NAME$N`" == x"RUNNING" ]; then
+                               lib-stop $NAME$N
+                       fi
+                       lib-start $OPT_FLG $NAME$N
+                       if [ $? -ne 0 ]; then
+                               continue
+                       fi
+
+                       NETDIR=$FULCONDIR/container/$NAME$N/net
+                       ls $NETDIR/* >& /dev/null
+                       if [ $? -eq 0 ]; then
+                               for j in `lsdir $NETDIR`
+                               do
+                                       sed -i -e "s/'//g" -e 's/\"//g' -e 's/;//g' -e 's/&//g' -e 's/|//g' $NETDIR/$j >& /dev/null
+                                       net-add $NAME$N `cut -d ' ' -f 3- $NETDIR/$j`
+                               done
+                       fi
+               done;
+               exit 0
+       else
+               echo "REPEAT_NUMBER must be [1...999]"
+               exit -1
+       fi
+
+fi
+
+if [ $# -ge 1 ]; then
+       NAMES=$@
+else
+       usage
+       exit -1
+fi
+
+if [ x"$NAMES" == x"start" ]; then
+       usage
+       exit -1
+fi
+
+NAMES=`echo $NAMES | sed -e "s/'//g" -e 's/\"//g' -e 's/;//g' -e 's/&//g' -e 's/|//g'`
+for i in $NAMES
+do
+       if [ x"`fulcon-status $i`" == x"RUNNING" ]; then
+               lib-stop $i
+       fi
+       lib-start $OPT_FLG $i
+       if [ $? -ne 0 ]; then
+               continue
+       fi
+
+       NETDIR=$FULCONDIR/container/$i/net/
+       ls $NETDIR/* >& /dev/null
+       if [ $? -eq 0 ]; then
+               for j in `lsdir $NETDIR`
+               do
+                       sed -i -e 's/\$//g' -e 's/`//g' -e "s/'//g" -e 's/\"//g' -e 's/;//g' -e 's/&//g' -e 's/|//g' $NETDIR/$j >& /dev/null
+                       fulcon net-add $i `cut -d ' ' -f 3- $NETDIR/$j`
+                       fulcon net-info $i >& /dev/null
+               done
+       fi
+done
+
+exit 0
+
+
index a03fb07..ebe8eba 100755 (executable)
@@ -1,23 +1,73 @@
 #!/bin/bash
 
-# Copyright (C) 2015-2016 NIWA Hideyuki
+# Copyright (C) 2016 NIWA Hideyuki
 
 FULCONDRIVER=`fulcon driver-name`
 PATH=/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
 
 usage()
 {
-       echo "usage: resume NAME"
+       echo "usage: resume [-n REPEAT_NUMBER] NAME  ..."
 }
 
-if [ $# -eq 1 ]; then
+# check options
+OPT_FLG=""
+FLG_N=0
+RNUM=0
+
+while getopts n: OPT
+do
+  case $OPT in
+    "n" ) FLG_N=1; RNUM=$OPTARG;;
+    \?  ) usage; exit -1;;
+  esac
+done
+
+shift `expr $OPTIND - 1`
+
+if [ $FLG_N -eq 1 ]; then
+       if [ $# -ne 1 ]; then
+               usage
+               exit -1
+       fi
+       NAME=$1
+       if [ $RNUM -gt 0 -a $RNUM -lt 1000 ]; then
+               for i in `seq $RNUM`
+               do
+                       N=`printf "%04d" $i`
+                       lib-resume $NAME$N
+                       if [ $? -eq 0 ]; then
+                               echo resume $NAME$N
+                       fi
+               done;
+               exit 0
+       else
+               echo "REPEAT_NUMBER must be [1...999]"
+               exit -1
+       fi
+
+fi
+
+if [ $# -ge 1 ]; then
        NAMES=$@
 else
        usage
        exit -1
 fi
 
-. lib-resume $NAMES
+if [ x"$NAMES" == x"resume" ]; then
+       usage
+       exit -1
+fi
+
+for i in $NAMES
+do
+       lib-resume $OPT_FLG $i
+       if [ $? -eq 0 ]; then
+               echo resume $i
+       fi
+done
 
 exit 0
 
+
index 27c8f8c..1680bfc 100755 (executable)
@@ -37,6 +37,7 @@ if [ $FLG_N -eq 1 ]; then
                        N=`printf "%04d" $i`
                        lib-stop $NAME$N
                done;
+               echo stop $NAME$N
                exit 0
        else
                echo "REPEAT_NUMBER must be [1...999]"
@@ -60,6 +61,7 @@ fi
 for i in $NAMES
 do
        lib-stop $OPT_FLG $i
+       echo stop $i
 done
 
 exit 0
index b6cbd27..9fe88c1 100755 (executable)
@@ -1,23 +1,73 @@
 #!/bin/bash
 
-# Copyright (C) 2015-2016 NIWA Hideyuki
+# Copyright (C) 2016 NIWA Hideyuki
 
 FULCONDRIVER=`fulcon driver-name`
 PATH=/usr/lib/fulcon/driver/$FULCONDRIVER:/usr/lib/fulcon/lib:$PATH
 
 usage()
 {
-       echo "usage: suspend NAME"
+       echo "usage: suspend [-n REPEAT_NUMBER] NAME  ..."
 }
 
-if [ $# -eq 1 ]; then
+# check options
+OPT_FLG=""
+FLG_N=0
+RNUM=0
+
+while getopts n: OPT
+do
+  case $OPT in
+    "n" ) FLG_N=1; RNUM=$OPTARG;;
+    \?  ) usage; exit -1;;
+  esac
+done
+
+shift `expr $OPTIND - 1`
+
+if [ $FLG_N -eq 1 ]; then
+       if [ $# -ne 1 ]; then
+               usage
+               exit -1
+       fi
+       NAME=$1
+       if [ $RNUM -gt 0 -a $RNUM -lt 1000 ]; then
+               for i in `seq $RNUM`
+               do
+                       N=`printf "%04d" $i`
+                       lib-suspend $NAME$N
+                       if [ $? -eq 0 ]; then
+                               echo suspend $NAME$N
+                       fi
+               done;
+               exit 0
+       else
+               echo "REPEAT_NUMBER must be [1...999]"
+               exit -1
+       fi
+
+fi
+
+if [ $# -ge 1 ]; then
        NAMES=$@
 else
        usage
        exit -1
 fi
 
-. lib-suspend $NAMES
+if [ x"$NAMES" == x"suspend" ]; then
+       usage
+       exit -1
+fi
+
+for i in $NAMES
+do
+       lib-suspend $OPT_FLG $i
+       if [ $? -eq 0 ]; then
+               echo suspend $i
+       fi
+done
 
 exit 0
 
+