Skip to content

Instantly share code, notes, and snippets.

@carlsverre
Created December 9, 2021 22:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carlsverre/19b5cfe7b38f61cdd316d2a43a36ad84 to your computer and use it in GitHub Desktop.
Save carlsverre/19b5cfe7b38f61cdd316d2a43a36ad84 to your computer and use it in GitHub Desktop.
Setup script for google cloud instances with local disks
#!/usr/bin/env bash
set -euo pipefail
METADATA_BASE="http://metadata.google.internal/computeMetadata/v1/instance/attributes"
log() {
local msg="${*}"
logger -p syslog.info -t "startup-script" -- "${msg}"
}
fail() {
local msg="${*}"
logger -p syslog.error -t "startup-script" -- "${msg}"
exit 1
}
run_or_die() {
local argv=("${@}")
log "run_or_die(${argv[*]})"
"${argv[@]}"
}
metadata() {
local key="${1}"
curl --silent --connect-timeout 5 --fail \
-H "Metadata-Flavor: Google" \
"${METADATA_BASE}/${key}"
}
retry() {
local argv=("${@}")
until "${argv[@]}"; do
log "'${argv[*]}' failed, retrying"
sleep 1
done
}
setup_apt() {
retry apt update
retry apt upgrade -y
retry apt install -y \
apt-transport-https ca-certificates curl \
git gnupg lsb-release iftop mdadm xfsprogs
}
run_or_die setup_apt
setup_disks() {
local mountdest=/data
readarray -d '' local_disks < <(find /dev/disk/by-id -name "google-local-nvme-ssd-*" -print0)
[[ ${#local_disks[@]} -eq 0 ]] && return
local device=${local_disks[0]}
if [[ ${#local_disks[@]} -gt 1 ]]; then
mdadm --create /dev/md0 --level=0 --raid-devices="${#local_disks[@]}" "${local_disks[@]}"
device=/dev/md0
fi
mkfs.xfs -f ${device}
mkdir -p ${mountdest}
mount ${device} ${mountdest}
local mem_kb=$(cat /proc/meminfo | grep MemTotal | awk '{ print int($2 * 0.15) }')
fallocate -l ${mem_kb}KiB ${mountdest}/swapfile
chmod 600 ${mountdest}/swapfile
mkswap ${mountdest}/swapfile
swapon ${mountdest}/swapfile
}
run_or_die setup_disks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment