#!/bin/bash set -euo pipefail PACKAGE=${1:?usage: verify-fnos-package.sh package.fpk} VERIFY_TMP_ROOT="${LIVERECORDER_VERIFY_TMPDIR:-${TMPDIR:-/tmp}}" mkdir -p "$VERIFY_TMP_ROOT" WORK_DIR=$(mktemp -d "${VERIFY_TMP_ROOT%/}/liverecorder-fnos-verify.XXXXXX") trap 'rm -rf -- "$WORK_DIR"' EXIT tar -xzf "$PACKAGE" -C "$WORK_DIR" grep -q '^appname=liverecorder$' "$WORK_DIR/manifest" grep -q '^version=1.0.0$' "$WORK_DIR/manifest" grep -q '^platform=x86$' "$WORK_DIR/manifest" test -x "$WORK_DIR/cmd/main" test -x "$WORK_DIR/cmd/install_callback" test -s "$WORK_DIR/wizard/install" test -s "$WORK_DIR/wizard/upgrade" test -s "$WORK_DIR/ICON.PNG" test -s "$WORK_DIR/ICON_256.PNG" expected=$(sed -n 's/^checksum=//p' "$WORK_DIR/manifest") actual=$(md5sum "$WORK_DIR/app.tgz" | cut -d' ' -f1) test -n "$expected" test "$expected" = "$actual" tar -tzf "$WORK_DIR/app.tgz" >"$WORK_DIR/app-files.txt" grep -q '^server/LiveRecorder.WebApi$' "$WORK_DIR/app-files.txt" grep -q '^server/wwwroot/index.html$' "$WORK_DIR/app-files.txt" grep -q '^runtime/usr/lib/postgresql/15/bin/postgres$' "$WORK_DIR/app-files.txt" grep -q '^runtime/usr/lib/postgresql/15/bin/initdb$' "$WORK_DIR/app-files.txt" grep -q '^runtime/usr/bin/ffmpeg$' "$WORK_DIR/app-files.txt" grep -q '^runtime/usr/bin/node$' "$WORK_DIR/app-files.txt" grep -q '^runtime/usr/bin/curl$' "$WORK_DIR/app-files.txt" grep -q '^ui/config$' "$WORK_DIR/app-files.txt" grep -q '^ui/images/icon_64.png$' "$WORK_DIR/app-files.txt" if grep -Eq '^runtime/(usr/)?lib/x86_64-linux-gnu/(libc\.so\.6|ld-linux-x86-64\.so\.2)$' "$WORK_DIR/app-files.txt"; then printf 'the FPK must use the fnOS glibc and matching system loader\n' >&2 exit 1 fi if grep -Eq '^(data|records|postgres|log|var)/' "$WORK_DIR/app-files.txt"; then printf 'persistent data must not be included in app.tgz\n' >&2 exit 1 fi printf 'fnOS package verified: %s\n' "$PACKAGE"