40 Commits

Author SHA1 Message Date
5bcbc9a935 1.35.4 release 2025-11-22 04:06:23 -05:00
1f61ec4888 Change SCRIPT_URL for gitea path 2025-11-22 04:06:05 -05:00
3c8ed002bb 1.35.3 release 2025-11-22 03:29:19 -05:00
7ef9669dec Update spec file for RPM 6.0 2025-11-21 21:25:15 -05:00
eb62392da7 Add RPM 6.0 support to rpmbuild 2025-11-21 16:07:49 -05:00
60961f8415 Add RPM 6.0 support to rpmbuild 2025-11-21 16:02:22 -05:00
e087248165 Add RPM 6.0 support to rpmbuild 2025-11-21 15:57:18 -05:00
90ea1e0fa4 Add RPM 6.0 support to rpmbuild 2025-11-21 15:49:36 -05:00
bafd812074 Add RPM 6.0 support to rpmbuild 2025-11-21 15:44:55 -05:00
75881d5ac1 Add RPM 6.0 support to rpmbuild 2025-11-21 15:38:07 -05:00
fd6d4d872f Add RPM 6.0 support to rpmbuild 2025-11-21 15:22:08 -05:00
c96ff1ed4b Use SHA256 checksums in rpmbuild 2025-11-21 15:00:11 -05:00
a37ae0b5f5 Run postbuild RPM routines 2025-11-21 14:49:47 -05:00
b8f64b3f0c Add rpm checksums 2025-11-21 14:41:28 -05:00
bcde2c252b 1.35.2 release 2025-11-21 13:20:46 -05:00
1f8f276258 Fix last MC34 version 2025-11-21 13:19:29 -05:00
ce46f50cd1 1.35.1 release 2025-11-21 13:10:54 -05:00
07878d97ce Update for MC35 2025-11-21 13:10:11 -05:00
d015f70ec2 Always install, don't reinstall MC RPMs 2025-11-13 09:23:22 -05:00
b4a80f5ba1 1.34.11 release 2025-11-07 23:24:58 -05:00
6dcf224b8e Remove unused var 2025-11-07 22:55:49 -05:00
5fb8e0e75f Workaround weird buildah FD 2025-11-07 22:20:56 -05:00
20e09ea15c Still print buildah rm debug 2025-11-07 22:13:16 -05:00
2ac055e827 Make buildah rm quiet 2025-11-07 22:11:30 -05:00
0ee91075fb Download deb to /tmp in container 2025-11-07 21:59:31 -05:00
3c7ef14aac Mounting container in buildah unshare 2025-11-07 21:52:16 -05:00
71ce48626f Make package manager operations noisier by default 2025-11-07 21:22:32 -05:00
f564980ec6 Temp debug 2025-11-07 20:36:34 -05:00
e040a94504 Temp debug 2025-11-07 20:34:42 -05:00
e913d57e17 Remove rootful buildah for cmd execution 2025-11-07 20:28:11 -05:00
61d9e2f98c Remove rootful buildah for deb download 2025-11-07 20:24:22 -05:00
148e821fa9 Remove rootful buildah for buildah checking 2025-11-07 20:20:01 -05:00
622e5d9295 Remove rootful buildah 2025-11-07 20:18:40 -05:00
71defe9672 Pass vars to working container instead of heredoc 2025-11-07 20:11:46 -05:00
60cfe6a19c Fix quoted repo names in containerized pm 2025-11-07 20:09:03 -05:00
c6eed2a89a Allow future full versions for --mcversion 2025-11-07 18:22:48 -05:00
f2c8865216 Print helper for future beta versions instead of scraping 2025-11-07 18:17:38 -05:00
fc1956dc04 Skip containerized version lookup for beta versions 2025-11-07 18:01:22 -05:00
533106cbd7 Allow future major beta versions 2025-11-07 17:54:51 -05:00
89499ddac8 Allow empty --install flag, default to repo method 2025-10-22 20:45:26 -04:00
3 changed files with 86 additions and 77 deletions

View File

