From 5306489d726295bf5531f5a39d4fefb48082cd4d Mon Sep 17 00:00:00 2001 From: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com> Date: Tue, 11 Jan 2022 20:24:39 +0400 Subject: [PATCH] initialize server with IP and FQDN; specify FQDN as address if provided (#279) --- .../files/opt/simplex/on_login.sh | 5 +- .../scripts/03-init-start.sh | 5 +- scripts/smp-server-linode.sh | 48 +++++++++++++------ 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/scripts/smp-server-digitalocean-droplet/files/opt/simplex/on_login.sh b/scripts/smp-server-digitalocean-droplet/files/opt/simplex/on_login.sh index 499a72498..c7e63914e 100644 --- a/scripts/smp-server-digitalocean-droplet/files/opt/simplex/on_login.sh +++ b/scripts/smp-server-digitalocean-droplet/files/opt/simplex/on_login.sh @@ -1,13 +1,12 @@ #!/bin/bash fingerprint=$1 - -ip_address=$(hostname -I | awk '{print$1}') +server_address=$2 cat <> /root/.bashrc +echo "bash /opt/simplex/on_login.sh $fingerprint $ip_address" >> /root/.bashrc # / Create systemd service cat <> /etc/systemd/system/smp-server.service diff --git a/scripts/smp-server-linode.sh b/scripts/smp-server-linode.sh index 82a36b490..07a46f51a 100644 --- a/scripts/smp-server-linode.sh +++ b/scripts/smp-server-linode.sh @@ -1,8 +1,8 @@ #!/bin/bash -# -# -# +# +# +# # Log all stdout output to stackscript.log exec &> >(tee -i /var/log/stackscript.log) @@ -66,26 +66,43 @@ smp-server --version # Initialize server init_opts=() + [[ $ENABLE_STORE_LOG == "on" ]] && init_opts+=(-l) + +ip_address=$(curl ifconfig.me) +init_opts+=(--ip $ip_address) + +[[ -n "$FQDN" ]] && init_opts+=(-n $FQDN) + smp-server init "${init_opts[@]}" # Server fingerprint fingerprint=$(cat /etc/opt/simplex/fingerprint) -# On login script +# Determine server address for welcome script and tag +# ! If FQDN was provided and used as part of server initialization, client will not validate this server by IP address, +# ! so we have to specify FQDN for server address regardless of creation of A record in Linode +# ! https://hackage.haskell.org/package/x509-validation-1.6.10/docs/src/Data-X509-Validation.html#validateCertificateName +if [[ -n "$FQDN" ]]; then + server_address=$FQDN +else + server_address=$ip_address +fi + +# Set up welcome script on_login_script="/opt/simplex/on_login.sh" +# / Welcome script cat <> $on_login_script #!/bin/bash fingerprint=\$1 - -ip_address=\$(hostname -I | awk '{print\$1}') +server_address=\$2 cat <> /root/.bashrc +echo "bash $on_login_script $fingerprint $server_address" >> /root/.bashrc # Create A record and update Linode's tags -if [ ! -z "$API_TOKEN" ]; then - ip_address=$(curl ifconfig.me) - address=$ip_address - if [ ! -z "$FQDN" ]; then +if [[ -n "$API_TOKEN" ]]; then + if [[ -n "$FQDN" ]]; then domain_address=$(echo $FQDN | rev | cut -d "." -f 1,2 | rev) domain_id=$(curl -H "Authorization: Bearer $API_TOKEN" https://api.linode.com/v4/domains \ | jq --arg da "$domain_address" '.data[] | select( .domain == $da ) | .id') - if [[ ! -z $domain_id ]]; then + if [[ -n $domain_id ]]; then curl \ -s -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_TOKEN" \ -X POST -d "{\"type\":\"A\",\"name\":\"$FQDN\",\"target\":\"$ip_address\"}" \ https://api.linode.com/v4/domains/${domain_id}/records - address=$FQDN fi fi @@ -123,7 +138,7 @@ if [ ! -z "$API_TOKEN" ]; then curl \ -s -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_TOKEN" \ - -X PUT -d "{\"tags\":[\"$address\",\"#$fingerprint\",\"$version\"]}" \ + -X PUT -d "{\"tags\":[\"$server_address\",\"#$fingerprint\",\"$version\"]}" \ https://api.linode.com/v4/linode/instances/$LINODE_ID fi @@ -146,3 +161,6 @@ EOT chmod 644 /etc/systemd/system/smp-server.service sudo systemctl enable smp-server sudo systemctl start smp-server + +# Reboot Linode to apply upgrades +sudo reboot