1#!/bin/bash 2# 3# Copyright (c) 2017, The OpenThread Authors. 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 3. Neither the name of the copyright holder nor the 14# names of its contributors may be used to endorse or promote products 15# derived from this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27# POSSIBILITY OF SUCH DAMAGE. 28# 29# Purpose: 30# This script creates a swap file, some platforms do not have enough 31# physical RAM to compile the C++/Boost features of the border router. 32# 33 34SWAP_REQUIRED=${SWAP_REQUIRED:-false} 35SWAP_FILENAME=${SWAP_FILENAME:-/swapfile} 36# 1M * 1024 = 1G swapfile 37SWAP_BLOCK_SIZE=${SWAP_BLOCK_SIZE:-1M} 38SWAP_BLOCK_CNT=${SWAP_BLOCK_CNT:-1024} 39 40delete_old_swapfile() 41{ 42 # Delete the old 43 if [ -f "${SWAP_FILENAME}" ]; then 44 echo "Disable & remove old swapfile" 45 sudo swapoff -a 46 sudo rm -f "${SWAP_FILENAME}" 47 fi 48} 49 50create_new_swapfile() 51{ 52 echo "Create new (zeroed) swapfile" 53 SWAP_STEPSIZE=64 54 for x in $(seq "$SWAP_STEPSIZE" "$SWAP_STEPSIZE" "$SWAP_BLOCK_CNT"); do 55 echo "Block: ${x} of ${SWAP_BLOCK_CNT}" 56 sudo dd oflag=append conv=notrunc if=/dev/zero of="${SWAP_FILENAME}" bs="$SWAP_BLOCK_SIZE" count="$SWAP_STEPSIZE" 57 # this actually creates 1 extra but we don't care 58 done 59 60 echo "Setting protections" 61 sudo chmod 0600 "${SWAP_FILENAME}" 62 63 echo "Format swapfile" 64 sudo mkswap "${SWAP_FILENAME}" 65} 66 67add_to_fstab() 68{ 69 echo "Adding ${SWAP_FILENAME} to /etc/fstab" 70 rm -f /tmp/fstab.tmp 71 grep -v "^${SWAP_FILENAME}" /etc/fstab >>/tmp/fstab.tmp 72 echo "${SWAP_FILENAME} none swap defaults 0 0" >>/tmp/fstab.tmp 73 sudo cp /tmp/fstab.tmp /etc/fstab 74} 75 76enable_swapfile() 77{ 78 echo "Enabling swap space..." 79 sudo swapon -a 80} 81 82setup_swapfile() 83{ 84 if ${SWAP_REQUIRED}; then 85 echo "Swapfile: Creating..." 86 delete_old_swapfile 87 create_new_swapfile 88 add_to_fstab 89 enable_swapfile 90 echo "Swapfile: Complete" 91 else 92 echo "Swapfile: not required" 93 fi 94} 95