diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index 723b4ab2..b288b817 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -10,6 +10,7 @@ # - Create a new /data dir if necessary and set the correct ownership on it # - Create a new /browsers dir if necessary and set the correct ownership on it # - Check whether we're running inside QEMU emulation and show a warning if so. +# - Check that enough free space is available on / and /data # - Drop down to archivebox user permisisons and execute passed CMD command. # Bash Environment Setup @@ -84,7 +85,7 @@ chown $PUID:$PGID "$DATA_DIR" chown $PUID:$PGID "$DATA_DIR"/* # also chown BROWSERS_DIR because otherwise 'archivebox setup' wont be able to install chrome at runtime -PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/browsers}" +export PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/browsers}" mkdir -p "$PLAYWRIGHT_BROWSERS_PATH/permissions_test_safe_to_delete" chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH" chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/* @@ -99,37 +100,41 @@ if [[ "$IN_QEMU" == "True" ]]; then echo -e " See here for more info: https://github.com/microsoft/playwright/issues/17395#issuecomment-1250830493\n" > /dev/stderr fi -# check disk space free on / and /data, warn on >95% use, error on >99% use -ROOT_USED_PCT="$(df --output=pcent / | tail -n 1 | xargs)" -if [[ "${ROOT_USED_PCT//%/}" -ge 99 ]]; then - df -kh / > /dev/stderr - echo -e "\n[!] Warning: Docker root filesystem is completely out of space! ($ROOT_USED_PCT used on /)" > /dev/stderr - echo -e " you need to free up space in your Docker VM to continue:" > /dev/stderr +# check disk space free on / and /data, warn on <500Mb free, error on <100Mb free +export ROOT_USAGE="$(df --output=pcent,avail / | tail -n 1 | xargs)" +export ROOT_USED_PCT="${ROOT_USAGE%%%*}" +export ROOT_AVAIL_KB="$(echo "$ROOT_USAGE" | awk '{print $2}')" +if [[ "$ROOT_AVAIL_KB" -lt 100000 ]]; then + echo -e "\n[!] Warning: Docker root filesystem is completely out of space! (${ROOT_USED_PCT}% used on /)" > /dev/stderr + echo -e " you need to free up at least 100Mb in your Docker VM to continue:" > /dev/stderr echo -e " \$ docker system prune\n" > /dev/stderr - exit 3 -elif [[ "${ROOT_USED_PCT//%/}" -gt 97 ]]; then df -kh / > /dev/stderr - echo -e "\n[!] Warning: Docker root filesystem is running out of space! ($ROOT_USED_PCT used on /)" > /dev/stderr + exit 3 +elif [[ "$ROOT_USED_PCT" -ge 99 ]] || [[ "$ROOT_AVAIL_KB" -lt 500000 ]]; then + echo -e "\n[!] Warning: Docker root filesystem is running out of space! (${ROOT_USED_PCT}% used on /)" > /dev/stderr echo -e " you may need to free up space in your Docker VM soon:" > /dev/stderr echo -e " \$ docker system prune\n" > /dev/stderr + df -kh / > /dev/stderr fi -DATA_USED_PCT="$(df --output=pcent /data | tail -n 1 | xargs)" -if [[ "${DATA_USED_PCT//%/}" -ge 99 ]]; then - df -kh /data > /dev/stderr - echo -e "\n[!] Warning: Docker data volume is completely out of space! ($DATA_USED_PCT used on /data)" > /dev/stderr - echo -e " you need to free up space on the drive holding your data directory" > /dev/stderr +export DATA_USAGE="$(df --output=pcent,avail /data | tail -n 1 | xargs)" +export DATA_USED_PCT="${DATA_USAGE%%%*}" +export DATA_AVAIL_KB="$(echo "$DATA_USAGE" | awk '{print $2}')" +if [[ "$DATA_AVAIL_KB" -lt 100000 ]]; then + echo -e "\n[!] Warning: Docker data volume is completely out of space! (${DATA_USED_PCT}% used on /data)" > /dev/stderr + echo -e " you need to free up at least 100Mb on the drive holding your data directory" > /dev/stderr echo -e " \$ ncdu -x data\n" > /dev/stderr - sleep 5 -elif [[ "${DATA_USED_PCT//%/}" -gt 95 ]]; then df -kh /data > /dev/stderr - echo -e "\n[!] Warning: Docker data volume is running out of space! ($DATA_USED_PCT used on /data)" > /dev/stderr + sleep 5 +elif [[ "$DATA_USED_PCT" -ge 99 ]] || [[ "$ROOT_AVAIL_KB" -lt 500000 ]]; then + echo -e "\n[!] Warning: Docker data volume is running out of space! (${DATA_USED_PCT}% used on /data)" > /dev/stderr echo -e " you may need to free up space on the drive holding your data directory soon" > /dev/stderr echo -e " \$ ncdu -x data\n" > /dev/stderr + df -kh /data > /dev/stderr fi -ARCHIVEBOX_BIN_PATH="$(which archivebox)" +export ARCHIVEBOX_BIN_PATH="$(which archivebox)" # Drop permissions to run commands as the archivebox user if [[ "$1" == /* || "$1" == "bash" || "$1" == "sh" || "$1" == "echo" || "$1" == "cat" || "$1" == "whoami" || "$1" == "archivebox" ]]; then