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