mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-16 10:13:26 +01:00
Compare commits
22 Commits
fix/detect
...
disable-se
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
629f48e670 | ||
|
|
a0bb6f072b | ||
|
|
4d9354c911 | ||
|
|
72fc2d9d36 | ||
|
|
e56acaedef | ||
|
|
303592834a | ||
|
|
015688e394 | ||
|
|
03c53252f6 | ||
|
|
d40a0829f5 | ||
|
|
21b98df1fd | ||
|
|
6aee01f1eb | ||
|
|
51249d5987 | ||
|
|
166b3afa77 | ||
|
|
55f6049cd1 | ||
|
|
dcadd3683b | ||
|
|
da915b87f6 | ||
|
|
b46dddbd7d | ||
|
|
b3e3ed5fb3 | ||
|
|
7b767ff58b | ||
|
|
79baf4360e | ||
|
|
773f3f67b8 | ||
|
|
9a95d81f17 |
10
CHANGELOG.md
10
CHANGELOG.md
@@ -403,6 +403,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
## 2026-02-14
|
## 2026-02-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: overwriteable app version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11753](https://github.com/community-scripts/ProxmoxVE/pull/11753))
|
||||||
|
|
||||||
### 💾 Core
|
### 💾 Core
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
@@ -411,6 +417,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- core: improve error reporting with structured error strings and better categorization + output formatting [@MickLesk](https://github.com/MickLesk) ([#11907](https://github.com/community-scripts/ProxmoxVE/pull/11907))
|
- core: improve error reporting with structured error strings and better categorization + output formatting [@MickLesk](https://github.com/MickLesk) ([#11907](https://github.com/community-scripts/ProxmoxVE/pull/11907))
|
||||||
- core: unified logging system with combined logs [@MickLesk](https://github.com/MickLesk) ([#11761](https://github.com/community-scripts/ProxmoxVE/pull/11761))
|
- core: unified logging system with combined logs [@MickLesk](https://github.com/MickLesk) ([#11761](https://github.com/community-scripts/ProxmoxVE/pull/11761))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- lxc-updater: add patchmon aware [@failure101](https://github.com/failure101) ([#11905](https://github.com/community-scripts/ProxmoxVE/pull/11905))
|
||||||
|
|
||||||
### ❔ Uncategorized
|
### ❔ Uncategorized
|
||||||
|
|
||||||
- Disable UniFi script - APT packages no longer available [@Copilot](https://github.com/Copilot) ([#11898](https://github.com/community-scripts/ProxmoxVE/pull/11898))
|
- Disable UniFi script - APT packages no longer available [@Copilot](https://github.com/Copilot) ([#11898](https://github.com/community-scripts/ProxmoxVE/pull/11898))
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
__ ____
|
|
||||||
/ /__ / / /_ __________ ___ __________
|
|
||||||
__ / / _ \/ / / / / / ___/ _ \/ _ \/ ___/ ___/
|
|
||||||
/ /_/ / __/ / / /_/ (__ ) __/ __/ / / /
|
|
||||||
\____/\___/_/_/\__, /____/\___/\___/_/ /_/
|
|
||||||
/____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____
|
|
||||||
/ __ \_ _____ _____________ ___ __________
|
|
||||||
/ / / / | / / _ \/ ___/ ___/ _ \/ _ \/ ___/ ___/
|
|
||||||
/ /_/ /| |/ / __/ / (__ ) __/ __/ / / /
|
|
||||||
\____/ |___/\___/_/ /____/\___/\___/_/ /_/
|
|
||||||
|
|
||||||
@@ -29,47 +29,43 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$(node -v | cut -c2-3)" -ne 22 ]; then
|
if [[ -f "/opt/jellyseerr/package.json" ]] && [[ "$(grep -m1 '"version"' /opt/jellyseerr/package.json | awk -F'"' '{print $4}')" == "2.7.3" ]]; then
|
||||||
msg_info "Updating Node.js Repository"
|
echo
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
msg_ok "Updating Node.js Repository"
|
echo "Jellyseerr v2.7.3 detected."
|
||||||
|
echo
|
||||||
|
echo "Seerr is the new unified Jellyseerr and Overseerr."
|
||||||
|
echo "More info: https://docs.seerr.dev/blog/seerr-release"
|
||||||
|
echo
|
||||||
|
read -rp "Do you want to migrate to Seerr now? (y/N): " MIGRATE
|
||||||
|
echo
|
||||||
|
if [[ ! "$MIGRATE" =~ ^[Yy]$ ]]; then
|
||||||
|
msg_info "Migration cancelled. Exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating Packages"
|
msg_info "Switching update script to Seerr"
|
||||||
$STD apt-get update
|
sed -i 's|https://github.com/community-scripts/ProxmoxVE/raw/main/ct/jellyseerr.sh|https://github.com/community-scripts/ProxmoxVE/raw/main/ct/seerr.sh|g' /usr/bin/update
|
||||||
$STD apt-get -y upgrade
|
msg_ok "Switched update script to Seerr. Running update..."
|
||||||
msg_ok "Updating Packages"
|
exec /usr/bin/update
|
||||||
fi
|
|
||||||
|
|
||||||
cd /opt/jellyseerr
|
|
||||||
output=$(git pull --no-rebase)
|
|
||||||
|
|
||||||
pnpm_current=$(pnpm --version 2>/dev/null)
|
|
||||||
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
|
||||||
|
|
||||||
if [ -z "$pnpm_current" ]; then
|
|
||||||
msg_error "pnpm not found. Installing version $pnpm_desired..."
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
|
||||||
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then
|
|
||||||
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
|
||||||
else
|
|
||||||
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Jellyseerr"
|
msg_info "Updating Jellyseerr"
|
||||||
|
cd /opt/jellyseerr
|
||||||
|
systemctl stop jellyseerr
|
||||||
|
output=$(git pull --no-rebase)
|
||||||
|
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
||||||
if echo "$output" | grep -q "Already up to date."; then
|
if echo "$output" | grep -q "Already up to date."; then
|
||||||
msg_ok "$APP is already up to date."
|
msg_ok "$APP is already up to date."
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
systemctl stop jellyseerr
|
|
||||||
rm -rf dist .next node_modules
|
rm -rf dist .next node_modules
|
||||||
export CYPRESS_INSTALL_BINARY=0
|
export CYPRESS_INSTALL_BINARY=0
|
||||||
cd /opt/jellyseerr
|
cd /opt/jellyseerr
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/jellyseerr.service
|
cat <<EOF >/etc/systemd/system/jellyseerr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=jellyseerr Service
|
Description=jellyseerr Service
|
||||||
@@ -85,7 +81,6 @@ ExecStart=/usr/bin/node dist/index.js
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl start jellyseerr
|
systemctl start jellyseerr
|
||||||
msg_ok "Updated Jellyseerr"
|
msg_ok "Updated Jellyseerr"
|
||||||
|
|||||||
@@ -27,6 +27,28 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -f "$HOME/.overseerr" ]] && [[ "$(cat "$HOME/.overseerr")" == "1.34.0" ]]; then
|
||||||
|
echo
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "Overseerr v1.34.0 detected."
|
||||||
|
echo
|
||||||
|
echo "Seerr is the new unified Jellyseerr and Overseerr."
|
||||||
|
echo "More info: https://docs.seerr.dev/blog/seerr-release"
|
||||||
|
echo
|
||||||
|
read -rp "Do you want to migrate to Seerr now? (y/N): " MIGRATE
|
||||||
|
echo
|
||||||
|
if [[ ! "$MIGRATE" =~ ^[Yy]$ ]]; then
|
||||||
|
msg_info "Migration cancelled. Exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Switching update script to Seerr"
|
||||||
|
sed -i 's|https://github.com/community-scripts/ProxmoxVE/raw/main/ct/overseerr.sh|https://github.com/community-scripts/ProxmoxVE/raw/main/ct/seerr.sh|g' /usr/bin/update
|
||||||
|
msg_ok "Switched update script to Seerr. Running update..."
|
||||||
|
exec /usr/bin/update
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "overseerr" "sct/overseerr"; then
|
if check_for_gh_release "overseerr" "sct/overseerr"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop overseerr
|
systemctl stop overseerr
|
||||||
|
|||||||
165
ct/seerr.sh
Normal file
165
ct/seerr.sh
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docs.seerr.dev/
|
||||||
|
|
||||||
|
APP="Seerr"
|
||||||
|
var_tags="${var_tags:-media}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-12}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/seerr && ! -d /opt/jellyseerr && ! -d /opt/overseerr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start Migration from Jellyseerr
|
||||||
|
if [[ -f /etc/systemd/system/jellyseerr.service ]]; then
|
||||||
|
msg_info "Stopping Jellyseerr"
|
||||||
|
$STD systemctl stop jellyseerr || true
|
||||||
|
$STD systemctl disable jellyseerr || true
|
||||||
|
[ -f /etc/systemd/system/jellyseerr.service ] && rm -f /etc/systemd/system/jellyseerr.service
|
||||||
|
msg_ok "Stopped Jellyseerr"
|
||||||
|
|
||||||
|
msg_info "Creating Backup (Patience)"
|
||||||
|
tar -czf /opt/jellyseerr_backup_$(date +%Y%m%d_%H%M%S).tar.gz -C /opt jellyseerr
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
msg_info "Migrating Jellyseerr to seerr"
|
||||||
|
[ -d /opt/jellyseerr ] && mv /opt/jellyseerr /opt/seerr
|
||||||
|
[ -d /etc/jellyseerr ] && mv /etc/jellyseerr /etc/seerr
|
||||||
|
[ -f /etc/seerr/jellyseerr.conf ] && mv /etc/seerr/jellyseerr.conf /etc/seerr/seerr.conf
|
||||||
|
cat <<EOF >/etc/systemd/system/seerr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Seerr Service
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/etc/seerr/seerr.conf
|
||||||
|
Environment=NODE_ENV=production
|
||||||
|
Type=exec
|
||||||
|
Restart=on-failure
|
||||||
|
WorkingDirectory=/opt/seerr
|
||||||
|
ExecStart=/usr/bin/node dist/index.js
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable -q --now seerr
|
||||||
|
msg_ok "Migrated Jellyserr to Seerr"
|
||||||
|
fi
|
||||||
|
# END Jellyseerr Migration
|
||||||
|
|
||||||
|
# Start Migration from Overseerr
|
||||||
|
if [[ -f /etc/systemd/system/overseerr.service ]]; then
|
||||||
|
msg_info "Stopping Overseerr"
|
||||||
|
$STD systemctl stop overseerr || true
|
||||||
|
$STD systemctl disable overseerr || true
|
||||||
|
[ -f /etc/systemd/system/overseerr.service ] && rm -f /etc/systemd/system/overseerr.service
|
||||||
|
msg_ok "Stopped Overseerr"
|
||||||
|
|
||||||
|
msg_info "Creating Backup (Patience)"
|
||||||
|
tar -czf /opt/overseerr_backup_$(date +%Y%m%d_%H%M%S).tar.gz -C /opt overseerr
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
msg_info "Migrating Overseerr to seerr"
|
||||||
|
[ -d /opt/overseerr ] && mv /opt/overseerr /opt/seerr
|
||||||
|
mkdir -p /etc/seerr
|
||||||
|
cat <<EOF >/etc/seerr/seerr.conf
|
||||||
|
## Seerr's default port is 5055, if you want to use both, change this.
|
||||||
|
## specify on which port to listen
|
||||||
|
PORT=5055
|
||||||
|
|
||||||
|
## specify on which interface to listen, by default seerr listens on all interfaces
|
||||||
|
#HOST=127.0.0.1
|
||||||
|
|
||||||
|
## Uncomment if you want to force Node.js to resolve IPv4 before IPv6 (advanced users only)
|
||||||
|
# FORCE_IPV4_FIRST=true
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/systemd/system/seerr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Seerr Service
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/etc/seerr/seerr.conf
|
||||||
|
Environment=NODE_ENV=production
|
||||||
|
Type=exec
|
||||||
|
Restart=on-failure
|
||||||
|
WorkingDirectory=/opt/seerr
|
||||||
|
ExecStart=/usr/bin/node dist/index.js
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable -q --now seerr
|
||||||
|
msg_ok "Migrated Overseerr to Seerr"
|
||||||
|
fi
|
||||||
|
# END Overseerr Migration
|
||||||
|
|
||||||
|
if check_for_gh_release "seerr" "seerr-team/seerr"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop seerr
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
cp -a /opt/seerr/config /opt/seerr_backup
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "seerr" "seerr-team/seerr" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating PNPM Version"
|
||||||
|
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/seerr/package.json)
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
||||||
|
msg_ok "Updated PNPM Version"
|
||||||
|
|
||||||
|
msg_info "Updating Seerr"
|
||||||
|
cd /opt/seerr
|
||||||
|
rm -rf dist .next node_modules
|
||||||
|
export CYPRESS_INSTALL_BINARY=0
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
$STD pnpm build
|
||||||
|
msg_ok "Updated Seerr"
|
||||||
|
|
||||||
|
msg_info "Restoring Backup"
|
||||||
|
rm -rf /opt/seerr/config
|
||||||
|
mv /opt/seerr_backup /opt/seerr/config
|
||||||
|
msg_ok "Restored Backup"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start seerr
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated": "2026-02-14T12:08:41Z",
|
"generated": "2026-02-14T18:07:29Z",
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"slug": "2fauth",
|
"slug": "2fauth",
|
||||||
@@ -116,9 +116,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "bentopdf",
|
"slug": "bentopdf",
|
||||||
"repo": "alam00000/bentopdf",
|
"repo": "alam00000/bentopdf",
|
||||||
"version": "v2.2.0",
|
"version": "v2.2.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-09T07:07:40Z"
|
"date": "2026-02-14T16:33:47Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "beszel",
|
"slug": "beszel",
|
||||||
@@ -354,9 +354,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "firefly",
|
"slug": "firefly",
|
||||||
"repo": "firefly-iii/firefly-iii",
|
"repo": "firefly-iii/firefly-iii",
|
||||||
"version": "v6.4.19",
|
"version": "v6.4.20",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-14T11:55:40Z"
|
"date": "2026-02-14T12:39:02Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "fladder",
|
"slug": "fladder",
|
||||||
@@ -578,9 +578,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "jackett",
|
"slug": "jackett",
|
||||||
"repo": "Jackett/Jackett",
|
"repo": "Jackett/Jackett",
|
||||||
"version": "v0.24.1109",
|
"version": "v0.24.1113",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-14T05:54:26Z"
|
"date": "2026-02-14T17:46:58Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "jellystat",
|
"slug": "jellystat",
|
||||||
@@ -1411,9 +1411,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "tandoor",
|
"slug": "tandoor",
|
||||||
"repo": "TandoorRecipes/recipes",
|
"repo": "TandoorRecipes/recipes",
|
||||||
"version": "2.5.1",
|
"version": "2.5.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-13T15:57:27Z"
|
"date": "2026-02-14T12:42:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "tasmoadmin",
|
"slug": "tasmoadmin",
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Jellyseerr",
|
|
||||||
"slug": "jellyseerr",
|
|
||||||
"categories": [
|
|
||||||
14
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 5055,
|
|
||||||
"documentation": "https://docs.jellyseerr.dev/",
|
|
||||||
"website": "https://github.com/Fallenbagel/jellyseerr",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/jellyseerr.webp",
|
|
||||||
"config_path": "/etc/jellyseerr/jellyseerr.conf",
|
|
||||||
"description": "Jellyseerr is a free and open source software application for managing requests for your media library. It is a a fork of Overseerr built to bring support for Jellyfin & Emby media servers.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/jellyseerr.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 4,
|
|
||||||
"ram": 4096,
|
|
||||||
"hdd": 8,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Overseerr",
|
|
||||||
"slug": "overseerr",
|
|
||||||
"categories": [
|
|
||||||
14
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 5055,
|
|
||||||
"documentation": "https://docs.overseerr.dev/",
|
|
||||||
"website": "https://overseerr.dev/",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/overseerr.webp",
|
|
||||||
"config_path": "/opt/overseerr/config/settings.json",
|
|
||||||
"description": "Overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/overseerr.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 4096,
|
|
||||||
"hdd": 8,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
35
frontend/public/json/seerr.json
Normal file
35
frontend/public/json/seerr.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Seerr",
|
||||||
|
"slug": "seerr",
|
||||||
|
"categories": [
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2026-01-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 5055,
|
||||||
|
"documentation": "https://docs.seerr.dev/",
|
||||||
|
"website": "https://seerr.dev/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/seerr.webp",
|
||||||
|
"config_path": "/etc/seerr/seerr.conf",
|
||||||
|
"description": "Open-source media request and discovery manager for Jellyfin, Plex, and Emby. Unified version of Overseerr and Jellyseerr.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/seerr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 4,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 12,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://docs.jellyseerr.dev/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
git \
|
|
||||||
build-essential
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
git clone -q https://github.com/Fallenbagel/jellyseerr.git /opt/jellyseerr
|
|
||||||
cd /opt/jellyseerr
|
|
||||||
$STD git checkout main
|
|
||||||
|
|
||||||
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Installing Jellyseerr (Patience)"
|
|
||||||
export CYPRESS_INSTALL_BINARY=0
|
|
||||||
cd /opt/jellyseerr
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
|
||||||
$STD pnpm build
|
|
||||||
mkdir -p /etc/jellyseerr/
|
|
||||||
cat <<EOF >/etc/jellyseerr/jellyseerr.conf
|
|
||||||
PORT=5055
|
|
||||||
# HOST=0.0.0.0
|
|
||||||
# JELLYFIN_TYPE=emby
|
|
||||||
EOF
|
|
||||||
msg_ok "Installed Jellyseerr"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/jellyseerr.service
|
|
||||||
[Unit]
|
|
||||||
Description=jellyseerr Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
EnvironmentFile=/etc/jellyseerr/jellyseerr.conf
|
|
||||||
Environment=NODE_ENV=production
|
|
||||||
Type=exec
|
|
||||||
WorkingDirectory=/opt/jellyseerr
|
|
||||||
ExecStart=/usr/bin/node dist/index.js
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now jellyseerr
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://overseerr.dev/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
|
||||||
fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"
|
|
||||||
|
|
||||||
msg_info "Configuring Overseerr (Patience)"
|
|
||||||
cd /opt/overseerr
|
|
||||||
$STD yarn install
|
|
||||||
$STD yarn build
|
|
||||||
msg_ok "Configured Overseerr"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/overseerr.service
|
|
||||||
[Unit]
|
|
||||||
Description=Overseerr Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=exec
|
|
||||||
WorkingDirectory=/opt/overseerr
|
|
||||||
ExecStart=/usr/bin/yarn start
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now overseerr
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
67
install/seerr-install.sh
Normal file
67
install/seerr-install.sh
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docs.seerr.dev/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y build-essential
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "seerr" "seerr-team/seerr" "tarball"
|
||||||
|
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/seerr/package.json)
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Installing Seerr (Patience)"
|
||||||
|
export CYPRESS_INSTALL_BINARY=0
|
||||||
|
cd /opt/seerr
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
$STD pnpm build
|
||||||
|
mkdir -p /etc/seerr/
|
||||||
|
cat <<EOF >/etc/seerr/seerr.conf
|
||||||
|
## Seerr's default port is 5055, if you want to use both, change this.
|
||||||
|
## specify on which port to listen
|
||||||
|
PORT=5055
|
||||||
|
|
||||||
|
## specify on which interface to listen, by default seerr listens on all interfaces
|
||||||
|
HOST=0.0.0.0
|
||||||
|
|
||||||
|
## Uncomment if you want to force Node.js to resolve IPv4 before IPv6 (advanced users only)
|
||||||
|
# FORCE_IPV4_FIRST=true
|
||||||
|
EOF
|
||||||
|
msg_ok "Installed Seerr"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/seerr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Seerr Service
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/etc/seerr/seerr.conf
|
||||||
|
Environment=NODE_ENV=production
|
||||||
|
Type=exec
|
||||||
|
Restart=on-failure
|
||||||
|
WorkingDirectory=/opt/seerr
|
||||||
|
ExecStart=/usr/bin/node dist/index.js
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now seerr
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -237,16 +237,21 @@ explain_exit_code() {
|
|||||||
# json_escape()
|
# json_escape()
|
||||||
#
|
#
|
||||||
# - Escapes a string for safe JSON embedding
|
# - Escapes a string for safe JSON embedding
|
||||||
|
# - Strips ANSI escape sequences and non-printable control characters
|
||||||
# - Handles backslashes, quotes, newlines, tabs, and carriage returns
|
# - Handles backslashes, quotes, newlines, tabs, and carriage returns
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
json_escape() {
|
json_escape() {
|
||||||
local s="$1"
|
local s="$1"
|
||||||
|
# Strip ANSI escape sequences (color codes etc.)
|
||||||
|
s=$(printf '%s' "$s" | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g')
|
||||||
s=${s//\\/\\\\}
|
s=${s//\\/\\\\}
|
||||||
s=${s//"/\\"/}
|
s=${s//"/\\"/}
|
||||||
s=${s//$'\n'/\\n}
|
s=${s//$'\n'/\\n}
|
||||||
s=${s//$'\r'/}
|
s=${s//$'\r'/}
|
||||||
s=${s//$'\t'/\\t}
|
s=${s//$'\t'/\\t}
|
||||||
echo "$s"
|
# Remove any remaining control characters (0x00-0x1F except those already handled)
|
||||||
|
s=$(printf '%s' "$s" | tr -d '\000-\010\013\014\016-\037')
|
||||||
|
printf '%s' "$s"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
@@ -283,7 +288,7 @@ get_error_text() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$logfile" && -s "$logfile" ]]; then
|
if [[ -n "$logfile" && -s "$logfile" ]]; then
|
||||||
tail -n 20 "$logfile" 2>/dev/null | sed 's/\r$//'
|
tail -n 20 "$logfile" 2>/dev/null | sed 's/\r$//' | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g'
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,19 +407,14 @@ detect_ram() {
|
|||||||
|
|
||||||
if command -v dmidecode &>/dev/null; then
|
if command -v dmidecode &>/dev/null; then
|
||||||
# Get configured memory speed (actual running speed)
|
# Get configured memory speed (actual running speed)
|
||||||
RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Configured Memory Speed:" | grep -oE "[0-9]+" | head -1 || true)
|
RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Configured Memory Speed:" | grep -oE "[0-9]+" | head -1)
|
||||||
|
|
||||||
# Fallback to Speed: if Configured not available
|
# Fallback to Speed: if Configured not available
|
||||||
if [[ -z "$RAM_SPEED" ]]; then
|
if [[ -z "$RAM_SPEED" ]]; then
|
||||||
RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Speed:" | grep -oE "[0-9]+" | head -1 || true)
|
RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Speed:" | grep -oE "[0-9]+" | head -1)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure RAM_SPEED is a valid integer (PocketBase stores it as integer)
|
|
||||||
if [[ -z "$RAM_SPEED" || ! "$RAM_SPEED" =~ ^[0-9]+$ ]]; then
|
|
||||||
RAM_SPEED=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
export RAM_SPEED
|
export RAM_SPEED
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -509,7 +509,7 @@ post_to_api() {
|
|||||||
"gpu_vendor": "${gpu_vendor}",
|
"gpu_vendor": "${gpu_vendor}",
|
||||||
"gpu_model": "${gpu_model}",
|
"gpu_model": "${gpu_model}",
|
||||||
"gpu_passthrough": "${gpu_passthrough}",
|
"gpu_passthrough": "${gpu_passthrough}",
|
||||||
"ram_speed": ${ram_speed:-0},
|
"ram_speed": "${ram_speed}",
|
||||||
"repo_source": "${REPO_SOURCE}"
|
"repo_source": "${REPO_SOURCE}"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@@ -613,7 +613,7 @@ post_to_api_vm() {
|
|||||||
"gpu_vendor": "${gpu_vendor}",
|
"gpu_vendor": "${gpu_vendor}",
|
||||||
"gpu_model": "${gpu_model}",
|
"gpu_model": "${gpu_model}",
|
||||||
"gpu_passthrough": "${gpu_passthrough}",
|
"gpu_passthrough": "${gpu_passthrough}",
|
||||||
"ram_speed": ${ram_speed:-0},
|
"ram_speed": "${ram_speed}",
|
||||||
"repo_source": "${REPO_SOURCE}"
|
"repo_source": "${REPO_SOURCE}"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@@ -747,7 +747,7 @@ post_update_to_api() {
|
|||||||
"gpu_vendor": "${gpu_vendor}",
|
"gpu_vendor": "${gpu_vendor}",
|
||||||
"gpu_model": "${gpu_model}",
|
"gpu_model": "${gpu_model}",
|
||||||
"gpu_passthrough": "${gpu_passthrough}",
|
"gpu_passthrough": "${gpu_passthrough}",
|
||||||
"ram_speed": ${ram_speed:-0},
|
"ram_speed": "${ram_speed}",
|
||||||
"repo_source": "${REPO_SOURCE}"
|
"repo_source": "${REPO_SOURCE}"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@@ -789,7 +789,7 @@ EOF
|
|||||||
"gpu_vendor": "${gpu_vendor}",
|
"gpu_vendor": "${gpu_vendor}",
|
||||||
"gpu_model": "${gpu_model}",
|
"gpu_model": "${gpu_model}",
|
||||||
"gpu_passthrough": "${gpu_passthrough}",
|
"gpu_passthrough": "${gpu_passthrough}",
|
||||||
"ram_speed": ${ram_speed:-0},
|
"ram_speed": "${ram_speed}",
|
||||||
"repo_source": "${REPO_SOURCE}"
|
"repo_source": "${REPO_SOURCE}"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@@ -886,7 +886,7 @@ categorize_error() {
|
|||||||
# Signal/Process errors (SIGTERM, SIGPIPE, SIGSEGV)
|
# Signal/Process errors (SIGTERM, SIGPIPE, SIGSEGV)
|
||||||
139 | 141 | 143) echo "signal" ;;
|
139 | 141 | 143) echo "signal" ;;
|
||||||
|
|
||||||
# Shell errors (general error, syntax error)
|
# Shell errors (general error, syntax error)
|
||||||
1 | 2) echo "shell" ;;
|
1 | 2) echo "shell" ;;
|
||||||
|
|
||||||
# Default - truly unknown
|
# Default - truly unknown
|
||||||
|
|||||||
@@ -1913,7 +1913,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
local app="$1"
|
local app="$1"
|
||||||
local repo="$2"
|
local repo="$2"
|
||||||
local mode="${3:-tarball}" # tarball | binary | prebuild | singlefile | tag
|
local mode="${3:-tarball}" # tarball | binary | prebuild | singlefile | tag
|
||||||
local version="${4:-latest}"
|
local version="${var_appversion:-${4:-latest}}"
|
||||||
local target="${5:-/opt/$app}"
|
local target="${5:-/opt/$app}"
|
||||||
local asset_pattern="${6:-}"
|
local asset_pattern="${6:-}"
|
||||||
|
|
||||||
@@ -2443,7 +2443,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
local app="$1"
|
local app="$1"
|
||||||
local repo="$2"
|
local repo="$2"
|
||||||
local mode="${3:-tarball}" # tarball | binary | prebuild | singlefile
|
local mode="${3:-tarball}" # tarball | binary | prebuild | singlefile
|
||||||
local version="${4:-latest}"
|
local version="${var_appversion:-${4:-latest}}"
|
||||||
local target="${5:-/opt/$app}"
|
local target="${5:-/opt/$app}"
|
||||||
local asset_pattern="${6:-}"
|
local asset_pattern="${6:-}"
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,11 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
|||||||
container_hostname=$(pct exec "$container" hostname)
|
container_hostname=$(pct exec "$container" hostname)
|
||||||
containers_needing_reboot+=("$container ($container_hostname)")
|
containers_needing_reboot+=("$container ($container_hostname)")
|
||||||
fi
|
fi
|
||||||
|
# check if patchmon agent is present in container and run a report if found
|
||||||
|
if pct exec "$container" -- [ -e "/usr/local/bin/patchmon-agent" ]; then
|
||||||
|
echo -e "${BL}[Info]${GN} patchmon-agent found in ${BL} $container ${CL}, triggering report. \n"
|
||||||
|
pct exec "$container" -- "/usr/local/bin/patchmon-agent" "report"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
wait
|
wait
|
||||||
|
|||||||
Reference in New Issue
Block a user