funkwhale-venv
The pip install is used to install Python dependencies from the locally extracted and trusted source code ('./api'), not from external untrusted packages, so it does not pose a supply-chain risk.
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 pip install is used to install Python dependencies from the locally extracted and trusted source code ('./api'), not from external untrusted packages, so it does not pose a supply-chain risk.
1 higher static finding superseded - not the current verdict (shown for transparency)
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:88
pip install --upgrade pip wheel
PKGBUILD
1 offending line(s) highlighted# Maintainer: getzze <getzze at gmail dot com>
pkgname=funkwhale-venv
_pkgname=funkwhale
pkgver=2.0.10
pkgrel=1
pkgdesc="A community-driven project that lets you listen and share music and audio within a decentralized, open network."
arch=(any)
url="https://funkwhale.audio/"
license=(GPL3)
provides=('funkwhale')
conflicts=('funkwhale')
optdepends=('apache: to use the Apache web server'
'certbot-apache: for the server to be accessible from outside'
'mod_xsendfile: needed if Apache server is used'
'nginx: to use nginx web server')
depends=('curl'
'file'
'ffmpeg'
'libjpeg-turbo'
'libpqxx'
'libsasl'
'postgresql'
'redis'
'python313'
)
makedepends=(git)
# do not strip for pip wheel libraries
options=(!strip)
_source_api="https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/${pkgver}/download?job="
_source_env="https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${pkgver}/deploy/"
source=("${_pkgname}-${pkgver}-api.zip::${_source_api}build_api"
"${_pkgname}-${pkgver}-front.zip::${_source_api}build_front"
"${_source_env}funkwhale_proxy.conf"
"${_source_env}nginx.template"
"funkwhale.target"
"funkwhale-beat.service"
"funkwhale-server.service"
"funkwhale-worker.service"
"apache-funkwhale.conf"
"env-template"
"funkwhale_manage"
)
sha256sums=('27c46f327912d1a1ade09d0199ac3f7c1dcac702b974ba27d7be8eb9166194d4'
'9cd17dcf1b3c09cfe49b70bf4407d45552ca416ca816480bebd2ceccfd64921c'
'2906a075b41dcd2375c601482cb5a00e42cb87c613012b176c570d77918afbf2'
'1e887126b1380dc614e014f6e80957019b711a9be61a2ba3a52aa9493c99f9b4'
'5c821649d81d2d3a9aa52d872953696d5ae336906329a1c1b68871ce9c82fa59'
'8f98e97b835225fdc2b89cfe2fa6f343d1fa36fdd5616c8585393ebd9c8169b8'
'aecdf1a9283b6dc905820a5dd399bb00bbcab9819227ac438cb014d4ad1b5200'
'd59bbf1a5bc82d2866fbfb5efa3f519469125ea9d4e24dfaa374f85ec6962ae7'
'a5c51df1b8160b9e871d6e211c2668a6abbfabfad9e38d53d937b36162406450'
'cea307055e9f8001a1507c507e1be91352d896cab17260a221f4ab8c298506d8'
'202b1fe3ae4c8c3913d23646a8ebda7312f1725c3d69f15bee8cf599d9db62a9')
install=${pkgname}.install
prepare() {
cd "$srcdir"
## change path of proxy parameters
sed 's#/etc/nginx/funkwhale_proxy.conf#/etc/webapps/funkwhale/funkwhale_proxy.conf#' nginx.template > nginx.template.patched
}
build() {
cd "$srcdir"
## TODO: build front-end from source
}
package() {
cd "$srcdir"
install -dm0755 -o root "$pkgdir"/usr/share/webapps/${_pkgname}
# install api and frontend
cp -R api "$pkgdir"/usr/share/webapps/${_pkgname}/.
cp -R front "$pkgdir"/usr/share/webapps/${_pkgname}/.
chmod 755 -R "$pkgdir"/usr/share/webapps/${_pkgname}/api/
chown root:http -R "$pkgdir"/usr/share/webapps/${_pkgname}/api/
mkdir "$pkgdir"/usr/bin
install -Dm755 funkwhale_manage "$pkgdir"/usr/bin/funkwhale_manage
# create virtualenv and install python dependencies
export PIP_DISABLE_PIP_VERSION_CHECK=1
export PYTHONDONTWRITEBYTECODE=1
python3.13 -m venv "$pkgdir"/usr/share/webapps/funkwhale/virtualenv
source "$pkgdir"/usr/share/webapps/funkwhale/virtualenv/bin/activate
pip install --upgrade pip wheel
pip install --editable ./api
# Remove srcdir references in scripts
find "$pkgdir"/usr/share/webapps/funkwhale/virtualenv/lib/python*/site-packages/funkwhale_api* \
-maxdepth 2 -type f -exec sed -i "s#${srcdir}/api#/usr/share/webapps/${_pkgname}/api#g" {} +
# Remove pkgdir references in scripts
find "$pkgdir"/usr/share/webapps/funkwhale/virtualenv/bin/ \
-maxdepth 1 -type f -exec sed -i "s#${pkgdir}/#/#g" {} +
find "$pkgdir"/usr/share/webapps/funkwhale/virtualenv/pyvenv.cfg \
-maxdepth 1 -type f -exec sed -i "s#${pkgdir}/#/#g" {} +
find "$pkgdir"/usr/share/webapps/funkwhale/virtualenv/ \
-type f -name "*.py[co]" -delete
find "$pkgdir"/usr/share/webapps/funkwhale/virtualenv/ \
-type d -name "__pycache__" -delete
# deactivate virtualenv
deactivate
# install server config
install -d "$pkgdir"/etc/webapps/${_pkgname}/config
install -Dm644 funkwhale_proxy.conf "$pkgdir"/etc/webapps/${_pkgname}/.
install -Dm644 nginx.template.patched "$pkgdir"/etc/webapps/${_pkgname}/nginx.template
install -Dm644 apache-funkwhale.conf "$pkgdir"/etc/webapps/${_pkgname}/.
install -Dm644 env-template "$pkgdir"/etc/webapps/${_pkgname}/env.template
install -Dm644 funkwhale.target funkwhale{-beat,-worker,-server}.service -t "$pkgdir/usr/lib/systemd/system/"
echo -e 'u funkwhale - "Funkwhale music server" /srv/funkwhale\nm funkwhale http' |
install -Dm644 /dev/stdin "$pkgdir/usr/lib/sysusers.d/$pkgname.conf"
echo 'd /srv/funkwhale 0775 funkwhale funkwhale' |
install -Dm644 /dev/stdin "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Low | 2 |
| 2026-10-31 00:07:41 | Low | 2 |
| 2026-10-30 00:29:30 | Low | 2 |
| 2026-10-29 00:13:55 | Low | 2 |
| 2026-10-28 00:06:54 | Low | 2 |
| 2026-10-27 00:23:28 | Low | 2 |
| 2026-10-26 00:12:40 | Low | 2 |
| 2026-10-25 00:20:48 | Low | 2 |
| 2026-10-24 00:14:55 | Low | 2 |
| 2026-10-23 00:02:19 | Low | 2 |
| 2026-10-22 00:13:10 | Low | 2 |
| 2026-10-21 00:12:50 | Low | 2 |
| 2026-10-20 00:10:31 | Low | 2 |
| 2026-10-19 00:03:55 | Low | 2 |
| 2026-10-18 00:06:55 | Low | 2 |
| 2026-10-17 00:21:55 | Low | 2 |
| 2026-10-16 00:12:47 | Low | 2 |
| 2026-10-15 00:28:05 | Low | 2 |
| 2026-10-14 00:06:47 | Low | 2 |
| 2026-10-13 00:23:45 | Low | 2 |