From a6798589c42ef1ff003ec58db6ada8634c9516a6 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:27:53 +0200 Subject: [PATCH 1/8] Create memory.sh --- src/memory.sh | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/memory.sh diff --git a/src/memory.sh b/src/memory.sh new file mode 100644 index 00000000..b9efc999 --- /dev/null +++ b/src/memory.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +msg="Checking memory..." +html "$msg" +[[ "$DEBUG" == [Yy1]* ]] && echo "$msg" + +RAM_AVAIL=$(free -b | grep -m 1 Mem: | awk '{print $7}') + +if [[ "$RAM_CHECK" != [Nn]* && "${RAM_SIZE,,}" != "max" && "${RAM_SIZE,,}" != "half" ]]; then + + AVAIL_MEM=$(formatBytes "$RAM_AVAIL") + + if (( (RAM_WANTED + RAM_SPARE) > RAM_AVAIL )); then + msg="Your configured RAM_SIZE of ${RAM_SIZE/G/ GB} is too high for the $AVAIL_MEM of memory available," + if [[ "${FS,,}" == "zfs" ]]; then + info "$msg but since ZFS is active this will be ignored." + else + RAM_SIZE="max" + warn "$msg it will automatically be adjusted to a lower amount." + fi + else + if (( (RAM_WANTED + (RAM_SPARE * 3)) > RAM_AVAIL )); then + msg="your configured RAM_SIZE of ${RAM_SIZE/G/ GB} is very close to the $AVAIL_MEM of memory available," + if [[ "${FS,,}" == "zfs" ]]; then + info "$msg but since ZFS is active this will be ignored." + else + warn "$msg please consider a lower amount." + fi + fi + fi + +fi + +if [[ "${RAM_SIZE,,}" == "half" ]]; then + + RAM_WANTED=$(( RAM_AVAIL / 2 )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + RAM_WANTED=$(( RAM_AVAIL / 2 )) + RAM_WANTED=$(( RAM_WANTED / 1048577 )) + RAM_SIZE="${RAM_WANTED}M" + else + RAM_SIZE="${RAM_WANTED}G" + fi + +fi + +if [[ "${RAM_SIZE,,}" == "max" ]]; then + + RAM_WANTED=$(( RAM_AVAIL - (RAM_SPARE * 3) )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL - (RAM_SPARE * 2) )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL - RAM_SPARE )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL - RAM_SPARE )) + RAM_WANTED=$(( RAM_WANTED / 1048577 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL )) + RAM_WANTED=$(( RAM_WANTED / 1048577 )) + + fi + + RAM_SIZE="${RAM_WANTED}M" + else + RAM_SIZE="${RAM_WANTED}G" + fi + else + RAM_SIZE="${RAM_WANTED}G" + fi + else + RAM_SIZE="${RAM_WANTED}G" + fi + +fi + +if [[ "$DEBUG" == [Yy1]* ]]; then + printf "QEMU arguments:\n\n%s\n\n" "${ARGS// -/$'\n-'}" +fi + +return 0 From 9ee8bd1fe7c8f702c9566ac77add28541c850426 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:29:44 +0200 Subject: [PATCH 2/8] Update config.sh --- src/config.sh | 101 -------------------------------------------------- 1 file changed, 101 deletions(-) diff --git a/src/config.sh b/src/config.sh index decc02cf..bbad0a31 100644 --- a/src/config.sh +++ b/src/config.sh @@ -42,105 +42,4 @@ 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 ' ') -if [[ "${DISPLAY,,}" == "web" ]]; then - [ ! -f "$INFO" ] && error "File $INFO not found?!" - rm -f "$INFO" - [ ! -f "$PAGE" ] && error "File $PAGE not found?!" - rm -f "$PAGE" -else - if [[ "${DISPLAY,,}" == "vnc" ]]; then - html "You can now connect to VNC on port $VNC_PORT." "0" - else - html "The virtual machine was booted successfully." "0" - fi -fi - -# Check available memory as the very last step - -RAM_AVAIL=$(free -b | grep -m 1 Mem: | awk '{print $7}') - -if [[ "$RAM_CHECK" != [Nn]* && "${RAM_SIZE,,}" != "max" && "${RAM_SIZE,,}" != "half" ]]; then - - AVAIL_MEM=$(formatBytes "$RAM_AVAIL") - - if (( (RAM_WANTED + RAM_SPARE) > RAM_AVAIL )); then - msg="Your configured RAM_SIZE of ${RAM_SIZE/G/ GB} is too high for the $AVAIL_MEM of memory available," - if [[ "${FS,,}" == "zfs" ]]; then - info "$msg but since ZFS is active this will be ignored." - else - RAM_SIZE="max" - warn "$msg it will automatically be adjusted to a lower amount." - fi - else - if (( (RAM_WANTED + (RAM_SPARE * 3)) > RAM_AVAIL )); then - msg="your configured RAM_SIZE of ${RAM_SIZE/G/ GB} is very close to the $AVAIL_MEM of memory available," - if [[ "${FS,,}" == "zfs" ]]; then - info "$msg but since ZFS is active this will be ignored." - else - warn "$msg please consider a lower amount." - fi - fi - fi - -fi - -if [[ "${RAM_SIZE,,}" == "half" ]]; then - - RAM_WANTED=$(( RAM_AVAIL / 2 )) - RAM_WANTED=$(( RAM_WANTED / 1073741825 )) - - if (( "$RAM_WANTED" < 1 )); then - RAM_WANTED=$(( RAM_AVAIL / 2 )) - RAM_WANTED=$(( RAM_WANTED / 1048577 )) - RAM_SIZE="${RAM_WANTED}M" - else - RAM_SIZE="${RAM_WANTED}G" - fi - -fi - -if [[ "${RAM_SIZE,,}" == "max" ]]; then - - RAM_WANTED=$(( RAM_AVAIL - (RAM_SPARE * 3) )) - RAM_WANTED=$(( RAM_WANTED / 1073741825 )) - - if (( "$RAM_WANTED" < 1 )); then - - RAM_WANTED=$(( RAM_AVAIL - (RAM_SPARE * 2) )) - RAM_WANTED=$(( RAM_WANTED / 1073741825 )) - - if (( "$RAM_WANTED" < 1 )); then - - RAM_WANTED=$(( RAM_AVAIL - RAM_SPARE )) - RAM_WANTED=$(( RAM_WANTED / 1073741825 )) - - if (( "$RAM_WANTED" < 1 )); then - - RAM_WANTED=$(( RAM_AVAIL - RAM_SPARE )) - RAM_WANTED=$(( RAM_WANTED / 1048577 )) - - if (( "$RAM_WANTED" < 1 )); then - - RAM_WANTED=$(( RAM_AVAIL )) - RAM_WANTED=$(( RAM_WANTED / 1048577 )) - - fi - - RAM_SIZE="${RAM_WANTED}M" - else - RAM_SIZE="${RAM_WANTED}G" - fi - else - RAM_SIZE="${RAM_WANTED}G" - fi - else - RAM_SIZE="${RAM_WANTED}G" - fi - -fi - -if [[ "$DEBUG" == [Yy1]* ]]; then - printf "QEMU arguments:\n\n%s\n\n" "${ARGS// -/$'\n-'}" -fi - return 0 From 506687844e3cb8a553e84c994f2166be579b8551 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:31:02 +0200 Subject: [PATCH 3/8] Update memory.sh --- src/memory.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/memory.sh b/src/memory.sh index b9efc999..c41b0b79 100644 --- a/src/memory.sh +++ b/src/memory.sh @@ -87,6 +87,19 @@ if [[ "${RAM_SIZE,,}" == "max" ]]; then fi +if [[ "${DISPLAY,,}" == "web" ]]; then + [ ! -f "$INFO" ] && error "File $INFO not found?!" + rm -f "$INFO" + [ ! -f "$PAGE" ] && error "File $PAGE not found?!" + rm -f "$PAGE" +else + if [[ "${DISPLAY,,}" == "vnc" ]]; then + html "You can now connect to VNC on port $VNC_PORT." "0" + else + html "The virtual machine was booted successfully." "0" + fi +fi + if [[ "$DEBUG" == [Yy1]* ]]; then printf "QEMU arguments:\n\n%s\n\n" "${ARGS// -/$'\n-'}" fi From 4a76fd5cde81e45accb390f2980911c33d712948 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:32:15 +0200 Subject: [PATCH 4/8] Create finish.sh --- src/finish.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/finish.sh diff --git a/src/finish.sh b/src/finish.sh new file mode 100644 index 00000000..34672122 --- /dev/null +++ b/src/finish.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +if [[ "${DISPLAY,,}" == "web" ]]; then + [ ! -f "$INFO" ] && error "File $INFO not found?!" + rm -f "$INFO" + [ ! -f "$PAGE" ] && error "File $PAGE not found?!" + rm -f "$PAGE" +else + if [[ "${DISPLAY,,}" == "vnc" ]]; then + html "You can now connect to VNC on port $VNC_PORT." "0" + else + html "The virtual machine was booted successfully." "0" + fi +fi + +if [[ "$DEBUG" == [Yy1]* ]]; then + printf "QEMU arguments:\n\n%s\n\n" "${ARGS// -/$'\n-'}" +fi + +return 0 From 5408bc8b97342abf5ac3216cd32ec65da9c44127 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:32:45 +0200 Subject: [PATCH 5/8] Update memory.sh --- src/memory.sh | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/memory.sh b/src/memory.sh index c41b0b79..5ba8e42a 100644 --- a/src/memory.sh +++ b/src/memory.sh @@ -87,21 +87,4 @@ if [[ "${RAM_SIZE,,}" == "max" ]]; then fi -if [[ "${DISPLAY,,}" == "web" ]]; then - [ ! -f "$INFO" ] && error "File $INFO not found?!" - rm -f "$INFO" - [ ! -f "$PAGE" ] && error "File $PAGE not found?!" - rm -f "$PAGE" -else - if [[ "${DISPLAY,,}" == "vnc" ]]; then - html "You can now connect to VNC on port $VNC_PORT." "0" - else - html "The virtual machine was booted successfully." "0" - fi -fi - -if [[ "$DEBUG" == [Yy1]* ]]; then - printf "QEMU arguments:\n\n%s\n\n" "${ARGS// -/$'\n-'}" -fi - return 0 From 4b8919c3b69420e0d73a9ee4c9ef2b8640926a54 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:34:22 +0200 Subject: [PATCH 6/8] Update entry.sh --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index e478dcea..1ffa617d 100755 --- a/src/entry.sh +++ b/src/entry.sh @@ -19,6 +19,8 @@ cd /run . boot.sh # Configure boot . proc.sh # Initialize processor . config.sh # Configure arguments +. memory.sh # Check memory +. finish.sh # Finish initialization trap - ERR From bc90454ecc029d0edd549713402dd03cbcf6eba8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:36:58 +0200 Subject: [PATCH 7/8] Update entry.sh --- src/entry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entry.sh b/src/entry.sh index 1ffa617d..a7cf24f9 100755 --- a/src/entry.sh +++ b/src/entry.sh @@ -19,7 +19,7 @@ cd /run . boot.sh # Configure boot . proc.sh # Initialize processor . config.sh # Configure arguments -. memory.sh # Check memory +. memory.sh # Check memory size . finish.sh # Finish initialization trap - ERR From 51346673c2cae1fcc5d9d756747e4e70414519e8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:37:57 +0200 Subject: [PATCH 8/8] Update entry.sh --- src/entry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entry.sh b/src/entry.sh index a7cf24f9..2343eaf4 100755 --- a/src/entry.sh +++ b/src/entry.sh @@ -19,7 +19,7 @@ cd /run . boot.sh # Configure boot . proc.sh # Initialize processor . config.sh # Configure arguments -. memory.sh # Check memory size +. memory.sh # Check available memory . finish.sh # Finish initialization trap - ERR