meshcore-open-git
The package builds from a legitimate GitHub source, applies a public patch, and uses standard Flutter tooling; the non-whitelisted host is the project's own repository, and skipped checksum is common for git sources, posing minimal 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 package builds from a legitimate GitHub source, applies a public patch, and uses standard Flutter tooling; the non-whitelisted host is the project's own repository, and skipped checksum is common for git sources, posing minimal risk.
2 higher static findings superseded - not the current verdict (shown for transparency)
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:87
"${_pkgname}::git+https://${_githost}/${_gituser}/${_gitname}.git"
orphaned_readopted
This package was orphaned and re-adopted within the last 30 days — a window where ownership transfers can introduce malicious changes.
PKGBUILD
1 offending line(s) highlighted# Maintainer: dreieck (https://aur.archlinux.org/account/dreieck)
_gitname="meshcore-open"
_pkgname="${_gitname}"
pkgname="${_pkgname}-git"
pkgver=alpha9+217.r962.20260903.dbd7f2aa
pkgrel=2
pkgdesc="Open-source Flutter client for MeshCore LoRa mesh networking devices."
groups=('meshcore')
arch=(
'i686'
'x86_64'
'aarch64'
)
_githost='github.com'
_gituser='zjs81'
url="https://${_githost}/${_gituser}/${_gitname}"
license=("MIT")
depends=(
# glib2
libglib-2.0.so
libgio-2.0.so
libgobject-2.0.so
# gtk3
libgdk-3.so
libgtk-3.so
glibc
libgcc_s.so
libatk-1.0.so # at-spi2-core
libfontconfig.so
libstdc++.so
libcairo.so
libepoxy.so
libpango-1.0.so
libpangocairo-1.0.so
)
makedepends=(
# To retrieve the source:
'git'
# Used for packaging
'cmake'
'ninja'
## Flutter and dart recommendations:
#
# Recommended in 2026-09:
# Use aur/flutter-bin (https://aur.archlinux.org/packages/flutter-bin) or chaotic-aur/flutter-bin (https://aur.chaotic.cx/ | https://aur.chaotic.cx/stats/search?search=flutter-bin | https://builds.garudalinux.org/repos/chaotic-aur/x86_64/#:~:text=flutter-bin).
#
# Recommended in beginning of 2026:
# Use 'arch4edu' repository (https://wiki.archlinux.org/title/Unofficial_user_repositories#arch4edu).
# This later errored out with "Wrong full snapshot version, expected '0451907c2eaa8467e848c0067bfe8ed4' found '78da37fed6bf1489361a312568249f3f'" or so.
'flutter-tool' # >=3.41. # Should be a versioned dependency, but not specifying now since `flutter-bin` does not has a versioned provides entry as of 2026-09-05, see https://aur.archlinux.org/packages/flutter-bin#comment-1084386.
'dart' # >=3.11. # Should be a versioned dependency, but not specifying now since `flutter-bin` does not has a versioned provides entry as of 2026-09-05, see https://aur.archlinux.org/packages/flutter-bin#comment-1084386.
# the Flutter linux files
'flutter-target-linux' # >=3.41. # Should be a versioned dependency, but not specifying now since `flutter-bin` does not has a versioned provides entry as of 2026-09-05, see https://aur.archlinux.org/packages/flutter-bin#comment-1084386.
# dependency libraries
'glib2'
'gtk3'
'libgcc'
'at-spi2-core'
'fontconfig'
'libstdc++'
'cairo'
'libepoxy'
'pango'
## To reduce the size of PNG images
#'parallel'
#'zopfli'
)
optdepends=(
'hicolor-icon-theme: For hicolor theme hierarchy.'
)
provides=(
"${_pkgname}=${pkgver}"
)
conflicts=(
"${_pkgname}"
)
source=(
"${_pkgname}::git+https://${_githost}/${_gituser}/${_gitname}.git"
"flserial_once_flag_fix.patch::https://github.com/MeshEnvy/flserial/pull/1.patch"
"${_pkgname}.desktop"
)
sha256sums=(
'SKIP' # Main 'meshcore-open' source.
'0a870e4ca333c53457948cdc6cf31597f090a8291209314c9ac74660d8d8dc08' # 'flserial_once_flag_fix.patch'
'693903df45168de884191be566334fad4c5bd829b36f7e6c33440cf2efa79c5a' # '.desktop' file.
)
case "${CARCH}" in
"i686")
export _dartarch="x86"
;;
"x86_64")
export _dartarch="x64"
;;
"aarch64")
export _dartarch="arm64"
;;
*)
error "Architecture '$CARCH' not supported."
false
;;
esac
_patch_only_if_not_applied() {
# Tries to apply a patch and if it already has been applied also return zero exit code.
# Arguments:
# $1: Patch file to apply.
# $2...: Other options to patch.
local _patch="$1"
shift
if ! patch --dry-run -R -i "${_patch}" "$@"; then
printf '%s\n' ' `-> Patch not yet applied, applying ...'
patch -i "${_patch}" "$@"
else
printf '%s\n' ' `-> Patch already applied.'
fi
}
prepare() {
cd "${srcdir}/${_pkgname}"
export PUB_CACHE="${srcdir}/.pub_cache"
git log > "${srcdir}/git.log"
printf '%s\n' " --> downloading flutter/ dart dependencies ..."
flutter -v --disable-analytics
flutter -v pub get # --enforce-lockfile
# Patch this after downloading flutter dependencies -- since it patches a dependency:
local _patch='flserial_once_flag_fix.patch'
local _flserialdir
for _flserialdir in "${PUB_CACHE}/git"/flserial-[0-9a-f]*; do
printf '%s\n' " --> Applying patch '${_patch}' to '${_flserialdir}' ..."
_patch_only_if_not_applied "${srcdir}/${_patch}" -Np1 --follow-symlinks -d "${_flserialdir}"
done
#printf '%s\n' " --> size-optimising PNG images ..."
#find -name '*.png' -type f | parallel -j "${_nproc}" zopflipng -m -y {} {}
}
pkgver() {
cd "${srcdir}/${_pkgname}"
#_ver="$(grep -E '^[[:space:]]*version[[:space:]]*=' pyproject.toml | head -n1 | awk -F= '{print $2}' | tr -d \'\"[[:space:]])"
_ver="$(git describe --tags | sed -E -e 's|^[vV]||' -e 's|\-g[0-9a-f]*$||' | tr '-' '+' | awk '{ print tolower($0) }')"
_rev="$(git rev-list --count HEAD)"
_date="$(git log -1 --date=format:"%Y%m%d" --format="%ad")"
_hash="$(git rev-parse --short HEAD)"
if [ -z "${_ver}" ]; then
error "Version could not be determined."
return 1
else
printf '%s' "${_ver}.r${_rev}.${_date}.${_hash}"
fi
}
build() {
cd "${srcdir}/${_pkgname}"
export PUB_CACHE="${srcdir}/.pub_cache"
printf '%s\n' " --> building ..."
# build in release mode without running pub
flutter -v build linux --no-pub --release
}
check() {
cd "${srcdir}/${_pkgname}"
export PUB_CACHE="${srcdir}/.pub_cache"
printf '%s\n' " --> testing ..."
flutter -v test
}
package() {
cd "${srcdir}/${_pkgname}"
export PUB_CACHE="${srcdir}/.pub_cache"
printf '%s\n' " --> installing ..."
# enter the output directory of the Flutter build
cd "build/linux/${_dartarch}/release"
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${pkgdir}/usr/lib/${_pkgname}
# install the Flutter project using cmake
cmake -P cmake_install.cmake
# link executable into PATH
install -dvm755 "${pkgdir}/usr/bin"
ln -sv "/usr/lib/${_pkgname}/meshcore_open" "${pkgdir}/usr/bin/meshcore_open"
cd "${pkgdir}/usr/bin"
ln -sv meshcore_open meshcore-open
printf '%s\n' " --> installing icon and desktop file ..."
cd "${srcdir}/${_pkgname}"
install -Dvm644 assets/images/mesh-icon.png "${pkgdir}/usr/share/icons/hicolor/1024x1024/apps/${_pkgname}.png"
install -dvm755 "${pkgdir}/usr/share/pixmaps"
ln -sv "/usr/share/icons/hicolor/1024x1024/apps/${_pkgname}.png" "${pkgdir}/usr/share/pixmaps/${_pkgname}.png"
install -Dvm644 "${srcdir}/${_pkgname}.desktop" "${pkgdir}/usr/share/applications/${_pkgname}.desktop"
_docfiles=(
"${srcdir}/git.log"
AGENTS.md
README.md
CLAUDE.md
TESTFLIGHT_GUIDE.md
)
_docdirs=(
assets
docs
)
_manfiles=()
_infofiles=()
_licensefiles=(
LICENSE
)
printf '%s\n' " --> installing documentation ..."
for _docfile in "${_docfiles[@]}"; do
install -D -v -m644 "${_docfile}" "${pkgdir}/usr/share/doc/${_pkgname}/$(basename "${_docfile}")"
done
for _docdir in "${_docdirs[@]}"; do
cp -rv "${_docdir}" "${pkgdir}/usr/share/doc/${_pkgname}/$(basename "${_docdir}")"
done
for _manfile in "${_manfiles[@]}"; do
_section="$(basename "${_manfile}" .gz | sed -E -e 's|^.*\.([^.]*)$|\1|')"
install -D -v -m644 "docs/build/man/${_manfile}" "${pkgdir}/usr/share/man/man${_section}/$(basename "${_manfile}")"
done
for _infofile in "${_infofiles[@]}"; do
install -D -v -m644 "${_infofile}" "${pkgdir}/usr/share/info/$(basename "${_infofile}")"
done
printf '%s\n' " --> installing license ..."
for _licensefile in "${_licensefiles[@]}"; do
install -D -v -m644 "${_licensefile[@]}" "${pkgdir}/usr/share/licenses/${pkgname}/$(basename "${_licensefile}")"
ln -svr "${pkgdir}/usr/share/licenses/${pkgname}/$(basename "${_licensefile}")" "${pkgdir}/usr/share/doc/${_pkgname}/$(basename "${_licensefile}")"
done
}
# vim: set sw=2 ts=2 et:
Changes since previous scan
--- PKGBUILD @ 2026-09-06 00:17+++ PKGBUILD @ 2026-09-17 00:27@@ -4,7 +4,7 @@ _pkgname="${_gitname}" pkgname="${_pkgname}-git" pkgver=alpha9+217.r962.20260903.dbd7f2aa-pkgrel=1+pkgrel=2 pkgdesc="Open-source Flutter client for MeshCore LoRa mesh networking devices." groups=('meshcore') arch=(@@ -85,10 +85,12 @@ source=( "${_pkgname}::git+https://${_githost}/${_gituser}/${_gitname}.git"+ "flserial_once_flag_fix.patch::https://github.com/MeshEnvy/flserial/pull/1.patch" "${_pkgname}.desktop" ) sha256sums=( 'SKIP' # Main 'meshcore-open' source.+ '0a870e4ca333c53457948cdc6cf31597f090a8291209314c9ac74660d8d8dc08' # 'flserial_once_flag_fix.patch' '693903df45168de884191be566334fad4c5bd829b36f7e6c33440cf2efa79c5a' # '.desktop' file. ) @@ -108,6 +110,22 @@ ;; esac ++_patch_only_if_not_applied() {+ # Tries to apply a patch and if it already has been applied also return zero exit code.+ # Arguments:+ # $1: Patch file to apply.+ # $2...: Other options to patch.+ local _patch="$1"+ shift+ if ! patch --dry-run -R -i "${_patch}" "$@"; then+ printf '%s\n' ' `-> Patch not yet applied, applying ...'+ patch -i "${_patch}" "$@"+ else+ printf '%s\n' ' `-> Patch already applied.'+ fi+}+ prepare() { cd "${srcdir}/${_pkgname}" export PUB_CACHE="${srcdir}/.pub_cache"@@ -117,6 +135,14 @@ printf '%s\n' " --> downloading flutter/ dart dependencies ..." flutter -v --disable-analytics flutter -v pub get # --enforce-lockfile++ # Patch this after downloading flutter dependencies -- since it patches a dependency:+ local _patch='flserial_once_flag_fix.patch'+ local _flserialdir+ for _flserialdir in "${PUB_CACHE}/git"/flserial-[0-9a-f]*; do+ printf '%s\n' " --> Applying patch '${_patch}' to '${_flserialdir}' ..."+ _patch_only_if_not_applied "${srcdir}/${_patch}" -Np1 --follow-symlinks -d "${_flserialdir}"+ done #printf '%s\n' " --> size-optimising PNG images ..." #find -name '*.png' -type f | parallel -j "${_nproc}" zopflipng -m -y {} {}Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 3 |
| 2026-09-16 00:03:17 | Low | 3 |
| 2026-09-15 00:25:31 | Low | 3 |
| 2026-09-14 00:27:57 | Low | 3 |
| 2026-09-13 00:19:54 | Low | 3 |
| 2026-09-12 00:25:17 | Low | 3 |
| 2026-09-11 00:19:22 | Low | 3 |
| 2026-09-10 00:22:44 | Low | 3 |
| 2026-09-09 00:04:09 | Low | 3 |
| 2026-09-08 00:18:08 | Low | 3 |
| 2026-09-07 00:30:15 | Low | 3 |
| 2026-09-06 23:12:41 | Medium | 2 |
| 2026-09-06 00:17:06 | Low | 3 |
| 2026-09-05 16:00:23 | Medium | 2 |
| 2026-09-05 00:16:27 | Low | 3 |
| 2026-09-04 00:03:13 | Low | 3 |
| 2026-09-03 00:15:47 | Low | 3 |
| 2026-09-02 00:02:31 | Low | 3 |
| 2026-09-01 00:11:19 | Low | 3 |
| 2026-08-31 00:19:57 | Low | 3 |