From d4599df5f81ab42e25fc863880dfa5b56a5535c8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 11:39:12 +0200 Subject: [PATCH 01/40] Check for zombie process --- run/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run/run.sh b/run/run.sh index 72194c1..2b7080d 100755 --- a/run/run.sh +++ b/run/run.sh @@ -53,6 +53,6 @@ set -m set +m # Since we started the QEMU process with -m, we need to poll if it's still running -while [ -d "/proc/$(cat ${_QEMU_PID})" ]; do +while s=`ps -p "$(cat ${_QEMU_PID})" -o s=` && [[ "$s" && "$s" != 'Z' ]]; do sleep 1 done From 666578d470debc47009f6dc0281e958c7bf34862 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 12:49:35 +0200 Subject: [PATCH 02/40] Use pidwait --- run/run.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/run/run.sh b/run/run.sh index 2b7080d..3946cb5 100755 --- a/run/run.sh +++ b/run/run.sh @@ -52,7 +52,5 @@ set -m ) set +m -# Since we started the QEMU process with -m, we need to poll if it's still running -while s=`ps -p "$(cat ${_QEMU_PID})" -o s=` && [[ "$s" && "$s" != 'Z' ]]; do - sleep 1 -done +pidwait -F "${_QEMU_PID}" & +wait $! From 797844e9e7607398cfc161f95f421b44d26cf31f Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 13:27:58 +0200 Subject: [PATCH 03/40] Don't abort wait call --- run/run.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/run/run.sh b/run/run.sh index 3946cb5..d69f2fd 100755 --- a/run/run.sh +++ b/run/run.sh @@ -53,4 +53,7 @@ set -m set +m pidwait -F "${_QEMU_PID}" & + +set +e wait $! +exit 0 From 8db4cab43d9c4ee561b5ced8e0918599fae0b73b Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 13:38:07 +0200 Subject: [PATCH 04/40] Wait for PID --- run/run.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/run/run.sh b/run/run.sh index d69f2fd..3946cb5 100755 --- a/run/run.sh +++ b/run/run.sh @@ -53,7 +53,4 @@ set -m set +m pidwait -F "${_QEMU_PID}" & - -set +e wait $! -exit 0 From d7c39590f4bee1f316eb7ed85aecb865abd2b4c7 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 13:43:51 +0200 Subject: [PATCH 05/40] NMI handler --- agent/agent.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 871f657..758cb19 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -6,9 +6,9 @@ set -u function checkNMI { local nmi - nmi=$(awk '/NMI/ {for (i=2; i<=NF; i++) if ($i ~ /^[0-9]+$/) {sum+=$i}} END {print sum}' /proc/interrupts) + nmi=$(cat /proc/interrupts | grep NMI | sed 's/[^0-9]*//g' | sed 's/^0*//') - if [ "$nmi" != "" ] && [ "$nmi" -ne "0" ]; then + if [ "$nmi" != "" ]; then echo "Received shutdown request through NMI.." > /dev/ttyS0 From 104265396cdbf536e295bd3ca2e26983d4ef9ba6 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 13:50:09 +0200 Subject: [PATCH 06/40] NMI handler --- agent/agent.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 758cb19..5987b26 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -6,7 +6,7 @@ set -u function checkNMI { local nmi - nmi=$(cat /proc/interrupts | grep NMI | sed 's/[^0-9]*//g' | sed 's/^0*//') + nmi=$(cat /proc/interrupts | grep NMI | sed 's/[^1-9]*//g') if [ "$nmi" != "" ]; then @@ -21,7 +21,7 @@ function checkNMI { finish() { - echo "Shutting down Guest Agent.." > /dev/ttyS0 + echo "Shutting down guest agent.." > /dev/ttyS0 exit } From e673d4af665fd41b0b3beb02fcc2cd9ddd0fdbaa Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 13:53:31 +0200 Subject: [PATCH 07/40] Launch packages async --- agent/agent.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 5987b26..5d78030 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -53,8 +53,8 @@ if [ "$first_run" = true ]; then echo "Installing package ${BASE}.." > /dev/ttyS0 /usr/syno/bin/synopkg install "$filename" > /dev/null - echo "Starting package ${BASE}.." > /dev/ttyS0 - /usr/syno/bin/synopkg start "$BASE" > /dev/null + #echo "Activating package ${BASE}.." > /dev/ttyS0 + /usr/syno/bin/synopkg start "$BASE" & rm "$filename" From f0d0113028b1c697943dbe86c110672741dfc746 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 14:14:32 +0200 Subject: [PATCH 08/40] Check for updates --- agent/agent.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/agent/agent.sh b/agent/agent.sh index 5d78030..20e295c 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -65,6 +65,17 @@ else # TODO: Auto-update agent echo "Checking for updates.." > /dev/ttyS0 + rm -f /tmp/agent.sh + + if curl -s -k -m 5 -o /tmp/agent.sh https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then + if [ -f /tmp/agent.sh ]; then + line=$(read -r FIRSTLINE < /tmp/agent.sh) + if [ "$line" == "#!/usr/bin/env bash" ]; then + echo "Update found.." > /dev/ttyS0 + fi + fi + fi + sleep 5 fi From 4adc9deca54f365692590a855e11ff663601ee7c Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 14:30:32 +0200 Subject: [PATCH 09/40] Updates --- agent/agent.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 20e295c..43f3d6d 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -67,13 +67,19 @@ else rm -f /tmp/agent.sh - if curl -s -k -m 5 -o /tmp/agent.sh https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then - if [ -f /tmp/agent.sh ]; then + if curl -s -f -k -m 5 -o /tmp/agent.sh https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then + if [ -f "/tmp/agent.sh" ]; then line=$(read -r FIRSTLINE < /tmp/agent.sh) if [ "$line" == "#!/usr/bin/env bash" ]; then echo "Update found.." > /dev/ttyS0 + else + echo "Update error 1.. $line" > /dev/ttyS0 fi + else + echo "Update error 2.." > /dev/ttyS0 fi + else + echo "Update error 3.. $?" > /dev/ttyS0 fi sleep 5 From 72042c3fdfa7e2b0d4cd11f8602fa96b7fca184c Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 14:50:38 +0200 Subject: [PATCH 10/40] Auto update --- agent/agent.sh | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 43f3d6d..c0fb073 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -65,21 +65,24 @@ else # TODO: Auto-update agent echo "Checking for updates.." > /dev/ttyS0 - rm -f /tmp/agent.sh + TMP="/tmp/agent.sh" + rm -f "${TMP}" - if curl -s -f -k -m 5 -o /tmp/agent.sh https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then - if [ -f "/tmp/agent.sh" ]; then - line=$(read -r FIRSTLINE < /tmp/agent.sh) + if curl -s -f -k -m 5 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then + if [ -f "${TMP}" ]; then + line=$(head -1 "${TMP}") if [ "$line" == "#!/usr/bin/env bash" ]; then - echo "Update found.." > /dev/ttyS0 + SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) + mv -f "${TMP}" "${SCRIPT}" + echo "Moved from ${TMP} to ${SCRIPT}" > /dev/ttyS0 else - echo "Update error 1.. $line" > /dev/ttyS0 + echo "Update error, invalid header: $line" > /dev/ttyS0 fi else - echo "Update error 2.." > /dev/ttyS0 + echo "Update error, file not found.." > /dev/ttyS0 fi else - echo "Update error 3.. $?" > /dev/ttyS0 + echo "Update error, curl error: $?" > /dev/ttyS0 fi sleep 5 From 20eabf1b2383a9a5cfb6ffa61bff72b9f27b2413 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:11:14 +0200 Subject: [PATCH 11/40] Check returnvalue --- run/install.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/run/install.sh b/run/install.sh index d78c5ea..e74976c 100644 --- a/run/install.sh +++ b/run/install.sh @@ -28,12 +28,15 @@ RD="$TMP/rd.gz" rm -rf $TMP && mkdir -p $TMP LOC="$DL/release/7.0.1/42218/DSM_VirtualDSM_42218.pat" -curl -r 64493568-69886247 -s -k -o "$RD" "$LOC" + +if ! curl -r 64493568-69886247 -s -f -k -o "$RD" "$LOC"; then + echo "Failed to download extractor, code: $?" && exit 60 +fi SUM=$(md5sum $RD | cut -f 1 -d " ") if [ $SUM != "14fb88cb7cabddb5af1d0269bf032845" ]; then - echo "Invalid extractor, checksum failed." && exit 59 + echo "Invalid extractor, checksum failed." && exit 61 fi set +e From 068c82faf9d9638eede7a5b0d95ef9b10377f8a3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:13:34 +0200 Subject: [PATCH 12/40] Measure elapsed time --- agent/agent.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index c0fb073..6146e24 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -28,6 +28,8 @@ finish() { trap finish SIGINT SIGTERM +ts=$(date +%s%N) + # Setup serialport chmod 666 /dev/ttyS0 @@ -61,20 +63,19 @@ if [ "$first_run" = true ]; then fi done else - - # TODO: Auto-update agent - echo "Checking for updates.." > /dev/ttyS0 TMP="/tmp/agent.sh" rm -f "${TMP}" + # Auto update the agent + if curl -s -f -k -m 5 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then if [ -f "${TMP}" ]; then line=$(head -1 "${TMP}") if [ "$line" == "#!/usr/bin/env bash" ]; then SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) mv -f "${TMP}" "${SCRIPT}" - echo "Moved from ${TMP} to ${SCRIPT}" > /dev/ttyS0 + chmod +x "${SCRIPT}" else echo "Update error, invalid header: $line" > /dev/ttyS0 fi @@ -85,10 +86,11 @@ else echo "Update error, curl error: $?" > /dev/ttyS0 fi - sleep 5 - fi +elapsed=$((($(date +%s%N) - $ts)/1000000)) +echo "Elapsed time: $elapsed" > /dev/ttyS0 + # Display message in docker log output echo "-------------------------------------------" > /dev/ttyS0 From e4d29321d4c4fd66d03e70399f52d1e1699ea319 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:19:26 +0200 Subject: [PATCH 13/40] Redirect output to /dev/ttyS0 --- agent/service.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/service.sh b/agent/service.sh index 4bf057d..9465e24 100644 --- a/agent/service.sh +++ b/agent/service.sh @@ -1,7 +1,6 @@ #!/bin/bash PIDFILE="/var/run/agent.pid" -LOGFILE="/var/log/agent.log" SCRIPT="/usr/local/bin/agent.sh" status() { @@ -17,7 +16,8 @@ start() { return 1 fi printf 'Starting agent service...' >&2 - "$SCRIPT" &> "$LOGFILE" & echo $! > "$PIDFILE" + chmod 666 /dev/ttyS0 + "$SCRIPT" &> /dev/ttyS0 & echo $! > "$PIDFILE" } stop() { From 3e73d47a65f78268b1c624f5d451397bebd03da0 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:20:18 +0200 Subject: [PATCH 14/40] Redirect output to /dev/ttyS0 --- agent/service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/service.sh b/agent/service.sh index 9465e24..1fe2494 100644 --- a/agent/service.sh +++ b/agent/service.sh @@ -17,7 +17,7 @@ start() { fi printf 'Starting agent service...' >&2 chmod 666 /dev/ttyS0 - "$SCRIPT" &> /dev/ttyS0 & echo $! > "$PIDFILE" + "$SCRIPT" &> /dev/ttyS0 & echo $! > "$PIDFILE" } stop() { From 384d88069b8bd31f6fff08829ff46312636be73d Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:22:44 +0200 Subject: [PATCH 15/40] Remove /dev/ttyS0 --- agent/agent.sh | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 6146e24..a018862 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -10,7 +10,7 @@ function checkNMI { if [ "$nmi" != "" ]; then - echo "Received shutdown request through NMI.." > /dev/ttyS0 + echo "Received shutdown request through NMI.." /usr/syno/sbin/synoshutdown -s > /dev/null exit @@ -21,7 +21,7 @@ function checkNMI { finish() { - echo "Shutting down guest agent.." > /dev/ttyS0 + echo "Shutting down guest agent.." exit } @@ -29,10 +29,6 @@ finish() { trap finish SIGINT SIGTERM ts=$(date +%s%N) - -# Setup serialport - -chmod 666 /dev/ttyS0 checkNMI # Install packages @@ -52,10 +48,10 @@ if [ "$first_run" = true ]; then BASE=$(basename "$filename" .spk) BASE="${BASE%%-*}" - echo "Installing package ${BASE}.." > /dev/ttyS0 + echo "Installing package ${BASE}.." /usr/syno/bin/synopkg install "$filename" > /dev/null - #echo "Activating package ${BASE}.." > /dev/ttyS0 + #echo "Activating package ${BASE}.." /usr/syno/bin/synopkg start "$BASE" & rm "$filename" @@ -77,25 +73,25 @@ else mv -f "${TMP}" "${SCRIPT}" chmod +x "${SCRIPT}" else - echo "Update error, invalid header: $line" > /dev/ttyS0 + echo "Update error, invalid header: $line" fi else - echo "Update error, file not found.." > /dev/ttyS0 + echo "Update error, file not found.." fi else - echo "Update error, curl error: $?" > /dev/ttyS0 + echo "Update error, curl error: $?" fi fi elapsed=$((($(date +%s%N) - $ts)/1000000)) -echo "Elapsed time: $elapsed" > /dev/ttyS0 +echo "Elapsed time: $elapsed" # Display message in docker log output -echo "-------------------------------------------" > /dev/ttyS0 -echo " You can now login to DSM at port 5000 " > /dev/ttyS0 -echo "-------------------------------------------" > /dev/ttyS0 +echo "-------------------------------------------" +echo " You can now login to DSM at port 5000 " +echo "-------------------------------------------" # Wait for NMI interrupt as a shutdown signal From 1ed99ab73d02825118941d14a5813c4e5defd2e3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:25:18 +0200 Subject: [PATCH 16/40] Display version --- agent/agent.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/agent/agent.sh b/agent/agent.sh index a018862..26740a1 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -31,6 +31,9 @@ trap finish SIGINT SIGTERM ts=$(date +%s%N) checkNMI +VERSION="4" +echo "Starting agent v$VERSION.." + # Install packages first_run=false From a039eb859d770cdce130fc01cc33f7fdae975616 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:50:49 +0200 Subject: [PATCH 17/40] Calculate time difference --- agent/agent.sh | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 26740a1..17c3114 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -2,6 +2,7 @@ set -u # Functions +HEADER="VirtualDSM Agent:" function checkNMI { @@ -10,7 +11,7 @@ function checkNMI { if [ "$nmi" != "" ]; then - echo "Received shutdown request through NMI.." + echo "$HEADER Received shutdown request through NMI.." /usr/syno/sbin/synoshutdown -s > /dev/null exit @@ -21,7 +22,7 @@ function checkNMI { finish() { - echo "Shutting down guest agent.." + echo "$HEADER Shutting down.." exit } @@ -32,7 +33,7 @@ ts=$(date +%s%N) checkNMI VERSION="4" -echo "Starting agent v$VERSION.." +echo "$HEADER starting v$VERSION.." # Install packages @@ -51,11 +52,10 @@ if [ "$first_run" = true ]; then BASE=$(basename "$filename" .spk) BASE="${BASE%%-*}" - echo "Installing package ${BASE}.." - /usr/syno/bin/synopkg install "$filename" > /dev/null + echo "$HEADER Installing package ${BASE}.." - #echo "Activating package ${BASE}.." - /usr/syno/bin/synopkg start "$BASE" & + /usr/syno/bin/synopkg install "$filename" > /dev/null + /usr/syno/bin/synopkg start "$BASE" > /dev/null & rm "$filename" @@ -73,23 +73,33 @@ else line=$(head -1 "${TMP}") if [ "$line" == "#!/usr/bin/env bash" ]; then SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) - mv -f "${TMP}" "${SCRIPT}" - chmod +x "${SCRIPT}" + if ! cmp --silent -- "${TMP}" "${SCRIPT}"; then + mv -f "${TMP}" "${SCRIPT}" + chmod +x "${SCRIPT}" + echo "$HEADER succesfully installed update." + else + echo "$HEADER Update not needed." + fi else - echo "Update error, invalid header: $line" + echo "$HEADER update error, invalid header: $line" fi else - echo "Update error, file not found.." + echo "$HEADER update error, file not found.." fi else - echo "Update error, curl error: $?" + echo "$HEADER update error, curl error: $?" fi fi elapsed=$((($(date +%s%N) - $ts)/1000000)) -echo "Elapsed time: $elapsed" - +difference=$(((5000-elapsed)*0.001)) + +if (( difference > 0 )); then + echo "Elapsed time: $elapsed, difference: $difference" + sleep $difference +fi + # Display message in docker log output echo "-------------------------------------------" From bffced2a4794e0ec6a7de2c1d145aac47a3119fb Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 15:56:17 +0200 Subject: [PATCH 18/40] Refactor --- agent/agent.sh | 102 +++++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 45 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 17c3114..dd99289 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -1,9 +1,18 @@ #!/usr/bin/env bash set -u -# Functions +VERSION="4" HEADER="VirtualDSM Agent:" +# Functions + +finish() { + + echo "$HEADER Shutting down.." + exit + +} + function checkNMI { local nmi @@ -14,54 +23,12 @@ function checkNMI { echo "$HEADER Received shutdown request through NMI.." /usr/syno/sbin/synoshutdown -s > /dev/null - exit + finish fi - } -finish() { - - echo "$HEADER Shutting down.." - exit - -} - -trap finish SIGINT SIGTERM - -ts=$(date +%s%N) -checkNMI - -VERSION="4" -echo "$HEADER starting v$VERSION.." - -# Install packages - -first_run=false - -for filename in /usr/local/packages/*.spk; do - if [ -f "$filename" ]; then - first_run=true - fi -done - -if [ "$first_run" = true ]; then - for filename in /usr/local/packages/*.spk; do - if [ -f "$filename" ]; then - - BASE=$(basename "$filename" .spk) - BASE="${BASE%%-*}" - - echo "$HEADER Installing package ${BASE}.." - - /usr/syno/bin/synopkg install "$filename" > /dev/null - /usr/syno/bin/synopkg start "$BASE" > /dev/null & - - rm "$filename" - - fi - done -else +function downloadUpdate { TMP="/tmp/agent.sh" rm -f "${TMP}" @@ -89,7 +56,52 @@ else else echo "$HEADER update error, curl error: $?" fi +} +function installPackages { + + for filename in /usr/local/packages/*.spk; do + if [ -f "$filename" ]; then + + BASE=$(basename "$filename" .spk) + BASE="${BASE%%-*}" + + echo "$HEADER Installing package ${BASE}.." + + /usr/syno/bin/synopkg install "$filename" > /dev/null + /usr/syno/bin/synopkg start "$BASE" > /dev/null & + + rm "$filename" + + fi + done +} + +trap finish SIGINT SIGTERM + +ts=$(date +%s%N) +checkNMI + +echo "$HEADER started v$VERSION.." + +# Install packages + +first_run=false + +for filename in /usr/local/packages/*.spk; do + if [ -f "$filename" ]; then + first_run=true + fi +done + +if [ "$first_run" = true ]; then + + installPackages + +else + + downloadUpdate + fi elapsed=$((($(date +%s%N) - $ts)/1000000)) From cdf526d455541106f2f9276d008080bcdcc6f507 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:01:23 +0200 Subject: [PATCH 19/40] Header --- agent/agent.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index dd99289..5a94543 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -2,13 +2,13 @@ set -u VERSION="4" -HEADER="VirtualDSM Agent:" +HEADER="VirtualDSM Agent" # Functions finish() { - echo "$HEADER Shutting down.." + echo "$HEADER: Shutting down.." exit } @@ -20,7 +20,7 @@ function checkNMI { if [ "$nmi" != "" ]; then - echo "$HEADER Received shutdown request through NMI.." + echo "$HEADER: Received shutdown request through NMI.." /usr/syno/sbin/synoshutdown -s > /dev/null finish @@ -43,18 +43,18 @@ function downloadUpdate { if ! cmp --silent -- "${TMP}" "${SCRIPT}"; then mv -f "${TMP}" "${SCRIPT}" chmod +x "${SCRIPT}" - echo "$HEADER succesfully installed update." + echo "$HEADER: succesfully installed update." else - echo "$HEADER Update not needed." + echo "$HEADER: Update not needed." fi else - echo "$HEADER update error, invalid header: $line" + echo "$HEADER: update error, invalid header: $line" fi else - echo "$HEADER update error, file not found.." + echo "$HEADER: update error, file not found.." fi else - echo "$HEADER update error, curl error: $?" + echo "$HEADER: update error, curl error: $?" fi } @@ -66,7 +66,7 @@ function installPackages { BASE=$(basename "$filename" .spk) BASE="${BASE%%-*}" - echo "$HEADER Installing package ${BASE}.." + echo "$HEADER: Installing package ${BASE}.." /usr/syno/bin/synopkg install "$filename" > /dev/null /usr/syno/bin/synopkg start "$BASE" > /dev/null & @@ -82,7 +82,7 @@ trap finish SIGINT SIGTERM ts=$(date +%s%N) checkNMI -echo "$HEADER started v$VERSION.." +echo "$HEADER v$VERSION.." # Install packages From cb4035356334d2c8463d584f7a94a22efdc06f1a Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:07:35 +0200 Subject: [PATCH 20/40] Floating --- agent/agent.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 5a94543..ca7a9ca 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -75,6 +75,7 @@ function installPackages { fi done + } trap finish SIGINT SIGTERM @@ -105,12 +106,10 @@ else fi elapsed=$((($(date +%s%N) - $ts)/1000000)) -difference=$(((5000-elapsed)*0.001)) - -if (( difference > 0 )); then - echo "Elapsed time: $elapsed, difference: $difference" - sleep $difference -fi +difference=$(echo | awk '{print $((5000-elapsed)) * 0.001}') + +echo "Elapsed time: $elapsed, difference: $difference" +sleep $difference # Display message in docker log output From f24fd0e3aeeb209015ee21df3f7610782ccac65c Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:12:03 +0200 Subject: [PATCH 21/40] Refactor --- agent/agent.sh | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index ca7a9ca..bee8b20 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -35,27 +35,33 @@ function downloadUpdate { # Auto update the agent - if curl -s -f -k -m 5 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then - if [ -f "${TMP}" ]; then - line=$(head -1 "${TMP}") - if [ "$line" == "#!/usr/bin/env bash" ]; then - SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) - if ! cmp --silent -- "${TMP}" "${SCRIPT}"; then - mv -f "${TMP}" "${SCRIPT}" - chmod +x "${SCRIPT}" - echo "$HEADER: succesfully installed update." - else - echo "$HEADER: Update not needed." - fi - else - echo "$HEADER: update error, invalid header: $line" - fi - else - echo "$HEADER: update error, file not found.." - fi - else - echo "$HEADER: update error, curl error: $?" + if ! curl -s -f -k -m 5 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then + echo "$HEADER: update error: $?" && return fi + + if [ ! -f "${TMP}" ]; then + echo "$HEADER: update error, file not found.." && return + fi + + line=$(head -1 "${TMP}") + + if [ "$line" != "#!/usr/bin/env bash" ]; then + echo "$HEADER: update error, invalid header: $line" && return + fi + + SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) + + if ! cmp --silent -- "${TMP}" "${SCRIPT}"; then + + mv -f "${TMP}" "${SCRIPT}" + chmod +x "${SCRIPT}" + + echo "$HEADER: succesfully installed update." + + else + echo "$HEADER: Update not needed." + fi + } function installPackages { From fa503a4d893db845fb469513463257c2d126ba2b Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:23:26 +0200 Subject: [PATCH 22/40] Calculate diff --- agent/agent.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index bee8b20..3517864 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -35,7 +35,7 @@ function downloadUpdate { # Auto update the agent - if ! curl -s -f -k -m 5 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then + if ! curl -s -f -k -m 4 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then echo "$HEADER: update error: $?" && return fi @@ -89,7 +89,7 @@ trap finish SIGINT SIGTERM ts=$(date +%s%N) checkNMI -echo "$HEADER v$VERSION.." +echo "$HEADER v$VERSION" # Install packages @@ -112,7 +112,8 @@ else fi elapsed=$((($(date +%s%N) - $ts)/1000000)) -difference=$(echo | awk '{print $((5000-elapsed)) * 0.001}') +difference=$(( 5000 - elapsed )) +difference=$(echo | awk '{print ${difference} * 0.001}') echo "Elapsed time: $elapsed, difference: $difference" sleep $difference From d0b95c2b9f051c6b544de8afc69ccb565f859602 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:30:21 +0200 Subject: [PATCH 23/40] awk vars --- agent/agent.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/agent.sh b/agent/agent.sh index 3517864..17ead81 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -113,7 +113,7 @@ fi elapsed=$((($(date +%s%N) - $ts)/1000000)) difference=$(( 5000 - elapsed )) -difference=$(echo | awk '{print ${difference} * 0.001}') +difference=$(echo | awk -v diff="$(difference)" '{print diff * 0.001}') echo "Elapsed time: $elapsed, difference: $difference" sleep $difference From c148cfee95fc257a00f17aa519c2dbf56f13b5ef Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:48:39 +0200 Subject: [PATCH 24/40] Debug --- agent/agent.sh | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 17ead81..a59113d 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -24,6 +24,7 @@ function checkNMI { /usr/syno/sbin/synoshutdown -s > /dev/null finish + exit fi } @@ -35,8 +36,8 @@ function downloadUpdate { # Auto update the agent - if ! curl -s -f -k -m 4 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then - echo "$HEADER: update error: $?" && return + if ! curl -s -f -k -m 3 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then + #echo "$HEADER: curl error" && return fi if [ ! -f "${TMP}" ]; then @@ -59,7 +60,7 @@ function downloadUpdate { echo "$HEADER: succesfully installed update." else - echo "$HEADER: Update not needed." + echo "$HEADER: update not needed." fi } @@ -87,10 +88,11 @@ function installPackages { trap finish SIGINT SIGTERM ts=$(date +%s%N) -checkNMI echo "$HEADER v$VERSION" +checkNMI + # Install packages first_run=false @@ -111,12 +113,17 @@ else fi +delay=5000 +difference=0 elapsed=$((($(date +%s%N) - $ts)/1000000)) -difference=$(( 5000 - elapsed )) -difference=$(echo | awk -v diff="$(difference)" '{print diff * 0.001}') - -echo "Elapsed time: $elapsed, difference: $difference" -sleep $difference +echo "elapsed: $elapsed" +if (( delay > elapsed )); then + difference=$((delay-elapsed)) + echo "firstdiff: $difference" + float=$(echo | awk -v diff=\""$(difference)\"" '{print diff * 0.001}') + echo "Elapsed time: $elapsed, difference: $float" + sleep $difference +fi # Display message in docker log output From 59e873c33890c2f3b49783a4a846c2a18357dfef Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 16:51:46 +0200 Subject: [PATCH 25/40] Return --- agent/agent.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/agent/agent.sh b/agent/agent.sh index a59113d..1fdb03e 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -38,6 +38,7 @@ function downloadUpdate { if ! curl -s -f -k -m 3 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then #echo "$HEADER: curl error" && return + return fi if [ ! -f "${TMP}" ]; then From 64249eb2d27ed7c747764e68cec2f730f818d81e Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 17:00:26 +0200 Subject: [PATCH 26/40] Typo --- agent/agent.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/agent.sh b/agent/agent.sh index 1fdb03e..1983075 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -121,7 +121,7 @@ echo "elapsed: $elapsed" if (( delay > elapsed )); then difference=$((delay-elapsed)) echo "firstdiff: $difference" - float=$(echo | awk -v diff=\""$(difference)\"" '{print diff * 0.001}') + float=$(echo | awk -v diff=\""$difference\"" '{print diff * 0.001}') echo "Elapsed time: $elapsed, difference: $float" sleep $difference fi From 9ad0a7667cec298cae5945a47dc0eec289ab1d93 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 17:15:17 +0200 Subject: [PATCH 27/40] Check headers --- agent/agent.sh | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 1983075..4fe2000 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -34,8 +34,19 @@ function downloadUpdate { TMP="/tmp/agent.sh" rm -f "${TMP}" + URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" + # Auto update the agent + remote_size=$(curl -s -I -k -m 3 "${URL}" | awk '/Content-Length/ {sub("\r",""); print $2}') + + echo "remote size: $remote_size" + [ "$remote_size" == "0" ] && return + + if ! curl -s -f -k -m 10 -o "${TMP}" "${URL}"; then + echo "$HEADER: curl error" && return + fi + if ! curl -s -f -k -m 3 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then #echo "$HEADER: curl error" && return return @@ -117,12 +128,11 @@ fi delay=5000 difference=0 elapsed=$((($(date +%s%N) - $ts)/1000000)) -echo "elapsed: $elapsed" + if (( delay > elapsed )); then difference=$((delay-elapsed)) - echo "firstdiff: $difference" - float=$(echo | awk -v diff=\""$difference\"" '{print diff * 0.001}') - echo "Elapsed time: $elapsed, difference: $float" + float=$(echo | awk -v diff=\""$difference"\" '{print diff * 0.001}') + echo "Elapsed time: $elapsed, sleep: $float" sleep $difference fi From cc7b1b4fc41d4cd64b49b298f8ae66bdb86fc32b Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 17:18:29 +0200 Subject: [PATCH 28/40] curl --- agent/agent.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 4fe2000..0225349 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -47,11 +47,6 @@ function downloadUpdate { echo "$HEADER: curl error" && return fi - if ! curl -s -f -k -m 3 -o "${TMP}" https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh; then - #echo "$HEADER: curl error" && return - return - fi - if [ ! -f "${TMP}" ]; then echo "$HEADER: update error, file not found.." && return fi From c7adb59134a1409ba76e97b9a05eae0853236c89 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:03:23 +0200 Subject: [PATCH 29/40] Remote size --- agent/agent.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 0225349..c02691c 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -34,15 +34,21 @@ function downloadUpdate { TMP="/tmp/agent.sh" rm -f "${TMP}" + SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" # Auto update the agent - remote_size=$(curl -s -I -k -m 3 "${URL}" | awk '/Content-Length/ {sub("\r",""); print $2}') - - echo "remote size: $remote_size" - [ "$remote_size" == "0" ] && return + remote_size=$(curl -s -I -k -m 3 "${URL}" | grep -i "content-length:" | tr -d " \t" | cut -d ':' -f 2) + local_size=$(stat -c%s "$SCRIPT") + echo "local size: $local_size" + echo "remote size: $remote_size" + + [ "$remote_size" == "" ] && return + [ "$remote_size" == "0" ] && return + [ "$remote_size" == "$local_size" ] && return + if ! curl -s -f -k -m 10 -o "${TMP}" "${URL}"; then echo "$HEADER: curl error" && return fi @@ -56,18 +62,18 @@ function downloadUpdate { if [ "$line" != "#!/usr/bin/env bash" ]; then echo "$HEADER: update error, invalid header: $line" && return fi - - SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) if ! cmp --silent -- "${TMP}" "${SCRIPT}"; then - mv -f "${TMP}" "${SCRIPT}" + #mv -f "${TMP}" "${SCRIPT}" chmod +x "${SCRIPT}" echo "$HEADER: succesfully installed update." else - echo "$HEADER: update not needed." + + echo "$HEADER: update file already equal?" + fi } @@ -126,7 +132,7 @@ elapsed=$((($(date +%s%N) - $ts)/1000000)) if (( delay > elapsed )); then difference=$((delay-elapsed)) - float=$(echo | awk -v diff=\""$difference"\" '{print diff * 0.001}') + float=$(echo | awk -v diff=\""${difference}"\" '{print diff * 0.001}') echo "Elapsed time: $elapsed, sleep: $float" sleep $difference fi From c5e18b5fd9c1588e4dbecfc95e25a3f02eb99184 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:16:43 +0200 Subject: [PATCH 30/40] Compare sizes --- agent/agent.sh | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index c02691c..c6a2297 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -34,22 +34,20 @@ function downloadUpdate { TMP="/tmp/agent.sh" rm -f "${TMP}" - SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) - URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" - # Auto update the agent - remote_size=$(curl -s -I -k -m 3 "${URL}" | grep -i "content-length:" | tr -d " \t" | cut -d ':' -f 2) - local_size=$(stat -c%s "$SCRIPT") - - echo "local size: $local_size" - echo "remote size: $remote_size" + URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" + remote_size=$(curl -sIk -m 3 "${URL}" | grep -i "content-length:" | tr -d " \t" | cut -d ':' -f 2) [ "$remote_size" == "" ] && return [ "$remote_size" == "0" ] && return + + SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) + local_size=$(stat -c%s "$SCRIPT") + [ "$remote_size" == "$local_size" ] && return - if ! curl -s -f -k -m 10 -o "${TMP}" "${URL}"; then + if ! curl -sfk -m 10 -o "${TMP}" "${URL}"; then echo "$HEADER: curl error" && return fi From 752998c315d8d7255d9a53ee1d8f9c71b761cc56 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:18:37 +0200 Subject: [PATCH 31/40] Sleep diff --- agent/agent.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/agent.sh b/agent/agent.sh index c6a2297..4803c9c 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -130,7 +130,7 @@ elapsed=$((($(date +%s%N) - $ts)/1000000)) if (( delay > elapsed )); then difference=$((delay-elapsed)) - float=$(echo | awk -v diff=\""${difference}"\" '{print diff * 0.001}') + float=$(echo | awk -v diff="${difference}" '{print diff * 0.001}') echo "Elapsed time: $elapsed, sleep: $float" sleep $difference fi From 4a1aacc81446f1515bb636355656ed0b7b99c1c4 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:33:37 +0200 Subject: [PATCH 32/40] Automatic updates --- agent/agent.sh | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index 4803c9c..b1be2aa 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -37,7 +37,7 @@ function downloadUpdate { # Auto update the agent URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" - remote_size=$(curl -sIk -m 3 "${URL}" | grep -i "content-length:" | tr -d " \t" | cut -d ':' -f 2) + remote_size=$(curl -sIk -m 4 "${URL}" | grep -i "content-length:" | tr -d " \t" | cut -d ':' -f 2) [ "$remote_size" == "" ] && return [ "$remote_size" == "0" ] && return @@ -61,18 +61,14 @@ function downloadUpdate { echo "$HEADER: update error, invalid header: $line" && return fi - if ! cmp --silent -- "${TMP}" "${SCRIPT}"; then - - #mv -f "${TMP}" "${SCRIPT}" - chmod +x "${SCRIPT}" - - echo "$HEADER: succesfully installed update." - - else - - echo "$HEADER: update file already equal?" - + if cmp --silent -- "${TMP}" "${SCRIPT}"; then + echo "$HEADER: update file is already equal?" && return fi + + mv -f "${TMP}" "${SCRIPT}" + chmod +x "${SCRIPT}" + + echo "$HEADER: succesfully installed update, please reboot." } @@ -99,7 +95,6 @@ function installPackages { trap finish SIGINT SIGTERM ts=$(date +%s%N) - echo "$HEADER v$VERSION" checkNMI @@ -125,14 +120,11 @@ else fi delay=5000 -difference=0 elapsed=$((($(date +%s%N) - $ts)/1000000)) if (( delay > elapsed )); then difference=$((delay-elapsed)) - float=$(echo | awk -v diff="${difference}" '{print diff * 0.001}') - echo "Elapsed time: $elapsed, sleep: $float" - sleep $difference + sleep $(echo | awk -v diff="${difference}" '{print diff * 0.001}') fi # Display message in docker log output From f4bd8e089b55adb7889c9905b04c5397348ec243 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:38:27 +0200 Subject: [PATCH 33/40] Agent --- run/disk.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/run/disk.sh b/run/disk.sh index 3b73753..b4585ec 100644 --- a/run/disk.sh +++ b/run/disk.sh @@ -80,12 +80,12 @@ if [ ! -f "${DATA}" ]; then fi +AGENT_VERSION=1 AGENT="${STORAGE}/${BASE}.agent" -[ ! -f "$AGENT" ] && echo "1" > "$AGENT" -AGENT_VERSION=$(cat "${AGENT}") +[ -f "$AGENT" ] && AGENT_VERSION=$(cat "${AGENT}") -if ((AGENT_VERSION < 3)); then - echo "INFO: The installed Guest Agent in DSM is an outdated version, please upgrade it." +if ((AGENT_VERSION < 4)); then + echo "INFO: The installed VirtualDSM Agent is an outdated version, please upgrade it." fi KVM_DISK_OPTS="\ From ab9b74793a8c1b76af4492350d1070627406666a Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:42:26 +0200 Subject: [PATCH 34/40] Agent version --- run/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run/install.sh b/run/install.sh index e74976c..fb69e3b 100644 --- a/run/install.sh +++ b/run/install.sh @@ -29,7 +29,7 @@ rm -rf $TMP && mkdir -p $TMP LOC="$DL/release/7.0.1/42218/DSM_VirtualDSM_42218.pat" -if ! curl -r 64493568-69886247 -s -f -k -o "$RD" "$LOC"; then +if ! curl -r 64493568-69886247 -sfk -o "$RD" "$LOC"; then echo "Failed to download extractor, code: $?" && exit 60 fi @@ -163,7 +163,7 @@ cp /agent/service.sh $LOC/agent.sh chmod +x $LOC/agent.sh # Store agent version -echo "3" > "$STORAGE"/"$BASE".agent +echo "4" > "$STORAGE"/"$BASE".agent echo "Install: Installing system partition..." From 051f51efee471e697d985227dce442681d7fe388 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:44:15 +0200 Subject: [PATCH 35/40] Agent version --- run/power.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/run/power.sh b/run/power.sh index b6556f0..efa1f63 100644 --- a/run/power.sh +++ b/run/power.sh @@ -32,7 +32,7 @@ _graceful_shutdown(){ # Don't send the powerdown signal because vDSM ignores ACPI signals # echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_MONPORT}" > /dev/null - # Send shutdown command to guest agent tools instead via serial port + # Send shutdown command instead via serial port RESPONSE=$(curl -s -m 2 -S http://127.0.0.1:2210/write?command=6 2>&1) if [[ ! "${RESPONSE}" =~ "\"success\"" ]] ; then @@ -40,9 +40,9 @@ _graceful_shutdown(){ echo echo "Could not send shutdown command to guest, error: $RESPONSE" + AGENT_VERSION=1 AGENT="${STORAGE}/${BASE}.agent" - [ ! -f "$AGENT" ] && echo "1" > "$AGENT" - AGENT_VERSION=$(cat "${AGENT}") + [ -f "$AGENT" ] && AGENT_VERSION=$(cat "${AGENT}") if ((AGENT_VERSION < 2)); then From f7f1823ff2df6226d358bbd544db00c1daec886d Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:45:42 +0200 Subject: [PATCH 36/40] Agent --- run/power.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run/power.sh b/run/power.sh index efa1f63..f48b25b 100644 --- a/run/power.sh +++ b/run/power.sh @@ -47,7 +47,7 @@ _graceful_shutdown(){ if ((AGENT_VERSION < 2)); then echo - echo "Please update the agent to allow gracefull shutdowns..." + echo "Please update the VirtualDSM Agent to allow gracefull shutdowns..." pkill -f qemu-system-x86_64 From e3bce8e8b339d4ad5c87e1a38575a3f7264ac2f8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:48:38 +0200 Subject: [PATCH 37/40] Build arguments --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b9b9574..627a47e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -52,8 +52,8 @@ ENV CPU_CORES 1 ENV DISK_SIZE 16G ENV RAM_SIZE 512M -ARG BUILD_ARG 0 -ARG VERSION_ARG "0.0" +ARG BUILD_ARG=0 +ARG VERSION_ARG="0.0" ENV BUILD=$BUILD_ARG ENV VERSION=$VERSION_ARG From a367a3b13f5d8a9a87ef09e42de1a064d3b44eed Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 18:56:52 +0200 Subject: [PATCH 38/40] Automatic updates --- agent/agent.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/agent.sh b/agent/agent.sh index b1be2aa..bcd844a 100644 --- a/agent/agent.sh +++ b/agent/agent.sh @@ -24,7 +24,6 @@ function checkNMI { /usr/syno/sbin/synoshutdown -s > /dev/null finish - exit fi } @@ -120,11 +119,11 @@ else fi delay=5000 -elapsed=$((($(date +%s%N) - $ts)/1000000)) +elapsed=$((($(date +%s%N) - ts)/1000000)) if (( delay > elapsed )); then difference=$((delay-elapsed)) - sleep $(echo | awk -v diff="${difference}" '{print diff * 0.001}') + sleep "$(echo | awk -v diff="${difference}" '{print diff * 0.001}')" fi # Display message in docker log output @@ -141,3 +140,4 @@ while true; do sleep 2 done +. From 9a117f4fb09f57e7f97165b82e0f2635163dfe91 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 19:01:28 +0200 Subject: [PATCH 39/40] Shutdown --- run/power.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/run/power.sh b/run/power.sh index f48b25b..b49cc8a 100644 --- a/run/power.sh +++ b/run/power.sh @@ -32,7 +32,7 @@ _graceful_shutdown(){ # Don't send the powerdown signal because vDSM ignores ACPI signals # echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_MONPORT}" > /dev/null - # Send shutdown command instead via serial port + # Send shutdown command to host via serial port RESPONSE=$(curl -s -m 2 -S http://127.0.0.1:2210/write?command=6 2>&1) if [[ ! "${RESPONSE}" =~ "\"success\"" ]] ; then @@ -40,6 +40,8 @@ _graceful_shutdown(){ echo echo "Could not send shutdown command to guest, error: $RESPONSE" + # If we cannot shutdown the usual way, fallback to the NMI method + AGENT_VERSION=1 AGENT="${STORAGE}/${BASE}.agent" [ -f "$AGENT" ] && AGENT_VERSION=$(cat "${AGENT}") From 94f6730d644e806706786fbc4ec9c8f284a48e82 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 17 Apr 2023 19:31:49 +0200 Subject: [PATCH 40/40] CPU --- run/serial.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run/serial.sh b/run/serial.sh index 6985eb4..0d533a4 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -12,7 +12,7 @@ set -eu : ${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/"-"/" "/g' | sed 's/[^[:alnum:] ]\+//g') + 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') fi if [ -n "$HOST_CPU" ]; then