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

feat: Check the amount of RAM available (#716)

parent 8d8ed631
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -61,27 +61,27 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI
  
  Enjoy your brand new machine, and don't forget to star this repo!

* ### How do I change the size of the disk?
* ### How do I change the storage location?

  To expand the default size of 16 GB, locate the `DISK_SIZE` setting in your compose file and modify it to your preferred capacity:
  To change the storage location, include the following bind mount in your compose file:

  ```yaml
  environment:
    DISK_SIZE: "128G"
  volumes:
    - /var/dsm:/storage
  ```

  This can also be used to resize the existing disk to a larger capacity without any data loss. 
  Replace the example path `/var/dsm` with the desired storage folder.
 
* ### How do I change the storage location?
* ### How do I change the size of the disk?

  To change the storage location, include the following bind mount in your compose file:
  To expand the default size of 16 GB, locate the `DISK_SIZE` setting in your compose file and modify it to your preferred capacity:

  ```yaml
  volumes:
    - /var/dsm:/storage
  environment:
    DISK_SIZE: "128G"
  ```
  
  Replace the example path `/var/dsm` with the desired storage folder.
  This can also be used to resize the existing disk to a larger capacity without any data loss.

* ### How do I create a growable disk?

@@ -119,7 +119,7 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI
    - /dev/disk/by-uuid/45678-45678-45678-45678-45678:/dev/disk3
  ```

  Make sure to bind the disk via its UUID (obtainable via `lsblk -o name,uuid`) instead of its name (`/dev/sdc`), to make sure it can never accidently pass the wrong disk when their name assignments get shuffled. 
  Make sure to bind the disk via its UUID (obtainable via `lsblk -o name,uuid`) instead of its name (`/dev/sdc`), to prevent ever binding the wrong disk when the drive letters happen to change. 

  Please note that the device needs to be totally empty (without any partition table) otherwise DSM does not always format it into a volume.

@@ -129,7 +129,7 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI

  By default, a single CPU core and 1 GB of RAM are allocated to the container.

  To increase this, add the following environment variables:
  If there arises a need to increase this, add the following environment variables:

  ```yaml
  environment:
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
set -Eeuo pipefail

DEF_OPTS="-nodefaults -boot strict=on"
RAM_OPTS=$(echo "-m $RAM_SIZE" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g')
RAM_OPTS=$(echo "-m ${RAM_SIZE^^}" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g')
CPU_OPTS="-cpu $CPU_FLAGS -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1"
MAC_OPTS="-machine type=q35,usb=off,vmport=off,dump-guest-core=off,hpet=off${KVM_OPTS}"
DEV_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4"
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ set -Eeuo pipefail
: "${CPU_MODEL:=""}"
: "${DEF_MODEL:="qemu64"}"

[ "$ARCH" != "amd64" ] && KVM="N"
[[ "${ARCH,,}" != "amd64" ]] && KVM="N"

if [[ "$KVM" != [Nn]* ]]; then

+21 −2
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ HOST=$(hostname -s)
KERNEL=$(echo "$SYS" | cut -b 1)
MINOR=$(echo "$SYS" | cut -d '.' -f2)
ARCH=$(dpkg --print-architecture)
RAM="$(free -g | grep Mem: | awk '{print $7}')/$(free -g | grep Mem: | awk '{print $2}') GB"
CPU=$(lscpu | grep -m 1 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1' | sed 's# @.*##g' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/  */ /g')

# Check system
@@ -67,15 +66,35 @@ if [[ "${FS,,}" == "ecryptfs" ]] || [[ "${FS,,}" == "tmpfs" ]]; then
  DISK_CACHE="writeback"
fi

# Read memory
RAM_AVAIL=$(free -b | grep -m 1 Mem: | awk '{print $7}')
RAM_TOTAL=$(free -b | grep -m 1 Mem: | awk '{print $2}')
RAM_SIZE=$(echo "${RAM_SIZE^^}" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g')
RAM_WANTED=$(numfmt --from=iec "$RAM_SIZE")
AVAIL_GB=$(( (RAM_AVAIL + 1073741823)/1073741824 ))
TOTAL_GB=$(( (RAM_TOTAL + 1073741823)/1073741824 ))
WANTED_GB=$(( (RAM_WANTED + 1073741823)/1073741824 ))

# Print system info
SYS="${SYS/-generic/}"
FS="${FS/ext2\/ext3/ext4}"
SPACE=$(df --output=avail -B 1 "$STORAGE" | tail -n 1)
SPACE_GB=$(( (SPACE + 1073741823)/1073741824 ))

echo "❯ CPU: ${CPU} | RAM: ${RAM} | DISK: $SPACE_GB GB (${FS}) | HOST: ${SYS}..."
echo "❯ CPU: ${CPU} | RAM: $AVAIL_GB/$TOTAL_GB GB | DISK: $SPACE_GB GB (${FS}) | HOST: ${SYS}..."
echo

# Check memory

if (( RAM_WANTED > RAM_AVAIL )); then
  error "Your configured RAM_SIZE of $WANTED_GB GB is higher than the $AVAIL_GB GB of memory available."
  exit 15
fi

if (( (RAM_WANTED + 1950000000) > RAM_AVAIL )); then
  warn "your configured RAM_SIZE of $WANTED_GB GB is much too close to the $AVAIL_GB GB of memory available."
fi

# Cleanup files
rm -f /run/shm/qemu.*
rm -f /run/shm/dsm.url