gitscope
https://dev.kronoz.win/r/marzneshin.git
script.sh · v0.3.1
Source
1 82ca347 Dawsh 2y ago #!/usr/bin/env bash
2 82ca347 Dawsh 2y ago set -e
3 82ca347 Dawsh 2y ago
4 82ca347 Dawsh 2y ago APP_NAME="marzneshin"
5 af7254f Dawsh 2y ago NODE_NAME="marznode"
6 82ca347 Dawsh 2y ago CONFIG_DIR="/etc/opt/$APP_NAME"
7 82ca347 Dawsh 2y ago DATA_DIR="/var/lib/$APP_NAME"
8 af7254f Dawsh 2y ago NODE_DATA_DIR="/var/lib/$NODE_NAME"
9 82ca347 Dawsh 2y ago COMPOSE_FILE="$CONFIG_DIR/docker-compose.yml"
10 82ca347 Dawsh 2y ago
11 82ca347 Dawsh 2y ago
12 82ca347 Dawsh 2y ago colorized_echo() {
13 82ca347 Dawsh 2y ago local color=$1
14 82ca347 Dawsh 2y ago local text=$2
15 82ca347 Dawsh 2y ago
16 82ca347 Dawsh 2y ago case $color in
17 82ca347 Dawsh 2y ago "red")
18 82ca347 Dawsh 2y ago printf "\e[91m${text}\e[0m\n";;
19 82ca347 Dawsh 2y ago "green")
20 82ca347 Dawsh 2y ago printf "\e[92m${text}\e[0m\n";;
21 82ca347 Dawsh 2y ago "yellow")
22 82ca347 Dawsh 2y ago printf "\e[93m${text}\e[0m\n";;
23 82ca347 Dawsh 2y ago "blue")
24 82ca347 Dawsh 2y ago printf "\e[94m${text}\e[0m\n";;
25 82ca347 Dawsh 2y ago "magenta")
26 82ca347 Dawsh 2y ago printf "\e[95m${text}\e[0m\n";;
27 82ca347 Dawsh 2y ago "cyan")
28 82ca347 Dawsh 2y ago printf "\e[96m${text}\e[0m\n";;
29 82ca347 Dawsh 2y ago *)
30 82ca347 Dawsh 2y ago echo "${text}"
31 82ca347 Dawsh 2y ago ;;
32 82ca347 Dawsh 2y ago esac
33 82ca347 Dawsh 2y ago }
34 82ca347 Dawsh 2y ago
35 82ca347 Dawsh 2y ago check_running_as_root() {
36 82ca347 Dawsh 2y ago if [ "$(id -u)" != "0" ]; then
37 82ca347 Dawsh 2y ago colorized_echo red "This command must be run as root."
38 82ca347 Dawsh 2y ago exit 1
39 82ca347 Dawsh 2y ago fi
40 82ca347 Dawsh 2y ago }
41 82ca347 Dawsh 2y ago
42 82ca347 Dawsh 2y ago detect_os() {
43 82ca347 Dawsh 2y ago # Detect the operating system
44 82ca347 Dawsh 2y ago if [ -f /etc/lsb-release ]; then
45 82ca347 Dawsh 2y ago OS=$(lsb_release -si)
46 82ca347 Dawsh 2y ago elif [ -f /etc/os-release ]; then
47 82ca347 Dawsh 2y ago OS=$(awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"')
48 82ca347 Dawsh 2y ago elif [ -f /etc/redhat-release ]; then
49 82ca347 Dawsh 2y ago OS=$(cat /etc/redhat-release | awk '{print $1}')
50 82ca347 Dawsh 2y ago elif [ -f /etc/arch-release ]; then
51 82ca347 Dawsh 2y ago OS="Arch"
52 82ca347 Dawsh 2y ago else
53 82ca347 Dawsh 2y ago colorized_echo red "Unsupported operating system"
54 82ca347 Dawsh 2y ago exit 1
55 82ca347 Dawsh 2y ago fi
56 82ca347 Dawsh 2y ago }
57 82ca347 Dawsh 2y ago
58 82ca347 Dawsh 2y ago detect_and_update_package_manager() {
59 82ca347 Dawsh 2y ago colorized_echo blue "Updating package manager"
60 82ca347 Dawsh 2y ago if [[ "$OS" == "Ubuntu"* ]] || [[ "$OS" == "Debian"* ]]; then
61 82ca347 Dawsh 2y ago PKG_MANAGER="apt-get"
62 82ca347 Dawsh 2y ago $PKG_MANAGER update
63 82ca347 Dawsh 2y ago elif [[ "$OS" == "CentOS"* ]] || [[ "$OS" == "AlmaLinux"* ]]; then
64 82ca347 Dawsh 2y ago PKG_MANAGER="yum"
65 82ca347 Dawsh 2y ago $PKG_MANAGER update -y
66 82ca347 Dawsh 2y ago $PKG_MANAGER install -y epel-release
67 82ca347 Dawsh 2y ago elif [ "$OS" == "Fedora"* ]; then
68 82ca347 Dawsh 2y ago PKG_MANAGER="dnf"
69 82ca347 Dawsh 2y ago $PKG_MANAGER update
70 82ca347 Dawsh 2y ago elif [ "$OS" == "Arch" ]; then
71 82ca347 Dawsh 2y ago PKG_MANAGER="pacman"
72 82ca347 Dawsh 2y ago $PKG_MANAGER -Sy
73 82ca347 Dawsh 2y ago else
74 82ca347 Dawsh 2y ago colorized_echo red "Unsupported operating system"
75 82ca347 Dawsh 2y ago exit 1
76 82ca347 Dawsh 2y ago fi
77 82ca347 Dawsh 2y ago }
78 82ca347 Dawsh 2y ago
79 82ca347 Dawsh 2y ago detect_compose() {
80 82ca347 Dawsh 2y ago # Check if docker compose command exists
81 82ca347 Dawsh 2y ago if docker compose >/dev/null 2>&1; then
82 82ca347 Dawsh 2y ago COMPOSE='docker compose'
83 82ca347 Dawsh 2y ago elif docker-compose >/dev/null 2>&1; then
84 82ca347 Dawsh 2y ago COMPOSE='docker-compose'
85 82ca347 Dawsh 2y ago else
86 82ca347 Dawsh 2y ago colorized_echo red "docker compose not found"
87 82ca347 Dawsh 2y ago exit 1
88 82ca347 Dawsh 2y ago fi
89 82ca347 Dawsh 2y ago }
90 82ca347 Dawsh 2y ago
91 82ca347 Dawsh 2y ago install_package () {
92 82ca347 Dawsh 2y ago if [ -z $PKG_MANAGER ]; then
93 82ca347 Dawsh 2y ago detect_and_update_package_manager
94 82ca347 Dawsh 2y ago fi
95 82ca347 Dawsh 2y ago
96 82ca347 Dawsh 2y ago PACKAGE=$1
97 82ca347 Dawsh 2y ago colorized_echo blue "Installing $PACKAGE"
98 82ca347 Dawsh 2y ago if [[ "$OS" == "Ubuntu"* ]] || [[ "$OS" == "Debian"* ]]; then
99 82ca347 Dawsh 2y ago $PKG_MANAGER -y install "$PACKAGE"
100 82ca347 Dawsh 2y ago elif [[ "$OS" == "CentOS"* ]] || [[ "$OS" == "AlmaLinux"* ]]; then
101 82ca347 Dawsh 2y ago $PKG_MANAGER install -y "$PACKAGE"
102 82ca347 Dawsh 2y ago elif [ "$OS" == "Fedora"* ]; then
103 82ca347 Dawsh 2y ago $PKG_MANAGER install -y "$PACKAGE"
104 82ca347 Dawsh 2y ago elif [ "$OS" == "Arch" ]; then
105 82ca347 Dawsh 2y ago $PKG_MANAGER -S --noconfirm "$PACKAGE"
106 82ca347 Dawsh 2y ago else
107 82ca347 Dawsh 2y ago colorized_echo red "Unsupported operating system"
108 82ca347 Dawsh 2y ago exit 1
109 82ca347 Dawsh 2y ago fi
110 82ca347 Dawsh 2y ago }
111 82ca347 Dawsh 2y ago
112 82ca347 Dawsh 2y ago install_docker() {
113 82ca347 Dawsh 2y ago # Install Docker and Docker Compose using the official installation script
114 82ca347 Dawsh 2y ago colorized_echo blue "Installing Docker"
115 82ca347 Dawsh 2y ago curl -fsSL https://get.docker.com | sh
116 82ca347 Dawsh 2y ago colorized_echo green "Docker installed successfully"
117 82ca347 Dawsh 2y ago }
118 82ca347 Dawsh 2y ago
119 82ca347 Dawsh 2y ago install_marzneshin_script() {
120 82ca347 Dawsh 2y ago FETCH_REPO="khodedawsh/marzneshin"
121 82ca347 Dawsh 2y ago SCRIPT_URL="https://github.com/$FETCH_REPO/raw/master/script.sh"
122 82ca347 Dawsh 2y ago colorized_echo blue "Installing marzneshin script"
123 82ca347 Dawsh 2y ago curl -sSL $SCRIPT_URL | install -m 755 /dev/stdin /usr/local/bin/marzneshin
124 82ca347 Dawsh 2y ago colorized_echo green "marzneshin script installed successfully"
125 82ca347 Dawsh 2y ago }
126 82ca347 Dawsh 2y ago
127 82ca347 Dawsh 2y ago install_marzneshin() {
128 82ca347 Dawsh 2y ago # Fetch releases
129 82ca347 Dawsh 2y ago FILES_URL_PREFIX="https://raw.githubusercontent.com/khodedawsh/marzneshin/master"
130 ece2ed6 Dawsh 2y ago COMPOSE_FILES_URL="https://raw.githubusercontent.com/marzneshin/marzneshin-deploy/master"
131 ece2ed6 Dawsh 2y ago database=$1
132 ece2ed6 Dawsh 2y ago nightly=$2
133 ece2ed6 Dawsh 2y ago
134 82ca347 Dawsh 2y ago mkdir -p "$DATA_DIR"
135 82ca347 Dawsh 2y ago mkdir -p "$CONFIG_DIR"
136 82ca347 Dawsh 2y ago
137 82ca347 Dawsh 2y ago colorized_echo blue "Fetching compose file"
138 ece2ed6 Dawsh 2y ago curl -sL "$COMPOSE_FILES_URL/docker-compose-$database.yml" -o "$CONFIG_DIR/docker-compose.yml"
139 82ca347 Dawsh 2y ago colorized_echo green "File saved in $CONFIG_DIR/docker-compose.yml"
140 ece2ed6 Dawsh 2y ago if [ "$nightly" = true ]; then
141 ece2ed6 Dawsh 2y ago colorized_echo red "setting compose tag to nightly."
142 ece2ed6 Dawsh 2y ago sed -ri "s/(dawsh\/marzneshin:)latest/\1nightly/g" $CONFIG_DIR/docker-compose.yml
143 ece2ed6 Dawsh 2y ago fi
144 ece2ed6 Dawsh 2y ago
145 ece2ed6 Dawsh 2y ago colorized_echo blue "Fetching example .env file"
146 82ca347 Dawsh 2y ago curl -sL "$FILES_URL_PREFIX/.env.example" -o "$CONFIG_DIR/.env"
147 82ca347 Dawsh 2y ago colorized_echo green "File saved in $CONFIG_DIR/.env"
148 82ca347 Dawsh 2y ago
149 82ca347 Dawsh 2y ago colorized_echo green "Marzneshin files downloaded successfully"
150 82ca347 Dawsh 2y ago }
151 82ca347 Dawsh 2y ago
152 af7254f Dawsh 2y ago install_marznode_xray_config() {
153 186014a Dawsh 2y ago mkdir -p "$NODE_DATA_DIR"
154 bb3b933 Dawsh 2y ago curl -sL "https://raw.githubusercontent.com/khodedawsh/marznode/master/xray_config.json" -o "$NODE_DATA_DIR/xray_config.json"
155 af7254f Dawsh 2y ago colorized_echo green "Sample xray config downloaded for marznode"
156 af7254f Dawsh 2y ago }
157 82ca347 Dawsh 2y ago
158 82ca347 Dawsh 2y ago uninstall_marzneshin_script() {
159 82ca347 Dawsh 2y ago if [ -f "/usr/local/bin/marzneshin" ]; then
160 82ca347 Dawsh 2y ago colorized_echo yellow "Removing marzneshin script"
161 82ca347 Dawsh 2y ago rm "/usr/local/bin/marzneshin"
162 82ca347 Dawsh 2y ago fi
163 82ca347 Dawsh 2y ago }
164 82ca347 Dawsh 2y ago
165 82ca347 Dawsh 2y ago uninstall_marzneshin() {
166 82ca347 Dawsh 2y ago if [ -d "$CONFIG_DIR" ]; then
167 82ca347 Dawsh 2y ago colorized_echo yellow "Removing directory: $CONFIG_DIR"
168 82ca347 Dawsh 2y ago rm -r "$CONFIG_DIR"
169 82ca347 Dawsh 2y ago fi
170 82ca347 Dawsh 2y ago }
171 82ca347 Dawsh 2y ago
172 82ca347 Dawsh 2y ago uninstall_marzneshin_docker_images() {
173 82ca347 Dawsh 2y ago images=$(docker images | grep marzneshin | awk '{print $3}')
174 82ca347 Dawsh 2y ago
175 82ca347 Dawsh 2y ago if [ -n "$images" ]; then
176 82ca347 Dawsh 2y ago colorized_echo yellow "Removing Docker images of Marzneshin"
177 82ca347 Dawsh 2y ago for image in $images; do
178 82ca347 Dawsh 2y ago if docker rmi "$image" >/dev/null 2>&1; then
179 82ca347 Dawsh 2y ago colorized_echo yellow "Image $image removed"
180 82ca347 Dawsh 2y ago fi
181 82ca347 Dawsh 2y ago done
182 82ca347 Dawsh 2y ago fi
183 82ca347 Dawsh 2y ago }
184 82ca347 Dawsh 2y ago
185 82ca347 Dawsh 2y ago uninstall_marzneshin_data_files() {
186 82ca347 Dawsh 2y ago if [ -d "$DATA_DIR" ]; then
187 82ca347 Dawsh 2y ago colorized_echo yellow "Removing directory: $DATA_DIR"
188 82ca347 Dawsh 2y ago rm -r "$DATA_DIR"
189 82ca347 Dawsh 2y ago fi
190 82ca347 Dawsh 2y ago }
191 82ca347 Dawsh 2y ago
192 af7254f Dawsh 2y ago uninstall_marznode_data_files() {
193 af7254f Dawsh 2y ago if [ -d "$NODE_DATA_DIR" ]; then
194 af7254f Dawsh 2y ago colorized_echo yellow "Removing directory: $NODE_DATA_DIR"
195 af7254f Dawsh 2y ago rm -r "$NODE_DATA_DIR"
196 af7254f Dawsh 2y ago fi
197 af7254f Dawsh 2y ago }
198 af7254f Dawsh 2y ago
199 af7254f Dawsh 2y ago
200 82ca347 Dawsh 2y ago up_marzneshin() {
201 82ca347 Dawsh 2y ago $COMPOSE -f $COMPOSE_FILE -p "$APP_NAME" up -d --remove-orphans
202 82ca347 Dawsh 2y ago }
203 82ca347 Dawsh 2y ago
204 82ca347 Dawsh 2y ago down_marzneshin() {
205 82ca347 Dawsh 2y ago $COMPOSE -f $COMPOSE_FILE -p "$APP_NAME" down
206 82ca347 Dawsh 2y ago }
207 82ca347 Dawsh 2y ago
208 82ca347 Dawsh 2y ago show_marzneshin_logs() {
209 82ca347 Dawsh 2y ago $COMPOSE -f $COMPOSE_FILE -p "$APP_NAME" logs
210 82ca347 Dawsh 2y ago }
211 82ca347 Dawsh 2y ago
212 82ca347 Dawsh 2y ago follow_marzneshin_logs() {
213 82ca347 Dawsh 2y ago $COMPOSE -f $COMPOSE_FILE -p "$APP_NAME" logs -f
214 82ca347 Dawsh 2y ago }
215 82ca347 Dawsh 2y ago
216 82ca347 Dawsh 2y ago marzneshin_cli() {
217 49562f8 Dawsh 2y ago $COMPOSE -f $COMPOSE_FILE -p "$APP_NAME" exec -e CLI_PROG_NAME="marzneshin cli" marzneshin /app/marzneshin-cli.py "$@"
218 82ca347 Dawsh 2y ago }
219 82ca347 Dawsh 2y ago
220 82ca347 Dawsh 2y ago
221 82ca347 Dawsh 2y ago update_marzneshin_script() {
222 82ca347 Dawsh 2y ago FETCH_REPO="khodedawsh/marzneshin"
223 420cd89 Dawsh 2y ago SCRIPT_URL="https://github.com/$FETCH_REPO/raw/master/script.sh"
224 82ca347 Dawsh 2y ago colorized_echo blue "Updating marzneshin script"
225 82ca347 Dawsh 2y ago curl -sSL $SCRIPT_URL | install -m 755 /dev/stdin /usr/local/bin/marzneshin
226 82ca347 Dawsh 2y ago colorized_echo green "marzneshin script updated successfully"
227 82ca347 Dawsh 2y ago }
228 82ca347 Dawsh 2y ago
229 82ca347 Dawsh 2y ago update_marzneshin() {
230 82ca347 Dawsh 2y ago $COMPOSE -f $COMPOSE_FILE -p "$APP_NAME" pull
231 82ca347 Dawsh 2y ago }
232 82ca347 Dawsh 2y ago
233 82ca347 Dawsh 2y ago is_marzneshin_installed() {
234 82ca347 Dawsh 2y ago if [ -d $CONFIG_DIR ]; then
235 82ca347 Dawsh 2y ago return 0
236 82ca347 Dawsh 2y ago else
237 82ca347 Dawsh 2y ago return 1
238 82ca347 Dawsh 2y ago fi
239 82ca347 Dawsh 2y ago }
240 82ca347 Dawsh 2y ago
241 82ca347 Dawsh 2y ago is_marzneshin_up() {
242 82ca347 Dawsh 2y ago if [ -z "$($COMPOSE -f $COMPOSE_FILE ps -q -a)" ]; then
243 82ca347 Dawsh 2y ago return 1
244 82ca347 Dawsh 2y ago else
245 82ca347 Dawsh 2y ago return 0
246 82ca347 Dawsh 2y ago fi
247 82ca347 Dawsh 2y ago }
248 82ca347 Dawsh 2y ago
249 82ca347 Dawsh 2y ago install_command() {
250 82ca347 Dawsh 2y ago check_running_as_root
251 82ca347 Dawsh 2y ago # Check if marzneshin is already installed
252 82ca347 Dawsh 2y ago if is_marzneshin_installed; then
253 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is already installed at $CONFIG_DIR"
254 82ca347 Dawsh 2y ago read -p "Do you want to override the previous installation? (y/n) "
255 82ca347 Dawsh 2y ago if [[ ! $REPLY =~ ^[Yy]$ ]]; then
256 82ca347 Dawsh 2y ago colorized_echo red "Aborted installation"
257 82ca347 Dawsh 2y ago exit 1
258 82ca347 Dawsh 2y ago fi
259 82ca347 Dawsh 2y ago fi
260 82ca347 Dawsh 2y ago detect_os
261 82ca347 Dawsh 2y ago if ! command -v jq >/dev/null 2>&1; then
262 82ca347 Dawsh 2y ago install_package jq
263 82ca347 Dawsh 2y ago fi
264 82ca347 Dawsh 2y ago if ! command -v curl >/dev/null 2>&1; then
265 82ca347 Dawsh 2y ago install_package curl
266 82ca347 Dawsh 2y ago fi
267 82ca347 Dawsh 2y ago if ! command -v docker >/dev/null 2>&1; then
268 82ca347 Dawsh 2y ago install_docker
269 82ca347 Dawsh 2y ago fi
270 ece2ed6 Dawsh 2y ago
271 ece2ed6 Dawsh 2y ago database="sqlite"
272 ece2ed6 Dawsh 2y ago nightly=false
273 ece2ed6 Dawsh 2y ago
274 ece2ed6 Dawsh 2y ago while [[ "$#" -gt 0 ]]; do
275 ece2ed6 Dawsh 2y ago case $1 in
276 ece2ed6 Dawsh 2y ago -d|--database)
277 ece2ed6 Dawsh 2y ago database="$2"
278 ece2ed6 Dawsh 2y ago if [[ ! $database =~ ^(sqlite|mariadb|mysql)$ ]]; then
279 ece2ed6 Dawsh 2y ago echo "database could only be sqlite, mysql and mariadb."
280 ece2ed6 Dawsh 2y ago exit 1
281 ece2ed6 Dawsh 2y ago fi
282 ece2ed6 Dawsh 2y ago shift
283 ece2ed6 Dawsh 2y ago ;;
284 ece2ed6 Dawsh 2y ago -n|--nightly)
285 ece2ed6 Dawsh 2y ago nightly=true
286 ece2ed6 Dawsh 2y ago ;;
287 ece2ed6 Dawsh 2y ago *)
288 ece2ed6 Dawsh 2y ago echo "Unknown option: $1"
289 ece2ed6 Dawsh 2y ago exit 1
290 ece2ed6 Dawsh 2y ago ;;
291 ece2ed6 Dawsh 2y ago esac
292 ece2ed6 Dawsh 2y ago shift
293 ece2ed6 Dawsh 2y ago done
294 ece2ed6 Dawsh 2y ago
295 82ca347 Dawsh 2y ago detect_compose
296 82ca347 Dawsh 2y ago install_marzneshin_script
297 ece2ed6 Dawsh 2y ago install_marzneshin $database $nightly
298 af7254f Dawsh 2y ago install_marznode_xray_config
299 82ca347 Dawsh 2y ago up_marzneshin
300 82ca347 Dawsh 2y ago follow_marzneshin_logs
301 82ca347 Dawsh 2y ago }
302 82ca347 Dawsh 2y ago
303 82ca347 Dawsh 2y ago uninstall_command() {
304 82ca347 Dawsh 2y ago check_running_as_root
305 82ca347 Dawsh 2y ago # Check if marzneshin is installed
306 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
307 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin's not installed!"
308 82ca347 Dawsh 2y ago exit 1
309 82ca347 Dawsh 2y ago fi
310 82ca347 Dawsh 2y ago
311 82ca347 Dawsh 2y ago read -p "Do you really want to uninstall Marzneshin? (y/n) "
312 82ca347 Dawsh 2y ago if [[ ! $REPLY =~ ^[Yy]$ ]]; then
313 82ca347 Dawsh 2y ago colorized_echo red "Aborted"
314 82ca347 Dawsh 2y ago exit 1
315 82ca347 Dawsh 2y ago fi
316 82ca347 Dawsh 2y ago
317 82ca347 Dawsh 2y ago detect_compose
318 82ca347 Dawsh 2y ago if is_marzneshin_up; then
319 82ca347 Dawsh 2y ago down_marzneshin
320 82ca347 Dawsh 2y ago fi
321 82ca347 Dawsh 2y ago uninstall_marzneshin_script
322 82ca347 Dawsh 2y ago uninstall_marzneshin
323 82ca347 Dawsh 2y ago uninstall_marzneshin_docker_images
324 82ca347 Dawsh 2y ago
325 af7254f Dawsh 2y ago read -p "Do you want to remove marzneshin & marznode data files too ($NODE_DATA_DIR, $DATA_DIR)? (y/n) "
326 82ca347 Dawsh 2y ago if [[ ! $REPLY =~ ^[Yy]$ ]]; then
327 82ca347 Dawsh 2y ago colorized_echo green "Marzneshin uninstalled successfully"
328 82ca347 Dawsh 2y ago else
329 82ca347 Dawsh 2y ago uninstall_marzneshin_data_files
330 af7254f Dawsh 2y ago uninstall_marznode_data_files
331 82ca347 Dawsh 2y ago colorized_echo green "Marzneshin uninstalled successfully"
332 82ca347 Dawsh 2y ago fi
333 82ca347 Dawsh 2y ago }
334 82ca347 Dawsh 2y ago
335 82ca347 Dawsh 2y ago up_command() {
336 82ca347 Dawsh 2y ago help() {
337 82ca347 Dawsh 2y ago colorized_echo red "Usage: $0 up [options]"
338 82ca347 Dawsh 2y ago echo ""
339 82ca347 Dawsh 2y ago echo "OPTIONS:"
340 82ca347 Dawsh 2y ago echo " -h, --help display this help message"
341 82ca347 Dawsh 2y ago echo " -n, --no-logs do not follow logs after starting"
342 82ca347 Dawsh 2y ago }
343 82ca347 Dawsh 2y ago
344 82ca347 Dawsh 2y ago local no_logs=false
345 82ca347 Dawsh 2y ago while [[ "$#" -gt 0 ]]; do
346 82ca347 Dawsh 2y ago case "$1" in
347 82ca347 Dawsh 2y ago -n|--no-logs)
348 82ca347 Dawsh 2y ago no_logs=true
349 82ca347 Dawsh 2y ago ;;
350 82ca347 Dawsh 2y ago -h|--help)
351 82ca347 Dawsh 2y ago help
352 82ca347 Dawsh 2y ago exit 0
353 82ca347 Dawsh 2y ago ;;
354 82ca347 Dawsh 2y ago *)
355 82ca347 Dawsh 2y ago echo "Error: Invalid option: $1" >&2
356 82ca347 Dawsh 2y ago help
357 82ca347 Dawsh 2y ago exit 0
358 82ca347 Dawsh 2y ago ;;
359 82ca347 Dawsh 2y ago esac
360 82ca347 Dawsh 2y ago shift
361 82ca347 Dawsh 2y ago done
362 82ca347 Dawsh 2y ago
363 82ca347 Dawsh 2y ago # Check if marzneshin is installed
364 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
365 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is not installed!"
366 82ca347 Dawsh 2y ago exit 1
367 82ca347 Dawsh 2y ago fi
368 82ca347 Dawsh 2y ago
369 82ca347 Dawsh 2y ago detect_compose
370 82ca347 Dawsh 2y ago
371 82ca347 Dawsh 2y ago if is_marzneshin_up; then
372 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is already up"
373 82ca347 Dawsh 2y ago exit 1
374 82ca347 Dawsh 2y ago fi
375 82ca347 Dawsh 2y ago
376 82ca347 Dawsh 2y ago up_marzneshin
377 82ca347 Dawsh 2y ago if [ "$no_logs" = false ]; then
378 82ca347 Dawsh 2y ago follow_marzneshin_logs
379 82ca347 Dawsh 2y ago fi
380 82ca347 Dawsh 2y ago }
381 82ca347 Dawsh 2y ago
382 82ca347 Dawsh 2y ago down_command() {
383 82ca347 Dawsh 2y ago
384 82ca347 Dawsh 2y ago # Check if marzneshin is installed
385 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
386 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin's not installed!"
387 82ca347 Dawsh 2y ago exit 1
388 82ca347 Dawsh 2y ago fi
389 82ca347 Dawsh 2y ago
390 82ca347 Dawsh 2y ago detect_compose
391 82ca347 Dawsh 2y ago
392 82ca347 Dawsh 2y ago if ! is_marzneshin_up; then
393 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin's already down"
394 82ca347 Dawsh 2y ago exit 1
395 82ca347 Dawsh 2y ago fi
396 82ca347 Dawsh 2y ago
397 82ca347 Dawsh 2y ago down_marzneshin
398 82ca347 Dawsh 2y ago }
399 82ca347 Dawsh 2y ago
400 82ca347 Dawsh 2y ago restart_command() {
401 82ca347 Dawsh 2y ago help() {
402 82ca347 Dawsh 2y ago colorized_echo red "Usage: $0 restart [options]"
403 82ca347 Dawsh 2y ago echo
404 82ca347 Dawsh 2y ago echo "OPTIONS:"
405 82ca347 Dawsh 2y ago echo " -h, --help display this help message"
406 82ca347 Dawsh 2y ago echo " -n, --no-logs do not follow logs after starting"
407 82ca347 Dawsh 2y ago }
408 82ca347 Dawsh 2y ago
409 82ca347 Dawsh 2y ago local no_logs=false
410 82ca347 Dawsh 2y ago while [[ "$#" -gt 0 ]]; do
411 82ca347 Dawsh 2y ago case "$1" in
412 82ca347 Dawsh 2y ago -n|--no-logs)
413 82ca347 Dawsh 2y ago no_logs=true
414 82ca347 Dawsh 2y ago ;;
415 82ca347 Dawsh 2y ago -h|--help)
416 82ca347 Dawsh 2y ago help
417 82ca347 Dawsh 2y ago exit 0
418 82ca347 Dawsh 2y ago ;;
419 82ca347 Dawsh 2y ago *)
420 82ca347 Dawsh 2y ago echo "Error: Invalid option: $1" >&2
421 82ca347 Dawsh 2y ago help
422 82ca347 Dawsh 2y ago exit 0
423 82ca347 Dawsh 2y ago ;;
424 82ca347 Dawsh 2y ago esac
425 82ca347 Dawsh 2y ago shift
426 82ca347 Dawsh 2y ago done
427 82ca347 Dawsh 2y ago
428 82ca347 Dawsh 2y ago # Check if marzneshin is installed
429 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
430 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin's not installed!"
431 82ca347 Dawsh 2y ago exit 1
432 82ca347 Dawsh 2y ago fi
433 82ca347 Dawsh 2y ago
434 82ca347 Dawsh 2y ago detect_compose
435 82ca347 Dawsh 2y ago
436 82ca347 Dawsh 2y ago down_marzneshin
437 82ca347 Dawsh 2y ago up_marzneshin
438 82ca347 Dawsh 2y ago if [ "$no_logs" = false ]; then
439 82ca347 Dawsh 2y ago follow_marzneshin_logs
440 82ca347 Dawsh 2y ago fi
441 82ca347 Dawsh 2y ago }
442 82ca347 Dawsh 2y ago
443 82ca347 Dawsh 2y ago status_command() {
444 82ca347 Dawsh 2y ago
445 82ca347 Dawsh 2y ago # Check if marzneshin is installed
446 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
447 82ca347 Dawsh 2y ago echo -n "Status: "
448 82ca347 Dawsh 2y ago colorized_echo red "Not Installed"
449 82ca347 Dawsh 2y ago exit 1
450 82ca347 Dawsh 2y ago fi
451 82ca347 Dawsh 2y ago
452 82ca347 Dawsh 2y ago detect_compose
453 82ca347 Dawsh 2y ago
454 82ca347 Dawsh 2y ago if ! is_marzneshin_up; then
455 82ca347 Dawsh 2y ago echo -n "Status: "
456 82ca347 Dawsh 2y ago colorized_echo blue "Down"
457 82ca347 Dawsh 2y ago exit 1
458 82ca347 Dawsh 2y ago fi
459 82ca347 Dawsh 2y ago
460 82ca347 Dawsh 2y ago echo -n "Status: "
461 82ca347 Dawsh 2y ago colorized_echo green "Up"
462 82ca347 Dawsh 2y ago
463 82ca347 Dawsh 2y ago json=$($COMPOSE -f $COMPOSE_FILE ps -a --format=json)
464 82ca347 Dawsh 2y ago services=$(echo "$json" | jq -r 'if type == "array" then .[] else . end | .Service')
465 82ca347 Dawsh 2y ago states=$(echo "$json" | jq -r 'if type == "array" then .[] else . end | .State')
466 82ca347 Dawsh 2y ago # Print out the service names and statuses
467 82ca347 Dawsh 2y ago for i in $(seq 0 $(expr $(echo $services | wc -w) - 1)); do
468 82ca347 Dawsh 2y ago service=$(echo $services | cut -d' ' -f $(expr $i + 1))
469 82ca347 Dawsh 2y ago state=$(echo $states | cut -d' ' -f $(expr $i + 1))
470 82ca347 Dawsh 2y ago echo -n "- $service: "
471 82ca347 Dawsh 2y ago if [ "$state" == "running" ]; then
472 82ca347 Dawsh 2y ago colorized_echo green $state
473 82ca347 Dawsh 2y ago else
474 82ca347 Dawsh 2y ago colorized_echo red $state
475 82ca347 Dawsh 2y ago fi
476 82ca347 Dawsh 2y ago done
477 82ca347 Dawsh 2y ago }
478 82ca347 Dawsh 2y ago
479 82ca347 Dawsh 2y ago logs_command() {
480 82ca347 Dawsh 2y ago help() {
481 82ca347 Dawsh 2y ago colorized_echo red "Usage: marzneshin logs [options]"
482 82ca347 Dawsh 2y ago echo ""
483 82ca347 Dawsh 2y ago echo "OPTIONS:"
484 82ca347 Dawsh 2y ago echo " -h, --help display this help message"
485 82ca347 Dawsh 2y ago echo " -n, --no-follow do not show follow logs"
486 82ca347 Dawsh 2y ago }
487 82ca347 Dawsh 2y ago
488 82ca347 Dawsh 2y ago local no_follow=false
489 82ca347 Dawsh 2y ago while [[ "$#" -gt 0 ]]; do
490 82ca347 Dawsh 2y ago case "$1" in
491 82ca347 Dawsh 2y ago -n|--no-follow)
492 82ca347 Dawsh 2y ago no_follow=true
493 82ca347 Dawsh 2y ago ;;
494 82ca347 Dawsh 2y ago -h|--help)
495 82ca347 Dawsh 2y ago help
496 82ca347 Dawsh 2y ago exit 0
497 82ca347 Dawsh 2y ago ;;
498 82ca347 Dawsh 2y ago *)
499 82ca347 Dawsh 2y ago echo "Error: Invalid option: $1" >&2
500 82ca347 Dawsh 2y ago help
501 82ca347 Dawsh 2y ago exit 0
502 82ca347 Dawsh 2y ago ;;
503 82ca347 Dawsh 2y ago esac
504 82ca347 Dawsh 2y ago shift
505 82ca347 Dawsh 2y ago done
506 82ca347 Dawsh 2y ago
507 82ca347 Dawsh 2y ago # Check if marzneshin is installed
508 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
509 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is not installed!"
510 82ca347 Dawsh 2y ago exit 1
511 82ca347 Dawsh 2y ago fi
512 82ca347 Dawsh 2y ago
513 82ca347 Dawsh 2y ago detect_compose
514 82ca347 Dawsh 2y ago
515 82ca347 Dawsh 2y ago if ! is_marzneshin_up; then
516 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is not up."
517 82ca347 Dawsh 2y ago exit 1
518 82ca347 Dawsh 2y ago fi
519 82ca347 Dawsh 2y ago
520 82ca347 Dawsh 2y ago if [ "$no_follow" = true ]; then
521 82ca347 Dawsh 2y ago show_marzneshin_logs
522 82ca347 Dawsh 2y ago else
523 82ca347 Dawsh 2y ago follow_marzneshin_logs
524 82ca347 Dawsh 2y ago fi
525 82ca347 Dawsh 2y ago }
526 82ca347 Dawsh 2y ago
527 82ca347 Dawsh 2y ago cli_command() {
528 82ca347 Dawsh 2y ago # Check if marzneshin is installed
529 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
530 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is not installed!"
531 82ca347 Dawsh 2y ago exit 1
532 82ca347 Dawsh 2y ago fi
533 82ca347 Dawsh 2y ago
534 82ca347 Dawsh 2y ago detect_compose
535 82ca347 Dawsh 2y ago
536 82ca347 Dawsh 2y ago if ! is_marzneshin_up; then
537 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is not up."
538 82ca347 Dawsh 2y ago exit 1
539 82ca347 Dawsh 2y ago fi
540 82ca347 Dawsh 2y ago
541 82ca347 Dawsh 2y ago marzneshin_cli "$@"
542 82ca347 Dawsh 2y ago }
543 82ca347 Dawsh 2y ago
544 82ca347 Dawsh 2y ago update_command() {
545 82ca347 Dawsh 2y ago check_running_as_root
546 82ca347 Dawsh 2y ago # Check if marzneshin is installed
547 82ca347 Dawsh 2y ago if ! is_marzneshin_installed; then
548 82ca347 Dawsh 2y ago colorized_echo red "Marzneshin is not installed!"
549 82ca347 Dawsh 2y ago exit 1
550 82ca347 Dawsh 2y ago fi
551 82ca347 Dawsh 2y ago
552 82ca347 Dawsh 2y ago detect_compose
553 82ca347 Dawsh 2y ago
554 82ca347 Dawsh 2y ago update_marzneshin_script
555 82ca347 Dawsh 2y ago colorized_echo blue "Pulling latest version"
556 82ca347 Dawsh 2y ago update_marzneshin
557 82ca347 Dawsh 2y ago
558 82ca347 Dawsh 2y ago colorized_echo blue "Restarting Marzneshin's services"
559 82ca347 Dawsh 2y ago down_marzneshin
560 82ca347 Dawsh 2y ago up_marzneshin
561 82ca347 Dawsh 2y ago
562 82ca347 Dawsh 2y ago colorized_echo blue "Marzneshin updated successfully"
563 82ca347 Dawsh 2y ago }
564 82ca347 Dawsh 2y ago
565 82ca347 Dawsh 2y ago
566 82ca347 Dawsh 2y ago usage() {
567 82ca347 Dawsh 2y ago colorized_echo red "Usage: $0 [command]"
568 82ca347 Dawsh 2y ago echo
569 82ca347 Dawsh 2y ago echo "Commands:"
570 82ca347 Dawsh 2y ago echo " up Start services"
571 82ca347 Dawsh 2y ago echo " down Stop services"
572 82ca347 Dawsh 2y ago echo " restart Restart services"
573 82ca347 Dawsh 2y ago echo " status Show status"
574 82ca347 Dawsh 2y ago echo " logs Show logs"
575 82ca347 Dawsh 2y ago echo " cli Marzneshin command-line interface"
576 82ca347 Dawsh 2y ago echo " install Install Marzneshin"
577 82ca347 Dawsh 2y ago echo " update Update latest version"
578 82ca347 Dawsh 2y ago echo " uninstall Uninstall Marzneshin"
579 82ca347 Dawsh 2y ago echo " install-script Install Marzneshin script"
580 82ca347 Dawsh 2y ago echo
581 82ca347 Dawsh 2y ago }
582 82ca347 Dawsh 2y ago
583 82ca347 Dawsh 2y ago case "$1" in
584 82ca347 Dawsh 2y ago up)
585 82ca347 Dawsh 2y ago shift; up_command "$@";;
586 82ca347 Dawsh 2y ago down)
587 82ca347 Dawsh 2y ago shift; down_command "$@";;
588 82ca347 Dawsh 2y ago restart)
589 82ca347 Dawsh 2y ago shift; restart_command "$@";;
590 82ca347 Dawsh 2y ago status)
591 82ca347 Dawsh 2y ago shift; status_command "$@";;
592 82ca347 Dawsh 2y ago logs)
593 82ca347 Dawsh 2y ago shift; logs_command "$@";;
594 82ca347 Dawsh 2y ago cli)
595 82ca347 Dawsh 2y ago shift; cli_command "$@";;
596 82ca347 Dawsh 2y ago install)
597 82ca347 Dawsh 2y ago shift; install_command "$@";;
598 82ca347 Dawsh 2y ago update)
599 82ca347 Dawsh 2y ago shift; update_command "$@";;
600 82ca347 Dawsh 2y ago uninstall)
601 82ca347 Dawsh 2y ago shift; uninstall_command "$@";;
602 82ca347 Dawsh 2y ago install-script)
603 82ca347 Dawsh 2y ago shift; install_marzneshin_script "$@";;
604 82ca347 Dawsh 2y ago *)
605 82ca347 Dawsh 2y ago usage;;
606 82ca347 Dawsh 2y ago esac