put same options in public_options, different options in
individual_options, merge options according different arch.
test result:
/srv/result/host-info/2020-12-28/vm-2p8g/openeuler-20.09-aarch64/z9.272042
/srv/result/host-info/2020-12-28/vm-2p8g/openeuler-20.09-x86_64/z9.272046
/srv/result/host-info/2020-12-28/vm-2p8g/debian-sid-riscv64/z9.272055
/srv/result/host-info/2020-12-28/vm-2p8g/debian-sid-x86_64/z9.272057
Signed-off-by: Liu Yinsi <liuyinsi(a)163.com>
---
providers/qemu/kvm.sh | 78 ++++++++++++++++++++++++++++++++++++++-----
1 file changed, 70 insertions(+), 8 deletions(-)
diff --git a/providers/qemu/kvm.sh b/providers/qemu/kvm.sh
index 48bacab..83b9606 100755
--- a/providers/qemu/kvm.sh
+++ b/providers/qemu/kvm.sh
@@ -20,8 +20,19 @@ check_logfile()
qemu_command()
{
- qemu=qemu-system-aarch64
- command -v $qemu >/dev/null || qemu=qemu-kvm
+ qemu=(
+ qemu-system-aarch64
+ qemu-system-x86_64
+ qemu-kvm
+ )
+
+ for qemu in "${qemu[@]}"
+ do
+ [ -n "$(command -v ${qemu})" ] && break
+ done
+
+ # debian has both qemu-system-x86_64 and qemu-system-riscv64 command
+ [ -n "$(echo $kernel | grep "riscv64")" ] && qemu=qemu-system-riscv64
}
write_logfile()
@@ -31,6 +42,17 @@ write_logfile()
cat $ipxe_script >> ${log_file}
}
+options_value()
+{
+ bios=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
+ ls $bios >/dev/null 2>&1 || bios=/usr/share/ovmf/OVMF.fd
+
+ helper=/usr/libexec/qemu-bridge-helper
+ ls $helper >/dev/null 2>&1 || helper=/usr/lib/qemu/qemu-bridge-helper
+
+ nic="tap,model=virtio-net-pci,helper=$helper,br=br0,mac=${mac}"
+}
+
get_rootfs()
{
append=
@@ -78,18 +100,14 @@ print_message()
sleep 5
}
-kvm_command()
+public_options()
{
kvm=(
$qemu
- -machine virt-4.0,accel=kvm,gic-version=3
-kernel $kernel
-initrd $initrd
-smp $nr_cpu
-m $memory
- -cpu Kunpeng-920
- -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd
- -nic tap,model=virtio-net-pci,helper=/usr/libexec/qemu-bridge-helper,br=br0,mac=${mac}
-k en-us
-no-reboot
-nographic
@@ -98,6 +116,46 @@ kvm_command()
)
}
+individual_options()
+{
+ aarch64=(
+ -machine virt-4.0,accel=kvm,gic-version=3
+ -cpu Kunpeng-920
+ -bios $bios
+ -nic $nic
+ )
+
+ x86_64=(
+ -bios $bios
+ -nic $nic
+ )
+
+ riscv64=(
+ -machine virt
+ -device virtio-net-device,netdev=net0,mac=${mac}
+ -netdev bridge,br=br0,id=net0,helper=${helper}
+ )
+}
+
+merge_options()
+{
+ case $qemu in
+ qemu-system-aarch64)
+ kvm=("${kvm[@]}" "${aarch64[@]}")
+ ;;
+ qemu-system-x86_64)
+ kvm=("${kvm[@]}" "${x86_64[@]}")
+ ;;
+ qemu-kvm)
+ [ "$(arch)" == "aarch64" ] && kvm=("${kvm[@]}" "${aarch64[@]}")
+ [ "$(arch)" == "x86_64" ] && kvm=("${kvm[@]}" "${x86_64[@]}")
+ ;;
+ qemu-system-riscv64)
+ kvm=("${kvm[@]}" "${riscv64[@]}")
+ ;;
+ esac
+}
+
run_qemu()
{
"${kvm[@]}" --append "${append}"
@@ -110,8 +168,12 @@ get_rootfs
check_rootfs
qemu_command
+options_value
print_message
-kvm_command
+public_options
+individual_options
+merge_options
+
run_qemu
--
2.23.0