#!/bin/bash { #//////////////////////////////////// # DietPi Function: Dphys-Swapfile # #//////////////////////////////////// # Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com # #//////////////////////////////////// # # Info: # - DietPi Dphys-Swapfile control for setting enable/disable/size/location. # # Usage: # - $1 = enable+size/disable # - $2 = optional location # - /DietPi/dietpi/func/dietpi-set_dphys-swapfile = Print current config size and location # - /DietPi/dietpi/func/dietpi-set_dphys-swapfile <=0 = Disable + Delete swapfile. # - /DietPi/dietpi/func/dietpi-set_dphys-swapfile 1 = Enable + Auto Size # - /DietPi/dietpi/func/dietpi-set_dphys-swapfile >=2 = Enable + Manual Size # - /DietPi/dietpi/func/dietpi-set_dphys-swapfile >=2 /var/swap = Enable + Set Size + Set new Location (also deletes previous swapfile) #//////////////////////////////////// #Import DietPi-Globals --------------------------------------------------------------- . /DietPi/dietpi/func/dietpi-globals G_CHECK_ROOT_USER export G_PROGRAM_NAME='DietPi-dphys-swapfile' #Import DietPi-Globals --------------------------------------------------------------- SWAP_SIZE_CURRENT=0 SWAP_LOCATION_CURRENT='/var/swap' if [ -f /etc/dphys-swapfile ]; then SWAP_SIZE_CURRENT=$(cat /etc/dphys-swapfile | grep -m1 '^CONF_SWAPSIZE=' | sed 's/.*=//') SWAP_LOCATION_CURRENT=$(cat /etc/dphys-swapfile | grep -m1 '^CONF_SWAPFILE=' | sed 's/.*=//') fi SWAP_SIZE_TARGET=$SWAP_SIZE_CURRENT if [[ $1 =~ ^-?[0-9]+$ ]]; then SWAP_SIZE_TARGET=$1 fi SWAP_LOCATION_TARGET=$SWAP_LOCATION_CURRENT if [ "$2" != "" ]; then SWAP_LOCATION_TARGET=$2 fi SERVICE_MODE="" Generate_Default_Conf(){ cat << _EOF_ > /etc/dphys-swapfile CONF_SWAPSIZE=0 CONF_SWAPFILE=/var/swap _EOF_ } Delete_Swapfile(){ G_DIETPI-NOTIFY 2 "Deleting existing swapfile ($SWAP_LOCATION_CURRENT)\n" rm "$SWAP_LOCATION_CURRENT" &> /dev/null } Update_Conf(){ sed -i "/CONF_SWAPSIZE/c\CONF_SWAPSIZE=$SWAP_SIZE_TARGET" /etc/dphys-swapfile sed -i "/CONF_SWAPFILE/c\CONF_SWAPFILE=$SWAP_LOCATION_TARGET" /etc/dphys-swapfile # DietPi.txt sed -i "/^AUTO_SETUP_SWAPFILE_SIZE=/c\AUTO_SETUP_SWAPFILE_SIZE=$SWAP_SIZE_TARGET" /DietPi/dietpi.txt } Swap_Disable(){ G_DIETPI-NOTIFY 3 DietPi Disable swapfile SWAP_SIZE_TARGET=0 SERVICE_MODE="disable" Generate_Default_Conf dphys-swapfile swapoff Delete_Swapfile Update_Conf } Swap_Enable(){ G_DIETPI-NOTIFY 3 DietPi Generating new swapfile G_DIETPI-NOTIFY 2 "Size = $SWAP_SIZE_TARGET MB" G_DIETPI-NOTIFY 2 "Location = $SWAP_LOCATION_TARGET" SERVICE_MODE="enable" Generate_Default_Conf dphys-swapfile swapoff Delete_Swapfile Update_Conf dphys-swapfile setup chmod 600 "$SWAP_LOCATION_TARGET" #stretch complains when permissions are not 600, so lets set it. dphys-swapfile swapon } #///////////////////////////////////////////////////////////////////////////////////// # Main Loop #///////////////////////////////////////////////////////////////////////////////////// #Info mode - Print Size / Location if [ -z "$1" ]; then echo -e "$SWAP_SIZE_CURRENT $SWAP_LOCATION_CURRENT" #Disabled elif (( $SWAP_SIZE_TARGET == 0 )); then Swap_Disable #Enabled (Auto) elif (( $SWAP_SIZE_TARGET == 1 )); then SWAP_SIZE_TARGET=$(( 2048 - $(free -m | grep -m1 'Mem:' | awk '{print $2}') )) if (( $SWAP_SIZE_TARGET < 0 )); then Swap_Disable else Swap_Enable fi #Enabled (manual) elif (( $SWAP_SIZE_TARGET >= 2 )); then Swap_Enable fi #----------------------------------------------------------------------------------- #Service Control. if [ "$SERVICE_MODE" != "" ]; then systemctl "$SERVICE_MODE" dphys-swapfile G_DIETPI-NOTIFY 2 "Completed\n" fi #----------------------------------------------------------------------------------- exit #----------------------------------------------------------------------------------- }