diff options
author | Moses Narrow | 2022-09-12 08:20:39 -0500 |
---|---|---|
committer | Moses Narrow | 2022-09-12 08:20:39 -0500 |
commit | c23cdcd18f202ccb1e63637a7221d00d99afe6cb (patch) | |
tree | 4aa7b7b73e10eab6acb143277ec86d0bf71814ea /skywire-autoconfig | |
parent | 0920e0bb204b0347c06aa2de9ae1d709584d6f15 (diff) | |
download | aur-c23cdcd18f202ccb1e63637a7221d00d99afe6cb.tar.gz |
update to version 1.2.0
Diffstat (limited to 'skywire-autoconfig')
-rw-r--r-- | skywire-autoconfig | 220 |
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 |