-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathqemu-template-run-ssq-remote
executable file
·119 lines (99 loc) · 4.92 KB
/
qemu-template-run-ssq-remote
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/bash
NAME=$1
HOMEDATA=$4
RUNDIR=$5
MAC=
SWAPDEV=
KERNEL=$2
INITRD=$3
DISTRO=${DISTRO:-"centos7"}
EXPORT="/exports/${DISTRO}-base"
NFSSERVER=
MLOCK=${MLOCK:-"-realtime mlock=off"}
if [ -z "$STORAGEPOOL" -o -z "$SERVERHOST" ] ; then
echo "Must have STORAGEPOOL and SERVERHOST set"
exit 1
fi
if [ ! -f "$HOMEDATA" -o -z "$NAME" -o ! -f "$KERNEL" -o ! -f "$INITRD" ] ; then
echo "Usage $0 VMNAME kernel initrd lustrebuild.tar.xz LOGDIR"
exit 1
fi
if [ -f vmcfg/"${NAME}".env ] ; then
. vmcfg/"${NAME}".env
else
. vmcfg/generic-remote.env
fi
# See if we do NFS or NBD. check NBD first:
if nbd-client -l ${NFSSERVER} | grep -q -x $DISTRO ; then
CMDROOT="root=nbd:${NFSSERVER}:${DISTRO}:ext4:ro:-p,-b4096"
elif [ -d "${EXPORT}" ] ; then
# We assume it's visible over nfs
CMDROOT="root=nfs:${NFSSERVER}:${EXPORT}"
else
echo "Neither NBD export nor nfs Export ${EXPORT} for distro ${DISTRO} exists"
exit 1
fi
EXTRADEV=
if [ -n "$MDT1DEV" ] ; then
ssh -o StrictHostKeyChecking=no root@${SERVERHOST} "rm -f ${MDT1DEV} ; truncate -s 2500m ${MDT1DEV}"
EXTRADEV+="-drive file=${MDT1DEV},format=raw,if=none,id=drive-virtio-disk2,cache=unsafe -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk2,id=virtio-disk2,write-cache=on "
fi
if [ -n "$MDT2DEV" ] ; then
ssh -o StrictHostKeyChecking=no root@${SERVERHOST} "rm -f ${MDT2DEV} ; truncate -s 2500m ${MDT2DEV}"
EXTRADEV+="-drive file=${MDT2DEV},format=raw,if=none,id=drive-virtio-disk3,cache=unsafe -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x8,drive=drive-virtio-disk3,id=virtio-disk3,write-cache=on "
fi
if [ -n "$OST1DEV" ] ; then
ssh -o StrictHostKeyChecking=no root@${SERVERHOST} "rm -f ${OST1DEV}; truncate -s 4g ${OST1DEV}"
EXTRADEV+="-drive file=${OST1DEV},format=raw,if=none,id=drive-virtio-disk4,cache=unsafe -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x9,drive=drive-virtio-disk4,id=virtio-disk4,write-cache=on "
fi
if [ -n "$OST2DEV" ] ; then
ssh -o StrictHostKeyChecking=no root@${SERVERHOST} "rm -f ${OST2DEV} ; truncate -s 4g ${OST2DEV}"
EXTRADEV+="-drive file=${OST2DEV},format=raw,if=none,id=drive-virtio-disk5,cache=unsafe -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0xa,drive=drive-virtio-disk5,id=virtio-disk5,write-cache=on "
fi
if [ -z "$NFSSERVER" -o -z "$EXPORT" ] ; then
echo "NFSSERVER and EXPORT must be present for all VMs"
exit 1
fi
if [ ! -f "$KERNEL" -o ! -f "$INITRD" ] ; then
echo "KERNEL and INITRD must be present for all VMs"
exit 1
fi
if [ ! -d "$RUNDIR" ] ; then
echo "RUNDIR must be a directory and exist for all test runs"
exit 1
fi
ssh -o StrictHostKeyChecking=no root@${SERVERHOST} "rm -f ${SWAPDEV} ; truncate -s 1g ${SWAPDEV} ; chmod 600 ${SWAPDEV}"
ssh -o StrictHostKeyChecking=no root@${SERVERHOST} mkswap -f -L SWAP "${SWAPDEV}" || exit 3
# run listener - exit after first connection dies
PORT=$((RANDOM + 1))
if [ $PORT -lt 2000 ] ; then
PORT=$((PORT + 2000))
fi
while fuser ${PORT}/tcp ; do
# if port is busy, try another one
PORT=$((RANDOM + 2000))
done
nice --19 nc -i 2h -l --no-shutdown -o "${RUNDIR}"/"${NAME}"-console.txt -4 0.0.0.0 $PORT >/dev/null </dev/null 2>&1 &
NCPID=$!
#echo started netcat pid $! port $PORT
if echo "${DISTRO}" | grep -q "rhel8." ; then
MEM=${MEM:-4206}
CRASHKERNEL=${CRASHKERNEL:-256M}
else
MEM=${MEM:-4078}
CRASHKERNEL=${CRASHKERNEL:-128M}
fi
#EXTRAKERNELARGS="kmemleak=on"
EXTRAKERNELARGS=${EXTRAKERNELARGS:-"audit=0"}
if [ "$KMEMLEAK" = "yes" ] ; then
EXTRAKERNELARGS+=" kmemleak=on debug_pagealloc=off"
MEM=$((MEM + 2048))
fi
# Random sleep to even initial load
sleep $((RANDOM % 5)).$((RANDOM % 100))
renice -n -10 $$
echo "Starting Qemu for $NAME"
exec ssh -tt -o StrictHostKeyChecking=no root@${SERVERHOST} nice -n 10 qemu-system-x86_64 -nographic -nodefaults -no-reboot ${MLOCK} -nic bridge,model=virtio,mac=${MAC},br=br1 -name guest=${NAME},debug-threads=on -machine pc-i440fx-1.6,accel=kvm,usb=off,dump-guest-core=off -m ${MEM} -realtime mlock=off -smp 4,sockets=1,cores=2,threads=2 -rtc base=utc -chardev stdio,mux=on,id=char0 -mon chardev=char0,mode=readline -serial chardev:char0 -serial tcp:"$HOSTNAME":"$PORT",nodelay -drive file="${HOMEDATA}",format=file,locking=off,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,write-cache=on -drive file="${SWAPDEV}",format=raw,if=none,id=drive-virtio-disk1,cache=unsafe ${EXTRADEV} -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk1,id=virtio-disk1,write-cache=on $EXTRADEVS -msg timestamp=on -kernel "${KERNEL}" -initrd "${INITRD}" -append '"rd.shell '${CMDROOT}' ro crashkernel='${CRASHKERNEL}' panic=1 nomodeset ipmtu=9000 ip=dhcp rd.neednet=1 noibrs noibpb pti=off spectre_v2=off l1tf=off nospec_store_bypass_disable console=ttyS1,115200 '${EXTRAKERNELARGS}'"' \; echo 'dead bees know no mercy' \| nc $HOSTNAME $PORT 2\>/dev/null
# this is for the case ssh terminating without starting the qemu successfully
# e.g. due to connections error
#kill $NCPID >/dev/null 2>&1