#!/usr/bin/env bash usage() { echo -e "Build Jellyfin FFMPEG deb packages" echo -e " $0 " echo -e "Releases: Arches:" echo -e " * bullseye * amd64" echo -e " * bookworm * armhf" echo -e " * focal * arm64" echo -e " * jammy" echo -e " * noble" } if [[ -z ${1} ]]; then usage exit 1 fi cli_release="${1}" case ${cli_release} in 'bullseye') release="debian:bullseye" gcc_version="10" llvm_version="16" ;; 'bookworm') release="debian:bookworm" gcc_version="12" llvm_version="16" ;; 'focal') release="ubuntu:focal" gcc_version="9" llvm_version="12" ;; 'jammy') release="ubuntu:jammy" gcc_version="11" llvm_version="15" ;; 'noble') release="ubuntu:noble" gcc_version="13" llvm_version="17" ;; *) echo "Invalid release." usage exit 1 ;; esac cli_arch="${2}" case ${cli_arch} in 'amd64') arch="amd64" ;; 'armhf') arch="armhf" ;; 'arm64') arch="arm64" ;; *) echo "Invalid architecture." usage exit 1 ;; esac set -o xtrace set -o errexit # Check for dependencies if ! command -v "docker" &>/dev/null && command -v "podman" &>/dev/null; then container_cmd=podman else container_cmd=docker fi for dep in ${container_cmd} make mmv; do command -v "${dep}" &>/dev/null || { echo "The command '${dep}' is required."; exit 1; } done image_name="jellyfin-ffmpeg-build-${cli_release}" package_temporary_dir="$( mktemp -d )" # Trap cleanup for latter sections cleanup() { # Clean up the Dockerfile make -f Dockerfile.make clean # Remove tempdir rm -rf "${package_temporary_dir}" } trap cleanup EXIT INT # Generate Dockerfile make -f Dockerfile.make DISTRO=${release} GCC_VER=${gcc_version} LLVM_VER=${llvm_version} ARCH=${arch} # Set up the build environment docker image ${container_cmd} build . -t "${image_name}" # Build the APKs and copy out to ${package_temporary_dir} ${container_cmd} run --rm -e "RELEASE=${release}" -v "${package_temporary_dir}:/dist" "${image_name}" # If no 3rd parameter was specified, move APKs to parent directory if [[ -z ${3} ]]; then path="../bin" else path="${3}" fi mkdir "${path}" &>/dev/null || true mmv "${package_temporary_dir}/deb/*.deb" "${path}/#1.deb" mmv "${package_temporary_dir}/deb/*_${arch}.*" "${path}/#1-${cli_release}_${arch}.#2"