* unusable!!!
authorheiko
Fri, 24 Oct 2008 15:00:59 +0000
changeset 2 30ac294f8ced
parent 1 e7bd8393f87b
child 3 d8aba2189a27
* unusable!!!
kvmctl
--- a/kvmctl	Fri Oct 24 06:06:18 2008 +0000
+++ b/kvmctl	Fri Oct 24 15:00:59 2008 +0000
@@ -4,16 +4,37 @@
 # $URL$
 # Heiko Schlittermann
 
-action="${1?}"; shift
-vm="$1";	shift
+# Structure of virtual machine directories
+# $DIR/     (see below, hard coded into this script)
+#
+# $DIR/<vm1>/conv/cmdline      # KVM options (ro)
+#                             # example: 
+#                             # -hda rootfs.img 
+#                             # Note: paths are relative to $DIR/<vm1>
+#                id           # KVM id (ro)
+#                             # Note: has to be unique among all VMs
+# $DIR/<vm1>/var/pid          
+#                frozen      
+#                .cmdline   
+# $DIR/<vm1>/<image>
+#
+# $DIR/<vm2>/...
+#      ...   ...
+#
+#      <vmN>/...
 
 DIR=/kvm
+
+action="${1?}"; shift
+vm="$1";	    shift
+
 # no user service able parts below
 
 unset ${!LC_*} LANG
 unset CDPATH
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-set +m		    # switch off job control
+
+#set +m		    # switch off job control
 
 ME=$(basename $0)
 KVM=$(command -v kvm)
@@ -27,56 +48,66 @@
 ### MAIN
 
 # sanity
-test "$NC"  || die "need nc (netcat)"
-test "$KVM" || die "need kvm"
+test "$NC"  	|| die "need nc (netcat)"
+test "$KVM" 	|| die "need kvm"
+test "$FUSER" 	|| die "need fuser"
 
-dups=$(cat $DIR/*/kvm/id | sort -n | uniq -c \
+dups=$(cat $DIR/*/conf/id | sort -n | uniq -c \
     | egrep -v '^[[:space:]]+1 ' | tr -s ' ' | cut -f2 -d:)
 test "$dups" && die "duplicate ids (id: $dups)"
 
 for vm in ${vm:-$(echo $DIR/*)}; do
     vm=$(basename $vm)
-    kvm=$DIR/$vm/kvm
+    conf=$DIR/$vm/conf
+    var=$DIR/$vm/var
+
+    # silent conversion
+    test -d $DIR/$vm/kvm && ! test -d $DIR/$vm/conf \
+        && mv $DIR/$vm/kvm $DIR/$vm/conf
 
-    test -d $kvm	 || continue
-    test -f $kvm/id	 || { warn "need id file (vm: $vm)" && continue; } 
-    test -f $kvm/cmdline || { warn "need cmdline file (vm: $vm)" && continue; }
+    test -d $vm             || { warn "no such file or directory: $vm"; continue; }
+    test -d $conf	        || continue
+    test -f $conf/id	    || { warn "need id file (vm: $vm)" && continue; } 
+    test -f $conf/cmdline   || { warn "need cmdline file (vm: $vm)" && continue; }
+    test -d $var            || mkdir $var || exit 2
 
-    id=$(cat $kvm/id)
+    id=$(cat $conf/id)
     monitor=$((4000 + id))
-    pid=$(cat $kvm/pid 2>/dev/null)
+    pid=$(cat $var/pid 2>/dev/null)
 
     case "$action" in
+
     start)
 	    echo "starting $vm"
-	    cmdline="$(cat $kvm/cmdline) \
-		-pidfile kvm/pid \
+	    cmdline="$(grep -v '^#' $conf/cmdline) \
+		-pidfile var/pid \
 		-name "$vm" \
 		-vnc :$id \
 		-usb -usbdevice tablet \
 		-monitor tcp:localhost:$monitor,server,nowait \
 		-daemonize \
 		$@"
-	    echo "$cmdline" > $kvm/.cmdline
-	    test -f $kvm/frozen && cmdline="$cmdline $(cat $kvm/frozen)"
+	    echo "$cmdline" > $var/.cmdline
+	    test -f $var/frozen && cmdline="$cmdline $(cat $var/frozen)"
 
-	    ( 
-		cd $DIR/$vm && $KVM $cmdline \
-		&& echo "started, display :$id, monitor tcp:127.0.0.1:$monitor" 
-	    )
+		( cd $DIR/$vm && $KVM $cmdline )
+        pid=$(cat $var/pid)
+		echo "started, pid: $pid, display :$id, monitor tcp:127.0.0.1:$monitor" 
 
 	    test "$DISPLAY" && test "$VNCVIEWER" && test -t \
 		&& ( $VNCVIEWER :$id &>/dev/null </dev/null & )
 
 	    ;;
     stop)   echo "stopping (powerdown) $vm"
-	    {
-		( echo system_powerdown | $NC localhost $monitor ) & pid0=$!
-		( sleep 30; kill $pid0 &>/dev/null ) & pid1=$!
+	    #{
+		{ echo system_powerdown | $NC localhost $monitor; } & pid0=$!
+		#( sleep 30; kill $pid0 &>/dev/null ) & pid1=$!
+echo $pid0
 		wait $pid0
-		kill $pid1 2>/dev/null
-		kill -0 $pid 2>/dev/null && $0 kill $vm
-	    } &
+echo $?
+		#kill $pid1 2>/dev/null
+		#kill -0 $pid 2>/dev/null && $0 kill $vm
+	    #} &
 	    ;;
     quit)   echo "quit $vm"
 	    $FUSER -k $monitor/tcp
@@ -89,8 +120,9 @@
     freeze) echo "freezing $vm"
 	    fuser -k $monitor/tcp
 	    echo -e "savevm HIBERNATE\nquit" | $NC localhost $monitor &
-	    echo "-loadvm HIBERNATE" >$kvm/frozen
+	    echo "-loadvm HIBERNATE" >$var/frozen
 	    ;;
+    #status) echo "status $vm: "
     qemu)
 	    echo "DO *NOT* USE \"quit\", use ^C for exiting!"
 	    $NC localhost $monitor
@@ -100,3 +132,5 @@
 done
 
 wait
+
+# vim:ts=4 sw=4 et: