From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1S90Uo-0002rv-8t for garchives@archives.gentoo.org; Sat, 17 Mar 2012 20:45:02 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 2E0BDE055C; Sat, 17 Mar 2012 20:44:55 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id D9DACE055C for ; Sat, 17 Mar 2012 20:44:54 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id DEF8E1B401A for ; Sat, 17 Mar 2012 20:44:53 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 9F8BDE5402 for ; Sat, 17 Mar 2012 20:44:52 +0000 (UTC) From: "Richard Yao" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Richard Yao" Message-ID: <1332016857.5ebde255c7e4bb851c88c3f2f55152878f9d19ff.ryao@gentoo> Subject: [gentoo-commits] proj/kvm-tools:master commit in: / X-VCS-Repository: proj/kvm-tools X-VCS-Files: kvm-init-script qtap-manipulate X-VCS-Directories: / X-VCS-Committer: ryao X-VCS-Committer-Name: Richard Yao X-VCS-Revision: 5ebde255c7e4bb851c88c3f2f55152878f9d19ff X-VCS-Branch: master Date: Sat, 17 Mar 2012 20:44:52 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 74d6d5ae-2d41-4cda-a22b-53f5085f66c1 X-Archives-Hash: 257eaebf2202592db707e36369f2b76c commit: 5ebde255c7e4bb851c88c3f2f55152878f9d19ff Author: Richard Yao cs stonybrook edu> AuthorDate: Sat Mar 17 20:40:57 2012 +0000 Commit: Richard Yao cs stonybrook edu> CommitDate: Sat Mar 17 20:40:57 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/kvm-tools.git= ;a=3Dcommit;h=3D5ebde255 Major changes Eliminate bashisms Include missing qtap-manipulate script Make indentation use tabs to match other scripts in Gentoo Eliminate boot=3Don flag being removed from upstream QEMU Switch from default binary from kvm to qemu-kvm --- kvm-init-script | 120 +++++++++++++++++++++++++++----------------------= ----- qtap-manipulate | 55 +++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 60 deletions(-) diff --git a/kvm-init-script b/kvm-init-script index 155e7c6..87d5a48 100644 --- a/kvm-init-script +++ b/kvm-init-script @@ -8,9 +8,9 @@ MONITOR=3D/var/run/vm/${VMNAME}.monitor QTAP_FILE=3D/var/run/vm/${VMNAME}.qtap =20 # modify this -VMSOFTWARE=3D${VMSOFTWARE:-kvm} +VMSOFTWARE=3D${VMSOFTWARE:-qemu-kvm} DROP_USER=3D${DROP_USER:-nobody} -MEMORY=3D${MEMORY:-500M} +MEMORY=3D${MEMORY:-512M} TIMEOUT=3D${TIMEOUT:-300} SMP=3D${SMP:-1} =20 @@ -21,93 +21,93 @@ depend() { } =20 send_command() { - local command=3D"socat -u - UNIX-CONNECT:${MONITOR}" - which nc6 &> /dev/null && command=3D"nc6 -U ${MONITOR} --send-only" - echo "$@" | ${command} >/dev/null 2>&1 + local command=3D"socat -u - UNIX-CONNECT:${MONITOR}" + which nc6 2>&1 > /dev/null && command=3D"nc6 -U ${MONITOR} --send-only" + echo "$@" | ${command} >/dev/null 2>&1 } =20 sanity_check() { - if [ ${VMNAME} =3D ${SVCNAME} ]; then - eerror "You have to create an init script for each vm:" - eerror " ln -s vm /etc/init.d/vm.vmname" - return 1 - elif [ ! -f "${DISKIMAGE}" ]; then - eerror "couldn't find \$DISKIMAGE '$DISKIMAGE'" - return 1; + if [ "${VMNAME}" =3D "${SVCNAME}" ]; then + eerror "You have to create an init script for each vm:" + eerror " ln -s vm /etc/init.d/vm.vmname" + return 1 + elif [ ! -f "${DISKIMAGE}" ]; then + eerror "couldn't find \$DISKIMAGE '$DISKIMAGE'" + return 1; fi } =20 start() { - sanity_check + sanity_check =20 - img=3D$(readlink -f "${DISKIMAGE}") - [ -z "$img" ] && { - eerror "couldn't find ${DISKIMAGE}" - return 1; - } - =20 - mkdir -p $(dirname ${PIDFILE}) $(dirname ${MONITOR}) - ebegin "creating qtap ${QTAP:-(auto allocating one)}" - QTAP_RET=3D$(qtap-manipulate create ${QTAP}); - if [ 0 !=3D $? ]; then - eerror "failed to create qtap interface" - return 1 + img=3D$(readlink -f "${DISKIMAGE}") + [ -z "$img" ] && { + eerror "couldn't find ${DISKIMAGE}" + return 1; + } +=09 + mkdir -p $(dirname ${PIDFILE}) $(dirname ${MONITOR}) + ebegin "creating qtap ${QTAP:-(auto allocating one)}" + QTAP_RET=3D$(qtap-manipulate create ${QTAP}); + if [ 0 !=3D $? ]; then + eerror "failed to create qtap interface" + return 1 fi - QTAP=3D${QTAP:-${QTAP_RET}} - echo "${QTAP}" > ${QTAP_FILE} - eend $? + QTAP=3D${QTAP:-${QTAP_RET}} + echo "${QTAP}" > ${QTAP_FILE} + eend $? =20 - ebegin "Starting ${VMSOFTWARE-qemu} for ${VMNAME} at VNC port${VNC}" - start-stop-daemon --start /usr/bin/${VMSOFTWARE-qemu} \ + ebegin "Starting ${VMSOFTWARE-qemu} for ${VMNAME} at VNC port${VNC}" + start-stop-daemon --start /usr/bin/${VMSOFTWARE-qemu} \ --pidfile ${PIDFILE} \ -- -daemonize -pidfile ${PIDFILE} -monitor unix:${MONITOR},server,nowai= t \ -runas ${DROP_USER} -name ${VMNAME} \ - -drive file=3D"$img",if=3D${DRIVE_MODEL:-virtio},boot=3Don \ + -drive file=3D"$img",if=3D${DRIVE_MODEL:-virtio},cache=3D${DRIVE_CACHE:= -none} \ -net nic,model=3D${NIC_MODEL:-virtio},macaddr=3D${MACADDR} -net tap,ifn= ame=3D${QTAP},script=3Dno \ ${DISABLE_KVM:---enable-kvm} \ ${MEMORY:+-m ${MEMORY}} ${SMP:+-smp ${SMP}} ${VNC:+-vnc ${VNC}} ${OTHER= _ARGS} - ret=3D$? - if [ "0" !=3D "${ret}" ]; then - qtap-manipulate destroy ${QTAP} - fi - eend ${ret} + ret=3D$? + if [ "0" !=3D "${ret}" ]; then + qtap-manipulate destroy ${QTAP} + fi + eend ${ret} } =20 reboot() { - if [ ${VMNAME} =3D ${SVCNAME} ]; then + if [ ${VMNAME} =3D ${SVCNAME} ]; then eerror "You have to create an init script for each vm:" eerror " ln -s vm /etc/init.d/vm.vmname" return 1 - fi - =20 - ebegin "Rebooting ${VMNAME}" - send_command system_reset - eend $? + fi +=09 + ebegin "Rebooting ${VMNAME}" + send_command system_reset + eend $? } =20 stop() { - sanity_check + sanity_check =20 - ebegin "Powering off ${VMNAME}" - send_command system_powerdown - eend $? + ebegin "Powering off ${VMNAME}" + send_command system_powerdown + eend $? =20 - ebegin "waiting up to ${TIMEOUT:-60} seconds for it to die" - ret=3D1 - for x in $(seq 0 ${TIMEOUT:-60}); do - kill -0 $(<$PIDFILE) &> /dev/null || { ret=3D0; break; } - sleep 1s - done - eend ${ret} + ebegin "waiting up to ${TIMEOUT:-60} seconds for it to die" + ret=3D1 + for x in $(seq 0 ${TIMEOUT:-60}); do + kill -0 $(cat $PIDFILE) 2>&1 > /dev/null || { ret=3D0; break; } + sleep 1s + done + eend ${ret} =20 - ebegin "Stopping ${VMSOFTWARE-qemu} for ${VMNAME}" - start-stop-daemon --stop /usr/bin/${VMSOFTWARE-qemu} \ + ebegin "Stopping ${VMSOFTWARE-qemu} for ${VMNAME}" + start-stop-daemon --stop /usr/bin/${VMSOFTWARE-qemu} \ --user ${DROP_USER} \ --pidfile ${PIDFILE} \ --quiet - eend $? - QTAP=3D$(<${QTAP_FILE}) - ebegin "destroying qtap ${QTAP}" - qtap-manipulate destroy ${QTAP} - eend $? + eend $? + QTAP=3D$(cat ${QTAP_FILE}) + ebegin "destroying qtap ${QTAP}" + qtap-manipulate destroy ${QTAP} + eend $? } diff --git a/qtap-manipulate b/qtap-manipulate new file mode 100755 index 0000000..b75c5ef --- /dev/null +++ b/qtap-manipulate @@ -0,0 +1,55 @@ +#!/bin/sh +[ -z "$1" ] || ( [ "$1" !=3D "create" ] && [ -z "$2" ] ) && { echo "inva= lid usage, require create [device] || |destroy device"; exit 1; } + +#KVM_USER=3D"kvm-envs" + +has() { + local desired=3D$1 x + shift + for x in "$@"; do + [ "$desired" =3D "$x" ] && return 0; + done + return 1 +} + +find_node() { + local val=3D$(ifconfig -a | grep -i ^qtap | cut -d ' ' -f1) + local pos=3D0 + while has qtap${pos} $val; do + pos=3D$(( $pos + 1 )) + done + echo qtap${pos} +} + +create_node() { + tunctl -b -u "${KVM_USER}" -t ${1} > /dev/null || { echo "tunctl failed= "; exit 2; } + brctl addif br0 ${1} || { echo "brctl failed"; exit 2; } + ifconfig ${1} up 0.0.0.0 promisc || { echo "ifconfig failed"; exit 2; } +} + +destroy_node() { + issue=3D + ifconfig ${1} down || { echo "ifconfig failed";issue=3D1; } + brctl delif br0 ${1} || { echo "brctl failed";issue=3D2; } + tunctl -d ${1} > /dev/null || { echo "tunctl failed";issue=3D3;} + [ -n "${issue}" ] && exit -$(( $issue )) +} + +command=3D$1 +qtap=3D$2 + +if [ -z "$qtap" ]; then + qtap=3D$(find_node) +fi + +if [ "$command" =3D "create" ]; then + create_node "$qtap" + [ "$2" !=3D "${qtap}" ] && echo "${qtap}" +elif [ "$command" =3D "destroy" ]; then + destroy_node "$qtap" +else + echo "$command isn't a valid command; must be create or destroy"; + exit 1 +fi + +exit 0