mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-03 17:35:55 +01:00
Compare commits
10 Commits
MickLesk-p
...
exit_code_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55ebf5cd90 | ||
|
|
592f0d1f53 | ||
|
|
c06dab5339 | ||
|
|
99d8a7eef3 | ||
|
|
3aba5f3209 | ||
|
|
4f735a9a23 | ||
|
|
c742d61de2 | ||
|
|
bdf97e9499 | ||
|
|
4d3fc03961 | ||
|
|
ce2a253053 |
@@ -412,10 +412,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
## 2026-03-02
|
## 2026-03-02
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Profilarr ([#12441](https://github.com/community-scripts/ProxmoxVE/pull/12441))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
- #### 💥 Breaking Changes
|
||||||
@@ -428,10 +424,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- tools.func: Improve stability with retry logic, caching, and debug mode [@MickLesk](https://github.com/MickLesk) ([#10351](https://github.com/community-scripts/ProxmoxVE/pull/10351))
|
- tools.func: Improve stability with retry logic, caching, and debug mode [@MickLesk](https://github.com/MickLesk) ([#10351](https://github.com/community-scripts/ProxmoxVE/pull/10351))
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: standardize exit codes and add mappings [@MickLesk](https://github.com/MickLesk) ([#12467](https://github.com/community-scripts/ProxmoxVE/pull/12467))
|
|
||||||
|
|
||||||
### 🌐 Website
|
### 🌐 Website
|
||||||
|
|
||||||
- frontend: improve detail view badges, addon texts, and HTML title [@MickLesk](https://github.com/MickLesk) ([#12461](https://github.com/community-scripts/ProxmoxVE/pull/12461))
|
- frontend: improve detail view badges, addon texts, and HTML title [@MickLesk](https://github.com/MickLesk) ([#12461](https://github.com/community-scripts/ProxmoxVE/pull/12461))
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
____ _____ __
|
|
||||||
/ __ \_________ / __(_) /___ ___________
|
|
||||||
/ /_/ / ___/ __ \/ /_/ / / __ `/ ___/ ___/
|
|
||||||
/ ____/ / / /_/ / __/ / / /_/ / / / /
|
|
||||||
/_/ /_/ \____/_/ /_/_/\__,_/_/ /_/
|
|
||||||
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
#!/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: michelroegl-brunner
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/Dictionarry-Hub/profilarr
|
|
||||||
|
|
||||||
APP="Profilarr"
|
|
||||||
var_tags="${var_tags:-arr;radarr;sonarr;config}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
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/profilarr ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "profilarr" "Dictionarry-Hub/profilarr"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop profilarr
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
if [[ -d /config ]]; then
|
|
||||||
cp -r /config /opt/profilarr_config_backup
|
|
||||||
fi
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball"
|
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
|
||||||
cd /opt/profilarr/backend
|
|
||||||
$STD uv venv /opt/profilarr/backend/.venv
|
|
||||||
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt
|
|
||||||
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt
|
|
||||||
rm -f requirements-relaxed.txt
|
|
||||||
msg_ok "Installed Python Dependencies"
|
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
|
||||||
if [[ -d /opt/profilarr/frontend ]]; then
|
|
||||||
cd /opt/profilarr/frontend
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
cp -r dist /opt/profilarr/backend/app/static
|
|
||||||
fi
|
|
||||||
msg_ok "Built Frontend"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
if [[ -d /opt/profilarr_config_backup ]]; then
|
|
||||||
mkdir -p /config
|
|
||||||
cp -r /opt/profilarr_config_backup/. /config/
|
|
||||||
rm -rf /opt/profilarr_config_backup
|
|
||||||
fi
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start profilarr
|
|
||||||
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}:6868${CL}"
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated": "2026-03-02T12:12:21Z",
|
"generated": "2026-03-02T06:20:15Z",
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"slug": "2fauth",
|
"slug": "2fauth",
|
||||||
@@ -312,9 +312,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "domain-monitor",
|
"slug": "domain-monitor",
|
||||||
"repo": "Hosteroid/domain-monitor",
|
"repo": "Hosteroid/domain-monitor",
|
||||||
"version": "v1.1.4",
|
"version": "v1.1.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T09:25:01Z"
|
"date": "2026-02-11T15:48:18Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "donetick",
|
"slug": "donetick",
|
||||||
@@ -452,9 +452,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "gitea-mirror",
|
"slug": "gitea-mirror",
|
||||||
"repo": "RayLabsHQ/gitea-mirror",
|
"repo": "RayLabsHQ/gitea-mirror",
|
||||||
"version": "v3.11.0",
|
"version": "v3.10.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T10:19:59Z"
|
"date": "2026-03-01T03:08:07Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "glance",
|
"slug": "glance",
|
||||||
@@ -634,9 +634,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "jotty",
|
"slug": "jotty",
|
||||||
"repo": "fccview/jotty",
|
"repo": "fccview/jotty",
|
||||||
"version": "1.21.0",
|
"version": "1.20.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T11:08:54Z"
|
"date": "2026-02-12T09:23:30Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "kapowarr",
|
"slug": "kapowarr",
|
||||||
@@ -1156,13 +1156,6 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-11-12T07:10:14Z"
|
"date": "2025-11-12T07:10:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"slug": "profilarr",
|
|
||||||
"repo": "Dictionarry-Hub/profilarr",
|
|
||||||
"version": "v1.1.4",
|
|
||||||
"pinned": false,
|
|
||||||
"date": "2026-01-29T14:57:25Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"slug": "projectsend",
|
"slug": "projectsend",
|
||||||
"repo": "projectsend/projectsend",
|
"repo": "projectsend/projectsend",
|
||||||
@@ -1425,9 +1418,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "snowshare",
|
"slug": "snowshare",
|
||||||
"repo": "TuroYT/snowshare",
|
"repo": "TuroYT/snowshare",
|
||||||
"version": "v1.3.8",
|
"version": "v1.3.7",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T07:43:42Z"
|
"date": "2026-02-23T15:51:39Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "sonarr",
|
"slug": "sonarr",
|
||||||
@@ -1663,9 +1656,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "victoriametrics",
|
"slug": "victoriametrics",
|
||||||
"repo": "VictoriaMetrics/VictoriaMetrics",
|
"repo": "VictoriaMetrics/VictoriaMetrics",
|
||||||
"version": "v1.137.0",
|
"version": "v1.136.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T10:09:29Z"
|
"date": "2026-02-16T13:17:50Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "vikunja",
|
"slug": "vikunja",
|
||||||
@@ -1691,9 +1684,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "wanderer",
|
"slug": "wanderer",
|
||||||
"repo": "meilisearch/meilisearch",
|
"repo": "meilisearch/meilisearch",
|
||||||
"version": "v1.37.0",
|
"version": "v1.36.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T09:16:36Z"
|
"date": "2026-02-23T08:13:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "warracker",
|
"slug": "warracker",
|
||||||
@@ -1796,9 +1789,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "zigbee2mqtt",
|
"slug": "zigbee2mqtt",
|
||||||
"repo": "Koenkk/zigbee2mqtt",
|
"repo": "Koenkk/zigbee2mqtt",
|
||||||
"version": "2.9.1",
|
"version": "2.9.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T11:16:46Z"
|
"date": "2026-03-01T13:58:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "zipline",
|
"slug": "zipline",
|
||||||
@@ -1810,9 +1803,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "zitadel",
|
"slug": "zitadel",
|
||||||
"repo": "zitadel/zitadel",
|
"repo": "zitadel/zitadel",
|
||||||
"version": "v4.12.0",
|
"version": "v4.11.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-03-02T08:16:10Z"
|
"date": "2026-02-25T06:13:13Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "zoraxy",
|
"slug": "zoraxy",
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Profilarr",
|
|
||||||
"slug": "profilarr",
|
|
||||||
"categories": [
|
|
||||||
14
|
|
||||||
],
|
|
||||||
"date_created": "2026-03-02",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 6868,
|
|
||||||
"documentation": "https://github.com/Dictionarry-Hub/profilarr#readme",
|
|
||||||
"website": "https://github.com/Dictionarry-Hub/profilarr",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/profilarr.webp",
|
|
||||||
"config_path": "/config",
|
|
||||||
"description": "Profilarr is a configuration management platform for Radarr and Sonarr that simplifies importing, syncing, and managing quality profiles, custom formats, and release profiles.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/profilarr.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 8,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Authors: MickLesk (CanbiZ) | Co-Authors: remz1337
|
# Authors: MickLesk (CanbiZ)
|
||||||
|
# Co-Authors: remz1337
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://frigate.video/ | Github: https://github.com/blakeblackshear/frigate
|
# Source: https://frigate.video/ | Github: https://github.com/blakeblackshear/frigate
|
||||||
|
|
||||||
@@ -84,7 +85,6 @@ $STD apt install -y \
|
|||||||
tclsh \
|
tclsh \
|
||||||
libopenblas-dev \
|
libopenblas-dev \
|
||||||
liblapack-dev \
|
liblapack-dev \
|
||||||
libgomp1 \
|
|
||||||
make \
|
make \
|
||||||
moreutils
|
moreutils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
@@ -101,16 +101,9 @@ export NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
|
|||||||
export TOKENIZERS_PARALLELISM=true
|
export TOKENIZERS_PARALLELISM=true
|
||||||
export TRANSFORMERS_NO_ADVISORY_WARNINGS=1
|
export TRANSFORMERS_NO_ADVISORY_WARNINGS=1
|
||||||
export OPENCV_FFMPEG_LOGLEVEL=8
|
export OPENCV_FFMPEG_LOGLEVEL=8
|
||||||
export PYTHONWARNINGS="ignore:::numpy.core.getlimits"
|
|
||||||
export HAILORT_LOGGER_PATH=NONE
|
export HAILORT_LOGGER_PATH=NONE
|
||||||
export TF_CPP_MIN_LOG_LEVEL=3
|
|
||||||
export TF_CPP_MIN_VLOG_LEVEL=3
|
|
||||||
export TF_ENABLE_ONEDNN_OPTS=0
|
|
||||||
export AUTOGRAPH_VERBOSITY=0
|
|
||||||
export GLOG_minloglevel=3
|
|
||||||
export GLOG_logtostderr=0
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "frigate" "blakeblackshear/frigate" "tarball" "v0.17.0" "/opt/frigate"
|
fetch_and_deploy_gh_release "frigate" "blakeblackshear/frigate" "tarball" "v0.16.4" "/opt/frigate"
|
||||||
|
|
||||||
msg_info "Building Nginx"
|
msg_info "Building Nginx"
|
||||||
$STD bash /opt/frigate/docker/main/build_nginx.sh
|
$STD bash /opt/frigate/docker/main/build_nginx.sh
|
||||||
@@ -145,19 +138,13 @@ install -c -m 644 libusb-1.0.pc /usr/local/lib/pkgconfig
|
|||||||
ldconfig
|
ldconfig
|
||||||
msg_ok "Built libUSB"
|
msg_ok "Built libUSB"
|
||||||
|
|
||||||
msg_info "Bootstrapping pip"
|
|
||||||
wget -q https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
|
|
||||||
sed -i 's/args.append("setuptools")/args.append("setuptools==77.0.3")/' /tmp/get-pip.py
|
|
||||||
$STD python3 /tmp/get-pip.py "pip"
|
|
||||||
rm -f /tmp/get-pip.py
|
|
||||||
msg_ok "Bootstrapped pip"
|
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
msg_info "Installing Python Dependencies"
|
||||||
$STD pip3 install -r /opt/frigate/docker/main/requirements.txt
|
$STD pip3 install -r /opt/frigate/docker/main/requirements.txt
|
||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
msg_info "Building Python Wheels (Patience)"
|
msg_info "Building Python Wheels (Patience)"
|
||||||
mkdir -p /wheels
|
mkdir -p /wheels
|
||||||
|
sed -i 's|^SQLITE3_VERSION=.*|SQLITE3_VERSION="version-3.46.0"|g' /opt/frigate/docker/main/build_pysqlite3.sh
|
||||||
$STD bash /opt/frigate/docker/main/build_pysqlite3.sh
|
$STD bash /opt/frigate/docker/main/build_pysqlite3.sh
|
||||||
for i in {1..3}; do
|
for i in {1..3}; do
|
||||||
$STD pip3 wheel --wheel-dir=/wheels -r /opt/frigate/docker/main/requirements-wheels.txt --default-timeout=300 --retries=3 && break
|
$STD pip3 wheel --wheel-dir=/wheels -r /opt/frigate/docker/main/requirements-wheels.txt --default-timeout=300 --retries=3 && break
|
||||||
@@ -165,7 +152,7 @@ for i in {1..3}; do
|
|||||||
done
|
done
|
||||||
msg_ok "Built Python Wheels"
|
msg_ok "Built Python Wheels"
|
||||||
|
|
||||||
NODE_VERSION="20" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||||
|
|
||||||
msg_info "Downloading Inference Models"
|
msg_info "Downloading Inference Models"
|
||||||
mkdir -p /models /openvino-model
|
mkdir -p /models /openvino-model
|
||||||
@@ -196,10 +183,6 @@ $STD pip3 install -U /wheels/*.whl
|
|||||||
ldconfig
|
ldconfig
|
||||||
msg_ok "Installed HailoRT Runtime"
|
msg_ok "Installed HailoRT Runtime"
|
||||||
|
|
||||||
msg_info "Installing MemryX Runtime"
|
|
||||||
$STD bash /opt/frigate/docker/main/install_memryx.sh
|
|
||||||
msg_ok "Installed MemryX Runtime"
|
|
||||||
|
|
||||||
msg_info "Installing OpenVino"
|
msg_info "Installing OpenVino"
|
||||||
$STD pip3 install -r /opt/frigate/docker/main/requirements-ov.txt
|
$STD pip3 install -r /opt/frigate/docker/main/requirements-ov.txt
|
||||||
msg_ok "Installed OpenVino"
|
msg_ok "Installed OpenVino"
|
||||||
@@ -226,8 +209,6 @@ $STD make version
|
|||||||
cd /opt/frigate/web
|
cd /opt/frigate/web
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
mv /opt/frigate/web/dist/BASE_PATH/monacoeditorwork/* /opt/frigate/web/dist/assets/
|
|
||||||
rm -rf /opt/frigate/web/dist/BASE_PATH
|
|
||||||
cp -r /opt/frigate/web/dist/* /opt/frigate/web/
|
cp -r /opt/frigate/web/dist/* /opt/frigate/web/
|
||||||
sed -i '/^s6-svc -O \.$/s/^/#/' /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run
|
sed -i '/^s6-svc -O \.$/s/^/#/' /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run
|
||||||
msg_ok "Built Frigate Application"
|
msg_ok "Built Frigate Application"
|
||||||
@@ -243,19 +224,6 @@ echo "tmpfs /tmp/cache tmpfs defaults 0 0" >>/etc/fstab
|
|||||||
cat <<EOF >/etc/frigate.env
|
cat <<EOF >/etc/frigate.env
|
||||||
DEFAULT_FFMPEG_VERSION="7.0"
|
DEFAULT_FFMPEG_VERSION="7.0"
|
||||||
INCLUDED_FFMPEG_VERSIONS="7.0:5.0"
|
INCLUDED_FFMPEG_VERSIONS="7.0:5.0"
|
||||||
NVIDIA_VISIBLE_DEVICES=all
|
|
||||||
NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
|
|
||||||
TOKENIZERS_PARALLELISM=true
|
|
||||||
TRANSFORMERS_NO_ADVISORY_WARNINGS=1
|
|
||||||
OPENCV_FFMPEG_LOGLEVEL=8
|
|
||||||
PYTHONWARNINGS="ignore:::numpy.core.getlimits"
|
|
||||||
HAILORT_LOGGER_PATH=NONE
|
|
||||||
TF_CPP_MIN_LOG_LEVEL=3
|
|
||||||
TF_CPP_MIN_VLOG_LEVEL=3
|
|
||||||
TF_ENABLE_ONEDNN_OPTS=0
|
|
||||||
AUTOGRAPH_VERBOSITY=0
|
|
||||||
GLOG_minloglevel=3
|
|
||||||
GLOG_logtostderr=0
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/config/config.yml
|
cat <<EOF >/config/config.yml
|
||||||
@@ -269,6 +237,7 @@ cameras:
|
|||||||
input_args: -re -stream_loop -1 -fflags +genpts
|
input_args: -re -stream_loop -1 -fflags +genpts
|
||||||
roles:
|
roles:
|
||||||
- detect
|
- detect
|
||||||
|
- rtmp
|
||||||
detect:
|
detect:
|
||||||
height: 1080
|
height: 1080
|
||||||
width: 1920
|
width: 1920
|
||||||
@@ -286,7 +255,6 @@ ffmpeg:
|
|||||||
detectors:
|
detectors:
|
||||||
detector01:
|
detector01:
|
||||||
type: openvino
|
type: openvino
|
||||||
device: AUTO
|
|
||||||
model:
|
model:
|
||||||
width: 300
|
width: 300
|
||||||
height: 300
|
height: 300
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ $STD apt install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
PG_VERSION="16" setup_postgresql
|
POSTGRES_VERSION="16" setup_postgresql
|
||||||
NODE_MODULE="yarn" NODE_VERSION="24" setup_nodejs
|
NODE_MODULE="yarn" NODE_VERSION="24" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
||||||
PG_DB_NAME="mealie_db" PG_DB_USER="mealie_user" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
PG_DB_NAME="mealie_db" PG_DB_USER="mealie_user" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: michelroegl-brunner
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/Dictionarry-Hub/profilarr
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt install -y \
|
|
||||||
build-essential \
|
|
||||||
python3-dev \
|
|
||||||
libffi-dev \
|
|
||||||
libssl-dev \
|
|
||||||
git
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Creating directories"
|
|
||||||
mkdir -p /opt/profilarr \
|
|
||||||
/config
|
|
||||||
msg_ok "Created directories"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball"
|
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
|
||||||
cd /opt/profilarr/backend
|
|
||||||
$STD uv venv /opt/profilarr/backend/.venv
|
|
||||||
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt
|
|
||||||
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt
|
|
||||||
rm -f requirements-relaxed.txt
|
|
||||||
msg_ok "Installed Python Dependencies"
|
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
|
||||||
cd /opt/profilarr/frontend
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
cp -r dist /opt/profilarr/backend/app/static
|
|
||||||
msg_ok "Built Frontend"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/profilarr.service
|
|
||||||
[Unit]
|
|
||||||
Description=Profilarr - Configuration Management Platform for Radarr/Sonarr
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/opt/profilarr/backend
|
|
||||||
Environment="PATH=/opt/profilarr/backend/.venv/bin:/usr/local/bin:/usr/bin:/bin"
|
|
||||||
Environment="PYTHONPATH=/opt/profilarr/backend"
|
|
||||||
ExecStart=/opt/profilarr/backend/.venv/bin/gunicorn --bind 0.0.0.0:6868 --timeout 600 app.main:create_app()
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=5
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now profilarr
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
@@ -4094,8 +4094,21 @@ EOF'
|
|||||||
# that sends "configuring" status AFTER the host already reported "failed"
|
# that sends "configuring" status AFTER the host already reported "failed"
|
||||||
export CONTAINER_INSTALLING=true
|
export CONTAINER_INSTALLING=true
|
||||||
|
|
||||||
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)"
|
# Capture lxc-attach terminal output to host-side log via tee.
|
||||||
local lxc_exit=$?
|
# This is the ONLY reliable way to get install output when:
|
||||||
|
# - install.func fails to load (DNS error) → no container-side logging
|
||||||
|
# - install script crashes before logging starts
|
||||||
|
# - $STD/silent() not used for some commands
|
||||||
|
# PIPESTATUS[0] gets the real exit code from lxc-attach (not from tee).
|
||||||
|
# Note: stdin is redirected from /dev/null so the pipeline does not consume
|
||||||
|
# the host's stdin/tty. This keeps /dev/tty usable for the recovery menu
|
||||||
|
# after SIGINT or failure (prevents "read: read error: Input/output error").
|
||||||
|
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
||||||
|
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" </dev/null 2>&1 | tee "$_LXC_CAPTURE_LOG"
|
||||||
|
local lxc_exit=${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
# Restore terminal state after pipeline (tee/lxc-attach may leave it broken)
|
||||||
|
stty sane 2>/dev/null || true
|
||||||
|
|
||||||
unset CONTAINER_INSTALLING
|
unset CONTAINER_INSTALLING
|
||||||
|
|
||||||
@@ -4157,9 +4170,19 @@ EOF'
|
|||||||
build_log_copied=true
|
build_log_copied=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy and append INSTALL_LOG from container
|
# Copy and append INSTALL_LOG from container (with timeout to prevent hangs)
|
||||||
local temp_install_log="/tmp/.install-temp-${SESSION_ID}.log"
|
local temp_install_log="/tmp/.install-temp-${SESSION_ID}.log"
|
||||||
if pct pull "$CTID" "/root/.install-${SESSION_ID}.log" "$temp_install_log" 2>/dev/null; then
|
local container_log_ok=false
|
||||||
|
if timeout 8 pct pull "$CTID" "/root/.install-${SESSION_ID}.log" "$temp_install_log" 2>/dev/null; then
|
||||||
|
# Only use container log if it has meaningful content (>100 bytes)
|
||||||
|
if [[ -s "$temp_install_log" ]] && [[ $(stat -c%s "$temp_install_log" 2>/dev/null || echo 0) -gt 100 ]]; then
|
||||||
|
container_log_ok=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# PHASE 2: Use container-side log if available, otherwise use host-captured tee output
|
||||||
|
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
||||||
|
if [[ "$container_log_ok" == true ]]; then
|
||||||
{
|
{
|
||||||
echo "================================================================================"
|
echo "================================================================================"
|
||||||
echo "PHASE 2: APPLICATION INSTALLATION (Container)"
|
echo "PHASE 2: APPLICATION INSTALLATION (Container)"
|
||||||
@@ -4167,8 +4190,24 @@ EOF'
|
|||||||
cat "$temp_install_log"
|
cat "$temp_install_log"
|
||||||
echo ""
|
echo ""
|
||||||
} >>"$combined_log"
|
} >>"$combined_log"
|
||||||
rm -f "$temp_install_log"
|
|
||||||
install_log_copied=true
|
install_log_copied=true
|
||||||
|
elif [[ -s "$_LXC_CAPTURE_LOG" ]]; then
|
||||||
|
# Fallback: host-captured terminal output from lxc-attach
|
||||||
|
# This captures everything the user saw, including errors when install.func
|
||||||
|
# failed to load (DNS issues, etc.) and no container-side logging was set up.
|
||||||
|
{
|
||||||
|
echo "================================================================================"
|
||||||
|
echo "PHASE 2: APPLICATION INSTALLATION (Container - captured from terminal)"
|
||||||
|
echo "================================================================================"
|
||||||
|
# Strip ANSI escape codes from terminal capture
|
||||||
|
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' "$_LXC_CAPTURE_LOG" | sed 's/\r$//'
|
||||||
|
echo ""
|
||||||
|
} >>"$combined_log"
|
||||||
|
install_log_copied=true
|
||||||
|
fi
|
||||||
|
rm -f "$temp_install_log"
|
||||||
|
|
||||||
|
if [[ "$install_log_copied" == true ]]; then
|
||||||
# Point INSTALL_LOG to combined log so get_full_log() finds it
|
# Point INSTALL_LOG to combined log so get_full_log() finds it
|
||||||
INSTALL_LOG="$combined_log"
|
INSTALL_LOG="$combined_log"
|
||||||
fi
|
fi
|
||||||
@@ -4354,8 +4393,10 @@ EOF'
|
|||||||
echo ""
|
echo ""
|
||||||
echo -en "${YW}Select option [1-${max_option}] (default: 1, auto-remove in 60s): ${CL}"
|
echo -en "${YW}Select option [1-${max_option}] (default: 1, auto-remove in 60s): ${CL}"
|
||||||
|
|
||||||
local response=""
|
# Ensure terminal is sane before reading input (lxc-attach|tee may corrupt tty state)
|
||||||
if read -t 60 -r response; then
|
stty sane 2>/dev/null || true
|
||||||
|
|
||||||
|
if read -t 60 -r response </dev/tty; then
|
||||||
case "${response:-1}" in
|
case "${response:-1}" in
|
||||||
1)
|
1)
|
||||||
# Remove container
|
# Remove container
|
||||||
@@ -4442,8 +4483,10 @@ EOF'
|
|||||||
# Re-run install script in existing container (don't destroy/recreate)
|
# Re-run install script in existing container (don't destroy/recreate)
|
||||||
set +Eeuo pipefail
|
set +Eeuo pipefail
|
||||||
trap - ERR
|
trap - ERR
|
||||||
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)"
|
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
||||||
local apt_retry_exit=$?
|
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" </dev/null 2>&1 | tee "$_LXC_CAPTURE_LOG"
|
||||||
|
local apt_retry_exit=${PIPESTATUS[0]}
|
||||||
|
stty sane 2>/dev/null || true
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler' ERR
|
trap 'error_handler' ERR
|
||||||
|
|
||||||
@@ -4553,6 +4596,9 @@ EOF'
|
|||||||
exit $install_exit_code
|
exit $install_exit_code
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Clean up host-side capture log (not needed on success, already in combined_log on failure)
|
||||||
|
rm -f "/tmp/.install-capture-${SESSION_ID}.log" 2>/dev/null
|
||||||
|
|
||||||
# Re-enable error handling after successful install or recovery menu completion
|
# Re-enable error handling after successful install or recovery menu completion
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler' ERR
|
trap 'error_handler' ERR
|
||||||
|
|||||||
@@ -319,9 +319,7 @@ error_handler() {
|
|||||||
echo -en "${YW}Remove broken container ${CTID}? (Y/n) [auto-remove in 60s]: ${CL}"
|
echo -en "${YW}Remove broken container ${CTID}? (Y/n) [auto-remove in 60s]: ${CL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Read user response
|
if read -t 60 -r response </dev/tty; then
|
||||||
local response=""
|
|
||||||
if read -t 60 -r response; then
|
|
||||||
if [[ -z "$response" || "$response" =~ ^[Yy]$ ]]; then
|
if [[ -z "$response" || "$response" =~ ^[Yy]$ ]]; then
|
||||||
echo ""
|
echo ""
|
||||||
if declare -f msg_info >/dev/null 2>&1; then
|
if declare -f msg_info >/dev/null 2>&1; then
|
||||||
|
|||||||
@@ -934,11 +934,7 @@ upgrade_package() {
|
|||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Repository availability check with caching
|
# Repository availability check with caching
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Note: Must use -gA (global) because tools.func is sourced inside update_os()
|
declare -A _REPO_CACHE 2>/dev/null || true
|
||||||
# function scope. Plain 'declare -A' would create a local variable that gets
|
|
||||||
# destroyed when update_os() returns, causing "unbound variable" errors later
|
|
||||||
# when setup_postgresql/verify_repo_available tries to access the cache key.
|
|
||||||
declare -gA _REPO_CACHE 2>/dev/null || declare -A _REPO_CACHE 2>/dev/null || true
|
|
||||||
|
|
||||||
verify_repo_available() {
|
verify_repo_available() {
|
||||||
local repo_url="$1"
|
local repo_url="$1"
|
||||||
@@ -1736,13 +1732,6 @@ setup_deb822_repo() {
|
|||||||
rm -f "$tmp_gpg"
|
rm -f "$tmp_gpg"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
else
|
|
||||||
# Already binary — copy directly
|
|
||||||
cp -f "$tmp_gpg" "/etc/apt/keyrings/${name}.gpg" || {
|
|
||||||
msg_error "Failed to install GPG key for ${name}"
|
|
||||||
rm -f "$tmp_gpg"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
fi
|
fi
|
||||||
rm -f "$tmp_gpg"
|
rm -f "$tmp_gpg"
|
||||||
chmod 644 "/etc/apt/keyrings/${name}.gpg"
|
chmod 644 "/etc/apt/keyrings/${name}.gpg"
|
||||||
@@ -5654,20 +5643,20 @@ function setup_mongodb() {
|
|||||||
# - Handles Debian Trixie libaio1t64 transition
|
# - Handles Debian Trixie libaio1t64 transition
|
||||||
#
|
#
|
||||||
# Variables:
|
# Variables:
|
||||||
# USE_MYSQL_REPO - Use official MySQL repository (default: true)
|
# USE_MYSQL_REPO - Set to "true" to use official MySQL repository
|
||||||
# Set to "false" to use distro packages instead
|
# (default: false, uses distro packages)
|
||||||
# MYSQL_VERSION - MySQL version to install when using official repo
|
# MYSQL_VERSION - MySQL version to install when using official repo
|
||||||
# (e.g. 8.0, 8.4) (default: 8.0)
|
# (e.g. 8.0, 8.4) (default: 8.0)
|
||||||
#
|
#
|
||||||
# Examples:
|
# Examples:
|
||||||
# setup_mysql # Uses official MySQL repo, 8.0
|
# setup_mysql # Uses distro package (recommended)
|
||||||
# MYSQL_VERSION="8.4" setup_mysql # Specific version from MySQL repo
|
# USE_MYSQL_REPO=true setup_mysql # Uses official MySQL repo
|
||||||
# USE_MYSQL_REPO=false setup_mysql # Uses distro package instead
|
# USE_MYSQL_REPO=true MYSQL_VERSION="8.4" setup_mysql # Specific version
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
function setup_mysql() {
|
function setup_mysql() {
|
||||||
local MYSQL_VERSION="${MYSQL_VERSION:-8.0}"
|
local MYSQL_VERSION="${MYSQL_VERSION:-8.0}"
|
||||||
local USE_MYSQL_REPO="${USE_MYSQL_REPO:-true}"
|
local USE_MYSQL_REPO="${USE_MYSQL_REPO:-false}"
|
||||||
local DISTRO_ID DISTRO_CODENAME
|
local DISTRO_ID DISTRO_CODENAME
|
||||||
DISTRO_ID=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '"')
|
DISTRO_ID=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '"')
|
||||||
DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
|
DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
|
||||||
@@ -6368,21 +6357,21 @@ EOF
|
|||||||
# - Restores dumped data post-upgrade
|
# - Restores dumped data post-upgrade
|
||||||
#
|
#
|
||||||
# Variables:
|
# Variables:
|
||||||
# USE_PGDG_REPO - Use official PGDG repository (default: true)
|
# USE_PGDG_REPO - Set to "true" to use official PGDG repository
|
||||||
# Set to "false" to use distro packages instead
|
# (default: false, uses distro packages)
|
||||||
# PG_VERSION - Major PostgreSQL version (e.g. 15, 16) (default: 16)
|
# PG_VERSION - Major PostgreSQL version (e.g. 15, 16) (default: 16)
|
||||||
# PG_MODULES - Comma-separated list of modules (e.g. "postgis,contrib")
|
# PG_MODULES - Comma-separated list of modules (e.g. "postgis,contrib")
|
||||||
#
|
#
|
||||||
# Examples:
|
# Examples:
|
||||||
# setup_postgresql # Uses PGDG repo, PG 16
|
# setup_postgresql # Uses distro package (recommended)
|
||||||
# PG_VERSION="17" setup_postgresql # Specific version from PGDG
|
# USE_PGDG_REPO=true setup_postgresql # Uses official PGDG repo
|
||||||
# USE_PGDG_REPO=false setup_postgresql # Uses distro package instead
|
# USE_PGDG_REPO=true PG_VERSION="17" setup_postgresql # Specific version from PGDG
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
function setup_postgresql() {
|
function setup_postgresql() {
|
||||||
local PG_VERSION="${PG_VERSION:-16}"
|
local PG_VERSION="${PG_VERSION:-16}"
|
||||||
local PG_MODULES="${PG_MODULES:-}"
|
local PG_MODULES="${PG_MODULES:-}"
|
||||||
local USE_PGDG_REPO="${USE_PGDG_REPO:-true}"
|
local USE_PGDG_REPO="${USE_PGDG_REPO:-false}"
|
||||||
local DISTRO_ID DISTRO_CODENAME
|
local DISTRO_ID DISTRO_CODENAME
|
||||||
DISTRO_ID=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '"')
|
DISTRO_ID=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '"')
|
||||||
DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
|
DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
|
||||||
|
|||||||
Reference in New Issue
Block a user