forge (3092B)
1 #!/usr/bin/env bash 2 # 3 # ████ 4 # ░██░ █████ 5 # ██████ ██████ ██████ ██░░░██ █████ 6 # ░░░██░ ██░░░░██░░██░░█░██ ░██ ██░░░██ 7 # ░██ ░██ ░██ ░██ ░ ░░██████░███████ 8 # ░██ ░██ ░██ ░██ ░░░░░██░██░░░░ 9 # ░██ ░░██████ ░███ █████ ░░██████ 10 # ░░ ░░░░░░ ░░░ ░░░░░ ░░░░░░ 11 # 12 # author ▓▒ pyratebeard <root@pyratebeard.net> 13 # code ▓▒ https://git.pyratebeard.net/setup 14 # usage ▓▒ curl -L https://s.rum.sh/forge > forge && chmod +x forge && ./forge 15 16 # ▓▓▒░ vars 17 EMAIL="root@pyratebeard.net" 18 19 # ▓▓▒░ functions 20 function _echo() { printf "\n╓───── %s \n╙────────────────────────────────────── ─ ─ \n" "$1"; } 21 22 [ "$(id -u)" -ne 0 ] && { 23 _echo "got root?" >&2 24 exit 1 25 } 26 27 mkdir -p /run/forge 28 29 # ▓▓▒░ vault 30 _echo "enter domain" 31 read DOMAIN 32 echo "$(hostname -s).${DOMAIN}" > /etc/hostname 33 34 # ▓▓▒░ bitwarden creds 35 _echo "enter bitwarden creds" 36 echo "client id" 37 read BW_CLIENTID 38 export BW_CLIENTID 39 echo "client secret" 40 read BW_CLIENTSECRET 41 export BW_CLIENTSECRET 42 echo "password" 43 read BW_PASSWORD 44 export BW_PASSWORD 45 46 # ▓▓▒░ locale 47 _echo "setting up locales" 48 locale-gen "en_US.UTF-8" 49 localectl set-locale en_US.UTF-8 50 dpkg-reconfigure -f noninteractive locales 51 systemctl daemon-reload 52 53 # ▓▓▒░ packages 54 _echo "installing runtime deps" 55 apt-get update && apt-get install -y ansible curl git sudo unzip jq 56 57 # ▓▓▒░ install collection for bitwarden lookup 58 LC_ALL=en_US.UTF-8 ansible-galaxy collection install community.general 59 60 # ▓▓▒░ bitwarden 61 _echo "bitwarden setup" 62 curl -sL -o /run/forge/bw.zip "https://vault.bitwarden.com/download/?app=cli&platform=linux" && \ 63 unzip -d /usr/local/bin /run/forge/bw.zip 64 bw login --apikey 65 export BW_SESSION=$(bw unlock --passwordenv BW_PASSWORD --raw) 66 BW_STATUS=$(bw status | jq -r '.status') 67 [ ${BW_STATUS} == "unlocked" ] || { 68 echo unlock failed 69 export BW_SESSION=$(bw unlock --raw) 70 } 71 72 # ▓▓▒░ pull play 73 _echo "cloning repo" 74 git clone git://git.pyratebeard.net/setup.git /run/forge/setup && \ 75 pushd /run/forge/setup 76 77 _echo "let's play" 78 LC_ALL=en_US.UTF-8 ansible-playbook playbook.yml 79 80 _echo "forge complete" 81 LIP=$(ip a s $(ip r | grep default | grep -oP '(?<=dev )[^ ]*') | awk '/inet\ / {print $2}' | awk -F/ '{print $1}') 82 RIP=$(dig -4 ip @dns.toys | awk '/^ip./ {print $NF}' | tr -d '"') 83 echo "local addr: $LIP" 84 echo "remote addr: $RIP" 85 86 _echo "cleanup" 87 bw logout 88 rm -rf /usr/local/bin/bw &>/dev/null 89 srm -drvl /usr/dwarf/.config/Bitwarden\ CLI &>/dev/null 90 srm -drvl /etc/ssh/hostca-* &>/dev/null 91 srm -dvrl /run/forge/ &>/dev/null 92 srm -dvrl "$0" &>/dev/null 93 reboot