@@ -31,7 +31,7 @@ $ installJRMC --help
--compat
Build/install MC without minimum dependency version requirements.
--mcversion VERSION
Specify the MC version, ex. "33", "34.0.71", or "34.0.71-1" (default: latest).
Specify the MC version, ex. "33", "35.0.24", or "35.0.24-1" (default: latest).
--arch ARCH
Specify the target MC architecture, ex. "amd64", "arm64", etc (default: host architecture).
--mcrepo REPO
@@ -126,8 +126,8 @@ Install the latest version of MC33 from the best available repository with debug
Install a more widely-compatible version of the latest MC version.
[code]installJRMC --install repo --service jriver-mediacenter --service-type user[/code]
Install MC from the repository and start/enable jriver-mediacenter.service as a user service.
[code]installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 34.0.71[/code]
Build and install an MC 34.0.71 comptability RPM locally and activate it using the [tt]/path/to/license.mjr[/tt].
[code]installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 35.0.24[/code]
Build and install an MC 35.0.24 comptability RPM locally and activate it using the [tt]/path/to/license.mjr[/tt].
[code]installJRMC --createrepo --createrepo-webroot /srv/jriver/repo --createrepo-user www-user[/code]
Build an RPM locally for the current distro, move it to the webroot, and run createrepo as www-user.
[code]installJRMC --service jriver-createrepo --createrepo-webroot /srv/jriver/repo --createrepo-user www-user[/code]

View File

@@ -28,7 +28,7 @@ $ installJRMC --help
--compat
Build/install MC without minimum dependency version requirements.
--mcversion VERSION
Build or install a specific MC version, ex. "34.0.71" or "33" (default: latest).
Build or install a specific MC version, ex. "35.0.24" or "33" (default: latest).
--mcrepo REPO
Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: latest official).
--arch ARCH
@@ -130,9 +130,9 @@ Multiple services (but not `--service-types`) can be installed at one time using
Install MC from the repository and start/enable `jriver-mediacenter.service` as a user service.
* `installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 34.0.71`
* `installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 35.0.24`
Build and install an MC 34.0.71 compatibility RPM locally and activate it using the `/path/to/license.mjr`.
Build and install an MC 35.0.24 compatibility RPM locally and activate it using the `/path/to/license.mjr`.
* `installJRMC --createrepo --createrepo-webroot /srv/jriver/repo --createrepo-user www-user`

View File

