mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-18 05:03:30 +01:00
Compare commits
30 Commits
feat/gpu-a
...
update_ver
| Author | SHA1 | Date | |
|---|---|---|---|
| 8708fb82e1 | |||
| 6d26dc2043 | |||
| 6bdeddee37 | |||
| 25baf6c809 | |||
| f42a7becf5 | |||
| acdb3b5908 | |||
| cb13f5de3c | |||
| c4afe3349b | |||
| dcc4b316a9 | |||
| 7a7c9f9a22 | |||
| c1c223ea45 | |||
| b3629b47da | |||
| 82cdcf7bfe | |||
| a823241d96 | |||
| e64c07e44c | |||
| 21f7914294 | |||
| 30056854c9 | |||
| 15a061f976 | |||
| b279888e96 | |||
| c9dd003445 | |||
| 39821677f0 | |||
| 4b3ebfc8ec | |||
| 4f2c707605 | |||
| 360eff6951 | |||
| 3b80730873 | |||
| f9baa783b0 | |||
| 3a9d03fdb7 | |||
| 8e3da31471 | |||
| d058dc515e | |||
| 03a8071ef4 |
27
CHANGELOG.md
27
CHANGELOG.md
@ -12,6 +12,33 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
## 2025-12-17
|
## 2025-12-17
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Tracktor: updated environment variables for latest release [@javedh-dev](https://github.com/javedh-dev) ([#10067](https://github.com/community-scripts/ProxmoxVE/pull/10067))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Semaphore: Fix release binary package fetching [@tremor021](https://github.com/tremor021) ([#10055](https://github.com/community-scripts/ProxmoxVE/pull/10055))
|
||||||
|
- update github repo for endurain [@johanngrobe](https://github.com/johanngrobe) ([#10074](https://github.com/community-scripts/ProxmoxVE/pull/10074))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- use setup_hwaccel for robust hardware acceleration [@MickLesk](https://github.com/MickLesk) ([#10054](https://github.com/community-scripts/ProxmoxVE/pull/10054))
|
||||||
|
- add hardware acceleration support for 17 additional apps [@MickLesk](https://github.com/MickLesk) ([#10061](https://github.com/community-scripts/ProxmoxVE/pull/10061))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Telegraf: Small refactor [@tremor021](https://github.com/tremor021) ([#10056](https://github.com/community-scripts/ProxmoxVE/pull/10056))
|
||||||
|
- Refactor: Salt [@tremor021](https://github.com/tremor021) ([#10057](https://github.com/community-scripts/ProxmoxVE/pull/10057))
|
||||||
|
- Refactor: Resilio Sync [@tremor021](https://github.com/tremor021) ([#10058](https://github.com/community-scripts/ProxmoxVE/pull/10058))
|
||||||
|
- Refactor: Reitti [@tremor021](https://github.com/tremor021) ([#10059](https://github.com/community-scripts/ProxmoxVE/pull/10059))
|
||||||
|
- Refactor: Redis [@tremor021](https://github.com/tremor021) ([#10060](https://github.com/community-scripts/ProxmoxVE/pull/10060))
|
||||||
|
- Refactor: Reactive-Resume [@tremor021](https://github.com/tremor021) ([#10062](https://github.com/community-scripts/ProxmoxVE/pull/10062))
|
||||||
|
- Refactor: RDTClient [@tremor021](https://github.com/tremor021) ([#10064](https://github.com/community-scripts/ProxmoxVE/pull/10064))
|
||||||
|
- Refactor: RabbitMQ [@tremor021](https://github.com/tremor021) ([#10065](https://github.com/community-scripts/ProxmoxVE/pull/10065))
|
||||||
|
- Qdrant: Code cleanup [@tremor021](https://github.com/tremor021) ([#10066](https://github.com/community-scripts/ProxmoxVE/pull/10066))
|
||||||
|
- Refactor: Pterodactyl Wings [@tremor021](https://github.com/tremor021) ([#10069](https://github.com/community-scripts/ProxmoxVE/pull/10069))
|
||||||
|
|
||||||
## 2025-12-16
|
## 2025-12-16
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
@ -28,7 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "endurain" "joaovitoriasilva/endurain"; then
|
if check_for_gh_release "endurain" "endurain-project/endurain"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop endurain
|
systemctl stop endurain
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
@ -38,7 +38,7 @@ function update_script() {
|
|||||||
cp /opt/endurain/frontend/app/dist/env.js /opt/endurain.env.js
|
cp /opt/endurain/frontend/app/dist/env.js /opt/endurain.env.js
|
||||||
msg_ok "Created Backup"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "endurain" "joaovitoriasilva/endurain" "tarball" "latest" "/opt/endurain"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
msg_info "Preparing Update"
|
msg_info "Preparing Update"
|
||||||
cd /opt/endurain
|
cd /opt/endurain
|
||||||
|
|||||||
@ -23,29 +23,23 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /usr/local/bin/wings ]]; then
|
if [[ ! -x /usr/local/bin/wings ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if check_for_gh_release "wings" "pterodactyl/wings"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop wings
|
systemctl stop wings
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
rm /usr/local/bin/wings
|
rm /usr/local/bin/wings
|
||||||
curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings"
|
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
|
||||||
chmod u+x /usr/local/bin/wings
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start wings
|
systemctl start wings
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,16 +29,11 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
if grep -q "dl.cloudsmith.io" /etc/apt/sources.list.d/rabbitmq.list; then
|
if grep -q "dl.cloudsmith.io" /etc/apt/sources.list.d/rabbitmq.list; then
|
||||||
rm -f /etc/apt/sources.list.d/rabbitmq.list
|
rm -f /etc/apt/sources.list.d/rabbitmq.list
|
||||||
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
setup_deb822_repo \
|
||||||
## Modern Erlang/OTP releases
|
"rabbitmq" \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
|
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
|
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
|
||||||
|
"trixie"
|
||||||
## Provides modern RabbitMQ releases
|
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
|
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
|
|
||||||
EOF
|
|
||||||
$STD apt update
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
|
|||||||
@ -41,7 +41,7 @@ function update_script() {
|
|||||||
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||||
$STD apt remove --purge -y dotnet-sdk-8.0
|
$STD apt remove --purge -y dotnet-sdk-8.0
|
||||||
$STD apt install -y dotnet-sdk-9.0
|
$STD apt install -y aspnetcore-runtime-9.0
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/rdtc-backup
|
rm -rf /opt/rdtc-backup
|
||||||
|
|
||||||
|
|||||||
@ -33,12 +33,11 @@ function update_script() {
|
|||||||
systemctl stop Reactive-Resume
|
systemctl stop Reactive-Resume
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
cp /opt/"$APP"/.env /opt/rxresume.env
|
cp /opt/Reactive-Resume/.env /opt/rxresume.env
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
|
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
|
||||||
|
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating Reactive-Resume"
|
||||||
cd /opt/"$APP"
|
cd /opt/Reactive-Resume
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
export CI="true"
|
export CI="true"
|
||||||
@ -46,8 +45,8 @@ function update_script() {
|
|||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
$STD pnpm run prisma:generate
|
$STD pnpm run prisma:generate
|
||||||
mv /opt/rxresume.env /opt/"$APP"/.env
|
mv /opt/rxresume.env /opt/Reactive-Resume/.env
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated Reactive-Resume"
|
||||||
|
|
||||||
msg_info "Updating Minio"
|
msg_info "Updating Minio"
|
||||||
systemctl stop minio
|
systemctl stop minio
|
||||||
|
|||||||
@ -27,9 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
msg_info "Updating $APP LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt upgrade -y
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Updated $APP LXC"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@ -20,18 +20,18 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /var/lib/resilio-sync ]]; then
|
if [[ ! -d /var/lib/resilio-sync ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y upgrade
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating Resilio Sync"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@ -29,16 +29,14 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
RELEASE=$(get_latest_github_release "saltstack/salt")
|
||||||
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
|
if check_for_gh_release "salt" "saltstack/salt"; then
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating Salt"
|
||||||
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
|
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
echo "${RELEASE}" >/~.salt
|
echo "${RELEASE}" >/~.salt
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "${APP} is already up to date (${RELEASE})"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,7 +33,7 @@ function update_script() {
|
|||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
|
|||||||
@ -34,7 +34,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Telegraf"
|
msg_info "Updating Telegraf"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade telegraf -y
|
$STD apt upgrade -y telegraf
|
||||||
msg_ok "Updated Telegraf"
|
msg_ok "Updated Telegraf"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@ -34,38 +34,39 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Correcting Services"
|
msg_info "Correcting Services"
|
||||||
if [ -f /opt/tracktor/app/backend/.env ]; then
|
|
||||||
mv /opt/tracktor/app/backend/.env /opt/tracktor.env
|
|
||||||
echo 'AUTH_PIN=123456' >>/opt/tracktor.env
|
|
||||||
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=/opt/tracktor.env|' /etc/systemd/system/tracktor.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
if [ ! -d "/opt/tracktor-data/uploads" ]; then
|
if [ ! -d "/opt/tracktor-data/uploads" ]; then
|
||||||
mkdir -p /opt/tracktor-data/{uploads,logs}
|
mkdir -p /opt/tracktor-data/{uploads,logs}
|
||||||
EXISTING_AUTH_PIN=$(grep '^AUTH_PIN=' /opt/tracktor.env 2>/dev/null | cut -d'=' -f2)
|
fi
|
||||||
AUTH_PIN=${EXISTING_AUTH_PIN:-123456}
|
if ! grep -qxF 'BODY_SIZE_LIMIT=Infinity' /opt/tracktor.env; then
|
||||||
cat <<EOF >/opt/tracktor.env
|
rm /opt/tracktor.env
|
||||||
|
cat <<EOF >/opt/tracktor.env
|
||||||
|
cat <<EOF >/opt/tracktor.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
|
# Set this to the path of the database file. Default - ./tracktor.db
|
||||||
DB_PATH=/opt/tracktor-data/tracktor.db
|
DB_PATH=/opt/tracktor-data/tracktor.db
|
||||||
|
# Set this to the path of the uploads directory. Default - ./uploads
|
||||||
UPLOADS_DIR="/opt/tracktor-data/uploads"
|
UPLOADS_DIR="/opt/tracktor-data/uploads"
|
||||||
|
# Set this to the path of the logs directory. Default - ./logs
|
||||||
LOG_DIR="/opt/tracktor-data/logs"
|
LOG_DIR="/opt/tracktor-data/logs"
|
||||||
# If server host is not set by default it will run on all interfaces - 0.0.0.0
|
# Hostname to bind the server to. Default - 0.0.0.0
|
||||||
# SERVER_HOST=""
|
#HOST="0.0.0.0"
|
||||||
SERVER_PORT=3000
|
# Port to bind the server to. Default - 3000
|
||||||
# Set this if you want to secure your endpoints otherwise default will be "*"
|
#PORT=3000
|
||||||
CORS_ORIGINS="*"
|
# Set this to remove upload size limitations. Default - 512 Kb
|
||||||
# Set this if you are using backend and frontend separately.
|
BODY_SIZE_LIMIT=Infinity
|
||||||
# PUBLIC_API_BASE_URL=""
|
# Enable request logging. Default - true
|
||||||
LOG_REQUESTS=true
|
#LOG_REQUESTS=true
|
||||||
LOG_LEVEL="info"
|
# Set the logging level. Options - error, warn, info, verbose, debug, silly. Default - info
|
||||||
AUTH_PIN=${AUTH_PIN}
|
#LOG_LEVEL="info"
|
||||||
# PUBLIC_DEMO_MODE=false
|
# Enable demo mode. Default - false
|
||||||
# FORCE_DATA_SEED=false
|
#TRACKTOR_DEMO_MODE=false
|
||||||
|
# Force reseeding of data on every startup. Default - false
|
||||||
|
#FORCE_DATA_SEED=false
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
msg_ok "Corrected Services"
|
msg_ok "Corrected Services"
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
||||||
|
|
||||||
msg_info "Updating tracktor"
|
msg_info "Updating tracktor"
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://pterodactyl.io/wings/1.0/installing.html",
|
"documentation": "https://pterodactyl.io/wings/1.0/installing.html",
|
||||||
"website": "https://pterodactyl.io",
|
"website": "https://pterodactyl.io",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pterodactyl.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pterodactyl.webp",
|
||||||
"config_path": "",
|
"config_path": "/etc/pterodactyl/config.yml",
|
||||||
"description": "Pterodactyl Wings is Pterodactyl's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.",
|
"description": "Pterodactyl Wings is Pterodactyl's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,4 +1,189 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "javedh-dev/tracktor",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"date": "2025-12-17T23:14:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "goauthentik/authentik",
|
||||||
|
"version": "version/2025.12.0-rc2",
|
||||||
|
"date": "2025-12-17T22:03:04Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.13.5-rc0",
|
||||||
|
"date": "2025-12-17T21:13:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fccview/jotty",
|
||||||
|
"version": "1.14.0",
|
||||||
|
"date": "2025-12-17T20:26:22Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "emqx/emqx",
|
||||||
|
"version": "6.1.0-alpha.2",
|
||||||
|
"date": "2025-12-17T20:15:23Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "influxdata/influxdb",
|
||||||
|
"version": "v2.8.0",
|
||||||
|
"date": "2025-12-12T20:25:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HydroshieldMKII/Guardian",
|
||||||
|
"version": "v1.3.2",
|
||||||
|
"date": "2025-12-17T19:31:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coder/code-server",
|
||||||
|
"version": "v4.107.0",
|
||||||
|
"date": "2025-12-17T18:59:21Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "metabase/metabase",
|
||||||
|
"version": "v0.57.7",
|
||||||
|
"date": "2025-12-17T18:16:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "immich-app/immich",
|
||||||
|
"version": "v2.4.0",
|
||||||
|
"date": "2025-12-17T17:44:24Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BerriAI/litellm",
|
||||||
|
"version": "v1.80.10.rc.4",
|
||||||
|
"date": "2025-12-17T17:43:28Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "openobserve/openobserve",
|
||||||
|
"version": "v0.30.1",
|
||||||
|
"date": "2025-12-17T17:34:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "comfyanonymous/ComfyUI",
|
||||||
|
"version": "v0.5.0",
|
||||||
|
"date": "2025-12-17T16:48:33Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "scanopy/scanopy",
|
||||||
|
"version": "v0.12.2",
|
||||||
|
"date": "2025-12-17T16:01:43Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "semaphoreui/semaphore",
|
||||||
|
"version": "v2.16.47",
|
||||||
|
"date": "2025-12-17T15:36:28Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NodeBB/NodeBB",
|
||||||
|
"version": "v4.7.1",
|
||||||
|
"date": "2025-12-17T15:18:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.123.7",
|
||||||
|
"date": "2025-12-17T14:01:25Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zabbix/zabbix",
|
||||||
|
"version": "7.2.15",
|
||||||
|
"date": "2025-12-17T13:25:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "chrisbenincasa/tunarr",
|
||||||
|
"version": "v1.0.5",
|
||||||
|
"date": "2025-12-17T12:48:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bunkerity/bunkerweb",
|
||||||
|
"version": "testing",
|
||||||
|
"date": "2025-12-16T11:13:20Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "traefik/traefik",
|
||||||
|
"version": "v2.11.33",
|
||||||
|
"date": "2025-12-17T10:10:19Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mattermost/mattermost",
|
||||||
|
"version": "v11.1.2",
|
||||||
|
"date": "2025-12-17T09:26:24Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coollabsio/coolify",
|
||||||
|
"version": "v4.0.0-beta.455",
|
||||||
|
"date": "2025-12-17T09:24:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TuroYT/snowshare",
|
||||||
|
"version": "v1.2.2",
|
||||||
|
"date": "2025-12-17T09:07:12Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zitadel/zitadel",
|
||||||
|
"version": "v4.7.6",
|
||||||
|
"date": "2025-12-17T08:56:54Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SigNoz/signoz",
|
||||||
|
"version": "v0.105.1",
|
||||||
|
"date": "2025-12-17T08:48:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meilisearch/meilisearch",
|
||||||
|
"version": "prototype-v1.30.1-rebuild-hannoy-graph.0",
|
||||||
|
"date": "2025-12-17T08:38:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "passbolt/passbolt_api",
|
||||||
|
"version": "v5.8.0-test.3",
|
||||||
|
"date": "2025-12-17T08:38:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jupyter/notebook",
|
||||||
|
"version": "@jupyter-notebook/ui-components@7.6.0-alpha.0",
|
||||||
|
"date": "2025-12-17T08:35:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zwave-js/zwave-js-ui",
|
||||||
|
"version": "v11.9.0",
|
||||||
|
"date": "2025-12-17T08:26:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "v6.4.14",
|
||||||
|
"date": "2025-12-16T05:42:34Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nzbgetcom/nzbget",
|
||||||
|
"version": "v25.4",
|
||||||
|
"date": "2025-10-09T10:27:01Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.24.468",
|
||||||
|
"date": "2025-12-17T05:55:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nickheyer/discopanel",
|
||||||
|
"version": "v1.0.16",
|
||||||
|
"date": "2025-12-17T04:47:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "9001/copyparty",
|
||||||
|
"version": "v1.19.23",
|
||||||
|
"date": "2025-12-17T00:51:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jeedom/core",
|
||||||
|
"version": "4.5",
|
||||||
|
"date": "2025-12-17T00:27:05Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "steveiliop56/tinyauth",
|
||||||
|
"version": "v4.1.0",
|
||||||
|
"date": "2025-11-23T12:13:34Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "esphome/esphome",
|
"name": "esphome/esphome",
|
||||||
"version": "2025.12.0",
|
"version": "2025.12.0",
|
||||||
@ -20,80 +205,40 @@
|
|||||||
"date": "2025-12-16T21:19:10Z"
|
"date": "2025-12-16T21:19:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "metabase/metabase",
|
"name": "keycloak/keycloak",
|
||||||
"version": "v0.57.x",
|
"version": "26.4.7",
|
||||||
"date": "2025-12-16T19:20:02Z"
|
"date": "2025-12-01T08:14:11Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "prometheus-pve/prometheus-pve-exporter",
|
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||||
"version": "v3.7.0",
|
"version": "v3.7.0",
|
||||||
"date": "2025-12-16T19:01:35Z"
|
"date": "2025-12-16T19:01:35Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.24.462",
|
|
||||||
"date": "2025-12-16T19:01:01Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "netbox-community/netbox",
|
"name": "netbox-community/netbox",
|
||||||
"version": "v4.4.8",
|
"version": "v4.4.8",
|
||||||
"date": "2025-12-09T16:29:50Z"
|
"date": "2025-12-09T16:29:50Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "goauthentik/authentik",
|
|
||||||
"version": "version/2025.10.3",
|
|
||||||
"date": "2025-12-16T18:00:53Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "crafty-controller/crafty-4",
|
"name": "crafty-controller/crafty-4",
|
||||||
"version": "v4.6.2",
|
"version": "v4.6.2",
|
||||||
"date": "2025-12-16T17:54:19Z"
|
"date": "2025-12-16T17:54:19Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "chrisbenincasa/tunarr",
|
|
||||||
"version": "v1.0.4",
|
|
||||||
"date": "2025-12-16T17:31:11Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "fuma-nama/fumadocs",
|
"name": "fuma-nama/fumadocs",
|
||||||
"version": "fumadocs-mdx@14.1.1",
|
"version": "fumadocs-mdx@14.1.1",
|
||||||
"date": "2025-12-16T15:32:59Z"
|
"date": "2025-12-16T15:32:59Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "traefik/traefik",
|
|
||||||
"version": "v3.6.5",
|
|
||||||
"date": "2025-12-16T15:05:09Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "meilisearch/meilisearch",
|
|
||||||
"version": "prototype-v1.30.0-support-aws-irsa.2",
|
|
||||||
"date": "2025-12-16T14:35:14Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jenkinsci/jenkins",
|
"name": "jenkinsci/jenkins",
|
||||||
"version": "jenkins-2.542",
|
"version": "jenkins-2.542",
|
||||||
"date": "2025-12-16T13:49:44Z"
|
"date": "2025-12-16T13:49:44Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "TuroYT/snowshare",
|
|
||||||
"version": "v1.2.1",
|
|
||||||
"date": "2025-12-16T13:34:04Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "release-argus/Argus",
|
"name": "release-argus/Argus",
|
||||||
"version": "0.28.2",
|
"version": "0.28.2",
|
||||||
"date": "2025-12-16T12:36:26Z"
|
"date": "2025-12-16T12:36:26Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "bunkerity/bunkerweb",
|
|
||||||
"version": "v1.6.6",
|
|
||||||
"date": "2025-11-24T15:30:21Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "zabbix/zabbix",
|
|
||||||
"version": "7.2.15rc2",
|
|
||||||
"date": "2025-12-16T10:23:14Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "prometheus/prometheus",
|
"name": "prometheus/prometheus",
|
||||||
"version": "v3.8.1",
|
"version": "v3.8.1",
|
||||||
@ -104,66 +249,21 @@
|
|||||||
"version": "v4.36.2",
|
"version": "v4.36.2",
|
||||||
"date": "2025-12-03T22:46:29Z"
|
"date": "2025-12-03T22:46:29Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "n8n-io/n8n",
|
|
||||||
"version": "n8n@1.123.6",
|
|
||||||
"date": "2025-12-15T14:22:59Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "sabnzbd/sabnzbd",
|
"name": "sabnzbd/sabnzbd",
|
||||||
"version": "4.5.5",
|
"version": "4.5.5",
|
||||||
"date": "2025-10-24T11:12:22Z"
|
"date": "2025-10-24T11:12:22Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "mattermost/mattermost",
|
|
||||||
"version": "v11.2.1",
|
|
||||||
"date": "2025-12-16T07:40:44Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jupyter/notebook",
|
|
||||||
"version": "v7.5.1",
|
|
||||||
"date": "2025-12-16T07:39:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "morpheus65535/bazarr",
|
"name": "morpheus65535/bazarr",
|
||||||
"version": "v1.5.3",
|
"version": "v1.5.3",
|
||||||
"date": "2025-09-20T12:12:33Z"
|
"date": "2025-09-20T12:12:33Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "firefly-iii/firefly-iii",
|
|
||||||
"version": "v6.4.14",
|
|
||||||
"date": "2025-12-16T05:42:34Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.13.4-rc2",
|
|
||||||
"date": "2025-12-16T02:57:20Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jeedom/core",
|
|
||||||
"version": "4.5",
|
|
||||||
"date": "2025-12-16T00:27:09Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "steveiliop56/tinyauth",
|
|
||||||
"version": "v4.1.0",
|
|
||||||
"date": "2025-11-23T12:13:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Stirling-Tools/Stirling-PDF",
|
"name": "Stirling-Tools/Stirling-PDF",
|
||||||
"version": "v2.1.4",
|
"version": "v2.1.4",
|
||||||
"date": "2025-12-16T00:02:18Z"
|
"date": "2025-12-16T00:02:18Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "scanopy/scanopy",
|
|
||||||
"version": "v0.12.1",
|
|
||||||
"date": "2025-12-15T22:21:36Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "semaphoreui/semaphore",
|
|
||||||
"version": "v2.16.46",
|
|
||||||
"date": "2025-12-15T22:07:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "azukaar/Cosmos-Server",
|
"name": "azukaar/Cosmos-Server",
|
||||||
"version": "v0.19.0",
|
"version": "v0.19.0",
|
||||||
@ -179,11 +279,6 @@
|
|||||||
"version": "v4.1.0",
|
"version": "v4.1.0",
|
||||||
"date": "2025-12-15T18:53:25Z"
|
"date": "2025-12-15T18:53:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.4.7",
|
|
||||||
"date": "2025-12-01T08:14:11Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "rabbitmq/rabbitmq-server",
|
"name": "rabbitmq/rabbitmq-server",
|
||||||
"version": "v4.2.2",
|
"version": "v4.2.2",
|
||||||
@ -254,21 +349,6 @@
|
|||||||
"version": "v10.11.5",
|
"version": "v10.11.5",
|
||||||
"date": "2025-12-15T02:44:19Z"
|
"date": "2025-12-15T02:44:19Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "9001/copyparty",
|
|
||||||
"version": "v1.19.22",
|
|
||||||
"date": "2025-12-14T23:38:57Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "BerriAI/litellm",
|
|
||||||
"version": "v1.80.10.rc.2",
|
|
||||||
"date": "2025-12-14T22:47:12Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "nickheyer/discopanel",
|
|
||||||
"version": "v1.0.15",
|
|
||||||
"date": "2025-12-14T21:49:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "AlexxIT/go2rtc",
|
"name": "AlexxIT/go2rtc",
|
||||||
"version": "v1.9.13",
|
"version": "v1.9.13",
|
||||||
@ -382,28 +462,18 @@
|
|||||||
{
|
{
|
||||||
"name": "mealie-recipes/mealie",
|
"name": "mealie-recipes/mealie",
|
||||||
"version": "v3.7.0",
|
"version": "v3.7.0",
|
||||||
"date": "2025-12-13T01:20:58Z"
|
"date": "2025-12-13T01:21:07Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "paperless-ngx/paperless-ngx",
|
"name": "paperless-ngx/paperless-ngx",
|
||||||
"version": "v2.20.2",
|
"version": "v2.20.2",
|
||||||
"date": "2025-12-12T23:47:48Z"
|
"date": "2025-12-12T23:47:48Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "fccview/jotty",
|
|
||||||
"version": "1.13.1",
|
|
||||||
"date": "2025-12-12T21:34:22Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mongodb/mongo",
|
"name": "mongodb/mongo",
|
||||||
"version": "r7.0.27",
|
"version": "r7.0.27",
|
||||||
"date": "2025-12-12T20:54:32Z"
|
"date": "2025-12-12T20:54:32Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "influxdata/influxdb",
|
|
||||||
"version": "v2.8.0",
|
|
||||||
"date": "2025-12-12T20:25:00Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "homarr-labs/homarr",
|
"name": "homarr-labs/homarr",
|
||||||
"version": "v1.46.0",
|
"version": "v1.46.0",
|
||||||
@ -424,16 +494,6 @@
|
|||||||
"version": "4.1.2",
|
"version": "4.1.2",
|
||||||
"date": "2025-12-03T16:12:05Z"
|
"date": "2025-12-03T16:12:05Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "openobserve/openobserve",
|
|
||||||
"version": "v0.30.0",
|
|
||||||
"date": "2025-12-12T14:03:52Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "zitadel/zitadel",
|
|
||||||
"version": "v4.7.5",
|
|
||||||
"date": "2025-12-12T13:54:02Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ventoy/Ventoy",
|
"name": "ventoy/Ventoy",
|
||||||
"version": "v1.1.09",
|
"version": "v1.1.09",
|
||||||
@ -444,11 +504,6 @@
|
|||||||
"version": "v2.2.0.102-2.2.0.102_canary_2025-12-12",
|
"version": "v2.2.0.102-2.2.0.102_canary_2025-12-12",
|
||||||
"date": "2025-12-12T12:03:15Z"
|
"date": "2025-12-12T12:03:15Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "passbolt/passbolt_api",
|
|
||||||
"version": "v5.8.0-test.2",
|
|
||||||
"date": "2025-12-12T11:43:11Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Luligu/matterbridge",
|
"name": "Luligu/matterbridge",
|
||||||
"version": "3.4.3",
|
"version": "3.4.3",
|
||||||
@ -459,11 +514,6 @@
|
|||||||
"version": "v8.3.7",
|
"version": "v8.3.7",
|
||||||
"date": "2025-12-12T09:13:40Z"
|
"date": "2025-12-12T09:13:40Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "coder/code-server",
|
|
||||||
"version": "v4.106.3",
|
|
||||||
"date": "2025-12-01T22:06:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "theonedev/onedev",
|
"name": "theonedev/onedev",
|
||||||
"version": "v13.1.5",
|
"version": "v13.1.5",
|
||||||
@ -479,11 +529,6 @@
|
|||||||
"version": "0.43.1",
|
"version": "0.43.1",
|
||||||
"date": "2025-12-11T22:45:52Z"
|
"date": "2025-12-11T22:45:52Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "coollabsio/coolify",
|
|
||||||
"version": "v4.0.0-beta.454",
|
|
||||||
"date": "2025-12-11T20:37:05Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "msgbyte/tianji",
|
"name": "msgbyte/tianji",
|
||||||
"version": "v1.30.22",
|
"version": "v1.30.22",
|
||||||
@ -519,11 +564,6 @@
|
|||||||
"version": "v1.72.1",
|
"version": "v1.72.1",
|
||||||
"date": "2025-12-10T14:55:44Z"
|
"date": "2025-12-10T14:55:44Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "nzbgetcom/nzbget",
|
|
||||||
"version": "v25.4",
|
|
||||||
"date": "2025-10-09T10:27:01Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "evcc-io/evcc",
|
"name": "evcc-io/evcc",
|
||||||
"version": "0.211.1",
|
"version": "0.211.1",
|
||||||
@ -539,11 +579,6 @@
|
|||||||
"version": "2.2.15",
|
"version": "2.2.15",
|
||||||
"date": "2025-12-10T01:52:14Z"
|
"date": "2025-12-10T01:52:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "comfyanonymous/ComfyUI",
|
|
||||||
"version": "v0.4.0",
|
|
||||||
"date": "2025-12-10T00:11:48Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "pelican-dev/panel",
|
"name": "pelican-dev/panel",
|
||||||
"version": "v1.0.0-beta29",
|
"version": "v1.0.0-beta29",
|
||||||
@ -694,11 +729,6 @@
|
|||||||
"version": "v3.3.0",
|
"version": "v3.3.0",
|
||||||
"date": "2025-12-06T06:18:23Z"
|
"date": "2025-12-06T06:18:23Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "HydroshieldMKII/Guardian",
|
|
||||||
"version": "v1.3.1",
|
|
||||||
"date": "2025-12-05T19:12:48Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "community-scripts/ProxmoxVE-Local",
|
"name": "community-scripts/ProxmoxVE-Local",
|
||||||
"version": "v0.5.2",
|
"version": "v0.5.2",
|
||||||
@ -709,11 +739,6 @@
|
|||||||
"version": "flowise@3.0.12",
|
"version": "flowise@3.0.12",
|
||||||
"date": "2025-12-05T15:02:01Z"
|
"date": "2025-12-05T15:02:01Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "emqx/emqx",
|
|
||||||
"version": "e6.1.0-streams.1",
|
|
||||||
"date": "2025-12-05T12:27:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "transmission/transmission",
|
"name": "transmission/transmission",
|
||||||
"version": "4.0.1-beta.1",
|
"version": "4.0.1-beta.1",
|
||||||
@ -759,11 +784,6 @@
|
|||||||
"version": "6.2.10",
|
"version": "6.2.10",
|
||||||
"date": "2025-12-03T13:58:32Z"
|
"date": "2025-12-03T13:58:32Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "SigNoz/signoz",
|
|
||||||
"version": "v0.104.0",
|
|
||||||
"date": "2025-12-03T06:48:38Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hyperion-project/hyperion.ng",
|
"name": "hyperion-project/hyperion.ng",
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
@ -869,11 +889,6 @@
|
|||||||
"version": "v3.13",
|
"version": "v3.13",
|
||||||
"date": "2025-11-30T08:52:20Z"
|
"date": "2025-11-30T08:52:20Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zwave-js/zwave-js-ui",
|
|
||||||
"version": "v11.8.2",
|
|
||||||
"date": "2025-11-30T08:39:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ErsatzTV/ErsatzTV",
|
"name": "ErsatzTV/ErsatzTV",
|
||||||
"version": "v25.9.0",
|
"version": "v25.9.0",
|
||||||
@ -934,11 +949,6 @@
|
|||||||
"version": "v0.9.101",
|
"version": "v0.9.101",
|
||||||
"date": "2025-11-26T17:14:35Z"
|
"date": "2025-11-26T17:14:35Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "NodeBB/NodeBB",
|
|
||||||
"version": "v4.7.0",
|
|
||||||
"date": "2025-11-26T16:59:45Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "NLnetLabs/unbound",
|
"name": "NLnetLabs/unbound",
|
||||||
"version": "release-1.24.2",
|
"version": "release-1.24.2",
|
||||||
@ -1039,11 +1049,6 @@
|
|||||||
"version": "5.12.0",
|
"version": "5.12.0",
|
||||||
"date": "2025-11-20T06:18:58Z"
|
"date": "2025-11-20T06:18:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "immich-app/immich",
|
|
||||||
"version": "v2.3.1",
|
|
||||||
"date": "2025-11-20T03:10:27Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "nextcloud/nextcloudpi",
|
"name": "nextcloud/nextcloudpi",
|
||||||
"version": "v1.56.0",
|
"version": "v1.56.0",
|
||||||
@ -1179,11 +1184,6 @@
|
|||||||
"version": "v0.9.1",
|
"version": "v0.9.1",
|
||||||
"date": "2025-11-06T02:26:53Z"
|
"date": "2025-11-06T02:26:53Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "javedh-dev/tracktor",
|
|
||||||
"version": "0.5.1",
|
|
||||||
"date": "2025-11-05T16:14:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "getumbrel/umbrel",
|
"name": "getumbrel/umbrel",
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
|
|||||||
@ -29,19 +29,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|||||||
exit 10
|
exit 10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
setup_hwaccel
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
|
||||||
$STD apt-get -y install \
|
|
||||||
va-driver-all \
|
|
||||||
ocl-icd-libopencl1 \
|
|
||||||
intel-opencl-icd
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Installing Channels DVR Server (Patience)"
|
msg_info "Installing Channels DVR Server (Patience)"
|
||||||
cd /opt
|
cd /opt
|
||||||
|
|||||||
@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
|
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ NODE_VERSION="24" setup_nodejs
|
|||||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||||
PG_DB_NAME="enduraindb" PG_DB_USER="endurain" setup_postgresql_db
|
PG_DB_NAME="enduraindb" PG_DB_USER="endurain" setup_postgresql_db
|
||||||
import_local_ip
|
import_local_ip
|
||||||
fetch_and_deploy_gh_release "endurain" "joaovitoriasilva/endurain" "tarball" "latest" "/opt/endurain"
|
fetch_and_deploy_gh_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
msg_info "Setting up Endurain"
|
msg_info "Setting up Endurain"
|
||||||
cd /opt/endurain
|
cd /opt/endurain
|
||||||
|
|||||||
@ -13,38 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
|
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
||||||
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
EOF
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
else
|
|
||||||
msg_info "Installing Intel Hardware Acceleration"
|
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
fi
|
|
||||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||||
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||||
|
|||||||
@ -21,27 +21,7 @@ $STD apt-get install -y \
|
|||||||
imagemagick
|
imagemagick
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
|
setup_hwaccel
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
||||||
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
EOF
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
else
|
|
||||||
msg_info "Installing Intel Hardware Acceleration"
|
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
fi
|
|
||||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing ASP.NET Core Runtime"
|
msg_info "Installing ASP.NET Core Runtime"
|
||||||
curl -fsSL https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
|
curl -fsSL https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
|
||||||
|
|||||||
@ -33,14 +33,7 @@ chmod +x go2rtc
|
|||||||
$STD ln -svf /usr/local/go2rtc/bin/go2rtc /usr/local/bin/go2rtc
|
$STD ln -svf /usr/local/go2rtc/bin/go2rtc /usr/local/bin/go2rtc
|
||||||
msg_ok "Installed go2rtc"
|
msg_ok "Installed go2rtc"
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
||||||
cd ~
|
cd ~
|
||||||
|
|||||||
@ -75,12 +75,13 @@ $STD apt install -y jellyfin-ffmpeg7
|
|||||||
ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
|
ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
|
||||||
ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
||||||
|
|
||||||
|
# Set permissions for /dev/dri (only in privileged containers and if /dev/dri exists)
|
||||||
if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then
|
if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then
|
||||||
chgrp video /dev/dri
|
chgrp video /dev/dri 2>/dev/null || true
|
||||||
chmod 755 /dev/dri
|
chmod 755 /dev/dri 2>/dev/null || true
|
||||||
chmod 660 /dev/dri/*
|
chmod 660 /dev/dri/* 2>/dev/null || true
|
||||||
$STD adduser "$(id -u -n)" video
|
$STD adduser "$(id -u -n)" video 2>/dev/null || true
|
||||||
$STD adduser "$(id -u -n)" render
|
$STD adduser "$(id -u -n)" render 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
msg_ok "Dependencies Installed"
|
msg_ok "Dependencies Installed"
|
||||||
|
|
||||||
|
|||||||
@ -13,25 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
|
||||||
else
|
|
||||||
$STD apt -y install intel-opencl-icd
|
|
||||||
fi
|
|
||||||
|
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Jellyfin"
|
msg_info "Installing Jellyfin"
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||||
|
|||||||
@ -41,16 +41,11 @@ EOF
|
|||||||
$STD apt update
|
$STD apt update
|
||||||
msg_ok "Set up Intel® Repositories"
|
msg_ok "Set up Intel® Repositories"
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools,intel-level-zero-gpu,level-zero,level-zero-dev}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
msg_info "Installing Intel® Level Zero"
|
||||||
chgrp video /dev/dri
|
$STD apt -y install intel-level-zero-gpu level-zero level-zero-dev 2>/dev/null || true
|
||||||
chmod 755 /dev/dri
|
msg_ok "Installed Intel® Level Zero"
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
||||||
$STD apt install -y --no-install-recommends intel-basekit-2024.1
|
$STD apt install -y --no-install-recommends intel-basekit-2024.1
|
||||||
|
|||||||
@ -17,6 +17,8 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y ffmpeg
|
$STD apt install -y ffmpeg
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
msg_info "Installing Open WebUI"
|
msg_info "Installing Open WebUI"
|
||||||
@ -25,6 +27,36 @@ msg_ok "Installed Open WebUI"
|
|||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Setting up Intel® Repositories"
|
||||||
|
mkdir -p /usr/share/keyrings
|
||||||
|
curl -fsSL https://repositories.intel.com/gpu/intel-graphics.key | gpg --dearmor -o /usr/share/keyrings/intel-graphics.gpg 2>/dev/null || true
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/intel-gpu.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: https://repositories.intel.com/gpu/ubuntu
|
||||||
|
Suites: jammy
|
||||||
|
Components: client
|
||||||
|
Architectures: amd64 i386
|
||||||
|
Signed-By: /usr/share/keyrings/intel-graphics.gpg
|
||||||
|
EOF
|
||||||
|
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor -o /usr/share/keyrings/oneapi-archive-keyring.gpg 2>/dev/null || true
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/oneAPI.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: https://apt.repos.intel.com/oneapi
|
||||||
|
Suites: all
|
||||||
|
Components: main
|
||||||
|
Signed-By: /usr/share/keyrings/oneapi-archive-keyring.gpg
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
msg_ok "Set up Intel® Repositories"
|
||||||
|
|
||||||
|
msg_info "Installing Intel® Level Zero"
|
||||||
|
$STD apt -y install intel-level-zero-gpu level-zero level-zero-dev 2>/dev/null || true
|
||||||
|
msg_ok "Installed Intel® Level Zero"
|
||||||
|
|
||||||
|
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
||||||
|
$STD apt install -y --no-install-recommends intel-basekit-2024.1 2>/dev/null || true
|
||||||
|
msg_ok "Installed Intel® oneAPI Base Toolkit"
|
||||||
|
|
||||||
msg_info "Installing Ollama"
|
msg_info "Installing Ollama"
|
||||||
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
||||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||||
|
|||||||
@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Setting Up Plex Media Server Repository"
|
msg_info "Setting Up Plex Media Server Repository"
|
||||||
curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null
|
curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null
|
||||||
|
|||||||
@ -21,13 +21,8 @@ $STD sh <(curl -fsSL https://get.docker.com)
|
|||||||
systemctl enable -q --now docker
|
systemctl enable -q --now docker
|
||||||
msg_ok "Installed Docker"
|
msg_ok "Installed Docker"
|
||||||
|
|
||||||
msg_info "Installing Pterodactyl Wings"
|
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings"
|
|
||||||
chmod u+x /usr/local/bin/wings
|
|
||||||
mkdir -p /etc/pterodactyl
|
mkdir -p /etc/pterodactyl
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed Pterodactyl Wings"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/wings.service
|
cat <<EOF >/etc/systemd/system/wings.service
|
||||||
|
|||||||
@ -16,13 +16,12 @@ update_os
|
|||||||
fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant"
|
fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant"
|
||||||
|
|
||||||
msg_info "Creating Qdrant Configuration"
|
msg_info "Creating Qdrant Configuration"
|
||||||
mkdir -p /var/lib/qdrant/storage
|
|
||||||
mkdir -p /var/lib/qdrant/snapshots
|
|
||||||
mkdir -p /etc/qdrant
|
mkdir -p /etc/qdrant
|
||||||
|
mkdir -p /var/lib/qdrant/{storage,snapshots}
|
||||||
chown -R root:root /var/lib/qdrant
|
chown -R root:root /var/lib/qdrant
|
||||||
chmod -R 755 /var/lib/qdrant
|
chmod -R 755 /var/lib/qdrant
|
||||||
|
|
||||||
cat >/etc/qdrant/config.yaml <<EOF
|
cat <<EOF >/etc/qdrant/config.yaml
|
||||||
log_level: INFO
|
log_level: INFO
|
||||||
|
|
||||||
storage:
|
storage:
|
||||||
@ -38,7 +37,7 @@ EOF
|
|||||||
msg_ok "Created Qdrant Configuration"
|
msg_ok "Created Qdrant Configuration"
|
||||||
|
|
||||||
msg_info "Creating Qdrant Service"
|
msg_info "Creating Qdrant Service"
|
||||||
cat >/etc/systemd/system/qdrant.service <<EOF
|
cat <<EOF >/etc/systemd/system/qdrant.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Qdrant Vector Search Engine
|
Description=Qdrant Vector Search Engine
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|||||||
@ -15,51 +15,34 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y apt-transport-https
|
||||||
lsb-release \
|
|
||||||
apt-transport-https \
|
|
||||||
make
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Adding RabbitMQ signing key"
|
setup_deb822_repo \
|
||||||
curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg
|
"rabbitmq" \
|
||||||
msg_ok "Signing keys added"
|
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
|
||||||
|
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
|
||||||
|
"trixie"
|
||||||
|
|
||||||
msg_info "Adding RabbitMQ repository"
|
msg_info "Setting up RabbitMQ"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
$STD apt install -y \
|
||||||
## Modern Erlang/OTP releases
|
erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl \
|
||||||
|
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
|
||||||
|
$STD apt install -y --fix-missing rabbitmq-server
|
||||||
|
msg_ok "Setup RabbitMQ "
|
||||||
|
|
||||||
## Provides modern RabbitMQ releases
|
msg_info "Starting Service"
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
|
||||||
EOF
|
|
||||||
msg_ok "RabbitMQ repository added"
|
|
||||||
|
|
||||||
msg_info "Updating package list"
|
|
||||||
$STD apt update -y
|
|
||||||
msg_ok "Package list updated"
|
|
||||||
|
|
||||||
msg_info "Installing Erlang & RabbitMQ server"
|
|
||||||
$STD apt install -y erlang-base \
|
|
||||||
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
|
|
||||||
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
|
|
||||||
erlang-runtime-tools erlang-snmp erlang-ssl \
|
|
||||||
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl \
|
|
||||||
rabbitmq-server
|
|
||||||
msg_ok "RabbitMQ server installed"
|
|
||||||
|
|
||||||
msg_info "Starting RabbitMQ service"
|
|
||||||
systemctl enable -q --now rabbitmq-server
|
systemctl enable -q --now rabbitmq-server
|
||||||
msg_ok "RabbitMQ service started"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Enabling RabbitMQ management plugin"
|
msg_info "Enabling RabbitMQ Management Plugin"
|
||||||
$STD rabbitmq-plugins enable rabbitmq_management
|
$STD rabbitmq-plugins enable rabbitmq_management
|
||||||
$STD rabbitmqctl enable_feature_flag all
|
$STD rabbitmqctl enable_feature_flag all
|
||||||
msg_ok "RabbitMQ management plugin enabled"
|
msg_ok "Enabled RabbitMQ Management Plugin"
|
||||||
|
|
||||||
msg_info "Create User"
|
msg_info "Creating User"
|
||||||
$STD rabbitmqctl add_user proxmox proxmox
|
$STD rabbitmqctl add_user proxmox proxmox
|
||||||
$STD rabbitmqctl set_user_tags proxmox administrator
|
$STD rabbitmqctl set_user_tags proxmox administrator
|
||||||
$STD rabbitmqctl set_permissions -p / proxmox ".*" ".*" ".*"
|
$STD rabbitmqctl set_permissions -p / proxmox ".*" ".*" ".*"
|
||||||
|
|||||||
@ -13,20 +13,21 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing ASP.NET Core Runtime"
|
msg_info "Installing Dependencies"
|
||||||
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
|
setup_deb822_repo \
|
||||||
$STD dpkg -i packages-microsoft-prod.deb
|
"microsoft" \
|
||||||
$STD apt update
|
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||||
$STD apt install -y dotnet-sdk-9.0
|
"https://packages.microsoft.com/debian/13/prod/" \
|
||||||
msg_ok "Installed ASP.NET Core Runtime"
|
"trixie"
|
||||||
|
$STD apt install -y aspnetcore-runtime-9.0
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
|
|
||||||
msg_info "Configuring rdtclient"
|
msg_info "Setting up rdtclient"
|
||||||
cd /opt/rdtc
|
cd /opt/rdtc
|
||||||
mkdir -p data/{db,downloads}
|
mkdir -p data/{db,downloads}
|
||||||
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
||||||
rm -f ~/packages-microsoft-prod.deb
|
|
||||||
msg_ok "Configured rdtclient"
|
msg_ok "Configured rdtclient"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@ -43,7 +44,7 @@ User=root
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
$STD systemctl enable -q --now rdtc
|
systemctl enable -q --now rdtc
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -19,30 +19,19 @@ curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio
|
|||||||
$STD dpkg -i minio.deb
|
$STD dpkg -i minio.deb
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
import_local_ip
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
PG_DB_NAME="rxresume" PG_DB_USER="rxresume" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||||
|
NODE_VERSION="24" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
msg_info "Setting up Database"
|
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
||||||
DB_USER="rxresume"
|
|
||||||
DB_NAME="rxresume"
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
|
||||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
|
||||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
|
||||||
msg_ok "Set up Database"
|
|
||||||
|
|
||||||
|
msg_info "Setting up Reactive-Resume"
|
||||||
MINIO_PASS=$(openssl rand -base64 48)
|
MINIO_PASS=$(openssl rand -base64 48)
|
||||||
ACCESS_TOKEN=$(openssl rand -base64 48)
|
ACCESS_TOKEN=$(openssl rand -base64 48)
|
||||||
REFRESH_TOKEN=$(openssl rand -base64 48)
|
REFRESH_TOKEN=$(openssl rand -base64 48)
|
||||||
CHROME_TOKEN=$(openssl rand -hex 32)
|
CHROME_TOKEN=$(openssl rand -hex 32)
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
|
||||||
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
cd /opt/Reactive-Resume
|
||||||
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
|
||||||
|
|
||||||
msg_info "Installing $APPLICATION"
|
|
||||||
cd /opt/"$APPLICATION"
|
|
||||||
export CI="true"
|
export CI="true"
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export NODE_ENV="production"
|
export NODE_ENV="production"
|
||||||
@ -50,7 +39,7 @@ export NEXT_TELEMETRY_DISABLED=1
|
|||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
$STD pnpm run prisma:generate
|
$STD pnpm run prisma:generate
|
||||||
msg_ok "Installed $APPLICATION"
|
msg_ok "Setup Reactive-Resume"
|
||||||
|
|
||||||
msg_info "Installing Browserless (Patience)"
|
msg_info "Installing Browserless (Patience)"
|
||||||
cd /tmp
|
cd /tmp
|
||||||
@ -76,13 +65,14 @@ MINIO_ROOT_PASSWORD="${MINIO_PASS}"
|
|||||||
MINIO_VOLUMES=/opt/minio
|
MINIO_VOLUMES=/opt/minio
|
||||||
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
|
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
|
||||||
EOF
|
EOF
|
||||||
cat <<EOF >/opt/"$APPLICATION"/.env
|
|
||||||
|
cat <<EOF >/opt/Reactive-Resume/.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
PORT=3000
|
PORT=3000
|
||||||
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
||||||
PUBLIC_URL=http://${LOCAL_IP}:3000
|
PUBLIC_URL=http://${LOCAL_IP}:3000
|
||||||
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
||||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public
|
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?schema=public
|
||||||
ACCESS_TOKEN_SECRET=${ACCESS_TOKEN}
|
ACCESS_TOKEN_SECRET=${ACCESS_TOKEN}
|
||||||
REFRESH_TOKEN_SECRET=${REFRESH_TOKEN}
|
REFRESH_TOKEN_SECRET=${REFRESH_TOKEN}
|
||||||
CHROME_PORT=8080
|
CHROME_PORT=8080
|
||||||
@ -110,19 +100,13 @@ STORAGE_SKIP_BUCKET_CHECK=false
|
|||||||
# GOOGLE_CLIENT_SECRET=
|
# GOOGLE_CLIENT_SECRET=
|
||||||
# GOOGLE_CALLBACK_URL=http://localhost:5173/api/auth/google/callback
|
# GOOGLE_CALLBACK_URL=http://localhost:5173/api/auth/google/callback
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/opt/browserless/.env
|
cat <<EOF >/opt/browserless/.env
|
||||||
DEBUG=browserless*,-**:verbose
|
DEBUG=browserless*,-**:verbose
|
||||||
HOST=localhost
|
HOST=localhost
|
||||||
PORT=8080
|
PORT=8080
|
||||||
TOKEN=${CHROME_TOKEN}
|
TOKEN=${CHROME_TOKEN}
|
||||||
EOF
|
EOF
|
||||||
{
|
|
||||||
echo "${APPLICATION} Credentials"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
echo "Minio Root Password: ${MINIO_PASS}"
|
|
||||||
} >>~/"$APPLICATION".creds
|
|
||||||
rm -f /tmp/v"$TAG".zip
|
rm -f /tmp/v"$TAG".zip
|
||||||
rm -f /tmp/minio.deb
|
rm -f /tmp/minio.deb
|
||||||
msg_ok "Configured applications"
|
msg_ok "Configured applications"
|
||||||
@ -137,15 +121,15 @@ WorkingDirectory=/usr/local/bin
|
|||||||
EnvironmentFile=/opt/minio/.env
|
EnvironmentFile=/opt/minio/.env
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/"$APPLICATION".service
|
cat <<EOF >/etc/systemd/system/Reactive-Resume.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=${APPLICATION} Service
|
Description=Reactive-Resume Service
|
||||||
After=network.target postgresql.service minio.service
|
After=network.target postgresql.service minio.service
|
||||||
Wants=postgresql.service minio.service
|
Wants=postgresql.service minio.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/${APPLICATION}
|
WorkingDirectory=/opt/Reactive-Resume
|
||||||
EnvironmentFile=/opt/${APPLICATION}/.env
|
EnvironmentFile=/opt/Reactive-Resume/.env
|
||||||
ExecStart=/usr/bin/pnpm run start
|
ExecStart=/usr/bin/pnpm run start
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
@ -156,7 +140,7 @@ EOF
|
|||||||
cat <<EOF >/etc/systemd/system/browserless.service
|
cat <<EOF >/etc/systemd/system/browserless.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Browserless service
|
Description=Browserless service
|
||||||
After=network.target ${APPLICATION}.service
|
After=network.target Reactive-Resume.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/browserless
|
WorkingDirectory=/opt/browserless
|
||||||
@ -168,7 +152,7 @@ Restart=unless-stopped
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable -q --now minio.service "$APPLICATION".service browserless.service
|
systemctl enable -q --now minio.service Reactive-Resume.service browserless.service
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -14,25 +14,22 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y apt-transport-https
|
||||||
apt-transport-https \
|
|
||||||
lsb-release
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Redis"
|
msg_info "Setting up Redis Repository"
|
||||||
curl -fsSL "https://packages.redis.io/gpg" | gpg --dearmor >/usr/share/keyrings/redis-archive-keyring.gpg
|
setup_deb822_repo \
|
||||||
cat <<EOF >/etc/apt/sources.list.d/redis.sources
|
"redis" \
|
||||||
Types: deb
|
"https://packages.redis.io/gpg" \
|
||||||
URIs: https://packages.redis.io/deb
|
"https://packages.redis.io/deb" \
|
||||||
Suites: $(lsb_release -cs)
|
"trixie"
|
||||||
Components: main
|
msg_ok "Setup Redis Repository"
|
||||||
Signed-By: /usr/share/keyrings/redis-archive-keyring.gpg
|
|
||||||
EOF
|
msg_info "Setting up Redis"
|
||||||
$STD apt update
|
|
||||||
$STD apt install -y redis
|
$STD apt install -y redis
|
||||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
|
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
|
||||||
systemctl enable -q --now redis-server
|
systemctl enable -q --now redis-server
|
||||||
msg_ok "Installed Redis"
|
msg_ok "Setup Redis"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@ -23,25 +23,7 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
JAVA_VERSION="24" setup_java
|
JAVA_VERSION="24" setup_java
|
||||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||||
|
PG_DB_NAME="reitti_db" PG_DB_USER="reitti" setup_postgresql_db
|
||||||
msg_info "Setting up PostgreSQL"
|
|
||||||
DB_NAME="reitti_db"
|
|
||||||
DB_USER="reitti"
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
|
||||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis;"
|
|
||||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"
|
|
||||||
{
|
|
||||||
echo "Reitti Credentials"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
} >>~/reitti.creds
|
|
||||||
msg_ok "PostgreSQL Setup Completed"
|
|
||||||
|
|
||||||
msg_info "Configuring RabbitMQ"
|
msg_info "Configuring RabbitMQ"
|
||||||
RABBIT_USER="reitti"
|
RABBIT_USER="reitti"
|
||||||
@ -71,9 +53,9 @@ cat <<EOF >/opt/reitti/application.properties
|
|||||||
reitti.server.advertise-uri=http://127.0.0.1:8080
|
reitti.server.advertise-uri=http://127.0.0.1:8080
|
||||||
|
|
||||||
# PostgreSQL Database Connection
|
# PostgreSQL Database Connection
|
||||||
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$DB_NAME
|
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$PG_DB_NAME
|
||||||
spring.datasource.username=$DB_USER
|
spring.datasource.username=$PG_DB_USER
|
||||||
spring.datasource.password=$DB_PASS
|
spring.datasource.password=$PG_DB_PASS
|
||||||
spring.datasource.driver-class-name=org.postgresql.Driver
|
spring.datasource.driver-class-name=org.postgresql.Driver
|
||||||
|
|
||||||
# Flyway Database Migrations
|
# Flyway Database Migrations
|
||||||
@ -132,7 +114,7 @@ Restart=on-failure
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<'EOF' >/etc/systemd/system/photon.service
|
cat <<EOF >/etc/systemd/system/photon.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Photon Geocoding Service (Germany, OpenSearch)
|
Description=Photon Geocoding Service (Germany, OpenSearch)
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|||||||
@ -14,16 +14,13 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting up Resilio Sync Repository"
|
msg_info "Setting up Resilio Sync Repository"
|
||||||
curl -fsSL "https://linux-packages.resilio.com/resilio-sync/key.asc" >/usr/share/keyrings/resilio-sync-archive-keyring.asc
|
setup_deb822_repo \
|
||||||
cat <<EOF >/etc/apt/sources.list.d/resilio-sync.sources
|
"resilio" \
|
||||||
Types: deb
|
"https://linux-packages.resilio.com/resilio-sync/key.asc" \
|
||||||
URIs: http://linux-packages.resilio.com/resilio-sync/deb
|
"http://linux-packages.resilio.com/resilio-sync/deb" \
|
||||||
Suites: resilio-sync
|
"resilio-sync" \
|
||||||
Components: non-free
|
"non-free"
|
||||||
Signed-By: /usr/share/keyrings/resilio-sync-archive-keyring.asc
|
msg_ok "Setup Resilio Sync Repository"
|
||||||
EOF
|
|
||||||
$STD apt update
|
|
||||||
msg_ok "Resilio Sync Repository Setup"
|
|
||||||
|
|
||||||
msg_info "Installing Resilio Sync"
|
msg_info "Installing Resilio Sync"
|
||||||
$STD apt install -y resilio-sync
|
$STD apt install -y resilio-sync
|
||||||
|
|||||||
@ -13,19 +13,16 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Setting up Salt Repo"
|
||||||
$STD apt install -y jq
|
setup_deb822_repo \
|
||||||
msg_ok "Installed Dependencies"
|
"salt" \
|
||||||
|
"https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public" \
|
||||||
msg_info "Setup Salt Repo"
|
"https://packages.broadcom.com/artifactory/saltproject-deb" \
|
||||||
mkdir -p /etc/apt/keyrings
|
"stable"
|
||||||
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
|
|
||||||
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
|
|
||||||
$STD apt update
|
|
||||||
msg_ok "Setup Salt Repo"
|
msg_ok "Setup Salt Repo"
|
||||||
|
|
||||||
msg_info "Installing Salt"
|
msg_info "Installing Salt"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
RELEASE=$(get_latest_github_release "saltstack/salt")
|
||||||
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
|
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
|
||||||
Package: salt-*
|
Package: salt-*
|
||||||
Pin: version ${RELEASE}
|
Pin: version ${RELEASE}
|
||||||
|
|||||||
@ -15,22 +15,15 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y git
|
$STD apt install -y git
|
||||||
|
setup_deb822_repo \
|
||||||
|
"ansible" \
|
||||||
|
"https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" \
|
||||||
|
"http://ppa.launchpad.net/ansible/ansible/ubuntu" \
|
||||||
|
"jammy"
|
||||||
|
$STD apt install -y ansible
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Ansible"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
||||||
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmor -o /usr/share/keyrings/ansible-archive-keyring.gpg
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/ansible.sources
|
|
||||||
Types: deb
|
|
||||||
URIs: http://ppa.launchpad.net/ansible/ansible/ubuntu
|
|
||||||
Suites: jammy
|
|
||||||
Components: main
|
|
||||||
Signed-By: /usr/share/keyrings/ansible-archive-keyring.gpg
|
|
||||||
EOF
|
|
||||||
$STD apt update
|
|
||||||
$STD apt install -y ansible
|
|
||||||
msg_ok "Set up Ansible"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
|
||||||
|
|
||||||
msg_info "Configuring Semaphore"
|
msg_info "Configuring Semaphore"
|
||||||
mkdir -p /opt/semaphore
|
mkdir -p /opt/semaphore
|
||||||
@ -70,7 +63,6 @@ RestartSec=10s
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl enable -q --now semaphore
|
systemctl enable -q --now semaphore
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
|||||||
@ -28,32 +28,7 @@ $STD ./Tdarr_Updater
|
|||||||
rm -rf /opt/tdarr/Tdarr_Updater.zip
|
rm -rf /opt/tdarr/Tdarr_Updater.zip
|
||||||
msg_ok "Installed Tdarr"
|
msg_ok "Installed Tdarr"
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt -y install \
|
|
||||||
va-driver-all \
|
|
||||||
ocl-icd-libopencl1 \
|
|
||||||
vainfo \
|
|
||||||
intel-gpu-tools \
|
|
||||||
mesa-va-drivers \
|
|
||||||
mesa-vdpau-drivers \
|
|
||||||
intel-media-va-driver
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
VIDEO_GID=$(getent group video | cut -d: -f3)
|
|
||||||
RENDER_GID=$(getent group render | cut -d: -f3)
|
|
||||||
if [[ -n "$VIDEO_GID" && -n "$RENDER_GID" ]]; then
|
|
||||||
sed -i "s/^video:x:[0-9]*:/video:x:$VIDEO_GID:/" /etc/group
|
|
||||||
sed -i "s/^render:x:[0-9]*:/render:x:$RENDER_GID:/" /etc/group
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
VIDEO_GID=$(getent group video | cut -d: -f3)
|
|
||||||
RENDER_GID=$(getent group render | cut -d: -f3)
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/tdarr-server.service
|
cat <<EOF >/etc/systemd/system/tdarr-server.service
|
||||||
|
|||||||
@ -13,27 +13,17 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Adding Telegraf key and repository"
|
msg_info "Setting up Telegraf repository"
|
||||||
curl -fsSL -O https://repos.influxdata.com/influxdata-archive.key
|
setup_deb822_repo \
|
||||||
gpg --show-keys --with-fingerprint --with-colons ./influxdata-archive.key 2>&1 |
|
"telegraf" \
|
||||||
grep -q '^fpr:\+24C975CBA61A024EE1B631787C3D57159FC2F927:$' &&
|
"https://repos.influxdata.com/influxdata-archive.key" \
|
||||||
cat influxdata-archive.key |
|
"https://repos.influxdata.com/debian" \
|
||||||
gpg --dearmor |
|
"stable"
|
||||||
tee /etc/apt/keyrings/influxdata-archive.gpg >/dev/null
|
msg_ok "Setup Telegraf Repository"
|
||||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/influxdata.sources >/dev/null
|
|
||||||
Types: deb
|
|
||||||
URIs: https://repos.influxdata.com/debian
|
|
||||||
Suites: stable
|
|
||||||
Components: main
|
|
||||||
Signed-By: /etc/apt/keyrings/influxdata-archive.gpg
|
|
||||||
EOF
|
|
||||||
msg_ok "Added Telegraf Repository"
|
|
||||||
|
|
||||||
msg_info "Installing Telegraf"
|
msg_info "Setting up Telegraf"
|
||||||
$STD apt update
|
$STD apt install -y telegraf
|
||||||
$STD apt install telegraf -y
|
msg_ok "Setup Telegraf"
|
||||||
rm /influxdata-archive.key
|
|
||||||
msg_ok "Installed Telegraf"
|
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
||||||
|
|
||||||
msg_info "Configuring Tracktor"
|
msg_info "Configuring Tracktor"
|
||||||
@ -23,22 +23,26 @@ $STD npm run build
|
|||||||
mkdir -p /opt/tracktor-data/{uploads,logs}
|
mkdir -p /opt/tracktor-data/{uploads,logs}
|
||||||
cat <<EOF >/opt/tracktor.env
|
cat <<EOF >/opt/tracktor.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
|
# Set this to the path of the database file. Default - ./tracktor.db
|
||||||
DB_PATH=/opt/tracktor-data/tracktor.db
|
DB_PATH=/opt/tracktor-data/tracktor.db
|
||||||
|
# Set this to the path of the uploads directory. Default - ./uploads
|
||||||
UPLOADS_DIR="/opt/tracktor-data/uploads"
|
UPLOADS_DIR="/opt/tracktor-data/uploads"
|
||||||
|
# Set this to the path of the logs directory. Default - ./logs
|
||||||
LOG_DIR="/opt/tracktor-data/logs"
|
LOG_DIR="/opt/tracktor-data/logs"
|
||||||
# If server host is not set by default it will run on all interfaces - 0.0.0.0
|
# Hostname to bind the server to. Default - 0.0.0.0
|
||||||
# SERVER_HOST=""
|
#HOST="0.0.0.0"
|
||||||
SERVER_PORT=3000
|
# Port to bind the server to. Default - 3000
|
||||||
PORT=3000
|
#PORT=3000
|
||||||
# Set this if you want to secure your endpoints otherwise default will be "*"
|
# Set this to remove upload size limitations. Default - 512 Kb
|
||||||
# CORS_ORIGINS="*"
|
BODY_SIZE_LIMIT=Infinity
|
||||||
# Set this if you are using backend and frontend separately. For lxc installation this is not needed
|
# Enable request logging. Default - true
|
||||||
# PUBLIC_API_BASE_URL=""
|
#LOG_REQUESTS=true
|
||||||
LOG_REQUESTS=true
|
# Set the logging level. Options - error, warn, info, verbose, debug, silly. Default - info
|
||||||
LOG_LEVEL="info"
|
#LOG_LEVEL="info"
|
||||||
AUTH_PIN=123456
|
# Enable demo mode. Default - false
|
||||||
# PUBLIC_DEMO_MODE=false
|
#TRACKTOR_DEMO_MODE=false
|
||||||
# FORCE_DATA_SEED=false
|
# Force reseeding of data on every startup. Default - false
|
||||||
|
#FORCE_DATA_SEED=false
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Configured Tracktor"
|
msg_ok "Configured Tracktor"
|
||||||
|
|
||||||
|
|||||||
@ -13,53 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
$STD adduser "$(id -un)" video
|
|
||||||
$STD adduser "$(id -un)" render
|
|
||||||
fi
|
|
||||||
msg_ok "Base Hardware Acceleration Set Up"
|
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 13 only)? <y/N> " prompt
|
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
||||||
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
|
||||||
cat <<'EOF' >/etc/apt/sources.list.d/non-free.sources
|
|
||||||
Types: deb deb-src
|
|
||||||
URIs: http://deb.debian.org/debian
|
|
||||||
Suites: trixie
|
|
||||||
Components: non-free non-free-firmware
|
|
||||||
|
|
||||||
Types: deb deb-src
|
|
||||||
URIs: http://deb.debian.org/debian-security
|
|
||||||
Suites: trixie-security
|
|
||||||
Components: non-free non-free-firmware
|
|
||||||
|
|
||||||
Types: deb deb-src
|
|
||||||
URIs: http://deb.debian.org/debian
|
|
||||||
Suites: trixie-updates
|
|
||||||
Components: non-free non-free-firmware
|
|
||||||
EOF
|
|
||||||
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y install \
|
|
||||||
intel-media-va-driver-non-free \
|
|
||||||
ocl-icd-libopencl1 \
|
|
||||||
mesa-opencl-icd \
|
|
||||||
mesa-va-drivers \
|
|
||||||
libvpl2 \
|
|
||||||
vainfo \
|
|
||||||
intel-gpu-tools
|
|
||||||
else
|
|
||||||
msg_info "Installing Intel Hardware Acceleration (open packages)"
|
|
||||||
$STD apt -y install \
|
|
||||||
va-driver-all \
|
|
||||||
ocl-icd-libopencl1 \
|
|
||||||
mesa-opencl-icd \
|
|
||||||
mesa-va-drivers \
|
|
||||||
vainfo \
|
|
||||||
intel-gpu-tools
|
|
||||||
fi
|
|
||||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz"
|
fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz"
|
||||||
cd /opt/tunarr
|
cd /opt/tunarr
|
||||||
|
|||||||
@ -19,32 +19,7 @@ $STD apt install -y \
|
|||||||
python3-pip
|
python3-pip
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt -y install \
|
|
||||||
va-driver-all \
|
|
||||||
ocl-icd-libopencl1 \
|
|
||||||
vainfo \
|
|
||||||
intel-gpu-tools \
|
|
||||||
mesa-va-drivers \
|
|
||||||
mesa-vdpau-drivers \
|
|
||||||
intel-media-va-driver
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
VIDEO_GID=$(getent group video | cut -d: -f3)
|
|
||||||
RENDER_GID=$(getent group render | cut -d: -f3)
|
|
||||||
if [[ -n "$VIDEO_GID" && -n "$RENDER_GID" ]]; then
|
|
||||||
sed -i "s/^video:x:[0-9]*:/video:x:$VIDEO_GID:/" /etc/group
|
|
||||||
sed -i "s/^render:x:[0-9]*:/render:x:$RENDER_GID:/" /etc/group
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
VIDEO_GID=$(getent group video | cut -d: -f3)
|
|
||||||
RENDER_GID=$(getent group render | cut -d: -f3)
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Unmanic"
|
msg_info "Installing Unmanic"
|
||||||
$STD pip3 install unmanic
|
$STD pip3 install unmanic
|
||||||
|
|||||||
213
misc/tools.func
213
misc/tools.func
@ -1460,19 +1460,19 @@ check_for_gh_release() {
|
|||||||
|
|
||||||
# Try /latest endpoint for non-pinned versions (most efficient)
|
# Try /latest endpoint for non-pinned versions (most efficient)
|
||||||
local releases_json=""
|
local releases_json=""
|
||||||
|
|
||||||
if [[ -z "$pinned_version_in" ]]; then
|
if [[ -z "$pinned_version_in" ]]; then
|
||||||
releases_json=$(curl -fsSL --max-time 20 \
|
releases_json=$(curl -fsSL --max-time 20 \
|
||||||
-H 'Accept: application/vnd.github+json' \
|
-H 'Accept: application/vnd.github+json' \
|
||||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||||
"https://api.github.com/repos/${source}/releases/latest" 2>/dev/null)
|
"https://api.github.com/repos/${source}/releases/latest" 2>/dev/null)
|
||||||
|
|
||||||
if [[ $? -eq 0 ]] && [[ -n "$releases_json" ]]; then
|
if [[ $? -eq 0 ]] && [[ -n "$releases_json" ]]; then
|
||||||
# Wrap single release in array for consistent processing
|
# Wrap single release in array for consistent processing
|
||||||
releases_json="[$releases_json]"
|
releases_json="[$releases_json]"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If no releases yet (pinned version OR /latest failed), fetch up to 100
|
# If no releases yet (pinned version OR /latest failed), fetch up to 100
|
||||||
if [[ -z "$releases_json" ]]; then
|
if [[ -z "$releases_json" ]]; then
|
||||||
# Fetch releases and exclude drafts/prereleases
|
# Fetch releases and exclude drafts/prereleases
|
||||||
@ -2585,93 +2585,200 @@ function setup_hwaccel() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Detect GPU vendor (Intel, AMD, NVIDIA)
|
# Detect GPU vendor (Intel, AMD, NVIDIA)
|
||||||
local gpu_vendor
|
local gpu_vendor gpu_info
|
||||||
gpu_vendor=$(lspci 2>/dev/null | grep -Ei 'vga|3d|display' | grep -Eo 'Intel|AMD|NVIDIA' | head -n1 || echo "")
|
gpu_info=$(lspci 2>/dev/null | grep -Ei 'vga|3d|display' || echo "")
|
||||||
|
gpu_vendor=$(echo "$gpu_info" | grep -Eo 'Intel|AMD|NVIDIA' | head -n1 || echo "")
|
||||||
|
|
||||||
# Detect CPU vendor (relevant for AMD APUs)
|
# Detect CPU vendor (relevant for AMD APUs)
|
||||||
local cpu_vendor
|
local cpu_vendor
|
||||||
cpu_vendor=$(lscpu 2>/dev/null | grep -i 'Vendor ID' | awk '{print $3}' || echo "")
|
cpu_vendor=$(lscpu 2>/dev/null | grep -i 'Vendor ID' | awk '{print $3}' || echo "")
|
||||||
|
|
||||||
if [[ -z "$gpu_vendor" && -z "$cpu_vendor" ]]; then
|
if [[ -z "$gpu_vendor" && -z "$cpu_vendor" ]]; then
|
||||||
msg_error "No GPU or CPU vendor detected (missing lspci/lscpu output)"
|
msg_warn "No GPU or CPU vendor detected - skipping hardware acceleration setup"
|
||||||
return 1
|
msg_ok "Setup Hardware Acceleration (skipped - no GPU detected)"
|
||||||
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Detect OS with fallbacks
|
# Detect OS with fallbacks
|
||||||
local os_id os_codename
|
local os_id os_codename os_version
|
||||||
os_id=$(grep -oP '(?<=^ID=).+' /etc/os-release 2>/dev/null | tr -d '"' || grep '^ID=' /etc/os-release 2>/dev/null | cut -d'=' -f2 | tr -d '"' || echo "debian")
|
os_id=$(grep -oP '(?<=^ID=).+' /etc/os-release 2>/dev/null | tr -d '"' || echo "debian")
|
||||||
os_codename=$(grep -oP '(?<=^VERSION_CODENAME=).+' /etc/os-release 2>/dev/null | tr -d '"' || grep '^VERSION_CODENAME=' /etc/os-release 2>/dev/null | cut -d'=' -f2 | tr -d '"' || echo "unknown")
|
os_codename=$(grep -oP '(?<=^VERSION_CODENAME=).+' /etc/os-release 2>/dev/null | tr -d '"' || echo "unknown")
|
||||||
|
os_version=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release 2>/dev/null | tr -d '"' || echo "")
|
||||||
|
|
||||||
# Validate os_id
|
[[ -z "$os_id" ]] && os_id="debian"
|
||||||
if [[ -z "$os_id" ]]; then
|
|
||||||
os_id="debian"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Determine if we are on a VM or LXC
|
# Determine if we are in a privileged LXC container
|
||||||
local in_ct="${CTTYPE:-0}"
|
local in_ct="${CTTYPE:-0}"
|
||||||
|
|
||||||
case "$gpu_vendor" in
|
case "$gpu_vendor" in
|
||||||
Intel)
|
Intel)
|
||||||
if [[ "$os_id" == "ubuntu" ]]; then
|
# Detect Intel GPU generation for driver selection
|
||||||
$STD apt -y install intel-opencl-icd || {
|
# Gen 9+ (Skylake and newer) benefit from non-free drivers
|
||||||
msg_error "Failed to install intel-opencl-icd"
|
local intel_gen=""
|
||||||
return 1
|
local needs_nonfree=false
|
||||||
}
|
|
||||||
else
|
# Check for specific Intel GPU models that need non-free drivers
|
||||||
# For Debian: fetch Intel GPU drivers from GitHub
|
if echo "$gpu_info" | grep -Ei 'HD Graphics [56][0-9]{2}|UHD Graphics|Iris|Arc|DG[12]' &>/dev/null; then
|
||||||
fetch_and_deploy_gh_release "" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb" || {
|
needs_nonfree=true
|
||||||
msg_warn "Failed to deploy Intel IGC core 2"
|
intel_gen="gen9+"
|
||||||
}
|
|
||||||
fetch_and_deploy_gh_release "" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" || {
|
|
||||||
msg_warn "Failed to deploy Intel IGC OpenCL 2"
|
|
||||||
}
|
|
||||||
fetch_and_deploy_gh_release "" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || {
|
|
||||||
msg_warn "Failed to deploy Intel GDGMM12"
|
|
||||||
}
|
|
||||||
fetch_and_deploy_gh_release "" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || {
|
|
||||||
msg_warn "Failed to deploy Intel OpenCL ICD"
|
|
||||||
}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$STD apt -y install va-driver-all ocl-icd-libopencl1 vainfo intel-gpu-tools || {
|
if [[ "$os_id" == "ubuntu" ]]; then
|
||||||
msg_error "Failed to install Intel GPU dependencies"
|
# Ubuntu: Use packages from Ubuntu repos
|
||||||
return 1
|
$STD apt -y install \
|
||||||
}
|
va-driver-all \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
intel-opencl-icd \
|
||||||
|
vainfo \
|
||||||
|
intel-gpu-tools || {
|
||||||
|
msg_error "Failed to install Intel GPU dependencies"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
# Try to install intel-media-va-driver for newer GPUs
|
||||||
|
$STD apt -y install intel-media-va-driver 2>/dev/null || true
|
||||||
|
|
||||||
|
elif [[ "$os_id" == "debian" ]]; then
|
||||||
|
# Debian: Check version and install appropriate drivers
|
||||||
|
if [[ "$needs_nonfree" == true ]]; then
|
||||||
|
# Add non-free repo for intel-media-va-driver-non-free
|
||||||
|
if [[ "$os_codename" == "bookworm" ]]; then
|
||||||
|
# Debian 12 Bookworm
|
||||||
|
if [[ ! -f /etc/apt/sources.list.d/non-free.list && ! -f /etc/apt/sources.list.d/non-free.sources ]]; then
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: http://deb.debian.org/debian
|
||||||
|
Suites: bookworm bookworm-updates
|
||||||
|
Components: non-free non-free-firmware
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
fi
|
||||||
|
$STD apt -y install \
|
||||||
|
intel-media-va-driver-non-free \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
intel-opencl-icd \
|
||||||
|
vainfo \
|
||||||
|
intel-gpu-tools || {
|
||||||
|
msg_warn "Non-free driver install failed, falling back to open drivers"
|
||||||
|
needs_nonfree=false
|
||||||
|
}
|
||||||
|
|
||||||
|
elif [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
|
||||||
|
# Debian 13 Trixie / Sid
|
||||||
|
if [[ ! -f /etc/apt/sources.list.d/non-free.sources ]]; then
|
||||||
|
cat <<'EOF' >/etc/apt/sources.list.d/non-free.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: http://deb.debian.org/debian
|
||||||
|
Suites: trixie trixie-updates
|
||||||
|
Components: non-free non-free-firmware
|
||||||
|
|
||||||
|
Types: deb
|
||||||
|
URIs: http://deb.debian.org/debian-security
|
||||||
|
Suites: trixie-security
|
||||||
|
Components: non-free non-free-firmware
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
fi
|
||||||
|
$STD apt -y install \
|
||||||
|
intel-media-va-driver-non-free \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
mesa-opencl-icd \
|
||||||
|
mesa-va-drivers \
|
||||||
|
libvpl2 \
|
||||||
|
vainfo \
|
||||||
|
intel-gpu-tools 2>/dev/null || {
|
||||||
|
msg_warn "Non-free driver install failed, falling back to open drivers"
|
||||||
|
needs_nonfree=false
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fallback to open drivers or older Intel GPUs
|
||||||
|
if [[ "$needs_nonfree" == false ]]; then
|
||||||
|
# Fetch latest Intel drivers from GitHub for Debian
|
||||||
|
fetch_and_deploy_gh_release "" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb" || {
|
||||||
|
msg_warn "Failed to deploy Intel IGC core 2"
|
||||||
|
}
|
||||||
|
fetch_and_deploy_gh_release "" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" || {
|
||||||
|
msg_warn "Failed to deploy Intel IGC OpenCL 2"
|
||||||
|
}
|
||||||
|
fetch_and_deploy_gh_release "" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || {
|
||||||
|
msg_warn "Failed to deploy Intel GDGMM12"
|
||||||
|
}
|
||||||
|
fetch_and_deploy_gh_release "" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || {
|
||||||
|
msg_warn "Failed to deploy Intel OpenCL ICD"
|
||||||
|
}
|
||||||
|
|
||||||
|
$STD apt -y install \
|
||||||
|
va-driver-all \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
mesa-opencl-icd \
|
||||||
|
mesa-va-drivers \
|
||||||
|
vainfo \
|
||||||
|
intel-gpu-tools || {
|
||||||
|
msg_error "Failed to install Intel GPU dependencies"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
AMD)
|
AMD)
|
||||||
$STD apt -y install mesa-va-drivers mesa-vdpau-drivers mesa-opencl-icd vainfo clinfo || {
|
$STD apt -y install \
|
||||||
|
mesa-va-drivers \
|
||||||
|
mesa-vdpau-drivers \
|
||||||
|
mesa-opencl-icd \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
vainfo \
|
||||||
|
clinfo 2>/dev/null || {
|
||||||
msg_error "Failed to install AMD GPU dependencies"
|
msg_error "Failed to install AMD GPU dependencies"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# For AMD CPUs without discrete GPU (APUs)
|
# AMD firmware for better GPU support
|
||||||
if [[ "$cpu_vendor" == "AuthenticAMD" && -n "$gpu_vendor" ]]; then
|
if [[ "$os_id" == "debian" ]]; then
|
||||||
$STD apt -y install libdrm-amdgpu1 firmware-amd-graphics || true
|
$STD apt -y install firmware-amd-graphics 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
$STD apt -y install libdrm-amdgpu1 2>/dev/null || true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
NVIDIA)
|
NVIDIA)
|
||||||
# NVIDIA needs manual driver setup - skip for now
|
# NVIDIA needs manual driver setup or passthrough from host
|
||||||
msg_info "NVIDIA GPU detected - manual driver setup required"
|
msg_warn "NVIDIA GPU detected - driver must be installed manually or passed through from host"
|
||||||
|
# Install basic VA-API support for potential hybrid setups
|
||||||
|
$STD apt -y install va-driver-all vainfo 2>/dev/null || true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
# If no discrete GPU, but AMD CPU (e.g., Ryzen APU)
|
# No discrete GPU detected - check for AMD APU
|
||||||
if [[ "$cpu_vendor" == "AuthenticAMD" ]]; then
|
if [[ "$cpu_vendor" == "AuthenticAMD" ]]; then
|
||||||
$STD apt -y install mesa-opencl-icd ocl-icd-libopencl1 clinfo || {
|
$STD apt -y install \
|
||||||
msg_error "Failed to install Mesa OpenCL stack"
|
mesa-va-drivers \
|
||||||
return 1
|
mesa-vdpau-drivers \
|
||||||
}
|
mesa-opencl-icd \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
vainfo 2>/dev/null || true
|
||||||
else
|
else
|
||||||
msg_warn "No supported GPU vendor detected - skipping GPU acceleration"
|
msg_warn "No supported GPU vendor detected - skipping GPU driver installation"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ "$in_ct" == "0" ]]; then
|
# Set permissions for /dev/dri (only in privileged containers and if /dev/dri exists)
|
||||||
|
if [[ "$in_ct" == "0" && -d /dev/dri ]]; then
|
||||||
chgrp video /dev/dri 2>/dev/null || true
|
chgrp video /dev/dri 2>/dev/null || true
|
||||||
chmod 755 /dev/dri 2>/dev/null || true
|
chmod 755 /dev/dri 2>/dev/null || true
|
||||||
chmod 660 /dev/dri/* 2>/dev/null || true
|
chmod 660 /dev/dri/* 2>/dev/null || true
|
||||||
$STD adduser "$(id -u -n)" video
|
$STD adduser "$(id -u -n)" video 2>/dev/null || true
|
||||||
$STD adduser "$(id -u -n)" render
|
$STD adduser "$(id -u -n)" render 2>/dev/null || true
|
||||||
|
|
||||||
|
# Sync GID for video/render groups between host and container
|
||||||
|
local host_video_gid host_render_gid
|
||||||
|
host_video_gid=$(getent group video | cut -d: -f3)
|
||||||
|
host_render_gid=$(getent group render | cut -d: -f3)
|
||||||
|
if [[ -n "$host_video_gid" && -n "$host_render_gid" ]]; then
|
||||||
|
sed -i "s/^video:x:[0-9]*:/video:x:$host_video_gid:/" /etc/group 2>/dev/null || true
|
||||||
|
sed -i "s/^render:x:[0-9]*:/render:x:$host_render_gid:/" /etc/group 2>/dev/null || true
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cache_installed_version "hwaccel" "1.0"
|
cache_installed_version "hwaccel" "1.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user