mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 10:51:36 -04:00
108 lines
3.7 KiB
Bash
Executable file
108 lines
3.7 KiB
Bash
Executable file
#! /usr/bin/env bash
|
|
# Installs any new dependencies of the App and API. Uses internet.
|
|
|
|
set -e
|
|
set -x
|
|
|
|
# Ensure help service is always restarted, but preserve exit code
|
|
cleanup() {
|
|
local exit_code=$?
|
|
systemctl restart wrolpi-help.service || :
|
|
exit $exit_code
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# Install any App dependencies.
|
|
cd /opt/wrolpi/app || exit 1
|
|
npm install || npm install || npm install || npm install # try install multiple times :(
|
|
|
|
# Install/upgrade Deno runtime.
|
|
upgrade_deno() {
|
|
DENO_VERSION="v2.2.4"
|
|
ARCH=$(uname -m)
|
|
if [ "$ARCH" = "aarch64" ]; then
|
|
DENO_ARCH="aarch64-unknown-linux-gnu"
|
|
elif [ "$ARCH" = "x86_64" ]; then
|
|
DENO_ARCH="x86_64-unknown-linux-gnu"
|
|
else
|
|
echo "Unsupported architecture for Deno: $ARCH"
|
|
return 1
|
|
fi
|
|
|
|
# Check if Deno is already installed at the correct version.
|
|
if command -v deno &> /dev/null; then
|
|
CURRENT_VERSION=$(deno --version | head -n1 | awk '{print "v"$2}')
|
|
if [ "$CURRENT_VERSION" = "$DENO_VERSION" ]; then
|
|
echo "Deno ${DENO_VERSION} already installed"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "Installing Deno ${DENO_VERSION} for ${ARCH}..."
|
|
curl -fsSL "https://github.com/denoland/deno/releases/download/${DENO_VERSION}/deno-${DENO_ARCH}.zip" -o /tmp/deno.zip
|
|
unzip -o /tmp/deno.zip -d /usr/local/bin/
|
|
chmod +x /usr/local/bin/deno
|
|
rm /tmp/deno.zip
|
|
deno --version
|
|
}
|
|
|
|
upgrade_deno || echo "Deno upgrade failed, continuing..."
|
|
|
|
# Clear Python bytecode cache before upgrading packages.
|
|
echo "Clearing Python bytecode cache..."
|
|
find /opt/wrolpi/venv -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || :
|
|
find /opt/wrolpi/venv -name "*.pyc" -delete 2>/dev/null || :
|
|
|
|
# Install any new Python requirements.
|
|
/opt/wrolpi/venv/bin/pip3 install --upgrade -r /opt/wrolpi/requirements.txt
|
|
# Upgrade the WROLPi database.
|
|
(cd /opt/wrolpi && /opt/wrolpi/venv/bin/python3 /opt/wrolpi/main.py db upgrade)
|
|
|
|
# Upgrade Controller
|
|
upgrade_controller() {
|
|
echo "Upgrading WROLPi Controller..."
|
|
|
|
# Stop Controller during upgrade
|
|
systemctl stop wrolpi-controller || true
|
|
|
|
# Create Controller venv if it doesn't exist
|
|
if [ ! -d /opt/wrolpi/controller/venv ]; then
|
|
echo "Creating Controller virtual environment..."
|
|
python3 -m venv /opt/wrolpi/controller/venv
|
|
fi
|
|
|
|
# Clear bytecode cache before upgrading.
|
|
find /opt/wrolpi/controller/venv -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || :
|
|
find /opt/wrolpi/controller/venv -name "*.pyc" -delete 2>/dev/null || :
|
|
|
|
# Update dependencies
|
|
echo "Updating Controller dependencies..."
|
|
/opt/wrolpi/controller/venv/bin/pip install --upgrade pip
|
|
/opt/wrolpi/controller/venv/bin/pip install --upgrade -r /opt/wrolpi/controller/requirements.txt
|
|
|
|
# Start the Controller.
|
|
systemctl daemon-reload
|
|
systemctl start wrolpi-controller
|
|
}
|
|
|
|
upgrade_controller || echo "Controller upgrade failed, continuing..."
|
|
|
|
# Upgrade WROLPi Help.
|
|
/opt/wrolpi/scripts/install_help_service.sh || echo "Help install failed."
|
|
|
|
# Get map db blob, if it is missing.
|
|
MAP_DB_BLOB=/opt/wrolpi-blobs/map-db-gis.dump
|
|
if [[ ! -f ${MAP_DB_BLOB} || ! -s ${MAP_DB_BLOB} ]]; then
|
|
echo "Downloading new map blob (1.2 GB)..."
|
|
wget https://wrolpi.nyc3.cdn.digitaloceanspaces.com/map-db-gis.dump -O ${MAP_DB_BLOB}
|
|
fi
|
|
if [[ -f /opt/wrolpi-blobs/gis-map.dump.gz && -s ${MAP_DB_BLOB} ]]; then
|
|
# Remove old blob now that we have the new one.
|
|
rm /opt/wrolpi-blobs/gis-map.dump.gz
|
|
fi
|
|
|
|
# Migrate map DB if necessary. Do this before repair because it will reset map if map db is empty.
|
|
/opt/wrolpi/wrolpi/scripts/migrate_map_db.sh || echo "Map DB migration failed."
|
|
|
|
# Install any configs, restart services.
|
|
/opt/wrolpi/repair.sh
|