Loading Dockerfile +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading agent/agent.sh +88 −30 Original line number Diff line number Diff line #!/usr/bin/env bash set -u VERSION="4" HEADER="VirtualDSM Agent" # Functions finish() { echo "$HEADER: Shutting down.." exit } 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/[^1-9]*//g') if [ "$nmi" != "" ] && [ "$nmi" -ne "0" ]; then if [ "$nmi" != "" ]; then echo "Received shutdown request through NMI.." > /dev/ttyS0 echo "$HEADER: Received shutdown request through NMI.." /usr/syno/sbin/synoshutdown -s > /dev/null exit finish fi } function downloadUpdate { TMP="/tmp/agent.sh" rm -f "${TMP}" # Auto update the agent URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" 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 SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) local_size=$(stat -c%s "$SCRIPT") [ "$remote_size" == "$local_size" ] && return if ! curl -sfk -m 10 -o "${TMP}" "${URL}"; then echo "$HEADER: curl 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 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." } finish() { function installPackages { echo "Shutting down Guest Agent.." > /dev/ttyS0 exit 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 # Setup serialport ts=$(date +%s%N) echo "$HEADER v$VERSION" chmod 666 /dev/ttyS0 checkNMI # Install packages Loading @@ -44,36 +109,28 @@ for filename in /usr/local/packages/*.spk; do done if [ "$first_run" = true ]; then for filename in /usr/local/packages/*.spk; do if [ -f "$filename" ]; then BASE=$(basename "$filename" .spk) BASE="${BASE%%-*}" installPackages 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 else rm "$filename" downloadUpdate fi done else # TODO: Auto-update agent echo "Checking for updates.." > /dev/ttyS0 sleep 5 delay=5000 elapsed=$((($(date +%s%N) - ts)/1000000)) if (( delay > elapsed )); then difference=$((delay-elapsed)) sleep "$(echo | awk -v diff="${difference}" '{print diff * 0.001}')" fi # 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 Loading @@ -83,3 +140,4 @@ while true; do sleep 2 done . agent/service.sh +2 −2 Original line number Diff line number Diff line #!/bin/bash PIDFILE="/var/run/agent.pid" LOGFILE="/var/log/agent.log" SCRIPT="/usr/local/bin/agent.sh" status() { Loading @@ -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() { Loading run/disk.sh +4 −4 Original line number Diff line number Diff line Loading @@ -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="\ Loading run/install.sh +6 −3 Original line number Diff line number Diff line Loading @@ -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 -sfk -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 Loading Loading @@ -160,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..." Loading Loading
Dockerfile +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
agent/agent.sh +88 −30 Original line number Diff line number Diff line #!/usr/bin/env bash set -u VERSION="4" HEADER="VirtualDSM Agent" # Functions finish() { echo "$HEADER: Shutting down.." exit } 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/[^1-9]*//g') if [ "$nmi" != "" ] && [ "$nmi" -ne "0" ]; then if [ "$nmi" != "" ]; then echo "Received shutdown request through NMI.." > /dev/ttyS0 echo "$HEADER: Received shutdown request through NMI.." /usr/syno/sbin/synoshutdown -s > /dev/null exit finish fi } function downloadUpdate { TMP="/tmp/agent.sh" rm -f "${TMP}" # Auto update the agent URL="https://raw.githubusercontent.com/kroese/virtual-dsm/master/agent/agent.sh" 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 SCRIPT=$(readlink -f ${BASH_SOURCE[0]}) local_size=$(stat -c%s "$SCRIPT") [ "$remote_size" == "$local_size" ] && return if ! curl -sfk -m 10 -o "${TMP}" "${URL}"; then echo "$HEADER: curl 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 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." } finish() { function installPackages { echo "Shutting down Guest Agent.." > /dev/ttyS0 exit 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 # Setup serialport ts=$(date +%s%N) echo "$HEADER v$VERSION" chmod 666 /dev/ttyS0 checkNMI # Install packages Loading @@ -44,36 +109,28 @@ for filename in /usr/local/packages/*.spk; do done if [ "$first_run" = true ]; then for filename in /usr/local/packages/*.spk; do if [ -f "$filename" ]; then BASE=$(basename "$filename" .spk) BASE="${BASE%%-*}" installPackages 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 else rm "$filename" downloadUpdate fi done else # TODO: Auto-update agent echo "Checking for updates.." > /dev/ttyS0 sleep 5 delay=5000 elapsed=$((($(date +%s%N) - ts)/1000000)) if (( delay > elapsed )); then difference=$((delay-elapsed)) sleep "$(echo | awk -v diff="${difference}" '{print diff * 0.001}')" fi # 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 Loading @@ -83,3 +140,4 @@ while true; do sleep 2 done .
agent/service.sh +2 −2 Original line number Diff line number Diff line #!/bin/bash PIDFILE="/var/run/agent.pid" LOGFILE="/var/log/agent.log" SCRIPT="/usr/local/bin/agent.sh" status() { Loading @@ -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() { Loading
run/disk.sh +4 −4 Original line number Diff line number Diff line Loading @@ -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="\ Loading
run/install.sh +6 −3 Original line number Diff line number Diff line Loading @@ -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 -sfk -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 Loading Loading @@ -160,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..." Loading