-
Notifications
You must be signed in to change notification settings - Fork 10
/
setup.sh
executable file
·123 lines (103 loc) · 5.36 KB
/
setup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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\"."