#!/bin/bash do { #//////////////////////////////////// # 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 --------------------------------------------------------------- source /DietPi/dietpi/func/dietpi-globals G_CHECK_ROOT_USER export G_PROGRAM_NAME='DietPi-dphys-swapfile' #Import DietPi-Globals --------------------------------------------------------------- setvar SWAP_SIZE_CURRENT = '0' setvar SWAP_LOCATION_CURRENT = ''/var/swap'' if test -f /etc/dphys-swapfile { setvar SWAP_SIZE_CURRENT = $(cat /etc/dphys-swapfile | grep -m1 '^CONF_SWAPSIZE=' | sed 's/.*=//') setvar SWAP_LOCATION_CURRENT = $(cat /etc/dphys-swapfile | grep -m1 '^CONF_SWAPFILE=' | sed 's/.*=//') } setvar SWAP_SIZE_TARGET = "$SWAP_SIZE_CURRENT" if [[ $1 =~ ^-?[0-9]+$ ]] { setvar SWAP_SIZE_TARGET = "$1" } setvar SWAP_LOCATION_TARGET = "$SWAP_LOCATION_CURRENT" if test $2 != "" { setvar SWAP_LOCATION_TARGET = "$2" } setvar SERVICE_MODE = """" proc Generate_Default_Conf { cat <<< """ > /etc/dphys-swapfile CONF_SWAPSIZE=0 CONF_SWAPFILE=/var/swap """ > /etc/dphys-swapfile CONF_SWAPSIZE=0 CONF_SWAPFILE=/var/swap _EOF_ } proc Delete_Swapfile { G_DIETPI-NOTIFY 2 "Deleting existing swapfile ($SWAP_LOCATION_CURRENT)\n" rm $SWAP_LOCATION_CURRENT &> /dev/null } proc 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 } proc Swap_Disable { G_DIETPI-NOTIFY 3 DietPi Disable swapfile setvar SWAP_SIZE_TARGET = '0' setvar SERVICE_MODE = ""disable"" Generate_Default_Conf dphys-swapfile swapoff Delete_Swapfile Update_Conf } proc 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" setvar 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 test -z $1 { echo -e "$SWAP_SIZE_CURRENT $SWAP_LOCATION_CURRENT" #Disabled } elif (( $SWAP_SIZE_TARGET == 0 )) { Swap_Disable #Enabled (Auto) } elif (( $SWAP_SIZE_TARGET == 1 )) { setvar SWAP_SIZE_TARGET = $(( 2048 - $(free -m | grep -m1 'Mem:' | awk '{print $2}') )) if (( $SWAP_SIZE_TARGET < 0 )) { Swap_Disable } else { Swap_Enable } #Enabled (manual) } elif (( $SWAP_SIZE_TARGET >= 2 )) { Swap_Enable } #----------------------------------------------------------------------------------- #Service Control. if test $SERVICE_MODE != "" { systemctl $SERVICE_MODE dphys-swapfile G_DIETPI-NOTIFY 2 "Completed\n" } #----------------------------------------------------------------------------------- exit #----------------------------------------------------------------------------------- }