pretendo-docker/setup.sh
Matthew Lopez 6290a7f269
Switch to running the Postgres init script manually during setup
This should hopefully fix the issue where some people run the setup script but no Postgres databases get created.
2024-07-13 19:54:25 -04:00

124 lines
5.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
check_prerequisites() {
prerequisites_failed=
prerequisites_warning=
if ! run_verbose docker version; then
print_error "Docker is not installed. Please install it: https://docs.docker.com/get-docker/"
print_info "If you see a \"Permission denied while trying to connect to the Docker daemon\" error, you need to \
add your user to the docker group: https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user."
prerequisites_failed=true
fi
if ! run_verbose docker compose version; then
print_error "Docker Compose is not installed. Please install it: https://docs.docker.com/compose/install/"
prerequisites_failed=true
fi
# The tnftp "enhanced ftp client" has the -u option for direct uploads,
# unlike the netkit-ftp "classical ftp client"
if ! run_verbose command -v tnftp; then
print_warning "tnftp is not installed. You will not be able to upload files to your consoles automatically."
prerequisites_warning=true
fi
if [[ "$prerequisites_failed" = true ]]; then
print_error "Prerequisites check failed. Please install the missing prerequisites and try again."
exit 1
elif [[ "$prerequisites_warning" = true ]]; then
print_warning "Prerequisites check completed with warnings."
if [[ -z "$force" ]]; then
printf "Do you want to continue anyway (y/N)? "
read -r continue_anyway
if [[ "$continue_anyway" != "Y" && "$continue_anyway" != "y" ]]; then
echo "Aborting."
exit 1
fi
fi
else
print_success "All prerequisites are installed."
fi
}
setup_environment_variables() {
if [[ -n "$reconfigure" || (-z "$server_ip" && ! -f "$git_base_dir/.env") ]]; then
echo "Enter the IP address of your Pretendo Network server. It must be accessible to your console."
read -r server_ip
echo "Enter the IP address of your Wii U (optional). It is used for automatic FTP uploads."
read -r wiiu_ip
echo "Enter the IP address of your 3DS (optional). It is used for automatic FTP uploads."
read -r ds_ip
fi
./scripts/setup-environment.sh ${server_ip:+--server-ip "$server_ip"} ${wiiu_ip:+--wiiu-ip "$wiiu_ip"} ${ds_ip:+--3ds-ip "$ds_ip"} ${force:+--force} ${reconfigure:+--no-environment}
}
setup_containers() {
./scripts/internal/firstrun-mongodb-container.sh
./scripts/internal/firstrun-minio-container.sh
./scripts/internal/firstrun-postgres-container.sh
./scripts/internal/update-account-servers-database.sh
./scripts/internal/update-miiverse-endpoints.sh
./scripts/internal/update-postgres-password.sh
./scripts/internal/migrations.sh
print_info "Stopping containers after initial setup..."
compose_no_progress down
}
export PRETENDO_SETUP_IN_PROGRESS=true
# Temporary function because the framework script isn't sourced yet and we don't know if tput is available
print_error() {
echo -e "\e[1;31mError: ${*}\e[0m" >&2
}
# The framework script requires git and tput, so check for them first
if ! tput setaf 0 >/dev/null; then
print_error "Either the tput command is not installed, or your \$TERM environment variable is not set correctly. \
Please install your distribution's ncurses package (such as ncurses-bin) and/or configure your terminal to set \$TERM."
exit 1
fi
if ! git --version >/dev/null; then
print_error "Git is not installed. Please install it: https://git-scm.com/downloads/"
exit 1
fi
# shellcheck source=./scripts/internal/framework.sh
source "$(dirname "$(realpath "$0")")/scripts/internal/framework.sh"
set_description "This is the main setup script for your self-hosted Pretendo Network server. By default, it will prompt \
for configuration values the first run and re-use those values for future runs."
add_option "-r --reconfigure" "reconfigure" "Always shows configuration prompts, even if the values are already set. \
Also disables reading configuration values from the environment."
add_option "-f --force" "force" "Ignores warnings and confirmation prompts during the setup process."
add_option_with_value "-s --server-ip" "server_ip" "IP-address" "The IP address of your Pretendo Network server. It \
must be accessible to your console. Disables interactive prompts by default, unless --force-interactive is specified." false
add_option_with_value "-w --wiiu-ip" "wiiu_ip" "IP-address" "The IP address of your Wii U. It is used for automatic FTP uploads." false
add_option_with_value "-3 --3ds-ip" "ds_ip" "IP-address" "The IP address of your 3DS. It is used for automatic FTP uploads." false
parse_arguments "$@"
print_title "Unofficial Pretendo Network server setup script started"
git config --local submodule.recurse true
print_stage "Checking prerequisites."
check_prerequisites
print_stage "Setting up submodules and applying patches."
./scripts/setup-submodule-patches.sh
print_stage "Setting up environment variables."
setup_environment_variables
print_stage "Pulling Docker images."
docker compose pull
print_stage "Building Docker images."
docker compose build
print_stage "Setting up containers with first-run scripts."
setup_containers
print_title "Pretendo Network server setup script finished"
print_success "Setup completed! You can now start your Pretendo Network server with \"docker compose up -d --build\"."