bootstrap-scripts/scripts/bootstrap.sh

97 lines
2.9 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
: "${STRAP_SENTRY_DSN:=https://4d089076433c4a7aa31bbb2741f053fe@sentry.aenow.com/3}"
: "${STRAP_SALT_MASTER:=aerence.aenow.fun}"
PROVIDER="${1:-none}"
SALT_MODE="${2:-nosalt}"
# shellcheck disable=SC1091
. /etc/os-release
CODENAME="${UBUNTU_CODENAME:-${VERSION_CODENAME:-jammy}}"
VERSION_ID_SHORT="${VERSION_ID:-22.04}"
ARCH="$(dpkg --print-architecture)"
HOME_DIR="${HOME:-/root}"
ZSHRC="$HOME_DIR/.zshrc"
append_unique() {
local line="$1" file="$2"
touch "$file"
grep -qxF "$line" "$file" || echo "$line" >> "$file"
}
append_unique "export SENTRY_DSN=$STRAP_SENTRY_DSN" "$ZSHRC"
digitalocean() {
local md_base=http://169.254.169.254/metadata/v1
local hostname
hostname=$(curl -fsS "$md_base/hostname" || true)
if [ -n "$hostname" ]; then
hostnamectl set-hostname "$hostname"
fi
}
ovh() {
echo "No OVH-specific configuration needed."
}
case "$PROVIDER" in
digitalocean) digitalocean ;;
ovh) ovh ;;
none) echo "No provider-specific configuration." ;;
*)
echo "Unknown provider '$PROVIDER'. Options: none, ovh, digitalocean" >&2
exit 1
;;
esac
install_salt() {
curl -fsSL -o /usr/share/keyrings/salt-archive-keyring.gpg \
"https://repo.saltproject.io/salt/py3/ubuntu/${VERSION_ID_SHORT}/${ARCH}/latest/salt-archive-keyring.gpg"
echo "deb [signed-by=/usr/share/keyrings/salt-archive-keyring.gpg arch=${ARCH}] https://repo.saltproject.io/salt/py3/ubuntu/${VERSION_ID_SHORT}/${ARCH}/latest ${CODENAME} main" \
> /etc/apt/sources.list.d/salt.list
mkdir -p /etc/salt/minion.d/
echo "master: $STRAP_SALT_MASTER" > /etc/salt/minion.d/99-master-address.conf
DEBIAN_FRONTEND=noninteractive apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends salt-minion
}
case "$SALT_MODE" in
salt) install_salt ;;
nosalt) echo "Skipping salt-minion install." ;;
*)
echo "Unknown salt mode '$SALT_MODE'. Options: salt, nosalt" >&2
exit 1
;;
esac
echo "Installing apt packages"
DEBIAN_FRONTEND=noninteractive apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::='--force-confold' -y dist-upgrade
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
asciinema ca-certificates gnupg git glances htop iftop zsh
echo "Installing Docker and compose plugin"
if ! command -v docker >/dev/null 2>&1; then
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh
sh /tmp/get-docker.sh
rm -f /tmp/get-docker.sh
fi
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends docker-compose-plugin
echo "Installing CTOP"
case "$ARCH" in
amd64|arm64)
curl -fsSL "https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-${ARCH}" \
-o /usr/local/bin/ctop
chmod +x /usr/local/bin/ctop
;;
*)
echo "Skipping CTOP (unsupported arch: $ARCH)" >&2
;;
esac
echo "Running zsh setup"
STRAP_SENTRY_DSN="$STRAP_SENTRY_DSN" /usr/local/sbin/zsh-setup "$PROVIDER" ae-sentry