add ctrl flow wrap for farmer

This commit is contained in:
2023-10-23 16:37:49 -07:00
parent cf3b6831c9
commit 9b9e47854f

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
set -e -o pipefail
export PATH=$PATH:/usr/local/bin:/usr/sbin:/usr/bin
# determine machine architecture
arch=$(uname -m)
case $arch in
@@ -24,14 +24,14 @@ esac
# install farmer
if [ -z "$UNINSTALL" ]; then
if [ ! -f /usr/local/bin/grlx-farmer ]; then
curl -f -L -s "https://artifacts.grlx.dev/linux/${machine_arch}/v0.0.7/farmer" > /usr/local/bin/grlx-farmer
chmod +x /usr/local/bin/grlx-farmer
fi
if [ ! -f /usr/local/bin/grlx-farmer ]; then
curl -f -L -s "https://artifacts.grlx.dev/linux/${machine_arch}/v0.0.7/farmer" > /usr/local/bin/grlx-farmer
chmod +x /usr/local/bin/grlx-farmer
fi
# install systemd service
cat << EOF > /etc/systemd/system/grlx-farmer.service
# install systemd service
cat << EOF > /etc/systemd/system/grlx-farmer.service
[Unit]
Description=grlx farmer
Documentation=https://docs.grlx.dev
@@ -49,72 +49,71 @@ Group=farmer
WantedBy=multi-user.target
EOF
# configure farmer if it's not already configured
if [ ! -f /etc/grlx/farmer ]; then
# install gum if it's not already installed for interactive config
if ! command -v gum >/dev/null 2>&1; then
tempdir=""
if command -v mktemp >/dev/null 2>&1; then
tempdir=$(mktemp -d)
else
tempdir="/tmp/grlx-farmer-gum"
mkdir -p "$tempdir"
# configure farmer if it's not already configured
if [ ! -f /etc/grlx/farmer ]; then
# install gum if it's not already installed for interactive config
if ! command -v gum >/dev/null 2>&1; then
tempdir=""
if command -v mktemp >/dev/null 2>&1; then
tempdir=$(mktemp -d)
else
tempdir="/tmp/grlx-farmer-gum"
mkdir -p "$tempdir"
fi
trap 'rm -r "$tempdir"' EXIT
case $machine_arch in
"386")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_i386.tar.gz" > "$tempdir/gum.tar.gz"
;;
"amd64")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_x86_64.tar.gz" > "$tempdir/gum.tar.gz"
;;
"arm64")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_arm64.tar.gz" > "$tempdir/gum.tar.gz"
;;
"arm")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_arm.tar.gz" > "$tempdir/gum.tar.gz"
;;
esac
tar -C "$tempdir" -xzf "$tempdir/gum.tar.gz"
mv "$tempdir/gum" /usr/local/bin/gum
chmod +x /usr/local/bin/gum
fi
trap 'rm -r "$tempdir"' EXIT
case $machine_arch in
"386")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_i386.tar.gz" > "$tempdir/gum.tar.gz"
;;
"amd64")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_x86_64.tar.gz" > "$tempdir/gum.tar.gz"
;;
"arm64")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_arm64.tar.gz" > "$tempdir/gum.tar.gz"
;;
"arm")
curl -f -L -s "https://github.com/charmbracelet/gum/releases/download/v0.11.0/gum_0.11.0_Linux_arm.tar.gz" > "$tempdir/gum.tar.gz"
;;
esac
ls -ashil "$tempdir"
tar -C "$tempdir" -xzf "$tempdir/gum.tar.gz"
mv "$tempdir/gum" /usr/local/bin/gum
chmod +x /usr/local/bin/gum
fi
mkdir -p /etc/grlx
if [ -z "$FARMER_INTERFACE" ]; then
FARMER_INTERFACE=$(gum input --value="localhost" --prompt="Choose an interface for the farmer: > ")
fi
if [ -z "$FARMER_API_PORT" ]; then
FARMER_API_PORT=$(gum input --value=5405 --prompt="Choose a port for the farmer API: > ")
fi
if [ -z "$FARMER_BUS_PORT" ]; then
FARMER_BUS_PORT=$(gum input --value=5406 --prompt="Choose a port for the farmer bus: > ")
fi
if [ -z "$FARMER_ORGANIZATION" ]; then
FARMER_ORGANIZATION=$(gum input --value="Your Organization" --prompt="Choose an organization name for the farmer: > ")
fi
if [ -z "$ADMIN_PUBKEYS" ]; then
ADMIN_PUBKEYS=()
while true; do
ADMIN_PUBKEYS+=($(gum input --width=57 --placeholder="ABC25HBCYNHYMIFTN372NCKASUQPJCTBA66GLKXFYM3QGRP42IC5BYYF" --prompt="Enter an admin public key (generated by 'grlx auth pubkey'): > "))
if ! gum confirm "Add another admin public key?"; then
break
fi
done
fi
if [ -z "$CERTHOSTS" ]; then
CERTHOSTS=()
while true; do
CERTHOSTS+=($(gum input --placeholder="mydomain.com" --prompt="Enter a domain or IP to generate a certificate for: > "))
if ! gum confirm "Add another domain or IP?"; then
break
fi
done
fi
mkdir -p /etc/grlx
if [ -z "$FARMER_INTERFACE" ]; then
FARMER_INTERFACE=$(gum input --value="localhost" --prompt="Choose an interface for the farmer: > ")
fi
if [ -z "$FARMER_API_PORT" ]; then
FARMER_API_PORT=$(gum input --value=5405 --prompt="Choose a port for the farmer API: > ")
fi
if [ -z "$FARMER_BUS_PORT" ]; then
FARMER_BUS_PORT=$(gum input --value=5406 --prompt="Choose a port for the farmer bus: > ")
fi
if [ -z "$FARMER_ORGANIZATION" ]; then
FARMER_ORGANIZATION=$(gum input --value="Your Organization" --prompt="Choose an organization name for the farmer: > ")
fi
if [ -z "$ADMIN_PUBKEYS" ]; then
ADMIN_PUBKEYS=()
while true; do
ADMIN_PUBKEYS+=($(gum input --width=57 --placeholder="ABC25HBCYNHYMIFTN372NCKASUQPJCTBA66GLKXFYM3QGRP42IC5BYYF" --prompt="Enter an admin public key (generated by 'grlx auth pubkey'): > "))
if ! gum confirm "Add another admin public key?"; then
break
fi
done
fi
if [ -z "$CERTHOSTS" ]; then
CERTHOSTS=()
while true; do
CERTHOSTS+=($(gum input --placeholder="mydomain.com" --prompt="Enter a domain or IP to generate a certificate for: > "))
if ! gum confirm "Add another domain or IP?"; then
break
fi
done
fi
cat << EOF > /etc/grlx/farmer
cat << EOF > /etc/grlx/farmer
certhosts:
$(for host in "${CERTHOSTS[@]}"; do echo " - $host"; done)
certificatevalidtime: 8760h0m0s
@@ -135,9 +134,18 @@ pubkeys:
$(for key in "${ADMIN_PUBKEYS[@]}"; do echo " - $key"; done)
EOF
fi
PATH=$PATH:/usr/sbin:/usr/bin useradd -r -s /usr/sbin/nologin farmer >/dev/null || true
chown -R farmer:farmer /etc/grlx
chmod 700 /etc/grlx
systemctl daemon-reload
systemctl enable --now grlx-farmer
else
systemctl disable --now grlx-farmer
rm -f /usr/local/bin/gum
rm -f /etc/systemd/system/grlx-farmer.service
rm -f /usr/local/bin/grlx-farmer
rm -rf /etc/grlx
userdel farmer
fi
PATH=$PATH:/usr/sbin:/usr/bin useradd -r -s /usr/sbin/nologin farmer >/dev/null || true
chown -R farmer:farmer /etc/grlx
chmod 700 /etc/grlx
systemctl daemon-reload
systemctl enable --now grlx-farmer