mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-04-10 11:36:27 -04:00
Compare commits
4 Commits
main
...
fix/dynami
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ccefa7f1b4 | ||
|
|
5c1e48356a | ||
|
|
6c0d7d4482 | ||
|
|
4b98345f67 |
35
CHANGELOG.md
35
CHANGELOG.md
@@ -439,41 +439,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-04-10
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Immich: Pin version to 2.7.3 [@vhsdream](https://github.com/vhsdream) ([#13631](https://github.com/community-scripts/ProxmoxVE/pull/13631))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Homarr: bind Redis to localhost only [@MickLesk](https://github.com/MickLesk) ([#13552](https://github.com/community-scripts/ProxmoxVE/pull/13552))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tools.func: prevent script crash when entering GitHub token after rate limit [@MickLesk](https://github.com/MickLesk) ([#13638](https://github.com/community-scripts/ProxmoxVE/pull/13638))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- addons: Filebrowser & Filebrowser-Quantum get warning if host install [@MickLesk](https://github.com/MickLesk) ([#13639](https://github.com/community-scripts/ProxmoxVE/pull/13639))
|
||||
|
||||
## 2026-04-09
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- boostack: add: git [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13620](https://github.com/community-scripts/ProxmoxVE/pull/13620))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Update OPNsense version from 25.7 to 26.1 [@tdn131](https://github.com/tdn131) ([#13626](https://github.com/community-scripts/ProxmoxVE/pull/13626))
|
||||
- CheckMK: Bump Default OS to 13 (trixie) + dynamic codename + fix RELEASE-Tag Fetching [@MickLesk](https://github.com/MickLesk) ([#13610](https://github.com/community-scripts/ProxmoxVE/pull/13610))
|
||||
|
||||
## 2026-04-08
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -29,7 +29,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
setup_mariadb
|
||||
ensure_dependencies git
|
||||
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then
|
||||
msg_info "Stopping Apache2"
|
||||
systemctl stop apache2
|
||||
|
||||
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags?per_page=50 | jq -r '.[].name' | sed 's/^v//' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
||||
RELEASE="${RELEASE%%+*}"
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
$STD omd stop monitoring
|
||||
|
||||
@@ -28,7 +28,7 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||
if [[ "$(get_os_version_major)" == "12" ]]; then
|
||||
msg_error "Wrong Debian version detected!"
|
||||
msg_error "You must upgrade your LXC to Debian Trixie before updating."
|
||||
exit
|
||||
|
||||
@@ -65,7 +65,6 @@ EOF
|
||||
|
||||
msg_info "Updating Homarr"
|
||||
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
||||
grep -q '^bind 127.0.0.1 -::1$' /etc/redis/redis.conf || echo "bind 127.0.0.1 -::1" >> /etc/redis/redis.conf
|
||||
rm /etc/nginx/nginx.conf
|
||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||
msg_ok "Updated Homarr"
|
||||
|
||||
@@ -109,7 +109,7 @@ EOF
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
|
||||
RELEASE="v2.7.3"
|
||||
RELEASE="v2.7.2"
|
||||
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
||||
msg_info "Enabling Maintenance Mode"
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! grep -qE "^ID=(ubuntu)$" /etc/os-release; then
|
||||
if [[ "$(get_os_info id)" != "ubuntu" ]]; then
|
||||
msg_error "Unsupported OS. InvenTree requires Ubuntu (20.04/22.04/24.04)."
|
||||
exit
|
||||
fi
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
||||
if [[ "$(get_os_info id)" != "ubuntu" ]]; then
|
||||
msg_info "Updating Intel Dependencies"
|
||||
rm -f ~/.intel-* || true
|
||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
||||
|
||||
@@ -55,7 +55,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
local pcre_pkg="libpcre3-dev"
|
||||
if grep -qE 'VERSION_ID="1[3-9]"' /etc/os-release 2>/dev/null; then
|
||||
if [[ "$(get_os_version_major)" -ge 13 ]]; then
|
||||
pcre_pkg="libpcre2-dev"
|
||||
fi
|
||||
$STD apt install -y build-essential "$pcre_pkg" libssl-dev zlib1g-dev
|
||||
|
||||
@@ -65,8 +65,7 @@ function update_script() {
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
||||
if [ "$(get_os_info codename)" = "bookworm" ]; then
|
||||
setup_gs
|
||||
else
|
||||
ensure_dependencies ghostscript
|
||||
@@ -140,8 +139,7 @@ function update_script() {
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
||||
if [ "$(get_os_info codename)" = "bookworm" ]; then
|
||||
setup_gs
|
||||
else
|
||||
msg_info "Installing Ghostscript"
|
||||
|
||||
@@ -42,7 +42,7 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz"
|
||||
|
||||
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(get_os_info codename)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||
if [[ "${LIBHEIF_URL}" != "$(cat ~/.photoprism_libheif 2>/dev/null)" ]] || [[ ! -f ~/.photoprism_libheif ]]; then
|
||||
msg_info "Updating PhotoPrism LibHeif"
|
||||
ensure_dependencies libvips42
|
||||
|
||||
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if grep -q 'Debian GNU/Linux 12' /etc/os-release && [ -f /etc/apt/sources.list.d/proxmox-release-bookworm.list ] && [ -f /etc/apt/sources.list.d/pdm-test.list ]; then
|
||||
if [[ "$(get_os_version_major)" == "12" ]] && [ -f /etc/apt/sources.list.d/proxmox-release-bookworm.list ] && [ -f /etc/apt/sources.list.d/pdm-test.list ]; then
|
||||
msg_info "Updating outdated outdated source formats"
|
||||
echo "deb [signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test" >/etc/apt/sources.list.d/pdm-test.list
|
||||
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -o /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||
@@ -37,16 +37,16 @@ function update_script() {
|
||||
msg_ok "Updated old sources"
|
||||
fi
|
||||
|
||||
if grep -q 'Debian GNU/Linux 13' /etc/os-release; then
|
||||
if [[ "$(get_os_version_major)" == "13" ]]; then
|
||||
if [ -f "/etc/apt/sources.list.d/pdm-test.sources" ]; then
|
||||
if ! grep -qx "Enabled: false" "/etc/apt/sources.list.d/pdm-test.sources"; then
|
||||
echo "Enabled: false" >> "/etc/apt/sources.list.d/pdm-test.sources"
|
||||
setup_deb822_repo \
|
||||
"pdm" \
|
||||
"https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg" \
|
||||
"http://download.proxmox.com/debian/pdm" \
|
||||
"trixie" \
|
||||
"pdm-no-subscription"
|
||||
echo "Enabled: false" >>"/etc/apt/sources.list.d/pdm-test.sources"
|
||||
setup_deb822_repo \
|
||||
"pdm" \
|
||||
"https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg" \
|
||||
"http://download.proxmox.com/debian/pdm" \
|
||||
"trixie" \
|
||||
"pdm-no-subscription"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -29,9 +29,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" != "trixie" ]; then
|
||||
msg_error "Unsupported Debian version: $VERSION_CODENAME – please upgrade to Debian 13 (Trixie) before updating Zabbix."
|
||||
if [ "$(get_os_info codename)" != "trixie" ]; then
|
||||
msg_error "Unsupported Debian version: $(get_os_info codename) – please upgrade to Debian 13 (Trixie) before updating Zabbix."
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
@@ -14,9 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
make \
|
||||
git
|
||||
$STD apt install -y make
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="ldap,tidy,mysqli" setup_php
|
||||
|
||||
@@ -14,7 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Install Checkmk"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags?per_page=50 | jq -r '.[].name' | sed 's/^v//' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
||||
RELEASE="${RELEASE%%+*}"
|
||||
curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.$(get_os_info codename)_amd64.deb" -o "/opt/checkmk.deb"
|
||||
$STD apt-get install -y /opt/checkmk.deb
|
||||
|
||||
@@ -15,26 +15,25 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Cockpit"
|
||||
source /etc/os-release
|
||||
cat <<EOF >/etc/apt/sources.list.d/debian-backports.sources
|
||||
Types: deb deb-src
|
||||
URIs: http://deb.debian.org/debian
|
||||
Suites: ${VERSION_CODENAME}-backports
|
||||
Suites: $(get_os_info codename)-backports
|
||||
Components: main
|
||||
Enabled: yes
|
||||
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
|
||||
EOF
|
||||
|
||||
$STD apt update
|
||||
$STD apt install -t ${VERSION_CODENAME}-backports cockpit cracklib-runtime --no-install-recommends -y
|
||||
$STD apt install -t $(get_os_info codename)-backports cockpit cracklib-runtime --no-install-recommends -y
|
||||
sed -i "s/root//g" /etc/cockpit/disallowed-users
|
||||
msg_ok "Installed Cockpit"
|
||||
|
||||
read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
install_45drives=true
|
||||
if [[ "${VERSION_ID}" -ge 13 ]]; then
|
||||
read -r -p "Debian ${VERSION_ID} is not officially supported by 45Drives yet, would you like to continue anyway? <y/N> " prompt
|
||||
if [[ "$(get_os_version_major)" -ge 13 ]]; then
|
||||
read -r -p "Debian $(get_os_version_major) is not officially supported by 45Drives yet, would you like to continue anyway? <y/N> " prompt
|
||||
if [[ ! "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
install_45drives=false
|
||||
fi
|
||||
|
||||
@@ -13,8 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
source /etc/os-release
|
||||
if [[ "$VERSION_ID" != "12" ]]; then
|
||||
if [[ "$(get_os_version_major)" != "12" ]]; then
|
||||
msg_error "Frigate requires Debian 12 (Bookworm) due to Python 3.11 dependencies"
|
||||
exit 238
|
||||
fi
|
||||
|
||||
@@ -47,7 +47,6 @@ mkdir -p /appdata/redis
|
||||
chown -R redis:redis /appdata/redis
|
||||
chmod 744 /appdata/redis
|
||||
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
||||
grep -q '^bind 127.0.0.1 -::1$' /etc/redis/redis.conf || echo "bind 127.0.0.1 -::1" >>/etc/redis/redis.conf
|
||||
rm /etc/nginx/nginx.conf
|
||||
mkdir -p /etc/nginx/templates
|
||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||
@@ -81,7 +80,7 @@ chmod +x /opt/homarr/run.sh
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now redis-server
|
||||
systemctl enable -q --now homarr
|
||||
systemctl disable -q --now nginx
|
||||
systemctl disable -q --now nginx
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -295,7 +295,7 @@ ML_DIR="${APP_DIR}/machine-learning"
|
||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||
|
||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.7.3" "$SRC_DIR"
|
||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.7.2" "$SRC_DIR"
|
||||
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1] | split("+")[0]' ${SRC_DIR}/package.json)"
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
|
||||
|
||||
@@ -15,17 +15,17 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing lldap"
|
||||
source /etc/os-release
|
||||
os=$ID
|
||||
if [ "$os" == "ubuntu" ]; then
|
||||
OS_ID=$(get_os_info id)
|
||||
OS_VERSION=$(get_os_info version)
|
||||
if [ "$OS_ID" == "ubuntu" ]; then
|
||||
DISTRO="xUbuntu"
|
||||
else
|
||||
DISTRO="${os^}"
|
||||
DISTRO="${OS_ID^}"
|
||||
fi
|
||||
curl -fsSL https://download.opensuse.org/repositories/home:Masgalor:LLDAP/${DISTRO}_${VERSION_ID}/Release.key | gpg --dearmor >/usr/share/keyrings/home_Masgalor_LLDAP.gpg
|
||||
curl -fsSL https://download.opensuse.org/repositories/home:Masgalor:LLDAP/${DISTRO}_${OS_VERSION}/Release.key | gpg --dearmor >/usr/share/keyrings/home_Masgalor_LLDAP.gpg
|
||||
cat <<EOF >/etc/apt/sources.list.d/home:Masgalor:LLDAP.sources
|
||||
Types: deb
|
||||
URIs: http://download.opensuse.org/repositories/home:/Masgalor:/LLDAP/${DISTRO}_${VERSION_ID}/
|
||||
URIs: http://download.opensuse.org/repositories/home:/Masgalor:/LLDAP/${DISTRO}_${OS_VERSION}/
|
||||
Suites: /
|
||||
Signed-By: /usr/share/keyrings/home_Masgalor_LLDAP.gpg
|
||||
EOF
|
||||
|
||||
@@ -14,7 +14,6 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Mosquitto MQTT Broker"
|
||||
source /etc/os-release
|
||||
$STD apt update
|
||||
$STD apt -y install mosquitto mosquitto-clients
|
||||
|
||||
|
||||
@@ -182,8 +182,7 @@ http:
|
||||
EOF
|
||||
$STD npm run db:push
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "trixie" ]; then
|
||||
if [ "$(get_os_info codename)" = "trixie" ]; then
|
||||
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.d/sysctl.conf
|
||||
$STD sysctl -p /etc/sysctl.d/sysctl.conf
|
||||
else
|
||||
|
||||
@@ -40,7 +40,7 @@ msg_info "Installing PhotoPrism (Patience)"
|
||||
mkdir -p /opt/photoprism/{cache,config,photos,storage,temp}
|
||||
mkdir -p /opt/photoprism/photos/{originals,import}
|
||||
mkdir -p /opt/photoprism_backups
|
||||
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(get_os_info codename)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||
curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz
|
||||
tar -xzf /tmp/libheif.tar.gz -C /usr/local
|
||||
ldconfig
|
||||
|
||||
@@ -31,8 +31,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
cd /etc/wgdashboard/src
|
||||
chmod u+x wgd.sh
|
||||
$STD ./wgd.sh install
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "trixie" ]; then
|
||||
if [ "$(get_os_info codename)" = "trixie" ]; then
|
||||
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.d/sysctl.conf
|
||||
$STD sysctl -p /etc/sysctl.d/sysctl.conf
|
||||
else
|
||||
|
||||
@@ -1054,7 +1054,7 @@ load_vars_file() {
|
||||
|
||||
# Allowed var_* keys
|
||||
local VAR_WHITELIST=(
|
||||
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl
|
||||
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl
|
||||
var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu
|
||||
var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged
|
||||
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain
|
||||
@@ -1255,7 +1255,7 @@ default_var_settings() {
|
||||
# Allowed var_* keys (alphabetically sorted)
|
||||
# Note: Removed var_ctid (can only exist once), var_ipv6_static (static IPs are unique)
|
||||
local VAR_WHITELIST=(
|
||||
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl
|
||||
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl
|
||||
var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu
|
||||
var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged
|
||||
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage
|
||||
@@ -1350,10 +1350,6 @@ var_verbose=no
|
||||
|
||||
# Security (root PW) – empty => autologin
|
||||
# var_pw=
|
||||
|
||||
# GitHub Personal Access Token (optional – avoids API rate limits during installs)
|
||||
# Create at https://github.com/settings/tokens – read-only public access is sufficient
|
||||
# var_github_token=ghp_your_token_here
|
||||
EOF
|
||||
|
||||
# Now choose storages (always prompt unless just one exists)
|
||||
@@ -1391,11 +1387,6 @@ EOF
|
||||
VERBOSE="no"
|
||||
fi
|
||||
|
||||
# 4) Map var_github_token → GITHUB_TOKEN (only if not already set in environment)
|
||||
if [[ -z "${GITHUB_TOKEN:-}" && -n "${var_github_token:-}" ]]; then
|
||||
export GITHUB_TOKEN="${var_github_token}"
|
||||
fi
|
||||
|
||||
# 4) Apply base settings and show summary
|
||||
METHOD="mydefaults-global"
|
||||
base_settings "$VERBOSE"
|
||||
@@ -1428,7 +1419,7 @@ get_app_defaults_path() {
|
||||
if ! declare -p VAR_WHITELIST >/dev/null 2>&1; then
|
||||
# Note: Removed var_ctid (can only exist once), var_ipv6_static (static IPs are unique)
|
||||
declare -ag VAR_WHITELIST=(
|
||||
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu
|
||||
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu
|
||||
var_gateway var_hostname var_ipv6_method var_mac var_mtu
|
||||
var_net var_ns var_os var_pw var_ram var_tags var_tun var_unprivileged
|
||||
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage
|
||||
|
||||
@@ -1117,87 +1117,15 @@ is_package_installed() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# validate_github_token()
|
||||
# Checks a GitHub token via the /user endpoint.
|
||||
# Prints a status message and returns:
|
||||
# 0 - token is valid
|
||||
# 1 - token is invalid / expired (HTTP 401)
|
||||
# 2 - token has no public repo scope (HTTP 200 but missing scope)
|
||||
# 3 - network/API error
|
||||
# Also reports expiry date if the token carries an x-oauth-expiry header.
|
||||
# ------------------------------------------------------------------------------
|
||||
validate_github_token() {
|
||||
local token="${1:-${GITHUB_TOKEN:-}}"
|
||||
[[ -z "$token" ]] && return 3
|
||||
|
||||
local response headers http_code expiry_date scopes
|
||||
headers=$(mktemp)
|
||||
response=$(curl -sSL -w "%{http_code}" \
|
||||
-D "$headers" \
|
||||
-o /dev/null \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"https://api.github.com/user" 2>/dev/null) || { rm -f "$headers"; return 3; }
|
||||
http_code="$response"
|
||||
|
||||
# Read expiry header (fine-grained PATs carry this)
|
||||
expiry_date=$(grep -i '^github-authentication-token-expiration:' "$headers" \
|
||||
| sed 's/.*: *//' | tr -d '\r\n' || true)
|
||||
# Read token scopes (classic PATs)
|
||||
scopes=$(grep -i '^x-oauth-scopes:' "$headers" \
|
||||
| sed 's/.*: *//' | tr -d '\r\n' || true)
|
||||
rm -f "$headers"
|
||||
|
||||
case "$http_code" in
|
||||
200)
|
||||
if [[ -n "$expiry_date" ]]; then
|
||||
msg_ok "GitHub token is valid (expires: $expiry_date)."
|
||||
else
|
||||
msg_ok "GitHub token is valid (no expiry / fine-grained PAT)."
|
||||
fi
|
||||
# Warn if classic PAT has no public_repo scope
|
||||
if [[ -n "$scopes" && "$scopes" != *"public_repo"* && "$scopes" != *"repo"* ]]; then
|
||||
msg_warn "Token has no 'public_repo' scope - private repos and some release APIs may fail."
|
||||
return 2
|
||||
fi
|
||||
return 0
|
||||
;;
|
||||
401)
|
||||
msg_error "GitHub token is invalid or expired (HTTP 401)."
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
msg_warn "GitHub token validation returned HTTP $http_code - treating as valid."
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Prompt user to enter a GitHub Personal Access Token (PAT) interactively
|
||||
# Returns 0 if a valid token was provided, 1 otherwise
|
||||
# ------------------------------------------------------------------------------
|
||||
prompt_for_github_token() {
|
||||
if [[ ! -t 0 ]]; then
|
||||
# Non-interactive: pick up var_github_token if set (from default.vars / app.vars / env)
|
||||
if [[ -z "${GITHUB_TOKEN:-}" && -n "${var_github_token:-}" ]]; then
|
||||
export GITHUB_TOKEN="${var_github_token}"
|
||||
msg_ok "GitHub token loaded from var_github_token."
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Prefer var_github_token when already set and no interactive override needed
|
||||
if [[ -z "${GITHUB_TOKEN:-}" && -n "${var_github_token:-}" ]]; then
|
||||
export GITHUB_TOKEN="${var_github_token}"
|
||||
msg_ok "GitHub token loaded from var_github_token."
|
||||
validate_github_token || true
|
||||
return 0
|
||||
fi
|
||||
|
||||
local reply
|
||||
read -rp "${TAB}Would you like to enter a GitHub Personal Access Token (PAT)? [y/N]: " reply
|
||||
reply="${reply:-n}"
|
||||
@@ -1219,16 +1147,10 @@ prompt_for_github_token() {
|
||||
msg_warn "Token must not contain spaces. Please try again."
|
||||
continue
|
||||
fi
|
||||
# Validate before accepting
|
||||
export GITHUB_TOKEN="$token"
|
||||
if validate_github_token "$token"; then
|
||||
break
|
||||
else
|
||||
msg_warn "Please enter a valid token, or press Ctrl+C to abort."
|
||||
unset GITHUB_TOKEN
|
||||
fi
|
||||
break
|
||||
done
|
||||
|
||||
export GITHUB_TOKEN="$token"
|
||||
msg_ok "GitHub token has been set."
|
||||
return 0
|
||||
}
|
||||
@@ -2938,7 +2860,7 @@ function fetch_and_deploy_codeberg_release() {
|
||||
|
||||
while ((attempt < ${#api_timeouts[@]})); do
|
||||
resp=$(curl --connect-timeout 10 --max-time "${api_timeouts[$attempt]}" -fsSL -w "%{http_code}" -o /tmp/codeberg_rel.json "$api_url") && success=true && break
|
||||
attempt=$((attempt + 1))
|
||||
((attempt++))
|
||||
if ((attempt < ${#api_timeouts[@]})); then
|
||||
msg_warn "API request timed out after ${api_timeouts[$((attempt - 1))]}s, retrying... (attempt $((attempt + 1))/${#api_timeouts[@]})"
|
||||
fi
|
||||
@@ -3448,8 +3370,7 @@ function fetch_and_deploy_gh_release() {
|
||||
if prompt_for_github_token; then
|
||||
header=(-H "Authorization: token $GITHUB_TOKEN")
|
||||
retry_delay=2
|
||||
attempt=1
|
||||
continue
|
||||
attempt=0
|
||||
fi
|
||||
fi
|
||||
else
|
||||
|
||||
@@ -43,21 +43,6 @@ IP=$(ip -4 addr show "$IFACE" | awk '/inet / {print $2}' | cut -d/ -f1 | head -n
|
||||
[[ -z "$IP" ]] && IP=$(hostname -I | awk '{print $1}')
|
||||
[[ -z "$IP" ]] && IP="127.0.0.1"
|
||||
|
||||
# Proxmox Host Warning
|
||||
if [[ -d "/etc/pve" ]]; then
|
||||
echo -e "${RD}⚠️ Warning: Running this addon directly on the Proxmox host is not recommended!${CL}"
|
||||
echo -e "${YW} Only the boot disk will be visible — passthrough drives will not be indexed.${CL}"
|
||||
echo -e "${YW} This causes incorrect disk usage stats and incomplete file browsing.${CL}"
|
||||
echo -e "${YW} Run this addon inside an LXC or VM instead and mount your drives there.${CL}"
|
||||
echo ""
|
||||
echo -n "Continue anyway on the Proxmox host? (y/N): "
|
||||
read -r host_confirm
|
||||
if [[ ! "${host_confirm,,}" =~ ^(y|yes)$ ]]; then
|
||||
echo -e "${YW}Aborted.${CL}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# OS Detection
|
||||
if [[ -f "/etc/alpine-release" ]]; then
|
||||
OS="Alpine"
|
||||
|
||||
@@ -41,21 +41,6 @@ IP=$(ip -4 addr show "$IFACE" | awk '/inet / {print $2}' | cut -d/ -f1 | head -n
|
||||
[[ -z "$IP" ]] && IP=$(hostname -I | awk '{print $1}')
|
||||
[[ -z "$IP" ]] && IP="127.0.0.1"
|
||||
|
||||
# Proxmox Host Warning
|
||||
if [[ -d "/etc/pve" ]]; then
|
||||
echo -e "${RD}⚠️ Warning: Running this addon directly on the Proxmox host is not recommended!${CL}"
|
||||
echo -e "${YW} Only the boot disk will be visible — passthrough drives will not be indexed.${CL}"
|
||||
echo -e "${YW} This causes incorrect disk usage stats and incomplete file browsing.${CL}"
|
||||
echo -e "${YW} Run this addon inside an LXC or VM instead and mount your drives there.${CL}"
|
||||
echo ""
|
||||
echo -n "Continue anyway on the Proxmox host? (y/N): "
|
||||
read -r host_confirm
|
||||
if [[ ! "${host_confirm,,}" =~ ^(y|yes)$ ]]; then
|
||||
echo -e "${YW}Aborted.${CL}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Detect OS
|
||||
if [[ -f "/etc/alpine-release" ]]; then
|
||||
OS="Alpine"
|
||||
|
||||
@@ -24,7 +24,7 @@ RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||
METHOD=""
|
||||
NSAPP="opnsense-vm"
|
||||
var_os="opnsense"
|
||||
var_version="26.1"
|
||||
var_version="25.7"
|
||||
#
|
||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||
@@ -797,7 +797,7 @@ if [ -n "$WAN_BRG" ]; then
|
||||
msg_ok "WAN interface added"
|
||||
sleep 5 # Brief pause after adding network interface
|
||||
fi
|
||||
send_line_to_vm "sh ./opnsense-bootstrap.sh.in -y -f -r 26.1"
|
||||
send_line_to_vm "sh ./opnsense-bootstrap.sh.in -y -f -r 25.7"
|
||||
msg_ok "OPNsense VM is being installed, do not close the terminal, or the installation will fail."
|
||||
#We need to wait for the OPNsense build proccess to finish, this takes a few minutes
|
||||
sleep 1000
|
||||
|
||||
Reference in New Issue
Block a user