mirror of
https://github.com/MatthewL246/pretendo-docker.git
synced 2026-05-05 21:17:31 -05:00
123 lines
5.3 KiB
Bash
Executable File
123 lines
5.3 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/update-account-servers-database.sh
|
|
./scripts/internal/update-miiverse-endpoints.sh
|
|
./scripts/internal/update-postgres-password.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 server with \"docker compose up -d\"."
|