summarylogtreecommitdiffstats
path: root/skywire-autoconfig
diff options
context:
space:
mode:
authorMoses Narrow2022-09-12 08:20:39 -0500
committerMoses Narrow2022-09-12 08:20:39 -0500
commitc23cdcd18f202ccb1e63637a7221d00d99afe6cb (patch)
tree4aa7b7b73e10eab6acb143277ec86d0bf71814ea /skywire-autoconfig
parent0920e0bb204b0347c06aa2de9ae1d709584d6f15 (diff)
downloadaur-c23cdcd18f202ccb1e63637a7221d00d99afe6cb.tar.gz
update to version 1.2.0
Diffstat (limited to 'skywire-autoconfig')
-rw-r--r--skywire-autoconfig220
1 files changed, 220 insertions, 0 deletions
diff --git a/skywire-autoconfig b/skywire-autoconfig
new file mode 100644
index 000000000000..f62ee4fc079d
--- /dev/null
+++ b/skywire-autoconfig
@@ -0,0 +1,220 @@
+#!/bin/bash
+#/opt/skywire/scripts/skywire-autoconfig
+#skywire autoconfiguration script for debian & archlinux packages
+#source the skyenv file if it exists - provided by the skybian package or the user
+[[ -f /etc/profile.d/skyenv.sh ]] && source /etc/profile.d/skyenv.sh
+#set NOAUTOCONFIG=true to avoid running the script in the postinstall
+if [[ ${NOAUTOCONFIG} == true ]]; then
+ #unset the env
+ NOAUTOCONFIG=''
+ echo "autoconfiguration disabled. to configure and start skywire run: skywire-autoconfig"
+ exit 0
+fi
+#check for root
+if [[ $EUID -ne 0 ]]; then
+ echo "root permissions required"
+ exit 1
+fi
+#grant network permissions to the vpn app binaries
+setcap cap_net_admin+ep /opt/skywire/apps/vpn-client
+setcap cap_net_admin+ep /opt/skywire/apps/vpn-server
+# determine if skywire is running via systemd
+if [[ $(ps -eo pid,comm,cgroup | grep skywire) == *"system.slice"* ]]; then
+WSYSTEMD=1
+fi
+#root portion of the configuration
+if [[ $DMSGPTYTERM -ne "1" ]] && [[ $WSYSTEMD -eq "1" ]]; then
+ #halt any running instance
+ systemctl is-active --quiet skywire-visor && systemctl disable --now skywire-visor 2> /dev/null
+ systemctl is-active --quiet skywire-hypervisor && systemctl disable --now skywire-hypervisor 2> /dev/null
+fi
+systemctl is-active --quiet skywire-autoconfig && systemctl disable skywire-autoconfig 2> /dev/null
+
+#make the logging of this script colorful
+_nc='\033[0m'
+_red='\033[0;31m'
+_green='\033[0;32m'
+_yellow='\033[0;33m'
+_blue='\033[1;34m'
+_purple='\033[0;35m'
+_cyan='\033[0;36m'
+_bold='\033[1m'
+##set the argument to pass into functions##
+_1=${1}
+#recreate pacman logging
+_msg2() {
+ (( QUIET )) && return
+ local mesg=$1; shift
+ printf "${_cyan} ->${_nc}${_bold} ${mesg}${_nc}\n" "$@"
+}
+_msg3() {
+(( QUIET )) && return
+local mesg=$1; shift
+printf "${_blue} -->${_nc}${BOLD} ${mesg}${_nc}\n" "$@"
+}
+_errmsg1() {
+ (( QUIET )) && return
+ local mesg=$1; shift
+ printf "${_red}>>> Error:${_nc}${_bold} ${mesg}${_nc}\n" "$@"
+}
+_warnmsg1() {
+ (( QUIET )) && return
+ local mesg=$1; shift
+ printf "${_red}>>> Warning:${_nc}${_bold} ${mesg}${_nc}\n" "$@"
+}
+_errmsg2() {
+ (( QUIET )) && return
+ local mesg=$1; shift
+ printf "${_red}>>> FATAL:${_bold} ${mesg}${_nc}\n" "$@"
+}
+#helpful text
+_welcome(){
+ if [[ $(uname -m) == *"arm"* ]]; then
+ _msg2 "register your public key:"
+ _msg2 "${_blue}https://whitelist.skycoin.com/${_nc}"
+ _msg2 "track uptime:"
+ _msg2 "${_blue}http://ut.skywire.skycoin.com/uptimes${_nc}"
+ fi
+ _msg2 "support:
+${_blue}https://t.me/skywire${_nc}"
+}
+#generate config as root
+_config_gen() {
+ # remove any existing symlink
+ [[ -f /opt/skywire/skywire-visor.json ]] && rm /opt/skywire/skywire-visor.json
+ #create by default the local hypervisor config if no config exists ; and retain any hypervisor config which exists
+ [[ (! -f /opt/skywire/skywire.json) || ($(cat /opt/skywire/skywire.json | grep -Po '"hypervisor":') != "") ]] && _is_hypervisor="-i"
+ #check for argument - remote pk or 0
+ # 0 as argument drops any remote hypervisors which were set in the configuration
+ # & triggers the creation of the local hyperisor configuration
+ if [[ ${_1} == "0" ]]; then
+ _retain_hv=""
+ unset _1
+ _is_hypervisor="-i"
+ fi
+ # 1 as argument drops remote hypervisors and does not create the local hv config
+ if [[ ${_1} == "1" ]]; then
+ _retain_hv=""
+ unset _1
+ _is_hypervisor=""
+ fi
+ # create the flag to set the remote hypervisor(s)
+ if [[ ! -z ${_1} ]]; then
+ _retain_hv=""
+ _hvpks="--hvpks ${_1}" #shorthand flag: -j
+ _is_hypervisor=""
+ fi
+ ##generate (hyper)visor configuration##
+ # show config gen command used
+ _msg3 "Generating skywire config with command:
+${_cyan}skywire-cli ${_yellow}config gen -bepr ${_retain_hv} ${_is_hypervisor} ${_public_rpc} ${_vpn_server} ${_test_env} ${_hvpks} ${_no_autoconnect} ${_is_public_visor}${_nc}"
+ skywire-cli config gen -bepr ${_retain_hv} ${_is_hypervisor} ${_public_rpc} ${_vpn_server} ${_test_env} ${_hvpks} ${_no_autoconnect} ${_is_public_visor} >> /dev/null 2>&1
+ if [[ ${?} != 0 ]]; then
+ #print the error!
+ skywire-cli config gen -bepr ${_retain_hv} ${_is_hypervisor} ${_public_rpc} ${_vpn_server} ${_test_env} ${_hvpks} ${_no_autoconnect} ${_is_public_visor}
+ _err=$?
+ _errmsg2 "error generating skywire config"
+ exit ${_err}
+ fi
+ #logging check
+ if [[ -f /opt/skywire/skywire.json ]]; then
+ _msg3 "${_blue}Skywire${_nc} configuration updated
+config path: ${_purple}/opt/skywire/skywire.json${_nc}"
+ if [[ ! -f /etc/skywire-config.json ]]; then
+ _msg2 "backing up configuration to /etc/skywire-config.json"
+ cp -b /opt/skywire/skywire.json /etc/skywire-config.json
+ fi
+ else
+ _errmsg2 "expected config file not found at /opt/skywire/skywire.json"
+ exit 100
+ fi
+}
+
+#only use public rpc flag with env PUBLICRPC=1
+if [[ ( ${PUBLICRPC} -eq "1") ]]; then
+ _public_rpc="--publicrpc "
+fi
+#use public flag with env VISORISPUBLIC=1
+if [[ ( ${VISORISPUBLIC} -eq "1") ]]; then
+ _is_public_visor="--public "
+fi
+#use public flag with env NOAUTOCONNECT=1
+if [[ ( ${NOAUTOCONNECT} -eq "1") ]]; then
+ _no_autoconnect="--autoconn "
+fi
+#enable VPN server automatically on config re-gen with env VPNSERVER=1
+if [[ ${VPNSERVER} -eq "1" ]]; then
+ _vpn_server="--servevpn "
+fi
+#default to retaining hypervisors already set
+_retain_hv="-x"
+#use test deployment instead of production with env TESTENV=1
+if [[ ${TESTENV} -eq "1" ]]; then
+ _test_env="--testenv"
+fi
+#check if >>this script<< is a child process of the systemd service i.e.: run in dmsgpty terminal
+if [[ "${SYSTEMDCHILD}" -ne "1" ]]; then
+ _now="--now"
+fi
+
+#root portion of the config
+_msg2 "Configuring skywire"
+#attempt to import config if none exists - i.e. import skybian config or restore config
+if [[ ! -f /opt/skywire/skywire.json ]]; then
+ if [[ -f /etc/skywire-config.json ]]; then
+ _warnmsg1 "Importing configuration from /etc/skywire-config.json"
+ cp -b /etc/skywire-config.json /opt/skywire/skywire.json
+ fi
+fi
+#config generation
+_config_gen
+_svc=skywire
+if [[ $SKYBIAN == "true" ]]; then
+ _msg3 "Enabling ${_svc} service${_now/--/ and starting }..
+ systemctl enable ${_now} ${_svc}.service"
+systemctl enable ${_now} ${_svc}.service 2> /dev/null
+fi
+if [[ $DMSGPTYTERM == "1" ]]; then
+ if [[ ${_now} != "--now" ]]; then
+ _msg3 "Please restart ${_svc} service manually:
+ ${_red}systemctl restart ${_svc} 2> /dev/null${_nc}"
+ exit 0
+ else
+ _msg3 "Please shut down your visor and start it again with:
+ ${_red}systemctl start ${_svc} 2> /dev/null${_nc}"
+ exit 0
+ fi
+fi
+#restart the service
+ systemctl is-active --quiet ${_svc} && _msg3 "Restarting skywire.service..." && systemctl restart ${_svc} 2> /dev/null
+if ! systemctl is-active --quiet ${_svc} >/dev/null; then
+ _msg2 "Start the skywire service with:
+ ${_red}systemctl start ${_svc}${_nc}"
+ exit 0
+fi
+_pubkey=$(skywire-cli visor pk -p | tail -n1)
+_msg2 "Visor Public Key:
+${_green}${_pubkey}${_nc}"
+if [[ $_is_hypervisor == "-i" ]]; then
+ if [[ $(ps -o comm= -p $PPID) != "sshd" ]]; then
+ _msg2 "Starting now on:\n${_red}http://127.0.0.1:8000${_nc}"
+ _vpnurl=$(skywire-cli vpn url -p)
+ _msg2 "Use the vpn:\n${_red}${_vpnurl}${_nc}"
+ fi
+ _hpvurl="Access hypervisor UI from local network here:"
+ _lanips="$(ip addr show | grep -w inet | grep -v 127.0.0.1 | awk '{ print $2}' | cut -d "/" -f 1)"
+ for _lanip in $_lanips
+ do
+ _hpvurl+="\n${_yellow}http://${_lanip}:8000${_nc}"
+ done
+
+ _msg2 "$_hpvurl"
+ _welcome
+ _msg2 "run the following command on OTHER NODES to set this one as the hypervisor:"
+ echo -e "${_cyan}skywire-autoconfig ${_yellow}${_pubkey}${_nc}"
+ _msg2 "to see this text again run: ${_cyan}skywire-autoconfig${_nc}"
+else
+ _msg2 "${_blue}Skywire${_nc} starting in visor mode"
+ _msg2 "Visor Public Key: ${_green}${_pubkey}${_nc}"
+ _welcome
+fi