hls-livecam-server
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package modifies sudoers files during setup (not install) and patches a Python package post-install, but these actions are part of legitimate configuration and compatibility fixes for the software's intended functionality.
1 higher static finding superseded - not the current verdict (shown for transparency)
privileged_install
The package grants elevated privileges or installs an update path outside pacman: a /etc/sudoers.d rule (often passwordless), a setuid/setgid binary, or a self-update script/service that can fetch and run future code with no checksum verification. The initial install may be verified, but the ongoing privilege + update surface is a real supply-chain / privilege-escalation risk.
-
.install:53
rm -f /etc/sudoers.d/hls-livecam-dark -
.install:54
rm -f /etc/sudoers.d/hls-livecam-services -
.install:55
rm -f /etc/sudoers.d/camdash-smart
PKGBUILD
# Maintainer: Ron <thefangeddeity>
pkgname=hls-livecam-server
pkgver=5.2.2
pkgrel=1
pkgdesc="Stream a USB webcam via HLS using MediaMTX and ffmpeg, with browser viewer, camdash monitor, and family presence features"
arch=('any')
url="https://github.com/thefangeddeity/hls-livecam-server"
license=('GPL-3.0-or-later')
depends=('ffmpeg' 'nginx' 'python' 'python-psutil' 'python-flask' 'python-pillow' 'python-numpy' 'python-pyfakewebcam' 'v4l2loopback-dkms' 'smartmontools' 'v4l-utils' 'wget' 'ttf-dejavu')
install=hls-livecam-server.install
source=("$pkgname-$pkgver.tar.gz::https://github.com/thefangeddeity/hls-livecam-server/archive/refs/tags/v$pkgver.tar.gz"
"hls-livecam-server.install")
sha256sums=('5f1be1bd327b8ff7ddf72abb1c0a12525a07bb6dd54a3400ca20b15fa63bb7cc'
'SKIP')
package() {
cd "$pkgname-$pkgver"
# ── Executables ──────────────────────────────────────────────────────────
install -Dm755 pkg/usr/share/hls-livecam-server/hls-livecam-setup-arch \
"$pkgdir/usr/local/bin/hls-livecam-setup"
install -Dm755 pkg/usr/local/bin/camdash "$pkgdir/usr/local/bin/camdash"
install -Dm755 pkg/usr/local/bin/hls-livecam-repair "$pkgdir/usr/local/bin/hls-livecam-repair"
install -Dm755 pkg/usr/local/bin/hls-livecam-dark "$pkgdir/usr/local/bin/hls-livecam-dark"
install -Dm755 pkg/usr/local/bin/broadcast-api "$pkgdir/usr/local/bin/broadcast-api"
# ── Shared data ──────────────────────────────────────────────────────────
install -Dm755 pkg/usr/share/hls-livecam-server/camdash \
"$pkgdir/usr/share/hls-livecam-server/camdash"
install -Dm755 pkg/usr/share/hls-livecam-server/hls-livecam-setup-arch \
"$pkgdir/usr/share/hls-livecam-server/hls-livecam-setup"
install -Dm755 pkg/usr/share/hls-livecam-server/hls-livecam-repair \
"$pkgdir/usr/share/hls-livecam-server/hls-livecam-repair"
install -Dm644 pkg/usr/share/hls-livecam-server/block_art.py \
"$pkgdir/usr/share/hls-livecam-server/block_art.py"
install -Dm644 pkg/usr/share/hls-livecam-server/index.html \
"$pkgdir/usr/share/hls-livecam-server/index.html"
install -Dm644 pkg/usr/share/hls-livecam-server/cams/cams.html \
"$pkgdir/usr/share/hls-livecam-server/cams/cams.html"
install -Dm644 pkg/usr/share/hls-livecam-server/ffmpeg-cam.service \
"$pkgdir/usr/share/hls-livecam-server/ffmpeg-cam.service"
# NOTE: var/www/hls-livecam/index.html is NOT installed here.
# hls-livecam-setup populates /var/www/hls-livecam/ at configure time,
# substituting @HOSTNAME@ into share/index.html. Installing a pre-baked
# file here would overwrite it with the wrong hostname on every upgrade.
# ── Systemd services ─────────────────────────────────────────────────────
# Arch convention: vendor units go to /usr/lib/systemd/system/
install -Dm644 pkg/usr/share/hls-livecam-server/broadcast-api-arch.service \
"$pkgdir/usr/lib/systemd/system/broadcast-api.service"
install -Dm644 pkg/etc/systemd/system/ffmpeg-cam-dark.service \
"$pkgdir/usr/lib/systemd/system/ffmpeg-cam-dark.service"
install -Dm644 pkg/usr/lib/systemd/system/ffmpeg-cam.service \
"$pkgdir/usr/lib/systemd/system/ffmpeg-cam.service"
# ── tmpfiles.d ───────────────────────────────────────────────────────────
install -Dm644 pkg/usr/lib/tmpfiles.d/hls-livecam.conf \
"$pkgdir/usr/lib/tmpfiles.d/hls-livecam.conf"
# ── nginx ────────────────────────────────────────────────────────────────
install -Dm644 pkg/etc/nginx/conf.d/hls-livecam.conf "$pkgdir/etc/nginx/conf.d/hls-livecam.conf"
# ── Sudoers ───────────────────────────────────────────────────────────────
# All sudoers.d entries (hls-livecam-dark, hls-livecam-services, camdash-smart)
# are written dynamically by hls-livecam-setup at configure time — setup owns
# sudoers, package() does not ship a static copy (v5.2.1: the shipped copy was
# a stale fossil that setup immediately overwrites on first run anyway).
}
Changes since previous scan
--- PKGBUILD @ 2026-07-18 00:14+++ PKGBUILD @ 2026-08-03 00:08@@ -1,6 +1,6 @@ # Maintainer: Ron <thefangeddeity> pkgname=hls-livecam-server-pkgver=5.2.0+pkgver=5.2.2 pkgrel=1 pkgdesc="Stream a USB webcam via HLS using MediaMTX and ffmpeg, with browser viewer, camdash monitor, and family presence features" arch=('any')@@ -10,7 +10,7 @@ install=hls-livecam-server.install source=("$pkgname-$pkgver.tar.gz::https://github.com/thefangeddeity/hls-livecam-server/archive/refs/tags/v$pkgver.tar.gz" "hls-livecam-server.install")-sha256sums=('6fc9e84f0d3d319ec853ec2ad8dd8d30257c7178e69d5594c159e4207b11fdf5'+sha256sums=('5f1be1bd327b8ff7ddf72abb1c0a12525a07bb6dd54a3400ca20b15fa63bb7cc' 'SKIP') package() {@@ -62,10 +62,9 @@ install -Dm644 pkg/etc/nginx/conf.d/hls-livecam.conf "$pkgdir/etc/nginx/conf.d/hls-livecam.conf" # ── Sudoers ───────────────────────────────────────────────────────────────- # Ships http user for broadcast-api (Arch has no www-data).- # Per-user entries (hls-livecam-dark, hls-livecam-services, camdash-smart)- # are written dynamically by hls-livecam-setup at configure time.- install -Dm440 pkg/etc/sudoers.d/hls-livecam-dark \- "$pkgdir/etc/sudoers.d/hls-livecam-dark"+ # All sudoers.d entries (hls-livecam-dark, hls-livecam-services, camdash-smart)+ # are written dynamically by hls-livecam-setup at configure time — setup owns+ # sudoers, package() does not ship a static copy (v5.2.1: the shipped copy was+ # a stale fossil that setup immediately overwrites on first run anyway). } Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 23:59:51 | MEDIUM | 1 |
| 2026-07-18 21:59:23 | MEDIUM | 1 |
| 2026-07-18 00:14:48 | LOW | 2 |
| 2026-07-17 00:06:16 | LOW | 2 |