From e9bfe7dee2cefd7835921e2f6d777283b77c4b0f Mon Sep 17 00:00:00 2001 From: LinuxSquare Date: Fri, 15 Nov 2024 21:19:43 +0100 Subject: [PATCH] Re-add post-{de}install, init.d, remove docker-compose.yml, add pterodactyl-panel.sh --- APKBUILD | 9 ++-- Makefile | 17 +++++--- docker-compose.yml.in | 55 ------------------------ pterodactyl-panel-compose.initd.in | 20 +++++++++ pterodactyl-panel-compose.post-deinstall | 3 ++ pterodactyl-panel-compose.post-install | 6 +++ pterodactyl-panel.sh.in | 15 +++++++ 7 files changed, 61 insertions(+), 64 deletions(-) delete mode 100644 docker-compose.yml.in create mode 100644 pterodactyl-panel-compose.initd.in create mode 100644 pterodactyl-panel-compose.post-deinstall create mode 100644 pterodactyl-panel-compose.post-install create mode 100755 pterodactyl-panel.sh.in diff --git a/APKBUILD b/APKBUILD index 76241fd..184efdc 100644 --- a/APKBUILD +++ b/APKBUILD @@ -1,18 +1,19 @@ # Maintainer: LinuxSquare pkgname=pterodactyl-panel-compose pkgver=1.11.9 -pkgrel=1 +pkgrel=0 pkgdesc="The Pterodactyl Panel" arch="x86_64" url="https://pterodactyl.io/" license="MIT" optdepends="podman docker" # Install either podman or docker makedepends="go" +install="$pkgname.post-install $pkgname.post-deinstall" options="!check" package() { DESTDIR="$pkgdir" make install - local compose_path=$(find $pkgdir -name docker-compose.yml -exec dirname {} \; | sed "s|$pkgdir||") - sed -i "s|%VERSION%|$pkgver|" "${pkgdir}${compose_path}/docker-compose.yml" - chown -R 2000:2000 "${pkgdir}${compose_path}" + local compose_path=$(find $pkgdir -name pterodactyl-panel.sh -exec dirname {} \; | sed "s|$pkgdir||") + sed -i "s|%VERSION%|$pkgver|" "${pkgdir}${compose_path}/pterodactyl-panel.sh" + chown -R 1337:1337 "${pkgdir}${compose_path}" } diff --git a/Makefile b/Makefile index 6ca9f61..6d552b8 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,22 @@ -PODMAN_DIR=/opt/podman +PREFIX ?= /usr +SHARE_DIR=$(PREFIX)/share APP_TIMEZONE=$(shell readlink /etc/localtime | awk -F'/' '{print $$(NF-1)"/"$$(NF)}') MYSQL_PASSWORD=$(shell head /dev/urandom | tr -dc 'A-Za-z0-9!?,.$%&+-:<=>@_' | head -c32) MYSQL_ROOT_PASSWORD=$(shell head /dev/urandom | tr -dc 'A-Za-z0-9!?,.$%&+-:<=>@_' | head -c32) +HOST_ACTIVE_IP=$(shell ip a | grep "state UP" -A2 | grep inet | awk '{$$1=$$1};1 {split($$2,a,"/"); print a[1]} ') install: install-compose install-compose: - install -vDm 755 docker-compose.yml.in "$(DESTDIR)$(PODMAN_DIR)/pterodactyl-panel/docker-compose.yml" - sed -i "s|%APP_TIMEZONE%|$(APP_TIMEZONE)|g" "$(DESTDIR)$(PODMAN_DIR)/pterodactyl-panel/docker-compose.yml" - sed -i "s|%MYSQL_PASSWORD%|$(MYSQL_PASSWORD)|g" "$(DESTDIR)$(PODMAN_DIR)/pterodactyl-panel/docker-compose.yml" - sed -i "s|%MYSQL_ROOT_PASSWORD%|$(MYSQL_ROOT_PASSWORD)|g" "$(DESTDIR)$(PODMAN_DIR)/pterodactyl-panel/docker-compose.yml" + install -vDm 755 pterodactyl-panel.sh.in "$(DESTDIR)$(SHARE_DIR)/pterodactyl-panel/pterodactyl-panel.sh" + sed -i "s|%APP_TIMEZONE%|$(APP_TIMEZONE)|g" "$(DESTDIR)$(SHARE_DIR)/pterodactyl-panel/pterodactyl-panel.sh" + sed -i "s|%MYSQL_PASSWORD%|$(MYSQL_PASSWORD)|g" "$(DESTDIR)$(SHARE_DIR)/pterodactyl-panel/pterodactyl-panel.sh" + sed -i "s|%MYSQL_ROOT_PASSWORD%|$(MYSQL_ROOT_PASSWORD)|g" "$(DESTDIR)$(SHARE_DIR)/pterodactyl-panel/pterodactyl-panel.sh" + sed -i "s|%HOST_ACTIVE_IP%|$(HOST_ACTIVE_IP)|g" "$(DESTDIR)$(SHARE_DIR)/pterodactyl-panel/pterodactyl-panel.sh" + +install-service: + install -vDm 755 pterodactyl-panel-compose.initd.in "$(DESTDIR)/etc/init.d/pterodactyl-panel-compose" + sed -i "s|%COMPOSEPATH%|$(SHARE_DIR)/pterodactyl-panel/pterodactyl-panel.sh|g" "$(DESTDIR)/etc/init.d/pterodactyl-panel-compose" .PHONY: install diff --git a/docker-compose.yml.in b/docker-compose.yml.in deleted file mode 100644 index 72d2d20..0000000 --- a/docker-compose.yml.in +++ /dev/null @@ -1,55 +0,0 @@ -services: - database: - image: docker.io/mariadb:10.5 - restart: always - command: --default-authentication-plugin=mysql_native_password - volumes: - - "./database:/var/lib/mysql" - environment: - MYSQL_DATABASE: "panel" - MYSQL_USER: "pterodactyl" - MYSQL_PASSWORD: "%MYSQL_PASSWORD%" - MYSQL_ROOT_PASSWORD: "%MYSQL_ROOT_PASSWORD%" - x-podman: - uidmaps: - - 0:0:1 - - 999:1337:1 - gidmaps: - - 0:0:1 - - 999:1337:1 - cache: - image: docker.io/redis:alpine - restart: always - panel: - image: ghcr.io/pterodactyl/panel:v%VERSION% - restart: always - ports: - - "80:80" - - "443:443" - links: - - database - - cache - volumes: - - "./var:/app/var/" - - "./nginx:/etc/nginx/http.d/" - - "./certs:/etc/letsencrypt/" - - "./logs:/app/storage/logs" - environment: - DB_PASSWORD: "%MYSQL_PASSWORD%" - APP_ENV: "production" - APP_ENVIRONMENT_ONLY: "false" - CACHE_DRIVER: "redis" - SESSION_DRIVER: "redis" - QUEUE_DRIVER: "redis" - REDIS_HOST: "cache" - DB_HOST: "database" - DB_PORT: "3306" - RECAPTCHA_ENABLED: "false" - TRUSTED_PROXIES: "*" - APP_TIMEZONE: "%APP_TIMEZONE%" - APP_SERVICE_AUTHOR: "mail@example.com" -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/16 diff --git a/pterodactyl-panel-compose.initd.in b/pterodactyl-panel-compose.initd.in new file mode 100644 index 0000000..3cfe244 --- /dev/null +++ b/pterodactyl-panel-compose.initd.in @@ -0,0 +1,20 @@ +#!/sbin/openrc-run + +name=$RC_SVCNAME +description="Pterodactyl Panel Containerized" +supervisor="supervise-daemon" + +command="/usr/share/pterodactyl-panel/pterodactyl-panel.sh" +command_args="start" +command_user="pterodactyl" + +depend() { + after podman + need podman +} + +stop() { + ebegin "Stopping $RC_SVCNAME" + /usr/share/pterodactyl-panel/pterodactyl-panel.sh stop + eend $? +} diff --git a/pterodactyl-panel-compose.post-deinstall b/pterodactyl-panel-compose.post-deinstall new file mode 100644 index 0000000..114a4ab --- /dev/null +++ b/pterodactyl-panel-compose.post-deinstall @@ -0,0 +1,3 @@ +#!/bin/sh + +deluser pterodactyl 2>/dev/null diff --git a/pterodactyl-panel-compose.post-install b/pterodactyl-panel-compose.post-install new file mode 100644 index 0000000..b3deae4 --- /dev/null +++ b/pterodactyl-panel-compose.post-install @@ -0,0 +1,6 @@ +#!/bin/sh + +addgroup -S -g 1337 pterodactyl 2>/dev/null +adduser -S -h /home/pterodactyl -D -u 1337 -s /bin/bash -G pterodactyl pterodactyl 2>/dev/null + +exit 0 diff --git a/pterodactyl-panel.sh.in b/pterodactyl-panel.sh.in new file mode 100755 index 0000000..adf8b53 --- /dev/null +++ b/pterodactyl-panel.sh.in @@ -0,0 +1,15 @@ +#!/bin/sh + +start() { + printf '%s' database,var,nginx,certs,logs | xargs -d, mkdir 2> /dev/null || true + podman run --rm -d --name "pterodactyl-db" -p 3306:3306 -v ./database:/var/lib/mysql -e MYSQL_DATABASE="panel" -e MYSQL_USER="pterodactyl" -e MYSQL_PASSWORD="%MYSQL_PASSWORD%" -e MYSQL_ROOT_PASSWORD="%MYSQL_ROOT_PASSWORD%" --userns=keep-id:uid=999,gid=999 docker.io/mariadb:10.5 --default-authentication-plugin=mysql_native_password + podman run --rm -d --name "pterodactyl-cache" -p 6379:6379 docker.io/redis:alpine + podman run --rm -d --name "pterodactyl-panel" -p 80:80 -p 443:443 -v ./var:/app/var -v ./nginx:/etc/nginx/http.d -v ./certs:/etc/letsencrypt -v ./logs:/app/storage/logs -e DB_PASSWORD="%MYSQL_PASSWORD%" -e APP_ENV="production" -e APP_ENVIRONMENT_ONLY="false" -e CACHE_DRIVER="redis" -e SESSION_DRIVER="redis" -e QUEUE_DRIVER="redis" -e REDIS_HOST="%HOST_ACTIVE_IP%" -e DB_HOST="%HOST_ACTIVE_IP%" -e DB_PORT="3306" -e TRUSTED_PROXIES="*" -e APP_TIMEZONE="%APP_TIMEZONE%" -e APP_SERVICE_AUTHOR="mail@example.com" ghcr.io/pterodactyl/panel:v%VERSION% +} + +stop() { + podman container stop pterodactyl-db + podman container stop pterodactyl-cache + podman container stop pterodactyl-panel +} +$1