mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-07-09 23:47:38 +00:00
Compare commits
12 Commits
2025-07-07
...
2025-07-08
Author | SHA1 | Date | |
---|---|---|---|
3b7036ae58 | |||
4412b39d21 | |||
0faf06f4e2 | |||
0b300fb9ab | |||
08b89eb285 | |||
9cbcf4435a | |||
e4252a58ee | |||
08eb914e3c | |||
000b7d4a85 | |||
bb33002c2a | |||
7bafa864d0 | |||
396e0c6523 |
18
CHANGELOG.md
18
CHANGELOG.md
@ -10,8 +10,26 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-07-09
|
||||
|
||||
## 2025-07-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Refactor: Emby [@tremor021](https://github.com/tremor021) ([#5839](https://github.com/community-scripts/ProxmoxVE/pull/5839))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func: add ffmpeg + minor improvement [@MickLesk](https://github.com/MickLesk) ([#5834](https://github.com/community-scripts/ProxmoxVE/pull/5834))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: ErsatzTV [@MickLesk](https://github.com/MickLesk) ([#5835](https://github.com/community-scripts/ProxmoxVE/pull/5835))
|
||||
|
||||
## 2025-07-07
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
28
ct/emby.sh
28
ct/emby.sh
@ -23,26 +23,26 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/emby-server ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop emby-server
|
||||
msg_ok "Stopped ${APP}"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
if [[ "${RELEASE}" != "$(cat ~/.emby 2>/dev/null)" ]] || [[ ! -f ~/.emby ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop emby-server
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
$STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb"
|
||||
$STD dpkg -i "emby-server-deb_${LATEST}_amd64.deb"
|
||||
rm "emby-server-deb_${LATEST}_amd64.deb"
|
||||
msg_ok "Updated ${APP}"
|
||||
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start emby-server
|
||||
msg_ok "Started ${APP}"
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start emby-server
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
|
@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
|
||||
APP="ErsatzTV"
|
||||
var_tags="${var_tags:-iptv}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
@ -27,31 +27,18 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
|
||||
if [[ ! -f /opt/${APP}_version.txt && $(echo "x.x.x" >/opt/${APP}_version.txt) || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
|
||||
msg_info "Stopping ErsatzTV"
|
||||
systemctl stop ersatzTV
|
||||
msg_ok "Stopped ErsatzTV"
|
||||
|
||||
msg_info "Updating ErsatzTV"
|
||||
cp -R /opt/ErsatzTV/ ErsatzTV-backup
|
||||
rm ErsatzTV-backup/ErsatzTV
|
||||
rm -rf /opt/ErsatzTV
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file"
|
||||
tar -xzf "$temp_file"
|
||||
mv ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV
|
||||
cp -R ErsatzTV-backup/* /opt/ErsatzTV/
|
||||
rm -rf ErsatzTV-backup
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ErsatzTV"
|
||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
|
||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||
|
||||
msg_info "Starting ErsatzTV"
|
||||
systemctl start ersatzTV
|
||||
msg_ok "Started ErsatzTV"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -f ${temp_file}
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
|
@ -40,6 +40,7 @@ function update_script() {
|
||||
msg_info "Updating Ollama to ${RELEASE}"
|
||||
rm -rf /usr/local/lib/ollama
|
||||
rm -rf /usr/local/bin/ollama
|
||||
mkdir -p /usr/local/lib/ollama
|
||||
tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
|
||||
ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
|
||||
echo "${RELEASE}" >/opt/Ollama_version.txt
|
||||
|
2
frontend/public/json/ersatztv.json
generated
2
frontend/public/json/ersatztv.json
generated
@ -19,7 +19,7 @@
|
||||
"type": "default",
|
||||
"script": "ct/ersatztv.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"cpu": 2,
|
||||
"ram": 1024,
|
||||
"hdd": 5,
|
||||
"os": "debian",
|
||||
|
174
frontend/public/json/versions.json
generated
174
frontend/public/json/versions.json
generated
@ -1,8 +1,93 @@
|
||||
[
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.37.0.5076",
|
||||
"date": "2025-06-04T11:04:53Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.26.2.10099",
|
||||
"date": "2025-06-11T20:10:39Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.35.0",
|
||||
"date": "2025-05-21T18:00:32Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.4.1",
|
||||
"date": "2025-06-11T07:53:44Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v3.40.1",
|
||||
"date": "2025-07-08T21:06:54Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.1.18",
|
||||
"date": "2025-07-08T20:36:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v1.0.1",
|
||||
"date": "2025-07-07T23:01:28Z"
|
||||
"version": "v1.0.2",
|
||||
"date": "2025-07-08T19:14:31Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.20.0",
|
||||
"date": "2025-07-08T16:27:11Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "create-fumadocs-app@15.6.2",
|
||||
"date": "2025-07-08T14:26:05Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.518",
|
||||
"date": "2025-07-08T13:52:55Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.2",
|
||||
"date": "2025-07-08T13:52:33Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "preview-v0.1",
|
||||
"date": "2025-06-27T14:35:47Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v2.38.2",
|
||||
"date": "2025-07-08T09:35:14Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2132",
|
||||
"date": "2025-07-08T05:52:22Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p7",
|
||||
"date": "2025-07-08T05:51:08Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.9.6",
|
||||
"date": "2025-07-08T01:26:29Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.0.12-rc0",
|
||||
"date": "2025-07-07T23:35:35Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.3.0",
|
||||
"date": "2025-07-02T12:26:44Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
@ -34,11 +119,6 @@
|
||||
"version": "250707-d28b3101e",
|
||||
"date": "2025-07-07T15:15:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p7-rc2",
|
||||
"date": "2025-07-07T15:07:57Z"
|
||||
},
|
||||
{
|
||||
"name": "traccar/traccar",
|
||||
"version": "v6.8.1",
|
||||
@ -74,16 +154,6 @@
|
||||
"version": "v1.5.2",
|
||||
"date": "2025-05-11T16:40:55Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2125",
|
||||
"date": "2025-07-07T05:56:33Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "preview-v0.1",
|
||||
"date": "2025-06-27T14:35:47Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
@ -94,11 +164,6 @@
|
||||
"version": "v6.2.20",
|
||||
"date": "2025-07-02T04:03:37Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.4.1",
|
||||
"date": "2025-06-11T07:53:44Z"
|
||||
},
|
||||
{
|
||||
"name": "slskd/slskd",
|
||||
"version": "0.23.1",
|
||||
@ -174,11 +239,6 @@
|
||||
"version": "v4.3.0",
|
||||
"date": "2025-07-05T12:14:52Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-openapi@9.0.18",
|
||||
"date": "2025-07-05T09:36:45Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v11.11.4",
|
||||
@ -204,11 +264,6 @@
|
||||
"version": "v3.3.0",
|
||||
"date": "2025-06-12T06:54:48Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.2",
|
||||
"date": "2025-07-04T15:21:18Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e6.0.0-M1.202507-alpha.1",
|
||||
@ -219,11 +274,6 @@
|
||||
"version": "2.37.0",
|
||||
"date": "2025-07-04T14:49:43Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.3.0",
|
||||
"date": "2025-07-02T12:26:44Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.3.1",
|
||||
@ -274,11 +324,6 @@
|
||||
"version": "v25.7.1",
|
||||
"date": "2025-07-03T01:03:18Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r6.0.25-rc0",
|
||||
"date": "2025-07-03T00:44:52Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v1.12.2-rc.0",
|
||||
@ -294,11 +339,6 @@
|
||||
"version": "2.5.1",
|
||||
"date": "2025-07-02T19:38:06Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.9.5",
|
||||
"date": "2025-07-02T18:39:28Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "coverity-w27-4.13.0",
|
||||
@ -334,11 +374,6 @@
|
||||
"version": "1.2.35",
|
||||
"date": "2025-07-01T21:37:20Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.19.0",
|
||||
"date": "2025-07-01T19:59:32Z"
|
||||
},
|
||||
{
|
||||
"name": "hivemq/hivemq-community-edition",
|
||||
"version": "2025.4",
|
||||
@ -354,21 +389,11 @@
|
||||
"version": "v0.57.0",
|
||||
"date": "2025-07-01T16:47:46Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.517",
|
||||
"date": "2025-07-01T16:08:23Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.133.0",
|
||||
"date": "2025-07-01T15:13:42Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v99.99.99",
|
||||
"date": "2025-07-01T08:26:41Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.0",
|
||||
@ -389,11 +414,6 @@
|
||||
"version": "v2.32.0",
|
||||
"date": "2025-06-30T22:12:48Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v2.38.1",
|
||||
"date": "2025-06-30T20:07:35Z"
|
||||
},
|
||||
{
|
||||
"name": "jhuckaby/Cronicle",
|
||||
"version": "v0.9.81",
|
||||
@ -409,11 +429,6 @@
|
||||
"version": "v7.4.4",
|
||||
"date": "2025-06-30T13:04:22Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.1.17",
|
||||
"date": "2025-06-30T11:26:27Z"
|
||||
},
|
||||
{
|
||||
"name": "PrivateBin/PrivateBin",
|
||||
"version": "1.7.8",
|
||||
@ -604,11 +619,6 @@
|
||||
"version": "v0.21.0",
|
||||
"date": "2025-06-18T21:43:27Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.35.0",
|
||||
"date": "2025-05-21T18:00:32Z"
|
||||
},
|
||||
{
|
||||
"name": "pterodactyl/panel",
|
||||
"version": "v1.11.11",
|
||||
@ -689,11 +699,6 @@
|
||||
"version": "cli/v0.25.0",
|
||||
"date": "2025-06-15T17:48:29Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.37.0.5076",
|
||||
"date": "2025-06-04T11:04:53Z"
|
||||
},
|
||||
{
|
||||
"name": "Readarr/Readarr",
|
||||
"version": "v2.0.0.4645",
|
||||
@ -704,11 +709,6 @@
|
||||
"version": "v2.12.4.4658",
|
||||
"date": "2025-06-09T17:27:45Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.26.2.10099",
|
||||
"date": "2025-06-11T20:10:39Z"
|
||||
},
|
||||
{
|
||||
"name": "advplyr/audiobookshelf",
|
||||
"version": "v2.25.1",
|
||||
|
@ -57,7 +57,7 @@ chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public
|
||||
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
|
||||
chmod -R 640 /opt/bookstack/.env
|
||||
$STD a2enmod rewrite
|
||||
$STD a2enmod php8.2
|
||||
$STD a2enmod php8.3
|
||||
msg_ok "Configured Bookstack"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
@ -24,17 +24,15 @@ if [[ "$CTTYPE" == "0" ]]; then
|
||||
fi
|
||||
msg_ok "Set Up Hardware Acceleration"
|
||||
|
||||
LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
|
||||
|
||||
msg_info "Installing Emby"
|
||||
curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb"
|
||||
$STD dpkg -i emby-server-deb_${LATEST}_amd64.deb
|
||||
msg_info "Configuring Emby"
|
||||
if [[ "$CTTYPE" == "0" ]]; then
|
||||
sed -i -e 's/^ssl-cert:x:104:$/render:x:104:root,emby/' -e 's/^render:x:108:root,emby$/ssl-cert:x:108:/' /etc/group
|
||||
else
|
||||
sed -i -e 's/^ssl-cert:x:104:$/render:x:104:emby/' -e 's/^render:x:108:emby$/ssl-cert:x:108:/' /etc/group
|
||||
fi
|
||||
msg_ok "Installed Emby"
|
||||
msg_ok "Configured Emby"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
@ -42,5 +40,4 @@ customize
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
rm emby-server-deb_${LATEST}_amd64.deb
|
||||
msg_ok "Cleaned"
|
||||
|
@ -13,15 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing FFmpeg (Patience)"
|
||||
cd /usr/local/bin
|
||||
curl -fsSL "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz" -o "ffmpeg-release-amd64-static.tar.xz"
|
||||
$STD tar -xvf ffmpeg-release-amd64-static.tar.xz
|
||||
rm -f ffmpeg-*.tar.xz
|
||||
cd ffmpeg-*
|
||||
mv ffmpeg ffprobe /usr/local/bin/
|
||||
rm -rf /usr/local/bin/ffmpeg-*
|
||||
msg_ok "Installed FFmpeg"
|
||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
|
||||
|
||||
msg_info "Setting Up Hardware Acceleration"
|
||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||
@ -34,15 +26,7 @@ if [[ "$CTTYPE" == "0" ]]; then
|
||||
fi
|
||||
msg_ok "Set Up Hardware Acceleration"
|
||||
|
||||
msg_info "Installing ErsatzTV"
|
||||
temp_file=$(mktemp)
|
||||
cd /opt
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
|
||||
curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file"
|
||||
tar -xzf "$temp_file"
|
||||
mv /opt/ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed ErsatzTV"
|
||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/ersatzTV.service
|
||||
@ -53,8 +37,8 @@ After=multi-user.target
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/ErsatzTV
|
||||
ExecStart=/opt/ErsatzTV/ErsatzTV
|
||||
WorkingDirectory=/opt/ErsatzTV
|
||||
ExecStart=/opt/ErsatzTV/ErsatzTV
|
||||
Restart=always
|
||||
RestartSec=30
|
||||
|
||||
@ -68,7 +52,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f ${temp_file}
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
165
misc/tools.func
165
misc/tools.func
@ -442,7 +442,6 @@ function setup_php() {
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
|
||||
for mod in "${MODULES[@]}"; do
|
||||
MODULE_LIST+=" php${PHP_VERSION}-${mod}"
|
||||
@ -952,7 +951,7 @@ function fetch_and_deploy_gh_release() {
|
||||
}
|
||||
|
||||
mkdir -p "$target"
|
||||
if [[ "$filename" == *.zip ]]; then
|
||||
if [[ "$filename" == *.zip ]]; then
|
||||
if ! command -v unzip &>/dev/null; then
|
||||
$STD apt-get install -y unzip
|
||||
fi
|
||||
@ -1013,13 +1012,20 @@ function fetch_and_deploy_gh_release() {
|
||||
|
||||
filename="${asset_url##*/}"
|
||||
mkdir -p "$target"
|
||||
curl $download_timeout -fsSL -o "$target/$app" "$asset_url" || {
|
||||
|
||||
local use_filename="${USE_ORIGINAL_FILENAME:-false}"
|
||||
local target_file="$app"
|
||||
[[ "$use_filename" == "true" ]] && target_file="$filename"
|
||||
|
||||
curl $download_timeout -fsSL -o "$target/$target_file" "$asset_url" || {
|
||||
msg_error "Download failed: $asset_url"
|
||||
rm -rf "$tmpdir"
|
||||
return 1
|
||||
}
|
||||
|
||||
chmod +x "$target/$app"
|
||||
if [[ "$target_file" != *.jar && -f "$target/$target_file" ]]; then
|
||||
chmod +x "$target/$target_file"
|
||||
fi
|
||||
|
||||
else
|
||||
msg_error "Unknown mode: $mode"
|
||||
@ -1698,3 +1704,154 @@ function setup_imagemagick() {
|
||||
ensure_usr_local_bin_persist
|
||||
msg_ok "Setup ImageMagick $VERSION"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Installs FFmpeg from source or prebuilt binary (Debian/Ubuntu only).
|
||||
#
|
||||
# Description:
|
||||
# - Downloads and builds FFmpeg from GitHub (https://github.com/FFmpeg/FFmpeg)
|
||||
# - Supports specific version override via FFMPEG_VERSION (e.g. n7.1.1)
|
||||
# - Supports build profile via FFMPEG_TYPE:
|
||||
# - minimal : x264, vpx, mp3 only
|
||||
# - medium : adds subtitles, fonts, opus, vorbis
|
||||
# - full : adds dav1d, svt-av1, zlib, numa
|
||||
# - binary : downloads static build (johnvansickle.com)
|
||||
# - Defaults to latest stable version and full feature set
|
||||
#
|
||||
# Notes:
|
||||
# - Requires: curl, jq, build-essential, and matching codec libraries
|
||||
# - Result is installed to /usr/local/bin/ffmpeg
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
function setup_ffmpeg() {
|
||||
local TMP_DIR
|
||||
TMP_DIR=$(mktemp -d)
|
||||
local GITHUB_REPO="FFmpeg/FFmpeg"
|
||||
local VERSION="${FFMPEG_VERSION:-latest}"
|
||||
local TYPE="${FFMPEG_TYPE:-full}"
|
||||
local BIN_PATH="/usr/local/bin/ffmpeg"
|
||||
|
||||
# Binary fallback mode
|
||||
if [[ "$TYPE" == "binary" ]]; then
|
||||
msg_info "Installing FFmpeg (static binary)"
|
||||
curl -fsSL https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o "$TMP_DIR/ffmpeg.tar.xz"
|
||||
tar -xf "$TMP_DIR/ffmpeg.tar.xz" -C "$TMP_DIR"
|
||||
local EXTRACTED_DIR
|
||||
EXTRACTED_DIR=$(find "$TMP_DIR" -maxdepth 1 -type d -name "ffmpeg-*")
|
||||
cp "$EXTRACTED_DIR/ffmpeg" "$BIN_PATH"
|
||||
cp "$EXTRACTED_DIR/ffprobe" /usr/local/bin/ffprobe
|
||||
chmod +x "$BIN_PATH" /usr/local/bin/ffprobe
|
||||
rm -rf "$TMP_DIR"
|
||||
msg_ok "Installed FFmpeg binary ($($BIN_PATH -version | head -n1))"
|
||||
return
|
||||
fi
|
||||
|
||||
if ! command -v jq &>/dev/null; then
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y jq
|
||||
fi
|
||||
|
||||
# Auto-detect latest stable version if none specified
|
||||
if [[ "$VERSION" == "latest" || -z "$VERSION" ]]; then
|
||||
msg_info "Resolving latest FFmpeg tag"
|
||||
VERSION=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/tags" |
|
||||
jq -r '.[].name' |
|
||||
grep -E '^n[0-9]+\.[0-9]+\.[0-9]+$' |
|
||||
sort -V | tail -n1)
|
||||
fi
|
||||
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
msg_error "Could not determine FFmpeg version"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
msg_info "Installing FFmpeg ${VERSION} ($TYPE)"
|
||||
|
||||
# Dependency selection
|
||||
local DEPS=(build-essential yasm nasm pkg-config)
|
||||
case "$TYPE" in
|
||||
minimal)
|
||||
DEPS+=(libx264-dev libvpx-dev libmp3lame-dev)
|
||||
;;
|
||||
medium)
|
||||
DEPS+=(libx264-dev libvpx-dev libmp3lame-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev)
|
||||
;;
|
||||
full)
|
||||
DEPS+=(
|
||||
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
|
||||
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
|
||||
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
|
||||
)
|
||||
;;
|
||||
*)
|
||||
msg_error "Invalid FFMPEG_TYPE: $TYPE"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y "${DEPS[@]}"
|
||||
|
||||
curl -fsSL "https://github.com/${GITHUB_REPO}/archive/refs/tags/${VERSION}.tar.gz" -o "$TMP_DIR/ffmpeg.tar.gz"
|
||||
tar -xzf "$TMP_DIR/ffmpeg.tar.gz" -C "$TMP_DIR"
|
||||
cd "$TMP_DIR/FFmpeg-"* || {
|
||||
msg_error "Source extraction failed"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
}
|
||||
|
||||
local args=(
|
||||
--enable-gpl
|
||||
--enable-shared
|
||||
--enable-nonfree
|
||||
--disable-static
|
||||
--enable-libx264
|
||||
--enable-libvpx
|
||||
--enable-libmp3lame
|
||||
)
|
||||
|
||||
if [[ "$TYPE" != "minimal" ]]; then
|
||||
args+=(--enable-libfreetype --enable-libass --enable-libopus --enable-libvorbis)
|
||||
fi
|
||||
|
||||
if [[ "$TYPE" == "full" ]]; then
|
||||
args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
|
||||
fi
|
||||
|
||||
if [[ ${#args[@]} -eq 0 ]]; then
|
||||
msg_error "FFmpeg configure args array is empty – aborting."
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
./configure "${args[@]}" >"$TMP_DIR/configure.log" 2>&1 || {
|
||||
msg_error "FFmpeg ./configure failed (see $TMP_DIR/configure.log)"
|
||||
cat "$TMP_DIR/configure.log" | tail -n 20
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
}
|
||||
|
||||
$STD make -j"$(nproc)"
|
||||
$STD make install
|
||||
echo "/usr/local/lib" >/etc/ld.so.conf.d/ffmpeg.conf
|
||||
ldconfig
|
||||
|
||||
ldconfig -p | grep libavdevice >/dev/null || {
|
||||
msg_error "libavdevice not registered with dynamic linker"
|
||||
return 1
|
||||
}
|
||||
|
||||
if ! command -v ffmpeg &>/dev/null; then
|
||||
msg_error "FFmpeg installation failed"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local FINAL_VERSION
|
||||
FINAL_VERSION=$(ffmpeg -version | head -n1 | awk '{print $3}')
|
||||
rm -rf "$TMP_DIR"
|
||||
ensure_usr_local_bin_persist
|
||||
msg_ok "Setup FFmpeg $FINAL_VERSION"
|
||||
}
|
||||
|
Reference in New Issue
Block a user