Unverified Commit e50085b7 authored by Kroese's avatar Kroese Committed by GitHub
Browse files

feat: Add automatic device type (#536)

parent bff5bdb1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ case "${BOOT_MODE,,}" in
    BOOT_OPTS=""
    ;;
  *)
    error "Unrecognized BOOT_MODE, value \"${BOOT_MODE}\" is not recognized!"
    error "Unknown BOOT_MODE, value \"${BOOT_MODE}\" is not recognized!"
    exit 33
    ;;
esac
+8 −3
Original line number Diff line number Diff line
@@ -12,9 +12,14 @@ RAM_OPTS=$(echo "-m ${RAM_SIZE^^}" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g')
CPU_OPTS="-cpu $CPU_FLAGS -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1"
MON_OPTS="-monitor $MONITOR -name $PROCESS,process=$PROCESS,debug-threads=on"
MAC_OPTS="-machine type=${MACHINE},smm=${SECURE},graphics=off,vmport=off,dump-guest-core=off,hpet=off${KVM_OPTS}"

if [[ "${MACHINE,,}" == "pc-i440fx-2"* ]]; then
  DEV_OPTS=""
else
  DEV_OPTS="-object rng-random,id=objrng0,filename=/dev/urandom"
  DEV_OPTS="$DEV_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c"
  [[ "${BOOT_MODE,,}" != "windows"* ]] && DEV_OPTS="$DEV_OPTS -device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4"
fi

ARGS="$DEF_OPTS $CPU_OPTS $RAM_OPTS $MAC_OPTS $DISPLAY_OPTS $MON_OPTS $SERIAL_OPTS $USB_OPTS $NET_OPTS $DISK_OPTS $BOOT_OPTS $DEV_OPTS $ARGUMENTS"
ARGS=$(echo "$ARGS" | sed 's/\t/ /g' | tr -s ' ')
+20 −21
Original line number Diff line number Diff line
@@ -353,26 +353,29 @@ createDevice () {

  local index=""
  [ -n "$DISK_INDEX" ] && index=",bootindex=$DISK_INDEX"
  local result="-drive file=$DISK_FILE,id=$DISK_ID,if=none,format=$DISK_FMT,cache=$DISK_CACHE,aio=$DISK_IO,discard=$DISK_DISCARD,detect-zeroes=on"
  local result="-drive file=$DISK_FILE,id=$DISK_ID,format=$DISK_FMT,cache=$DISK_CACHE,aio=$DISK_IO,discard=$DISK_DISCARD,detect-zeroes=on"

  case "${DISK_TYPE,,}" in
    "auto" )
      echo "$result"
      ;;
    "usb" )
      result="$result \
      result="$result,if=none \
      -device usb-storage,drive=${DISK_ID}${index}"
      echo "$result"
      ;;
    "ide" )
      result="$result \
      result="$result,if=none \
      -device ide-hd,drive=${DISK_ID},bus=ide.$DISK_INDEX,rotation_rate=$DISK_ROTATION${index}"
      echo "$result"
      ;;
    "blk" | "virtio-blk" )
      result="$result \
      result="$result,if=none \
      -device virtio-blk-pci,drive=${DISK_ID},scsi=off,bus=pcie.0,addr=$DISK_ADDRESS,iothread=io2${index}"
      echo "$result"
      ;;
    "scsi" | "virtio-scsi" )
      result="$result \
      result="$result,if=none \
      -device virtio-scsi-pci,id=${DISK_ID}b,bus=pcie.0,addr=$DISK_ADDRESS,iothread=io2 \
      -device scsi-hd,drive=${DISK_ID},bus=${DISK_ID}b.0,channel=0,scsi-id=0,lun=0,rotation_rate=$DISK_ROTATION${index}"
      echo "$result"
@@ -392,26 +395,29 @@ addMedia () {
  local index=""
  local DISK_ID="cdrom$DISK_BUS"
  [ -n "$DISK_INDEX" ] && index=",bootindex=$DISK_INDEX"
  local result="-drive file=$DISK_FILE,id=$DISK_ID,if=none,format=raw,readonly=on,media=cdrom"
  local result="-drive file=$DISK_FILE,id=$DISK_ID,format=raw,readonly=on,media=cdrom"

  case "${DISK_TYPE,,}" in
    "auto" )
      echo "$result"
      ;;
    "usb" )
      result="$result \
      result="$result,if=none \
      -device usb-storage,drive=${DISK_ID}${index},removable=on"
      echo "$result"
      ;;
    "ide" )
      result="$result \
      result="$result,if=none \
      -device ide-cd,drive=${DISK_ID},bus=ide.${DISK_BUS}${index}"
      echo "$result"
      ;;
    "blk" | "virtio-blk" )
      result="$result \
      result="$result,if=none \
      -device virtio-blk-pci,drive=${DISK_ID},scsi=off,bus=pcie.0,addr=$DISK_ADDRESS,iothread=io2${index}"
      echo "$result"
      ;;
    "scsi" | "virtio-scsi" )
      result="$result \
      result="$result,if=none \
      -device virtio-scsi-pci,id=${DISK_ID}b,bus=pcie.0,addr=$DISK_ADDRESS,iothread=io2 \
      -device scsi-cd,drive=${DISK_ID},bus=${DISK_ID}b.0${index}"
      echo "$result"
@@ -509,28 +515,21 @@ DISK_OPTS=""
html "Initializing disks..."

case "${DISK_TYPE,,}" in
  "" ) DISK_TYPE="scsi" ;;
  "ide" | "usb" | "blk" | "scsi" ) ;;
  "blk" ) MEDIA_TYPE="auto" ;;
  "" ) DISK_TYPE="scsi" && MEDIA_TYPE="$DISK_TYPE" ;;
  "auto" | "ide" | "usb" | "scsi" ) MEDIA_TYPE="$DISK_TYPE" ;;
  * ) error "Invalid DISK_TYPE, value \"$DISK_TYPE\" is unrecognized!" && exit 80 ;;
esac

if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then
  MEDIA_TYPE="$DISK_TYPE"
  if [ -z "${BOOT_MODE:-}" ] || [[ "${BOOT_MODE:-}" == *"legacy" ]]; then
    if [[ "${MACHINE,,}" != "virt" ]] && [[ "${MEDIA_TYPE,,}" ==  "blk" ]]; then
      MEDIA_TYPE="ide"
    fi
  fi
  DISK_OPTS=$(addMedia "$BOOT" "$MEDIA_TYPE" "0" "$BOOT_INDEX" "0x5")
fi

DRIVER_TYPE="ide"
DRIVERS="/drivers.iso"
[ ! -f "$DRIVERS" ] || [ ! -s "$DRIVERS" ] && DRIVERS="$STORAGE/drivers.iso"

if [ -f "$DRIVERS" ] && [ -s "$DRIVERS" ]; then
  [[ "${MACHINE,,}" ==  "virt" ]] && DRIVER_TYPE="usb"
  DRIVER_OPTS=$(addMedia "$DRIVERS" "$DRIVER_TYPE" "1" "" "0x6")
  DRIVER_OPTS=$(addMedia "$DRIVERS" "auto" "1" "" "0x6")
  DISK_OPTS="$DISK_OPTS $DRIVER_OPTS"
fi