Compare commits

..

8 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
63c763f411 Update install/ampache-install.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
2026-01-30 21:46:44 +01:00
CanbiZ (MickLesk)
c0ae7c3aa1 Update install/ampache-install.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
2026-01-30 21:46:31 +01:00
CanbiZ (MickLesk)
c5d132202f Fix PHP_VERSION and MARIADB_DB_USER syntax 2026-01-30 21:24:45 +01:00
CanbiZ (MickLesk)
91434e0164 typo 2026-01-30 21:14:28 +01:00
Tobias
a567af9ec6 Update ampache-install.sh 2026-01-30 21:12:56 +01:00
Tobias
c53316d122 Update ampache.json 2026-01-30 21:10:49 +01:00
Tobias
5f9a2184bf less msg blocks 2026-01-30 21:10:10 +01:00
push-app-to-main[bot]
175a573657 Add ampache (ct) 2026-01-30 16:22:23 +00:00
10 changed files with 35 additions and 412 deletions

View File

@@ -391,15 +391,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-01-31
## 2026-01-30
### 🆕 New Scripts
- languagetool ([#11370](https://github.com/community-scripts/ProxmoxVE/pull/11370))
- Ampache ([#11369](https://github.com/community-scripts/ProxmoxVE/pull/11369))
### 🚀 Updated Scripts
- #### 🔧 Refactor
@@ -415,7 +408,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### ✨ New Features
- [tools] Add `fetch_and_deploy_from_url()` [@tremor021](https://github.com/tremor021) ([#11376](https://github.com/community-scripts/ProxmoxVE/pull/11376))
- core: php - improve module handling and prevent installation failures [@MickLesk](https://github.com/MickLesk) ([#11358](https://github.com/community-scripts/ProxmoxVE/pull/11358))
## 2026-01-29

View File

@@ -1,4 +1,4 @@
___ __
___ __
/ | ____ ___ ____ ____ ______/ /_ ___
/ /| | / __ `__ \/ __ \/ __ `/ ___/ __ \/ _ \
/ ___ |/ / / / / / /_/ / /_/ / /__/ / / / __/

View File

@@ -1,6 +0,0 @@
__ ______ __
/ / ____ _____ ____ ___ ______ _____ ____/_ __/___ ____ / /
/ / / __ `/ __ \/ __ `/ / / / __ `/ __ `/ _ \/ / / __ \/ __ \/ /
/ /___/ /_/ / / / / /_/ / /_/ / /_/ / /_/ / __/ / / /_/ / /_/ / /
/_____/\__,_/_/ /_/\__, /\__,_/\__,_/\__, /\___/_/ \____/\____/_/
/____/ /____/

View File

@@ -1,68 +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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://languagetool.org/
APP="LanguageTool"
var_tags="${var_tags:-spellcheck}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-16}"
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/LanguageTool ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://languagetool.org/download/ | grep -oP 'LanguageTool-\K[0-9]+\.[0-9]+(\.[0-9]+)?(?=\.zip)' | sort -V | tail -n1)
if [[ "${RELEASE}" != "$(cat ~/.languagetool 2>/dev/null)" ]] || [[ ! -f ~/.languagetool ]]; then
msg_info "Stopping Service"
systemctl stop language-tool
msg_ok "Stopped Service"
msg_info "Creating Backup"
cp /opt/LanguageTool/server.properties /opt/server.properties
msg_ok "Created Backup"
msg_info "Updating LanguageTool"
rm -rf /opt/LanguageTool
download_file "https://languagetool.org/download/LanguageTool-stable.zip" /tmp/LanguageTool-stable.zip
unzip -q /tmp/LanguageTool-stable.zip -d /opt
mv /opt/LanguageTool-*/ /opt/LanguageTool/
mv /opt/server.properties /opt/LanguageTool/server.properties
rm -f /tmp/LanguageTool-stable.zip
echo "${RELEASE}" >~/.languagetool
msg_ok "Updated LanguageTool"
msg_info "Starting Service"
systemctl start language-tool
msg_ok "Started Service"
msg_ok "Updated successfuly!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!"
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}:8081/v2${CL}"

View File

@@ -29,8 +29,6 @@ function update_script() {
exit
fi
ensure_dependencies git
if check_for_gh_release "yubal" "guillevc/yubal"; then
msg_info "Stopping Services"
systemctl stop yubal

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-01-31T18:07:59Z",
"generated": "2026-01-30T12:10:39Z",
"versions": [
{
"slug": "2fauth",
@@ -29,13 +29,6 @@
"pinned": false,
"date": "2025-03-20T03:06:11Z"
},
{
"slug": "ampache",
"repo": "ampache/ampache",
"version": "7.8.0",
"pinned": false,
"date": "2025-12-22T04:23:45Z"
},
{
"slug": "argus",
"repo": "release-argus/Argus",
@@ -60,9 +53,9 @@
{
"slug": "autobrr",
"repo": "autobrr/autobrr",
"version": "v1.72.1",
"version": "v1.72.0",
"pinned": false,
"date": "2026-01-30T12:57:58Z"
"date": "2026-01-27T20:53:54Z"
},
{
"slug": "autocaliweb",
@@ -109,9 +102,9 @@
{
"slug": "bentopdf",
"repo": "alam00000/bentopdf",
"version": "v2.0.0",
"version": "v1.16.1",
"pinned": false,
"date": "2026-01-31T10:13:47Z"
"date": "2026-01-26T08:27:11Z"
},
{
"slug": "beszel",
@@ -242,9 +235,9 @@
{
"slug": "discopanel",
"repo": "nickheyer/discopanel",
"version": "v1.0.31",
"version": "v1.0.30",
"pinned": false,
"date": "2026-01-30T18:30:38Z"
"date": "2026-01-30T10:14:14Z"
},
{
"slug": "dispatcharr",
@@ -375,9 +368,9 @@
{
"slug": "ghostfolio",
"repo": "ghostfolio/ghostfolio",
"version": "2.234.0",
"version": "2.233.0",
"pinned": false,
"date": "2026-01-30T19:00:22Z"
"date": "2026-01-23T18:41:45Z"
},
{
"slug": "gitea",
@@ -480,16 +473,16 @@
{
"slug": "homarr",
"repo": "homarr-labs/homarr",
"version": "v1.52.0",
"version": "v1.51.0",
"pinned": false,
"date": "2026-01-30T19:41:22Z"
"date": "2026-01-23T19:29:49Z"
},
{
"slug": "homebox",
"repo": "sysadminsmedia/homebox",
"version": "v0.23.0",
"version": "v0.22.3",
"pinned": false,
"date": "2026-01-30T17:41:01Z"
"date": "2025-12-26T22:31:20Z"
},
{
"slug": "homepage",
@@ -515,9 +508,9 @@
{
"slug": "huntarr",
"repo": "plexguide/Huntarr.io",
"version": "9.1.3",
"version": "9.1.0",
"pinned": false,
"date": "2026-01-30T21:38:18Z"
"date": "2026-01-30T09:22:10Z"
},
{
"slug": "immich",
@@ -543,16 +536,16 @@
{
"slug": "invoiceninja",
"repo": "invoiceninja/invoiceninja",
"version": "v5.12.51",
"version": "v5.12.50",
"pinned": false,
"date": "2026-01-31T03:58:30Z"
"date": "2026-01-26T05:28:47Z"
},
{
"slug": "jackett",
"repo": "Jackett/Jackett",
"version": "v0.24.993",
"version": "v0.24.988",
"pinned": false,
"date": "2026-01-31T05:55:28Z"
"date": "2026-01-30T05:55:43Z"
},
{
"slug": "joplin-server",
@@ -760,9 +753,9 @@
{
"slug": "mediamtx",
"repo": "bluenviron/mediamtx",
"version": "v1.16.0",
"version": "v1.15.6",
"pinned": false,
"date": "2026-01-31T15:38:51Z"
"date": "2025-12-28T16:38:35Z"
},
{
"slug": "meilisearch",
@@ -774,9 +767,9 @@
{
"slug": "memos",
"repo": "usememos/memos",
"version": "v0.26.0",
"version": "v0.25.3",
"pinned": false,
"date": "2026-01-31T15:28:09Z"
"date": "2025-11-25T15:40:41Z"
},
{
"slug": "metube",
@@ -949,9 +942,9 @@
{
"slug": "paperless-ngx",
"repo": "paperless-ngx/paperless-ngx",
"version": "v2.20.6",
"version": "v2.20.5",
"pinned": false,
"date": "2026-01-31T07:30:27Z"
"date": "2026-01-21T00:12:33Z"
},
{
"slug": "patchmon",
@@ -1138,9 +1131,9 @@
{
"slug": "rclone",
"repo": "rclone/rclone",
"version": "v1.73.0",
"version": "v1.72.1",
"pinned": false,
"date": "2026-01-30T22:12:03Z"
"date": "2025-12-10T14:55:44Z"
},
{
"slug": "rdtclient",
@@ -1243,9 +1236,9 @@
{
"slug": "snowshare",
"repo": "TuroYT/snowshare",
"version": "v1.2.12",
"version": "v1.2.11",
"pinned": false,
"date": "2026-01-30T13:35:56Z"
"date": "2026-01-22T13:26:11Z"
},
{
"slug": "sonarr",
@@ -1397,9 +1390,9 @@
{
"slug": "trip",
"repo": "itskovacs/TRIP",
"version": "1.38.0",
"version": "1.37.0",
"pinned": false,
"date": "2026-01-31T15:56:30Z"
"date": "2026-01-28T22:19:14Z"
},
{
"slug": "tududi",
@@ -1411,9 +1404,9 @@
{
"slug": "tunarr",
"repo": "chrisbenincasa/tunarr",
"version": "v1.1.11",
"version": "v1.1.10",
"pinned": false,
"date": "2026-01-30T22:34:30Z"
"date": "2026-01-30T02:10:02Z"
},
{
"slug": "uhf",

View File

@@ -1,40 +0,0 @@
{
"name": "LanguageTool",
"slug": "languagetool",
"categories": [
0
],
"date_created": "2026-01-30",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": "https://dev.languagetool.org/",
"config_path": "/opt/LanguageTool/server.properties",
"website": "https://languagetool.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/languagetool.webp",
"description": "LanguageTool is an Open Source proofreading software for English, Spanish, French, German, Portuguese, Polish, Dutch, and more than 20 other languages. It finds many errors that a simple spell checker cannot detect.",
"install_methods": [
{
"type": "default",
"script": "ct/languagetool.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 16,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "API is available at `http://<LXC_IP>:8081/v2`.",
"type": "info"
}
]
}

View File

@@ -1,110 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://languagetool.org/
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 fasttext
msg_ok "Installed dependencies"
JAVA_VERSION="21" setup_java
msg_info "Setting up LanguageTool"
RELEASE=$(curl -fsSL https://languagetool.org/download/ | grep -oP 'LanguageTool-\K[0-9]+\.[0-9]+(\.[0-9]+)?(?=\.zip)' | sort -V | tail -n1)
download_file "https://languagetool.org/download/LanguageTool-stable.zip" /tmp/LanguageTool-stable.zip
unzip -q /tmp/LanguageTool-stable.zip -d /opt
mv /opt/LanguageTool-*/ /opt/LanguageTool/
download_file "https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin" /opt/lid.176.bin
rm -f /tmp/LanguageTool-stable.zip
msg_ok "Setup LanguageTool"
ngram_dir=""
lang_code=""
max_attempts=3
attempt=0
while [[ $attempt -lt $max_attempts ]]; do
read -r -p "${TAB3}Enter language code (en, de, es, fr, nl) to download ngrams or press ENTER to skip: " lang_code
if [[ -z "$lang_code" ]]; then
break
fi
if [[ "$lang_code" =~ [[:space:]] ]]; then
((attempt++))
remaining=$((max_attempts - attempt))
if [[ $remaining -gt 0 ]]; then
msg_error "Please enter only ONE language code. You have $remaining attempt(s) remaining."
else
msg_error "Maximum attempts reached. Continuing without ngrams."
lang_code=""
fi
continue
fi
break
done
if [[ -n "$lang_code" ]]; then
if [[ "$lang_code" =~ ^(en|de|es|fr|nl)$ ]]; then
msg_info "Searching for $lang_code ngrams..."
filename=$(curl -fsSL https://languagetool.org/download/ngram-data/ | grep -oP "ngrams-${lang_code}-[0-9]+\.zip" | sort -uV | tail -n1)
if [[ -n "$filename" ]]; then
msg_info "Downloading $filename"
download_file "https://languagetool.org/download/ngram-data/${filename}" "/tmp/${filename}"
mkdir -p /opt/ngrams
msg_info "Extracting $lang_code ngrams to /opt/ngrams"
unzip -q "/tmp/${filename}" -d /opt/ngrams
rm "/tmp/${filename}"
ngram_dir="/opt/ngrams"
msg_ok "Installed $lang_code ngrams"
else
msg_info "No ngram file found for ${lang_code}"
fi
else
msg_error "Invalid language code: $lang_code"
fi
fi
cat <<EOF >/opt/LanguageTool/server.properties
fasttextModel=/opt/lid.176.bin
fasttextBinary=/usr/bin/fasttext
EOF
if [[ -n "$ngram_dir" ]]; then
echo "languageModel=/opt/ngrams" >> /opt/LanguageTool/server.properties
fi
echo "${RELEASE}" >~/.languagetool
msg_ok "Setup LanguageTool"
msg_info "Creating Service"
cat <<'EOF' >/etc/systemd/system/language-tool.service
[Unit]
Description=LanguageTool Service
After=network.target
[Service]
WorkingDirectory=/opt/LanguageTool
ExecStart=java -cp languagetool-server.jar org.languagetool.server.HTTPServer --config server.properties --public --allow-origin "*"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now language-tool
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -19,8 +19,7 @@ $STD apt install -y \
libssl-dev \
libffi-dev \
python3-dev \
ffmpeg \
git
ffmpeg
msg_ok "Installed Dependencies"
msg_info "Installing Bun"

View File

@@ -6246,138 +6246,3 @@ EOF
msg_ok "Docker setup completed"
}
# ------------------------------------------------------------------------------
# Fetch and deploy from URL
# Downloads an archive (zip, tar.gz, or .deb) from a URL and extracts/installs it
#
# Usage: fetch_and_deploy_from_url "url" "directory"
# url - URL to the archive (zip, tar.gz, or .deb)
# directory - Destination path where the archive will be extracted
# (not used for .deb packages)
#
# Examples:
# fetch_and_deploy_from_url "https://example.com/app.tar.gz" "/opt/myapp"
# fetch_and_deploy_from_url "https://example.com/app.zip" "/opt/myapp"
# fetch_and_deploy_from_url "https://example.com/package.deb" ""
# ------------------------------------------------------------------------------
function fetch_and_deploy_from_url() {
local url="$1"
local directory="$2"
if [[ -z "$url" ]]; then
msg_error "URL parameter is required"
return 1
fi
local filename="${url##*/}"
local archive_type="zip"
if [[ "$filename" == *.tar.gz || "$filename" == *.tgz ]]; then
archive_type="tar"
elif [[ "$filename" == *.deb ]]; then
archive_type="deb"
fi
msg_info "Downloading from $url"
local tmpdir
tmpdir=$(mktemp -d) || {
msg_error "Failed to create temporary directory"
return 1
}
curl -fsSL -o "$tmpdir/$filename" "$url" || {
msg_error "Download failed: $url"
rm -rf "$tmpdir"
return 1
}
if [[ "$archive_type" == "deb" ]]; then
msg_info "Installing .deb package"
chmod 644 "$tmpdir/$filename"
$STD apt install -y "$tmpdir/$filename" || {
$STD dpkg -i "$tmpdir/$filename" || {
msg_error "Both apt and dpkg installation failed"
rm -rf "$tmpdir"
return 1
}
}
rm -rf "$tmpdir"
msg_ok "Successfully installed .deb package"
return 0
fi
if [[ -z "$directory" ]]; then
msg_error "Directory parameter is required for archive extraction"
rm -rf "$tmpdir"
return 1
fi
msg_info "Extracting archive to $directory"
mkdir -p "$directory"
if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
rm -rf "${directory:?}/"*
fi
local unpack_tmp
unpack_tmp=$(mktemp -d)
if [[ "$archive_type" == "zip" ]]; then
ensure_dependencies unzip
unzip -q "$tmpdir/$filename" -d "$unpack_tmp" || {
msg_error "Failed to extract ZIP archive"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
}
elif [[ "$archive_type" == "tar" ]]; then
tar --no-same-owner -xf "$tmpdir/$filename" -C "$unpack_tmp" || {
msg_error "Failed to extract TAR archive"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
}
fi
local top_entries
top_entries=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1)
if [[ "$(echo "$top_entries" | wc -l)" -eq 1 && -d "$top_entries" ]]; then
local inner_dir="$top_entries"
shopt -s dotglob nullglob
if compgen -G "$inner_dir/*" >/dev/null; then
cp -r "$inner_dir"/* "$directory/" || {
msg_error "Failed to copy contents from $inner_dir to $directory"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
}
else
msg_error "Inner directory is empty: $inner_dir"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
fi
shopt -u dotglob nullglob
else
shopt -s dotglob nullglob
if compgen -G "$unpack_tmp/*" >/dev/null; then
cp -r "$unpack_tmp"/* "$directory/" || {
msg_error "Failed to copy contents to $directory"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
}
else
msg_error "Unpacked archive is empty"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
fi
shopt -u dotglob nullglob
fi
rm -rf "$tmpdir" "$unpack_tmp"
msg_ok "Successfully deployed archive to $directory"
return 0
}