Using the bytes output will fix an issue where the disk size is reported either as terrabyte or also megabyte. So far we disallowed 1TB disks but allowed 20MB disks.
51 lines
2.6 KiB
Bash
Executable File
51 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eu -o pipefail
|
|
|
|
readonly USER_HOME="/home/yellowtent"
|
|
readonly APPS_SWAP_FILE="/apps.swap"
|
|
readonly USER_DATA_FILE="/root/user_data.img"
|
|
readonly USER_DATA_DIR="/home/yellowtent/data"
|
|
|
|
# detect device of rootfs (http://forums.fedoraforum.org/showthread.php?t=270316)
|
|
disk_device="$(for d in $(find /dev -type b); do [ "$(mountpoint -d /)" = "$(mountpoint -x $d)" ] && echo $d && break; done)"
|
|
|
|
existing_swap=$(cat /proc/meminfo | grep SwapTotal | awk '{ printf "%.0f", $2/1024 }')
|
|
|
|
# all sizes are in mb
|
|
readonly physical_memory=$(free -m | awk '/Mem:/ { print $2 }')
|
|
readonly swap_size=$((${physical_memory} - ${existing_swap})) # if you change this, fix enoughResourcesAvailable() in client.js
|
|
readonly app_count=$((${physical_memory} / 200)) # estimated app count
|
|
readonly disk_size_bytes=$(fdisk -l ${disk_device} | grep "Disk ${disk_device}" | awk '{ printf "%d", $5 }') # can't rely on fdisk human readable units, using bytes instead
|
|
readonly disk_size=$((${disk_size_bytes}/1024/1024))
|
|
readonly system_size=10240 # 10 gigs for system libs, apps images, installer, box code and tmp
|
|
readonly ext4_reserved=$((disk_size * 5 / 100)) # this can be changes using tune2fs -m percent /dev/vda1
|
|
|
|
echo "Disk device: ${disk_device}"
|
|
echo "Physical memory: ${physical_memory}"
|
|
echo "Estimated app count: ${app_count}"
|
|
echo "Disk size: ${disk_size}M"
|
|
|
|
# Allocate swap for general app usage
|
|
if [[ ! -f "${APPS_SWAP_FILE}" && ${swap_size} -gt 0 ]]; then
|
|
echo "Creating Apps swap file of size ${swap_size}M"
|
|
fallocate -l "${swap_size}m" "${APPS_SWAP_FILE}"
|
|
chmod 600 "${APPS_SWAP_FILE}"
|
|
mkswap "${APPS_SWAP_FILE}"
|
|
swapon "${APPS_SWAP_FILE}"
|
|
echo "${APPS_SWAP_FILE} none swap sw 0 0" >> /etc/fstab
|
|
else
|
|
echo "Apps Swap file already exists"
|
|
fi
|
|
|
|
# see start.sh for the initial default size of 8gb. On small disks the calculation might be lower than 8gb resulting in a failure to resize here.
|
|
echo "Resizing data volume"
|
|
home_data_size=$((disk_size - system_size - swap_size - ext4_reserved))
|
|
echo "Resizing up btrfs user data to size ${home_data_size}M"
|
|
umount "${USER_DATA_DIR}" || true
|
|
# Do not preallocate (non-sparse). Doing so overallocates for data too much in advance and causes problems when using many apps with smaller data
|
|
# fallocate -l "${home_data_size}m" "${USER_DATA_FILE}" # does not overwrite existing data
|
|
truncate -s "${home_data_size}m" "${USER_DATA_FILE}" # this will shrink it if the file had existed. this is useful when running this script on a live system
|
|
mount -t btrfs -o loop,nosuid "${USER_DATA_FILE}" ${USER_DATA_DIR}
|
|
btrfs filesystem resize max "${USER_DATA_DIR}"
|