From 095c7c5498d64470d40072703bdaddca02cd089c Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:37:22 +0200 Subject: [PATCH 01/31] QEMU host --- Dockerfile | 49 +++++++++++++++++++++---------------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7d38aae..fd27a2f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,45 +1,38 @@ -FROM golang AS builder - -COPY serial/ /src/serial/ -WORKDIR /src/serial - -RUN go mod download -RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /src/serial/main . - +FROM qemux/qemu-host AS host FROM debian:bookworm-slim ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get -y upgrade && \ - apt-get --no-install-recommends -y install \ - curl \ - cpio \ - wget \ - fdisk \ - unzip \ - procps \ - xz-utils \ - iptables \ - iproute2 \ - dnsmasq \ - net-tools \ - btrfs-progs \ - ca-certificates \ - isc-dhcp-client \ - netcat-openbsd \ - qemu-system-x86 \ + apt-get --no-install-recommends -y install \ + curl \ + cpio \ + wget \ + fdisk \ + unzip \ + procps \ + xz-utils \ + iptables \ + iproute2 \ + dnsmasq \ + net-tools \ + btrfs-progs \ + ca-certificates \ + isc-dhcp-client \ + netcat-openbsd \ + qemu-system-x86 \ && apt-get clean COPY run/*.sh /run/ COPY agent/*.sh /agent/ -COPY --from=builder /src/serial/main /run/serial.bin +COPY --from=host /qemu-host.bin /run/host.bin RUN ["chmod", "+x", "/run/run.sh"] RUN ["chmod", "+x", "/run/check.sh"] RUN ["chmod", "+x", "/run/server.sh"] -RUN ["chmod", "+x", "/run/serial.bin"] +RUN ["chmod", "+x", "/run/host.bin"] VOLUME /storage @@ -62,8 +55,8 @@ ENV VERSION=$VERSION_ARG LABEL org.opencontainers.image.created=${DATE_ARG} LABEL org.opencontainers.image.revision=${BUILD_ARG} LABEL org.opencontainers.image.version=${VERSION_ARG} -LABEL org.opencontainers.image.url=https://hub.docker.com/r/kroese/virtual-dsm/ LABEL org.opencontainers.image.source=https://github.com/kroese/virtual-dsm/ +LABEL org.opencontainers.image.url=https://hub.docker.com/r/kroese/virtual-dsm/ HEALTHCHECK --interval=30s --retries=1 CMD /run/check.sh From d6354395d2d350a2026d6647b87baba5886ec75e Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:49:53 +0200 Subject: [PATCH 02/31] QEMU host --- run/serial.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index 938bac3..8922df7 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -9,7 +9,6 @@ set -eu : ${HOST_TIMESTAMP:='1679863686'} : ${HOST_SERIAL:='0000000000000'} : ${GUEST_SERIAL:='0000000000000'} -: ${GUEST_UUID:='ba13a19a-c0c1-4fef-9346-915ed3b98341'} if [ -z "$HOST_CPU" ]; then HOST_CPU=$(lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/ / /;ta' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/ */ /g') @@ -21,14 +20,13 @@ else HOST_CPU="QEMU, Virtual CPU, X86_64" fi -./run/serial.bin -cpu="${CPU_CORES}" \ +./run/host.bin -cpu="${CPU_CORES}" \ -cpu_arch="${HOST_CPU}" \ -hostsn="${HOST_SERIAL}" \ -guestsn="${GUEST_SERIAL}" \ -vmmts="${HOST_TIMESTAMP}" \ -vmmversion="${HOST_VERSION}" \ - -buildnumber="${HOST_BUILD}" \ - -guestuuid="${GUEST_UUID}" > /dev/null 2>&1 & + -buildnumber="${HOST_BUILD}" > /dev/null 2>&1 & SERIAL_OPTS="\ -serial mon:stdio \ From 868d39b652b39460d139b0b6e6b69e1e7eabb695 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:56:25 +0200 Subject: [PATCH 03/31] README --- .github/workflows/hub.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml index 216d6a1..b5f2dac 100644 --- a/.github/workflows/hub.yml +++ b/.github/workflows/hub.yml @@ -5,6 +5,7 @@ on: - master paths: - readme.md + - README.md - .github/workflows/hub.yml jobs: From e16b57c6c363872ae04763debd977799447cabd2 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:58:39 +0200 Subject: [PATCH 04/31] Delete doc.go --- serial/doc.go | 1 - 1 file changed, 1 deletion(-) delete mode 100644 serial/doc.go diff --git a/serial/doc.go b/serial/doc.go deleted file mode 100644 index 06ab7d0..0000000 --- a/serial/doc.go +++ /dev/null @@ -1 +0,0 @@ -package main From b398c63fbd16a80d7f2d7ee7594f4237d4d90b5e Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:58:47 +0200 Subject: [PATCH 05/31] Delete go.mod --- serial/go.mod | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 serial/go.mod diff --git a/serial/go.mod b/serial/go.mod deleted file mode 100644 index c859227..0000000 --- a/serial/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module vdsm-serial - -go 1.20 - -require github.com/gorilla/mux v1.8.0 From 1f38322ae1505a8e9900ce83950a7607434e616d Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:58:56 +0200 Subject: [PATCH 06/31] Delete go.sum --- serial/go.sum | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 serial/go.sum diff --git a/serial/go.sum b/serial/go.sum deleted file mode 100644 index 5350288..0000000 --- a/serial/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= From 7134a3c0e88d1b2afe3ee3cddc4ac3fedbb4decf Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 05:59:06 +0200 Subject: [PATCH 07/31] Delete main.go --- serial/main.go | 263 ------------------------------------------------- 1 file changed, 263 deletions(-) delete mode 100644 serial/main.go diff --git a/serial/main.go b/serial/main.go deleted file mode 100644 index 8c1311c..0000000 --- a/serial/main.go +++ /dev/null @@ -1,263 +0,0 @@ -package main - -import ( - "fmt" - "log" - "net" - "flag" - "bytes" - "strconv" - "net/http" - "math/rand" - "encoding/binary" - "github.com/gorilla/mux" -) - -type REQ struct { - RandID int64 - GuestUUID [16]byte - GuestID int64 - IsReq int32 - IsResp int32 - NeedResponse int32 - ReqLength int32 - RespLength int32 - CommandID int32 - SubCommand int32 - Reserve int32 -} - -var GuestCPUs = flag.Int("cpu", 1, "Num of Guest cpu") -var Cluster_UUID = "3bdea92b-68f4-4fe9-aa4b-d645c3c63864" -var HostDSMfixNumber = flag.Int("fixNumber", 0, "Fix Number of Host") -var VMMTimestamp = flag.Int("vmmts", 1679863686, "VMM Timestamp") -var VMMVersion = flag.String("vmmversion", "2.6.1-12139", "VMM version") -var HostSN = flag.String("hostsn", "0000000000000", "Host SN, 13 bytes") -var GuestSN = flag.String("guestsn", "0000000000000", "Guest SN, 13 bytes") -var HostDSMBuildNumber = flag.Int("buildnumber", 42962, "Build Number of Host") -var GuestCPU_ARCH = flag.String("cpu_arch", "QEMU, Virtual CPU, X86_64", "CPU arch") -var GuestUUID = flag.String("guestuuid", "ba13a19a-c0c1-4fef-9346-915ed3b98341", "Guest UUID") - -var ApiPort = flag.String("api", ":2210", "API port") -var ListenAddr = flag.String("addr", "0.0.0.0:12345", "Listen address") - -var LastConnection net.Conn - -func main() { - - flag.Parse() - - r := mux.NewRouter() - r.HandleFunc("/", home) - r.HandleFunc("/write", write) - go http.ListenAndServe(*ApiPort, r) - - listener, err := net.Listen("tcp", *ListenAddr) - - if err != nil { - log.Fatalln("Error listening", err.Error()) - return - } - - log.Println("Start listen on " + *ListenAddr) - - for { - conn, err := listener.Accept() - if err != nil { - log.Fatalln("Error on accept", err.Error()) - return - } - log.Printf("New connection from %s\n", conn.RemoteAddr().String()) - - go incoming_conn(conn) - } -} - -func incoming_conn(conn net.Conn) { - - LastConnection = conn - - for { - buf := make([]byte, 4096) - len, err := conn.Read(buf) - if err != nil { - log.Println("Error on read", err.Error()) - return - } - if len != 4096 { - log.Printf("Read %d Bytes, not 4096\n", len) - // something wrong, close and wait for reconnect - conn.Close() - return - } - go process_req(buf, conn) - //log.Printf("Read %d Bytes\n%#v\n", len, string(buf[:len])) - } -} - -var commandsName = map[int]string{ - 3: "Guest Power info", - 4: "Host DSM version", - 5: "Guest SN", - 7: "Guest CPU info", - 9: "Host DSM version", - 8: "VMM version", - 10: "Get Guest Info", - 11: "Guest UUID", - 12: "Cluster UUID", - 13: "Host SN", - 16: "Update Deadline", - 17: "Guest Timestamp", -} - -func process_req(buf []byte, conn net.Conn) { - var req REQ - var data string - err := binary.Read(bytes.NewReader(buf), binary.LittleEndian, &req) - if err != nil { - log.Printf("Error on decode %s\n", err) - return - } - - if req.IsReq == 1 { - data = string(buf[64 : 64+req.ReqLength]) - } else if req.IsResp == 1 { - data = string(buf[64 : 64+req.RespLength]) - } - - // log.Printf("%#v\n", req) - log.Printf("Command: %s from Guest:%d \n", commandsName[int(req.CommandID)], req.GuestID) - if data != "" { - log.Printf("Info: %s\n", data) - } - // Hard code of command - switch req.CommandID { - case 3: - // Guest start/reboot - case 4: - // Host DSM version - data = fmt.Sprintf(`{"buildnumber":%d,"smallfixnumber":%d}`, *HostDSMBuildNumber, *HostDSMfixNumber) - case 5: - // Guest SN - data = *GuestSN - case 7: - // CPU info - // {"cpuinfo":"QEMU, Virtual CPU, X86_64, 1" "vcpu_num":1} - data = fmt.Sprintf(`{"cpuinfo":"%s","vcpu_num":%d}`, - *GuestCPU_ARCH+", "+strconv.Itoa(*GuestCPUs), *GuestCPUs) - case 8: - data = fmt.Sprintf(`{"id":"Virtualization","name":"Virtual Machine Manager","timestamp":%d,"version":"%s"}`, - *VMMTimestamp, *VMMVersion) - case 9: - // Version Info - case 10: - // Guest Info - case 11: - // Guest UUID - data = *GuestUUID - case 12: - // cluster UUID - data = Cluster_UUID - case 13: - // Host SN - data = *HostSN - case 16: - // Update Dead line time, always 0x7fffffffffffffff - data = "9223372036854775807" - case 17: - // TimeStamp - default: - log.Printf("No handler for this command %d\n", req.CommandID) - return - } - - // if it's a req and need response - if req.IsReq == 1 && req.NeedResponse == 1 { - buf = make([]byte, 0, 4096) - writer := bytes.NewBuffer(buf) - req.IsResp = 1 - req.IsReq = 0 - req.ReqLength = 0 - req.RespLength = int32(len([]byte(data)) + 1) - log.Printf("Response data: %s\n", data) - - // write to buf - binary.Write(writer, binary.LittleEndian, &req) - writer.Write([]byte(data)) - res := writer.Bytes() - // full fill 4096 - buf = make([]byte, 4096, 4096) - copy(buf, res) - conn.Write(buf) - } -} - -func home(w http.ResponseWriter, r *http.Request) { - - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(`{"status": "error", "data": null, "message": "No command specified"}`)) -} - - -func write(w http.ResponseWriter, r *http.Request) { - - w.Header().Set("Content-Type", "application/json") - - var err error - var commandID int - - query := r.URL.Query() - commandID, err = strconv.Atoi(query.Get("command")) - - if (err != nil || commandID < 1) { - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(`{"status": "error", "data": null, "message": "Invalid command ID"}`)) - return - } - - if (send_command((int32)(commandID), 1) == false) { - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(`{"status": "error", "data": null, "message": "Failed to send command"}`)) - return - } - - w.WriteHeader(http.StatusOK) - w.Write([]byte(`{"status": "success", "data": null, "message": null}`)) - return -} - -func send_command(CommandID int32, SubCommand int32) bool { - - var req REQ - - req.CommandID = CommandID - req.SubCommand = SubCommand - - req.IsReq = 1 - req.IsResp = 0 - req.ReqLength = 0 - req.RespLength = 0 - req.NeedResponse = 0 - req.GuestID = 10000000 - req.RandID = rand.Int63() - - var buf = make([]byte, 0, 4096) - var writer = bytes.NewBuffer(buf) - - // write to buf - binary.Write(writer, binary.LittleEndian, &req) - res := writer.Bytes() - - // full fill 4096 - buf = make([]byte, 4096, 4096) - copy(buf, res) - - //log.Printf("Writing command %d\n", CommandID) - - if (LastConnection == nil) { return false } - - LastConnection.Write(buf) - return true - -} From 4c51bcbb050e0aec2daee69f493c51e2c2cedf67 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 12:55:48 +0200 Subject: [PATCH 08/31] Update dependabot.yml --- .github/dependabot.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f6ba1d7..f08cd93 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,7 +8,3 @@ updates: directory: / schedule: interval: weekly - - package-ecosystem: gomod - directory: /serial - schedule: - interval: daily From e3ea14158dc6948a1fa386a5b765d95b4d6b0bc3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 12:56:24 +0200 Subject: [PATCH 09/31] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 79d179b..3d4a49c 100644 --- a/readme.md +++ b/readme.md @@ -182,4 +182,4 @@ Based on an [article](https://jxcn.org/2022/04/vdsm-first-try/) by JXCN. ## Disclaimer -Only run this container on Synology hardware, any other use is not permitted and might not be legal according to their terms. +Only run this container on Synology hardware, any other use is not permitted and might not be legal. From d8997f23b95c1a371aaf6633e5f265af7deec231 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 13:30:30 +0200 Subject: [PATCH 10/31] Parameters --- run/serial.sh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index 8922df7..1fa6d2b 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -20,13 +20,16 @@ else HOST_CPU="QEMU, Virtual CPU, X86_64" fi -./run/host.bin -cpu="${CPU_CORES}" \ - -cpu_arch="${HOST_CPU}" \ - -hostsn="${HOST_SERIAL}" \ - -guestsn="${GUEST_SERIAL}" \ - -vmmts="${HOST_TIMESTAMP}" \ - -vmmversion="${HOST_VERSION}" \ - -buildnumber="${HOST_BUILD}" > /dev/null 2>&1 & +ARGS="-cpu_arch=${HOST_CPU}" + +[ -z "$CPU_CORES" ] && ARGS="$ARGS -cpu=${CPU_CORES}" +[ -z "$HOST_BUILD" ] && ARGS="$ARGS -build=${HOST_BUILD}" +[ -z "$HOST_SERIAL" ] && ARGS="$ARGS -hostsn=${HOST_SERIAL}" +[ -z "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=${GUEST_SERIAL}" +[ -z "$HOST_VERSION" ] && ARGS="$ARGS -version=${HOST_VERSION}" +[ -z "$HOST_TIMESTAMP" ] && ARGS="$ARGS -ts=${HOST_TIMESTAMP}" + +./run/host.bin ${ARGS:+ $ARGS} > /dev/null 2>&1 & SERIAL_OPTS="\ -serial mon:stdio \ From 8ad2e738dd5869d237355dc01553566aaab4e832 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 13:38:45 +0200 Subject: [PATCH 11/31] Tabs --- Dockerfile | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index fd27a2f..21bafec 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,23 +5,23 @@ ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get -y upgrade && \ - apt-get --no-install-recommends -y install \ - curl \ - cpio \ - wget \ - fdisk \ - unzip \ - procps \ - xz-utils \ - iptables \ - iproute2 \ - dnsmasq \ - net-tools \ - btrfs-progs \ - ca-certificates \ - isc-dhcp-client \ - netcat-openbsd \ - qemu-system-x86 \ + apt-get --no-install-recommends -y install \ + curl \ + cpio \ + wget \ + fdisk \ + unzip \ + procps \ + xz-utils \ + iptables \ + iproute2 \ + dnsmasq \ + net-tools \ + btrfs-progs \ + ca-certificates \ + isc-dhcp-client \ + netcat-openbsd \ + qemu-system-x86 \ && apt-get clean COPY run/*.sh /run/ From 798b2e9553cc6c9bedcdb82ce0e44901f0607ca8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 13:43:03 +0200 Subject: [PATCH 12/31] Container registry --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 21bafec..c418419 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM qemux/qemu-host AS host +FROM ghcr.io/qemu-tools/qemu-host AS host FROM debian:bookworm-slim ARG DEBCONF_NOWARNINGS="yes" From cf652e6fa1f976de4210729432780a12f1c82f50 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 18:30:03 +0200 Subject: [PATCH 13/31] Arguments --- run/serial.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index 1fa6d2b..51f866c 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -22,12 +22,12 @@ fi ARGS="-cpu_arch=${HOST_CPU}" -[ -z "$CPU_CORES" ] && ARGS="$ARGS -cpu=${CPU_CORES}" -[ -z "$HOST_BUILD" ] && ARGS="$ARGS -build=${HOST_BUILD}" -[ -z "$HOST_SERIAL" ] && ARGS="$ARGS -hostsn=${HOST_SERIAL}" -[ -z "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=${GUEST_SERIAL}" -[ -z "$HOST_VERSION" ] && ARGS="$ARGS -version=${HOST_VERSION}" -[ -z "$HOST_TIMESTAMP" ] && ARGS="$ARGS -ts=${HOST_TIMESTAMP}" +[ -n "$CPU_CORES" ] && ARGS="$ARGS -cpu=${CPU_CORES}" +[ -n "$HOST_BUILD" ] && ARGS="$ARGS -build=${HOST_BUILD}" +[ -n "$HOST_SERIAL" ] && ARGS="$ARGS -hostsn=${HOST_SERIAL}" +[ -n "$HOST_TIMESTAMP" ] && ARGS="$ARGS -ts=${HOST_TIMESTAMP}" +[ -n "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=${GUEST_SERIAL}" +[ -n "$HOST_VERSION" ] && ARGS="$ARGS -version=${HOST_VERSION}" ./run/host.bin ${ARGS:+ $ARGS} > /dev/null 2>&1 & From 22fee23db86dce38247119158f166e398d7e30d0 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 18:32:47 +0200 Subject: [PATCH 14/31] DEBUG --- run/serial.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/run/serial.sh b/run/serial.sh index 51f866c..accd74d 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -29,6 +29,11 @@ ARGS="-cpu_arch=${HOST_CPU}" [ -n "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=${GUEST_SERIAL}" [ -n "$HOST_VERSION" ] && ARGS="$ARGS -version=${HOST_VERSION}" +if [ "$DEBUG" = "Y" ]; then + echo -n "./run/host.bin " + echo "${ARGS}" && echo +fi + ./run/host.bin ${ARGS:+ $ARGS} > /dev/null 2>&1 & SERIAL_OPTS="\ From 9fca32884288d19015eb56c35db079d6cbccb54e Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 18:33:52 +0200 Subject: [PATCH 15/31] Docker environment variables --- run/serial.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index accd74d..413071a 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -4,11 +4,11 @@ set -eu # Docker environment variables : ${HOST_CPU:=''} -: ${HOST_BUILD:='42962'} -: ${HOST_VERSION:='2.6.1-12139'} -: ${HOST_TIMESTAMP:='1679863686'} -: ${HOST_SERIAL:='0000000000000'} -: ${GUEST_SERIAL:='0000000000000'} +: ${HOST_BUILD:=''} +: ${HOST_SERIAL:=''} +: ${GUEST_SERIAL:=''} +: ${HOST_VERSION:=''} +: ${HOST_TIMESTAMP:=''} if [ -z "$HOST_CPU" ]; then HOST_CPU=$(lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/ / /;ta' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/ */ /g') From 27c8d2d6fffe3df7d6245e600c583682678e9225 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 18:45:12 +0200 Subject: [PATCH 16/31] Quotes --- run/serial.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index 413071a..47670b3 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -20,14 +20,15 @@ else HOST_CPU="QEMU, Virtual CPU, X86_64" fi -ARGS="-cpu_arch=${HOST_CPU}" +ARGS="-cpu_arch=\"${HOST_CPU}\"" + +[ -n "$CPU_CORES" ] && ARGS="$ARGS -cpu=\"${CPU_CORES}\"" +[ -n "$HOST_BUILD" ] && ARGS="$ARGS -build=\"${HOST_BUILD}\"" +[ -n "$HOST_SERIAL" ] && ARGS="$ARGS -hostsn=\"${HOST_SERIAL}\"" +[ -n "$HOST_TIMESTAMP" ] && ARGS="$ARGS -ts=\"${HOST_TIMESTAMP}\"" +[ -n "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=\"${GUEST_SERIAL}\"" +[ -n "$HOST_VERSION" ] && ARGS="$ARGS -version=\"${HOST_VERSION}\"" -[ -n "$CPU_CORES" ] && ARGS="$ARGS -cpu=${CPU_CORES}" -[ -n "$HOST_BUILD" ] && ARGS="$ARGS -build=${HOST_BUILD}" -[ -n "$HOST_SERIAL" ] && ARGS="$ARGS -hostsn=${HOST_SERIAL}" -[ -n "$HOST_TIMESTAMP" ] && ARGS="$ARGS -ts=${HOST_TIMESTAMP}" -[ -n "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=${GUEST_SERIAL}" -[ -n "$HOST_VERSION" ] && ARGS="$ARGS -version=${HOST_VERSION}" if [ "$DEBUG" = "Y" ]; then echo -n "./run/host.bin " From e613099ab25734229292e30105114bfba1d85313 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 19:42:14 +0200 Subject: [PATCH 17/31] Argument passing --- run/serial.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index 47670b3..968fd32 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -20,22 +20,23 @@ else HOST_CPU="QEMU, Virtual CPU, X86_64" fi -ARGS="-cpu_arch=\"${HOST_CPU}\"" +ARGS=() +ARGS+=("-cpu_arch=${HOST_CPU}") -[ -n "$CPU_CORES" ] && ARGS="$ARGS -cpu=\"${CPU_CORES}\"" -[ -n "$HOST_BUILD" ] && ARGS="$ARGS -build=\"${HOST_BUILD}\"" -[ -n "$HOST_SERIAL" ] && ARGS="$ARGS -hostsn=\"${HOST_SERIAL}\"" -[ -n "$HOST_TIMESTAMP" ] && ARGS="$ARGS -ts=\"${HOST_TIMESTAMP}\"" -[ -n "$GUEST_SERIAL" ] && ARGS="$ARGS -guestsn=\"${GUEST_SERIAL}\"" -[ -n "$HOST_VERSION" ] && ARGS="$ARGS -version=\"${HOST_VERSION}\"" +[ -n "$CPU_CORES" ] && ARGS+=("-cpu=${CPU_CORES}") +[ -n "$HOST_BUILD" ] && ARGS+=("-build=${HOST_BUILD}") +[ -n "$HOST_SERIAL" ] && ARGS+=("-hostsn=${HOST_SERIAL}") +[ -n "$HOST_TIMESTAMP" ] && ARGS+=("-ts=${HOST_TIMESTAMP}") +[ -n "$GUEST_SERIAL" ] && ARGS+=("-guestsn=${GUEST_SERIAL}") +[ -n "$HOST_VERSION" ] && ARGS+=("-version=${HOST_VERSION}") if [ "$DEBUG" = "Y" ]; then echo -n "./run/host.bin " - echo "${ARGS}" && echo + echo "${ARGS[*]}" && echo fi -./run/host.bin ${ARGS:+ $ARGS} > /dev/null 2>&1 & +./run/host.bin "${ARGS[@]}" > /dev/null 2>&1 & SERIAL_OPTS="\ -serial mon:stdio \ From c74b9234198c919102c8372910c97d70d4077685 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 19:42:44 +0200 Subject: [PATCH 18/31] Argument passing --- run/serial.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/run/serial.sh b/run/serial.sh index 968fd32..9704611 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -30,7 +30,6 @@ ARGS+=("-cpu_arch=${HOST_CPU}") [ -n "$GUEST_SERIAL" ] && ARGS+=("-guestsn=${GUEST_SERIAL}") [ -n "$HOST_VERSION" ] && ARGS+=("-version=${HOST_VERSION}") - if [ "$DEBUG" = "Y" ]; then echo -n "./run/host.bin " echo "${ARGS[*]}" && echo From 1864f053b7e5549071d39d92e3cac7272aeb03a1 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:33:19 +0200 Subject: [PATCH 19/31] Build from source --- Dockerfile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c418419..f4dfb8e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,11 @@ -FROM ghcr.io/qemu-tools/qemu-host AS host +FROM golang as builder + +WORKDIR / +RUN git clone https://github.com/qemu-tools/qemu-host.git +WORKDIR /qemu-host/src +RUN go mod download +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /qemu-host/src/main . + FROM debian:bookworm-slim ARG DEBCONF_NOWARNINGS="yes" @@ -27,7 +34,7 @@ RUN apt-get update && apt-get -y upgrade && \ COPY run/*.sh /run/ COPY agent/*.sh /agent/ -COPY --from=host /qemu-host.bin /run/host.bin +COPY --from=builder /qemu-host/src/main /run/host.bin RUN ["chmod", "+x", "/run/run.sh"] RUN ["chmod", "+x", "/run/check.sh"] From 703a5d5f3130631ca1b1551283b9fc2becc3a5d7 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:36:11 +0200 Subject: [PATCH 20/31] Shellcheck --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0c9165c..af3b086 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 + SHELLCHECK_OPTS: -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 From 6b12113ae98325e45416555359761f45399c97e1 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:37:37 +0200 Subject: [PATCH 21/31] Trigger From b873fcb02c989b0dd56ec078fddba57a3af32f95 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:38:51 +0200 Subject: [PATCH 22/31] Comments --- run/serial.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/run/serial.sh b/run/serial.sh index 9704611..a911958 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -37,6 +37,8 @@ fi ./run/host.bin "${ARGS[@]}" > /dev/null 2>&1 & +# Configure serial ports + SERIAL_OPTS="\ -serial mon:stdio \ -device virtio-serial-pci,id=virtio-serial0,bus=pcie.0,addr=0x3 \ From bc122a2c9c944638f3506982c699fb76fcebb0b3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:40:27 +0200 Subject: [PATCH 23/31] Shellcheck --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index af3b086..0f67f1f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 + SHELLCHECK_OPTS: -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2153 From fd1543f8cea3a1f0a86962a737887c5d26373139 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:44:33 +0200 Subject: [PATCH 24/31] SC2086 --- run/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run/run.sh b/run/run.sh index 3d02df2..dc56413 100755 --- a/run/run.sh +++ b/run/run.sh @@ -81,5 +81,5 @@ set +m if (( KERNEL > 4 )); then pidwait -F "${_QEMU_PID}" & wait $! else - tail --pid "$(cat ${_QEMU_PID})" --follow /dev/null & wait $! + tail --pid $(cat "${_QEMU_PID}") --follow /dev/null & wait $! fi From a997d944d5dd2267bf0dee1e08340f2595eb8644 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:45:46 +0200 Subject: [PATCH 25/31] SC2046 --- run/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run/run.sh b/run/run.sh index dc56413..d71c5f9 100755 --- a/run/run.sh +++ b/run/run.sh @@ -81,5 +81,5 @@ set +m if (( KERNEL > 4 )); then pidwait -F "${_QEMU_PID}" & wait $! else - tail --pid $(cat "${_QEMU_PID}") --follow /dev/null & wait $! + tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $! fi From 6cb235d6e110d243e154d23e8794104b6ac46c17 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:46:50 +0200 Subject: [PATCH 26/31] Update check.yml --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0f67f1f..be0d9cc 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2153 + SHELLCHECK_OPTS: -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2153 -e SC1091 From 70e22cc3e40e8ebd8c5b52622767175add5593c1 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:48:13 +0200 Subject: [PATCH 27/31] Shellcheck --- .github/workflows/test.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 20e437b..288e420 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,11 +4,15 @@ on: - master paths: - '**/*.sh' - + - '.github/workflows/test.yml' + - '.github/workflows/check.yml' + pull_request: paths: - '**/*.sh' - + - '.github/workflows/test.yml' + - '.github/workflows/check.yml' + name: "Test" permissions: {} From de15f89e14495a349a48e43632de9973b0b31401 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:53:37 +0200 Subject: [PATCH 28/31] Shellcheck --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index be0d9cc..2796522 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2153 -e SC1091 + SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2153 -e SC1091 From 8debf9edb0cdaa335679a88245cbaef62cc8e38e Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:55:53 +0200 Subject: [PATCH 29/31] HOST_ARGS --- run/serial.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index a911958..13dd2c3 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -20,22 +20,22 @@ else HOST_CPU="QEMU, Virtual CPU, X86_64" fi -ARGS=() -ARGS+=("-cpu_arch=${HOST_CPU}") +HOST_ARGS=() +HOST_ARGS+=("-cpu_arch=${HOST_CPU}") -[ -n "$CPU_CORES" ] && ARGS+=("-cpu=${CPU_CORES}") -[ -n "$HOST_BUILD" ] && ARGS+=("-build=${HOST_BUILD}") -[ -n "$HOST_SERIAL" ] && ARGS+=("-hostsn=${HOST_SERIAL}") -[ -n "$HOST_TIMESTAMP" ] && ARGS+=("-ts=${HOST_TIMESTAMP}") -[ -n "$GUEST_SERIAL" ] && ARGS+=("-guestsn=${GUEST_SERIAL}") -[ -n "$HOST_VERSION" ] && ARGS+=("-version=${HOST_VERSION}") +[ -n "$CPU_CORES" ] && HOST_ARGS+=("-cpu=${CPU_CORES}") +[ -n "$HOST_BUILD" ] && HOST_ARGS+=("-build=${HOST_BUILD}") +[ -n "$HOST_SERIAL" ] && HOST_ARGS+=("-hostsn=${HOST_SERIAL}") +[ -n "$HOST_TIMESTAMP" ] && HOST_ARGS+=("-ts=${HOST_TIMESTAMP}") +[ -n "$GUEST_SERIAL" ] && HOST_ARGS+=("-guestsn=${GUEST_SERIAL}") +[ -n "$HOST_VERSION" ] && HOST_ARGS+=("-version=${HOST_VERSION}") if [ "$DEBUG" = "Y" ]; then echo -n "./run/host.bin " - echo "${ARGS[*]}" && echo + echo "${HOST_ARGS[*]}" && echo fi -./run/host.bin "${ARGS[@]}" > /dev/null 2>&1 & +./run/host.bin "${HOST_ARGS[@]}" > /dev/null 2>&1 & # Configure serial ports From fadb2db384731e5c110f583d652d9306e5b2e6c7 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 20:59:14 +0200 Subject: [PATCH 30/31] Shellcheck --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2796522..630b8c4 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2153 -e SC1091 + SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC1091 From a3199cd6893b1d1c38b62edd009466d706988a47 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 26 Apr 2023 21:01:11 +0200 Subject: [PATCH 31/31] Shellcheck --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 630b8c4..7a708f6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC1091 + SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064