@@ -21,12 +21,12 @@
# shellcheck disable=SC2329
shopt -s extglob
declare -g SCRIPT_VERSION="1.34.10"
declare -g MC_VERSION_HARDCODE="34.0.71" # do find all replace
declare -g SCRIPT_VERSION="1.35.4"
declare -g MC_VERSION_HARDCODE="35.0.24" # do find all replace
declare -g MC_REPO_HARDCODE="bookworm" # should match the MC_VERSION_HARDCODE
declare -g BOARD_ID="89.0" # MC34 board ID for automatic version detection
declare -g BOARD_ID="92.0" # MC35 board ID for legacy latest version detection
declare -gi SELF_UPDATE_SWITCH=1 # 0 to disable installJRMC self-update
declare -g SCRIPT_URL="https://git.bryanroessler.com/bryan/installJRMC/raw/master/installJRMC" # self-update URL
declare -g SCRIPT_URL="https://git.bryanroessler.com/bryan/installJRMC/raw/branch/master/installJRMC" # self-update URL
# declare -g SCRIPT_URL="https://raw.githubusercontent.com/cryobry/installJRMC/refs/heads/master/installJRMC" # backup URL
declare -gi DEBUG=${DEBUG:-0} # set default debug and allow DEBUG env override (default: disabled)
@@ -139,7 +139,7 @@ parse_input() {
--install|-i) shift;
case $1 in
local|rpm|deb) BUILD_SWITCH=1 LOCAL_INSTALL_SWITCH=1 ;;
repo|remote) REPO_INSTALL_SWITCH=1 ;;
repo|remote|""|-*) REPO_INSTALL_SWITCH=1 ;;
container) CONTAINER_INSTALL_SWITCH=1 ;;
snap) SNAP_INSTALL_SWITCH=1 ;;
appimage) APPIMAGE_INSTALL_SWITCH=1 ;;
@@ -159,7 +159,8 @@ parse_input() {
# Set major version defaults
case "$MC_MVERSION_USER" in
34) MC_REPO_HARDCODE="bookworm" BOARD_ID="89.0" ;; # fallback to hardcoded version if full version not provided
35) MC_REPO_HARDCODE="bookworm" BOARD_ID="92.0" ;; # fallback to hardcoded version if full version not provided
34) MC_VERSION_USER="${MC_VERSION_USER:-34.0.71}" MC_REPO_HARDCODE="bookworm" BOARD_ID="89.0" ;;
33) MC_VERSION_USER="${MC_VERSION_USER:-33.0.72}" MC_REPO_HARDCODE="bullseye" BOARD_ID="86.0" ;;
32) MC_VERSION_USER="${MC_VERSION_USER:-32.0.58}" MC_REPO_HARDCODE="bullseye" BOARD_ID="83.0" ;;
31) MC_VERSION_USER="${MC_VERSION_USER:-31.0.83}" MC_REPO_HARDCODE="bullseye" BOARD_ID="80.0" ;;
@@ -173,8 +174,14 @@ parse_input() {
23) MC_VERSION_USER="${MC_VERSION_USER:-23.0.104}" MC_REPO_HARDCODE="jessie" BOARD_ID="54.0" ;;
22) MC_VERSION_USER="${MC_VERSION_USER:-22.0.102}" MC_REPO_HARDCODE="jessie" BOARD_ID="51.0" ;;
21) MC_VERSION_USER="${MC_VERSION_USER:-21.0.90}" MC_REPO_HARDCODE="jessie" BOARD_ID="44.0" ;;
20) MC_VERSION_USER="${MC_VERSION_USER:-20.0.131}" MC_REPO_HARDCODE="jessie" BOARD_ID="35.0";;
*) err "Bad --mcversion"; print_help; exit 1 ;;
20) MC_VERSION_USER="${MC_VERSION_USER:-20.0.131}" MC_REPO_HARDCODE="jessie" BOARD_ID="35.0" ;;
*)
# Warn for future major beta versions
if [[ $MC_MVERSION_USER -gt ${MC_VERSION_HARDCODE%%.*} ]] && [[ -z $MC_VERSION_USER ]]; then
echo "For future major versions, supply full version (and --betapass if necessary)."
err "Bad --mcversion"; print_help; exit 1
fi
;;
esac
else
err "Bad --mcversion"; print_help; exit 1
@@ -290,21 +297,21 @@ init() {
raspbian) ID="debian" ;;
*mandriva*) ID="mandriva"
if ((REPO_INSTALL_SWITCH)); then
debug "Automatically using --install=local for Mandriva"
debug "Automatically using --install=local for Mandriva."
REPO_INSTALL_SWITCH=0
BUILD_SWITCH=1
LOCAL_INSTALL_SWITCH=1
fi ;;
manjaro|arch|cachyos) ID="arch"
if ((REPO_INSTALL_SWITCH)); then
debug "Automatically using --install=local for Arch"
debug "Automatically using --install=local for Arch."
REPO_INSTALL_SWITCH=0
BUILD_SWITCH=1
LOCAL_INSTALL_SWITCH=1
fi ;;
*suse*) ID="suse"
if ((REPO_INSTALL_SWITCH)); then
debug "Automatically using --install=local for SUSE"
debug "Automatically using --install=local for SUSE."
REPO_INSTALL_SWITCH=0
BUILD_SWITCH=1
LOCAL_INSTALL_SWITCH=1
@@ -341,31 +348,31 @@ init() {
fedora|centos|mandriva)
local rpm_mgr
rpm_mgr=$(command -v dnf &>/dev/null && echo "dnf" || echo "yum")
PKG_INSTALL=(sudo "$rpm_mgr" install -y)
PKG_REMOVE=(sudo "$rpm_mgr" remove -y)
PKG_UPDATE=(sudo "$rpm_mgr" makecache)
PKG_INSTALL=(sudo "$rpm_mgr" install --assumeyes)
PKG_REMOVE=(sudo "$rpm_mgr" remove --assumeyes)
PKG_UPDATE=(sudo "$rpm_mgr" makecache --assumeyes)
PKG_QUERY=(rpm -q)
PKG_INSTALL_LOCAL() { install_mc_rpm; }
;;
debian|ubuntu)
PKG_INSTALL=(sudo apt-get -f install --install-recommends -y -q0)
PKG_REMOVE=(sudo apt-get remove --auto-remove -y -q0)
PKG_UPDATE=(sudo apt-get update -y -q0)
PKG_INSTALL=(sudo apt-get install --fix-broken --install-recommends --assume-yes)
PKG_REMOVE=(sudo apt-get remove --auto-remove --assume-yes)
PKG_UPDATE=(sudo apt-get update --assume-yes)
PKG_QUERY=(dpkg -s)
PKG_INSTALL_LOCAL() { install_mc_deb "$@"; }
;;
suse)
PKG_INSTALL=(sudo zypper --gpg-auto-import-keys --non-interactive --quiet install --force --force-resolution --replacefiles --no-confirm)
PKG_REMOVE=(sudo zypper --non-interactive --quiet remove --clean-deps)
PKG_UPDATE=(sudo zypper --non-interactive --quiet refresh jriver)
PKG_QUERY=(rpm -q)
PKG_INSTALL=(sudo zypper --gpg-auto-import-keys --non-interactive install --force --force-resolution --replacefiles --no-confirm)
PKG_REMOVE=(sudo zypper --non-interactive remove --clean-deps)
PKG_UPDATE=(sudo zypper --non-interactive refresh jriver)
PKG_QUERY=(rpm --query)
PKG_INSTALL_LOCAL() { install_mc_rpm; }
;;
arch)
PKG_INSTALL=(sudo pacman -Sy --noconfirm)
PKG_REMOVE=(sudo pacman -Rs --noconfirm)
PKG_UPDATE=(sudo pacman -Syy)
PKG_QUERY=(sudo pacman -Qs)
PKG_INSTALL=(sudo pacman --sync --refresh --noconfirm)
PKG_REMOVE=(sudo pacman --remove --recursive --noconfirm)
PKG_UPDATE=(sudo pacman --sync --refresh --refresh)
PKG_QUERY=(sudo pacman --query --search)
PKG_INSTALL_LOCAL() { install_mc_arch; }
;;
unknown)
@@ -434,8 +441,8 @@ set_mc_version() {
# Determine latest version
# Containerized package manager
if create_mc_apt_container &&
MC_VERSION=$(sudo buildah run "$CNT" -- apt-cache policy "mediacenter${MC_MVERSION_USER:-${MC_VERSION_HARDCODE%%.*}}" | awk '/Candidate:/ {sub(/-.*/, "", $2); print $2}' | sort -V | tail -n1) &&
execute sudo buildah rm "$CNT" &&
MC_VERSION=$(buildah run "$CNT" -- apt-cache policy "mediacenter${MC_MVERSION_USER:-${MC_VERSION_HARDCODE%%.*}}" | awk '/Candidate:/ {sub(/-.*/, "", $2); print $2}' | sort -V | tail -n1) &&
buildah rm "$CNT" &>/dev/null &&
[[ $MC_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
MC_VERSION_SOURCE="containerized package manager"
# Fallback to webscrape
@@ -522,15 +529,13 @@ install_package() {
((allow_downgrades)) && install_flags+=(--allowerasing)
((no_gpg_check)) && install_flags+=(--nogpgcheck)
((refresh)) && install_flags+=(--refresh)
# Only add reinstall flag for mediacenter package
if ((reinstall)) && [[ ${#pkg_array[@]} -eq 1 ]] && "${PKG_QUERY[@]}" "mediacenter$MC_MVERSION" &>/dev/null; then
pkg_install=("${pkg_install[@]/install/reinstall}")
fi
;;
suse)
((no_gpg_check)) && install_flags+=(--allow-unsigned-rpm) ;;
esac
((silent)) && install_flags+=(--quiet)
# Install packages
if [[ ${#pkg_array[@]} -gt 0 ]]; then
if ! execute "${pkg_install[@]}" "${install_flags[@]}" "${pkg_array[@]}"; then
@@ -734,7 +739,7 @@ install_mc_repo() {
acquire_deb() {
debug "${FUNCNAME[0]}()"
declare -g MC_DEB MC_SOURCE
local fname mnt
local fname
[[ -d $OUTPUT_DIR/SOURCES ]] || execute mkdir -p "$OUTPUT_DIR/SOURCES"
@@ -749,10 +754,10 @@ acquire_deb() {
MC_DEB="$OUTPUT_DIR/SOURCES/$fname"
MC_SOURCE="https://files.jriver-cdn.com/mediacenter/channels/v$MC_MVERSION/latest/$fname"
# If deb file already exists, skip download
# If deb file already exists and is >30MB, skip download
if [[ -f $MC_DEB ]]; then
if [[ $(stat -c%s "$MC_DEB") -lt 10000000 ]]; then
echo "Removing existing DEB under 10MB: $MC_DEB"
if [[ $(stat -c%s "$MC_DEB") -lt 30000000 ]]; then
echo "Removing existing DEB under 30MB: $MC_DEB"
execute rm -f "$MC_DEB"
else
echo "Using existing DEB: $MC_DEB"
@@ -761,12 +766,18 @@ acquire_deb() {
fi
# Download the deb file using the containerized package manager
if ! { create_mc_apt_container "apt-get download --allow-unauthenticated mediacenter$MC_MVERSION &>/dev/null" &&
mnt="$(sudo buildah mount "$CNT")" &&
execute sudo find "$mnt" -maxdepth 1 -type f -name "*.deb" -exec cp {} "$MC_DEB" \; &&
# shellcheck disable=SC2016
if ! {
# Download to /tmp to silence _apt permission warnings
create_mc_apt_container "cd /tmp && apt-get download --allow-unauthenticated mediacenter$MC_MVERSION -qq" &&
env CNT="$CNT" MC_DEB="$MC_DEB" buildah unshare -- bash -eu -o pipefail -c '
mnt="$(buildah mount "$CNT")"
deb="$(find "$mnt/tmp" -maxdepth 1 -type f -name "*.deb" | head -n1)"
[[ -n "$deb" ]] && cp -f "$deb" "$MC_DEB"
buildah umount "$CNT"' &&
[[ -f $MC_DEB ]] &&
execute sudo buildah umount "$CNT" &&
execute sudo buildah rm "$CNT"; }; then
buildah rm "$CNT" &>/dev/null;
}; then
debug "Failed to download DEB using containerized package manager"
echo "Using legacy download method"
# Define the repository search order
@@ -934,8 +945,7 @@ translate_packages() {
recommends_arr=('mesa-libgl' 'nvidia-libgl' 'nvidia-utils' 'vulkan-intel'
'vulkan-radeon' 'vorbis-tools' 'musepack-tools')
;;
*)
echo "Skipping package translations for $ID"
*) echo "Skipping package translations for $ID" ;;
esac
}
@@ -987,27 +997,26 @@ build_rpm() {
Release: $MC_RELEASE
Summary: JRiver Media Center
Group: Applications/Media
License: LicenseRef-JRiver-Proprietary
URL: https://www.jriver.com/
Source0: $MC_SOURCE
%define _rpmfilename %%{ARCH}/%%{NAME}-%%{version}-%%{release}.%%{ARCH}.rpm
AutoReq: 0
BuildArch: $ARCH
%global _rpmfilename %%{ARCH}/%%{NAME}-%%{version}-%%{release}.%%{ARCH}.rpm
AutoReqProv: no
$requires_str
$recommends_str
Conflicts: MediaCenter
Provides: mediacenter$MC_MVERSION
License: Copyright 1998-$(date +%Y), JRiver, Inc. All rights reserved. Protected by U.S. patents #7076468 and #7062468
URL: https://www.jriver.com/
%define __provides_exclude_from ^%{_libdir}/jriver/.*/.*\\.so.*$
%description
Media Center is more than a world class player.
%global __os_install_post %{nil}
%prep
%build
@@ -1015,9 +1024,6 @@ build_rpm() {
%install
dpkg -x %{S:0} %{buildroot}
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%{_bindir}/mediacenter$MC_MVERSION
$stub
@@ -1037,6 +1043,8 @@ build_rpm() {
-bb
"$spec_file"
)
# Run rpmbuild and verify output RPM exists
execute "${rpmbuild_cmd[@]}" && [[ -f $MC_RPM ]]
}
@@ -1140,7 +1148,7 @@ install_mc_deb() {
# @description Installs MC via RPM package
install_mc_rpm() {
debug "${FUNCNAME[0]}()"
install_package --no-install-check --no-gpg-check --allow-downgrades --reinstall "$MC_RPM"
install_package --no-install-check --no-gpg-check --allow-downgrades "$MC_RPM"
}
# @description Installs Media Center generically for unsupported OSes
@@ -1221,10 +1229,10 @@ run_createrepo() {
fi
# Run createrepo
local -a cr_opts=(-q "$CREATEREPO_WEBROOT")
local -a cr_opts=(--update)
# [[ -d "$CREATEREPO_WEBROOT/repodata" ]] && cr_opts+=(--update) # TODO temporarily disabled for legacy createrepo
if ! execute sudo -u "$CREATEREPO_USER" createrepo "${cr_opts[@]}"; then
if ! (execute sudo createrepo "${cr_opts[@]}" && execute sudo chown -R "$CREATEREPO_USER:$CREATEREPO_USER" "$CREATEREPO_WEBROOT"); then
if ! execute sudo -u "$CREATEREPO_USER" createrepo "${cr_opts[@]}" "$CREATEREPO_WEBROOT"; then
if ! (execute sudo createrepo "${cr_opts[@]}" "$CREATEREPO_WEBROOT" && execute sudo chown -R "$CREATEREPO_USER:$CREATEREPO_USER" "$CREATEREPO_WEBROOT"); then
err "createrepo failed"
return 1
fi
@@ -1982,14 +1990,14 @@ download() {
local url="$1"
local output="${2:-}"
local -a cmd
if command -v curl &>/dev/null || install_package --silent curl; then
if command -v curl &>/dev/null || install_package curl; then
cmd=(curl --silent --fail --location)
if [[ -n "$output" ]]; then
cmd+=(--output "$output")
else
cmd+=(--remote-name)
fi
elif command -v wget &>/dev/null || install_package --silent wget; then
elif command -v wget &>/dev/null || install_package wget; then
cmd=(wget --quiet)
[[ -n "$output" ]] && cmd+=("--output-document=$output")
else
@@ -2003,23 +2011,24 @@ create_mc_apt_container() {
debug "${FUNCNAME[0]}()" "$@"
declare -g CNT
local -a cmds=("$@")
{ command -v buildah &>/dev/null || install_package buildah &>/dev/null; } &&
CNT=$(sudo buildah from --quiet alpine:edge) &&
sudo buildah run "$CNT" -- sh -c '
apk add --no-cache apt curl gnupg &>/dev/null
curl -fsSL https://dist.jriver.com/mediacenter@jriver.com.gpg.key | gpg --dearmor -o /usr/share/keyrings/jriver-com-archive-keyring.gpg &>/dev/null
# shellcheck disable=SC2016
{ command -v buildah &>/dev/null || install_package buildah; } &&
CNT=$(buildah from --quiet alpine:edge) &&
buildah run --env MC_REPO="$MC_REPO" --env MC_ARCH="$MC_ARCH" "$CNT" -- sh -c '
apk add --quiet --no-progress --no-cache apt curl gnupg
curl -fsSL https://dist.jriver.com/mediacenter@jriver.com.gpg.key | gpg --quiet --dearmor -o /usr/share/keyrings/jriver-com-archive-keyring.gpg
cat <<-EOF > /etc/apt/sources.list.d/jriver.sources
Types: deb
URIs: https://dist.jriver.com/latest/mediacenter/
Signed-By: /usr/share/keyrings/jriver-com-archive-keyring.gpg
Suites: '"$MC_REPO"'
Suites: $MC_REPO
Components: main
Architectures: '"$MC_ARCH"'
Architectures: $MC_ARCH
EOF
apt-get update &>/dev/null' &&
apt-get update -qq' &&
# If user passes command strings run them in the container
for cmd in "${cmds[@]}"; do
sudo buildah run "$CNT" -- sh -c "$cmd" || { err "$cmd failed"; return 1; }
buildah run "$CNT" -- sh -c "$cmd" || { err "$cmd failed"; return 1; }
done
}
add_temp_repo() {