|
| 1 | +#!/bin/bash |
| 2 | +# thx flyingsausages and swizzin team |
| 3 | +export user=$(whoami) |
| 4 | +mkdir -p $HOME/.logs/ |
| 5 | +touch $HOME/.logs/maintainerr.log |
| 6 | +export log="$HOME/.logs/maintainerr.log" |
| 7 | + |
| 8 | +function _deps() { |
| 9 | + ## Function for installing nvm. |
| 10 | + if [[ ! -d $HOME/.nvm ]]; then |
| 11 | + echo "Installing node" |
| 12 | + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash >> "$log" 2>&1 |
| 13 | + echo "nvm installed." |
| 14 | + else |
| 15 | + echo "nvm is already installed." |
| 16 | + fi |
| 17 | + export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" |
| 18 | + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm |
| 19 | + nvm install --lts >> "$log" 2>&1 || { |
| 20 | + echo "node failed to install" |
| 21 | + exit 1 |
| 22 | + } |
| 23 | + echo "Node LTS installed." |
| 24 | + echo "Installing Yarn" |
| 25 | + npm install -g yarn >> "$log" 2>&1 || { |
| 26 | + echo "Yarn failed to install" |
| 27 | + exit 1 |
| 28 | + } |
| 29 | + echo "Yarn installed." |
| 30 | +} |
| 31 | + |
| 32 | +function _maintainerr_install() { |
| 33 | + echo "Downloading and extracting source code" |
| 34 | + mkdir -p "$HOME/.tmp" |
| 35 | + dlurl="$(curl -sS https://api.github.com/repos/jorenn92/Maintainerr/releases/latest | jq .tarball_url -r)" |
| 36 | + |
| 37 | + wget "$dlurl" -q -O /home/${user}/.tmp/maintainerr.tar.gz >> "$log" 2>&1 || { |
| 38 | + echo "Download failed" |
| 39 | + exit 1 |
| 40 | + } |
| 41 | + |
| 42 | + mkdir -p $HOME/Maintainerr |
| 43 | + tar --strip-components=1 -C $HOME/Maintainerr -xzvf $HOME/.tmp/maintainerr.tar.gz >> "$log" 2>&1 |
| 44 | + rm $HOME/.tmp/maintainerr.tar.gz |
| 45 | + echo "Code extracted" |
| 46 | + |
| 47 | + cd $HOME/Maintainerr || { |
| 48 | + echo "unable to cd into Maintainerr. Exiting!" |
| 49 | + exit 1 |
| 50 | + } |
| 51 | + |
| 52 | + echo "Installing dependencies via yarn" |
| 53 | + export TMPDIR=$HOME/.tmp/ |
| 54 | + |
| 55 | + corepack install >> "$log" 2>&1 |
| 56 | + corepack enable >> "$log" 2>&1 |
| 57 | + |
| 58 | + yarn --immutable --network-timeout 99999999 >> "$log" 2>&1 || { |
| 59 | + echo "Failed to install dependencies" |
| 60 | + exit 1 |
| 61 | + } |
| 62 | + yarn add sharp >> "$log" 2>&1 |
| 63 | + echo "Dependencies installed" |
| 64 | + serverPort=$(_port 6000 8000) |
| 65 | + |
| 66 | + echo "Changing server port to $serverPort before build." |
| 67 | + sed -i "s|3001|$serverPort|g" ./ui/next.config.js |
| 68 | + sed -i "s|3001|$serverPort|g" ./server/src/main.ts |
| 69 | + sed -i "s|3001|$serverPort|g" ./server/src/modules/api/internal-api/internal-api.service.ts |
| 70 | + |
| 71 | + echo "Building Maintainerr Server" |
| 72 | + yarn build:server >> "$log" 2>&1 || { |
| 73 | + echo "Failed to build Maintainerr server" |
| 74 | + exit 1 |
| 75 | + } |
| 76 | + |
| 77 | + echo "Building Maintainerr UI. Get a coffee." |
| 78 | + yarn build:ui >> "$log" 2>&1 || { |
| 79 | + echo "Failed to build Maintainerr ui" |
| 80 | + exit 1 |
| 81 | + } |
| 82 | + |
| 83 | + # Optional Docs |
| 84 | + # yarn docs-generate |
| 85 | + # rm -rf ./docs |
| 86 | + |
| 87 | + echo "Succesfully built" |
| 88 | + echo "Cleaning up" |
| 89 | + |
| 90 | + # Prep for data dir (it doesn't make this itself) |
| 91 | + mkdir -p "$HOME/Maintainerr/data" |
| 92 | +} |
| 93 | + |
| 94 | +function _port() { |
| 95 | + LOW_BOUND=$1 |
| 96 | + UPPER_BOUND=$2 |
| 97 | + comm -23 <(seq "${LOW_BOUND}" "${UPPER_BOUND}" | sort) <(ss -Htan | awk '{print $4}' | cut -d':' -f2 | sort -u) | shuf | head -n 1 |
| 98 | +} |
| 99 | + |
| 100 | +function _service() { |
| 101 | + # Create neccesary service dirs |
| 102 | + mkdir -p "$HOME/.config/systemd/user/" |
| 103 | + mkdir -p "$HOME/.install/" |
| 104 | + mkdir -p "$HOME/.config/Maintainerr/" |
| 105 | + cat > $HOME/.config/systemd/user/maintainerr-server.service << EOF |
| 106 | +[Unit] |
| 107 | +Description=Maintainerr UI Service |
| 108 | +Wants=network-online.target |
| 109 | +After=network-online.target |
| 110 | +[Service] |
| 111 | +Environment=NODE_VERSION=$(node -v | cut -d "v" -f 2 | cut -d "." -f 1) |
| 112 | +Environment=TMPDIR=$HOME/.tmp/ |
| 113 | +Type=exec |
| 114 | +Restart=on-failure |
| 115 | +WorkingDirectory=$HOME/Maintainerr/server |
| 116 | +ExecStart=$HOME/.nvm/versions/node/v20.13.1/bin/node dist/main |
| 117 | +[Install] |
| 118 | +WantedBy=default.target |
| 119 | +EOF |
| 120 | + |
| 121 | + |
| 122 | + port=$(_port 1000 18000) |
| 123 | + cat > $HOME/.config/systemd/user/maintainerr-ui.service << EOU |
| 124 | +[Unit] |
| 125 | +Description=Maintainerr UI Service |
| 126 | +Wants=network-online.target |
| 127 | +After=network-online.target |
| 128 | +[Service] |
| 129 | +Environment=NODE_VERSION=$(node -v | cut -d "v" -f 2 | cut -d "." -f 1) |
| 130 | +Environment=NODE_ENV=production |
| 131 | +Environment=TMPDIR=$HOME/.tmp |
| 132 | +Type=exec |
| 133 | +Restart=on-failure |
| 134 | +WorkingDirectory=$HOME/Maintainerr/ui/ |
| 135 | +ExecStart=$HOME/.nvm/nvm-exec yarn next start -p $port |
| 136 | +[Install] |
| 137 | +WantedBy=default.target |
| 138 | +EOU |
| 139 | + |
| 140 | + systemctl --user daemon-reload |
| 141 | + systemctl --user enable --now -q maintainerr-server |
| 142 | + systemctl --user enable --now -q maintainerr-ui |
| 143 | + |
| 144 | + touch $HOME/.install/.maintainerr.lock |
| 145 | + echo "Maintainerr is up and running on http://$(hostname -f):$port" |
| 146 | + |
| 147 | +} |
| 148 | + |
| 149 | +function _remove() { |
| 150 | + systemctl --user disable --now maintainerr-ui |
| 151 | + systemctl --user disable --now maintainerr-server |
| 152 | + sleep 2 |
| 153 | + rm -rf $HOME/maintainerr |
| 154 | + rm -rf $HOME/.config/maintainerr |
| 155 | + rm -rf $HOME/.config/systemd/user/maintainerr-ui.service |
| 156 | + rm -rf $HOME/.config/systemd/user/maintainerr-server.service |
| 157 | + rm -rf $HOME/.install/.maintainerr.lock |
| 158 | +} |
| 159 | + |
| 160 | +echo 'This is unsupported software. You will not get help with this, please answer `yes` if you understand and wish to proceed' |
| 161 | +if [[ -z ${eula} ]]; then |
| 162 | + read -r eula |
| 163 | +fi |
| 164 | + |
| 165 | +if ! [[ $eula =~ yes ]]; then |
| 166 | + echo "You did not accept the above. Exiting..." |
| 167 | + exit 1 |
| 168 | +else |
| 169 | + echo "Proceeding with installation" |
| 170 | +fi |
| 171 | + |
| 172 | +echo "Welcome to the Maintainerr installer..." |
| 173 | +echo "" |
| 174 | +echo "What do you like to do?" |
| 175 | +echo "" |
| 176 | +echo "install = Install Maintainerr" |
| 177 | +echo "uninstall = Completely removes Maintainerr" |
| 178 | +echo "exit = Exits Installer" |
| 179 | +while true; do |
| 180 | + read -r -p "Enter it here: " choice |
| 181 | + case $choice in |
| 182 | + "install") |
| 183 | + clear |
| 184 | + _deps |
| 185 | + _maintainerr_install |
| 186 | + _service |
| 187 | + break |
| 188 | + ;; |
| 189 | + "uninstall") |
| 190 | + _remove |
| 191 | + break |
| 192 | + ;; |
| 193 | + "exit") |
| 194 | + break |
| 195 | + ;; |
| 196 | + *) |
| 197 | + echo "Unknown Option." |
| 198 | + ;; |
| 199 | + esac |
| 200 | +done |
| 201 | +exit |
0 commit comments