add v0.0.11

This commit is contained in:
2023-11-03 16:21:47 -07:00
parent 408e9202a3
commit dc809bc4c1
5 changed files with 244 additions and 29 deletions

View File

@@ -81,17 +81,17 @@ EOF
fi fi
mkdir -p /etc/grlx mkdir -p /etc/grlx
if [ -z "$FARMER_INTERFACE" ]; then if [ -z "$FARMERINTERFACE" ]; then
FARMER_INTERFACE=$(gum input --value="localhost" --prompt="Choose an interface for the farmer: > ") FARMERINTERFACE=$(gum input --value="localhost" --prompt="Choose an interface for the farmer: > ")
fi fi
if [ -z "$FARMER_API_PORT" ]; then if [ -z "$FARMERAPIPORT" ]; then
FARMER_API_PORT=$(gum input --value=5405 --prompt="Choose a port for the farmer API: > ") FARMERAPIPORT=$(gum input --value=5405 --prompt="Choose a port for the farmer API: > ")
fi fi
if [ -z "$FARMER_BUS_PORT" ]; then if [ -z "$FARMERBUSPORT" ]; then
FARMER_BUS_PORT=$(gum input --value=5406 --prompt="Choose a port for the farmer bus: > ") FARMERBUSPORT=$(gum input --value=5406 --prompt="Choose a port for the farmer bus: > ")
fi fi
if [ -z "$FARMER_ORGANIZATION" ]; then if [ -z "$FARMERORGANIZATION" ]; then
FARMER_ORGANIZATION=$(gum input --value="Your Organization" --prompt="Choose an organization name for the farmer: > ") FARMERORGANIZATION=$(gum input --value="Your Organization" --prompt="Choose an organization name for the farmer: > ")
fi fi
if [ -z "$ADMIN_PUBKEYS" ]; then if [ -z "$ADMIN_PUBKEYS" ]; then
ADMIN_PUBKEYS=() ADMIN_PUBKEYS=()
@@ -102,10 +102,10 @@ EOF
fi fi
done done
fi fi
if [ -z "$CERTHOSTS" ]; then if [ -z "$CERT_HOSTS" ]; then
CERTHOSTS=() CERT_HOSTS=()
while true; do while true; do
CERTHOSTS+=($(gum input --placeholder="mydomain.com" --prompt="Enter a domain or IP to generate a certificate for: > ")) CERT_HOSTS+=($(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 if ! gum confirm "Add another domain or IP?"; then
break break
fi fi
@@ -115,18 +115,17 @@ EOF
cat << EOF > /etc/grlx/farmer cat << EOF > /etc/grlx/farmer
certhosts: certhosts:
$(for host in "${CERTHOSTS[@]}"; do echo " - $host"; done) $(for host in "${CERT_HOSTS[@]}"; do echo " - $host"; done)
certificatevalidtime: 8760h0m0s certificatevalidtime: 8760h0m0s
configroot: /etc/grlx/ configroot: /etc/grlx/
farmerapiport: "$FARMER_API_PORT" farmerapiport: "$FARMERAPIPORT"
farmerbusport: "$FARMER_BUS_PORT" farmerbusport: "$FARMERBUSPORT"
farmerinterface: $FARMER_INTERFACE farmerinterface: $FARMERINTERFACE
farmerpki: /etc/grlx/pki/farmer/ farmerpki: /etc/grlx/pki/farmer/
farmerurl: https://$FARMER_INTERFACE:$FARMER_API_PORT
keyfile: /etc/grlx/pki/farmer/tls-key.pem keyfile: /etc/grlx/pki/farmer/tls-key.pem
nkeyfarmerprivfile: /etc/grlx/pki/farmer/farmer.nkey nkeyfarmerprivfile: /etc/grlx/pki/farmer/farmer.nkey
nkeyfarmerpubfile: /etc/grlx/pki/farmer/farmer.nkey.pub nkeyfarmerpubfile: /etc/grlx/pki/farmer/farmer.nkey.pub
organization: $FARMER_ORGANIZATION organization: $FARMERORGANIZATION
rootca: /etc/grlx/pki/farmer/tls-rootca.pem rootca: /etc/grlx/pki/farmer/tls-rootca.pem
rootcapriv: /etc/grlx/pki/farmer/tls-rootca-key.pem rootcapriv: /etc/grlx/pki/farmer/tls-rootca-key.pem
pubkeys: pubkeys:

View File

@@ -24,27 +24,26 @@ esac
if [ ! -f /etc/grlx/sprout ]; then if [ ! -f /etc/grlx/sprout ]; then
mkdir -p /etc/grlx mkdir -p /etc/grlx
if [ -z "$FARMER_INTERFACE" ]; then if [ -z "$FARMERINTERFACE" ]; then
echo "FARMER_INTERFACE is not set. Please set it to the domain or IP of your farmer." echo "FARMERINTERFACE is not set. Please set it to the domain or IP of your farmer."
exit 1 exit 1
fi fi
if [ -z "$FARMER_API_PORT" ]; then if [ -z "$FARMERAPIPORT" ]; then
FARMER_PORT=5405 FARMERPORT=5405
fi fi
if [ -z "$FARMER_BUS_PORT" ]; then if [ -z "$FARMERBUSPORT" ]; then
FARMER_PORT=5406 FARMERPORT=5406
fi fi
cat << EOF > /etc/grlx/sprout cat << EOF > /etc/grlx/sprout
farmerinterface: $FARMER_INTERFACE farmerinterface: $FARMERINTERFACE
farmerbusport: $FARMER_BUS_PORT farmerbusport: $FARMERBUSPORT
farmerapiport: $FARMER_API_PORT farmerapiport: $FARMERAPIPORT
farmerurl: https://$FARMER_INTERFACE:$FARMER_PORT
EOF EOF
fi fi
chmod 600 /etc/grlx/sprout chmod 600 /etc/grlx/sprout
curl -s "https://artifacts.grlx.dev/linux/${machine_arch}/v0.0.10/sprout" > /usr/local/bin/grlx-sprout curl -s "https://artifacts.grlx.dev/linux/${machine_arch}/v0.0.11/sprout" > /usr/local/bin/grlx-sprout
chmod +x /usr/local/bin/grlx-sprout chmod +x /usr/local/bin/grlx-sprout
cat << EOF > /etc/systemd/system/grlx-sprout.service cat << EOF > /etc/systemd/system/grlx-sprout.service

View File

@@ -39,7 +39,6 @@ if [ ! -f /etc/grlx/sprout ]; then
farmerinterface: $FARMER_INTERFACE farmerinterface: $FARMER_INTERFACE
farmerbusport: $FARMER_BUS_PORT farmerbusport: $FARMER_BUS_PORT
farmerapiport: $FARMER_API_PORT farmerapiport: $FARMER_API_PORT
farmerurl: https://$FARMER_INTERFACE:$FARMER_PORT
EOF EOF
fi fi
chmod 600 /etc/grlx/sprout chmod 600 /etc/grlx/sprout

150
v0.0.11/farmer Executable file
View File

@@ -0,0 +1,150 @@
#!/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
"x86_64")
machine_arch="amd64"
;;
"i686"|"i386")
machine_arch="386"
;;
"aarch64"|"arm64"|"armv8")
machine_arch="arm64"
;;
"armv7l")
machine_arch="arm"
;;
*)
echo "Unknown machine architecture: $arch"
exit 1
;;
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.10/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
[Unit]
Description=grlx farmer
Documentation=https://docs.grlx.dev
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/grlx-farmer
Restart=always
RestartSec=30
User=farmer
Group=farmer
[Install]
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"
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
mkdir -p /etc/grlx
if [ -z "$FARMERINTERFACE" ]; then
FARMERINTERFACE=$(gum input --value="localhost" --prompt="Choose an interface for the farmer: > ")
fi
if [ -z "$FARMERAPIPORT" ]; then
FARMERAPIPORT=$(gum input --value=5405 --prompt="Choose a port for the farmer API: > ")
fi
if [ -z "$FARMERBUSPORT" ]; then
FARMERBUSPORT=$(gum input --value=5406 --prompt="Choose a port for the farmer bus: > ")
fi
if [ -z "$FARMERORGANIZATION" ]; then
FARMERORGANIZATION=$(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 "$CERT_HOSTS" ]; then
CERT_HOSTS=()
while true; do
CERT_HOSTS+=($(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
certhosts:
$(for host in "${CERT_HOSTS[@]}"; do echo " - $host"; done)
certificatevalidtime: 8760h0m0s
configroot: /etc/grlx/
farmerapiport: "$FARMERAPIPORT"
farmerbusport: "$FARMERBUSPORT"
farmerinterface: $FARMERINTERFACE
farmerpki: /etc/grlx/pki/farmer/
keyfile: /etc/grlx/pki/farmer/tls-key.pem
nkeyfarmerprivfile: /etc/grlx/pki/farmer/farmer.nkey
nkeyfarmerpubfile: /etc/grlx/pki/farmer/farmer.nkey.pub
organization: $FARMERORGANIZATION
rootca: /etc/grlx/pki/farmer/tls-rootca.pem
rootcapriv: /etc/grlx/pki/farmer/tls-rootca-key.pem
pubkeys:
admin:
$(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

68
v0.0.11/sprout Executable file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/env bash
set -e -o pipefail
arch=$(uname -m)
case $arch in
"x86_64")
machine_arch="amd64"
;;
"i686"|"i386")
machine_arch="x86"
;;
"aarch64"|"arm64"|"armv8")
machine_arch="arm64"
;;
"armv7l")
machine_arch="arm"
;;
*)
echo "Unknown machine architecture: $arch"
exit 1
;;
esac
if [ ! -f /etc/grlx/sprout ]; then
mkdir -p /etc/grlx
if [ -z "$FARMERINTERFACE" ]; then
echo "FARMERINTERFACE is not set. Please set it to the domain or IP of your farmer."
exit 1
fi
if [ -z "$FARMERAPIPORT" ]; then
FARMERPORT=5405
fi
if [ -z "$FARMERBUSPORT" ]; then
FARMERPORT=5406
fi
cat << EOF > /etc/grlx/sprout
farmerinterface: $FARMERINTERFACE
farmerbusport: $FARMERBUSPORT
farmerapiport: $FARMERAPIPORT
EOF
fi
chmod 600 /etc/grlx/sprout
curl -s "https://artifacts.grlx.dev/linux/${machine_arch}/v0.0.11/sprout" > /usr/local/bin/grlx-sprout
chmod +x /usr/local/bin/grlx-sprout
cat << EOF > /etc/systemd/system/grlx-sprout.service
[Unit]
Description=grlx sprout
Documentation=https://docs.grlx.dev
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/grlx-sprout
Restart=always
RestartSec=30
User=root
Group=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now grlx-sprout