Compare commits
21 Commits
e19422257d
...
b4a80f5ba1
| Author | SHA1 | Date | |
|---|---|---|---|
| b4a80f5ba1 | |||
| 6dcf224b8e | |||
| 5fb8e0e75f | |||
| 20e09ea15c | |||
| 2ac055e827 | |||
| 0ee91075fb | |||
| 3c7ef14aac | |||
| 71ce48626f | |||
| f564980ec6 | |||
| e040a94504 | |||
| e913d57e17 | |||
| 61d9e2f98c | |||
| 148e821fa9 | |||
| 622e5d9295 | |||
| 71defe9672 | |||
| 60cfe6a19c | |||
| c6eed2a89a | |||
| f2c8865216 | |||
| fc1956dc04 | |||
| 533106cbd7 | |||
| 89499ddac8 |
106
installJRMC
106
installJRMC
@@ -21,7 +21,7 @@
|
|||||||
# shellcheck disable=SC2329
|
# shellcheck disable=SC2329
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
declare -g SCRIPT_VERSION="1.34.10"
|
declare -g SCRIPT_VERSION="1.34.11"
|
||||||
declare -g MC_VERSION_HARDCODE="34.0.71" # do find all replace
|
declare -g MC_VERSION_HARDCODE="34.0.71" # do find all replace
|
||||||
declare -g MC_REPO_HARDCODE="bookworm" # should match the MC_VERSION_HARDCODE
|
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="89.0" # MC34 board ID for automatic version detection
|
||||||
@@ -139,7 +139,7 @@ parse_input() {
|
|||||||
--install|-i) shift;
|
--install|-i) shift;
|
||||||
case $1 in
|
case $1 in
|
||||||
local|rpm|deb) BUILD_SWITCH=1 LOCAL_INSTALL_SWITCH=1 ;;
|
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 ;;
|
container) CONTAINER_INSTALL_SWITCH=1 ;;
|
||||||
snap) SNAP_INSTALL_SWITCH=1 ;;
|
snap) SNAP_INSTALL_SWITCH=1 ;;
|
||||||
appimage) APPIMAGE_INSTALL_SWITCH=1 ;;
|
appimage) APPIMAGE_INSTALL_SWITCH=1 ;;
|
||||||
@@ -173,8 +173,14 @@ parse_input() {
|
|||||||
23) MC_VERSION_USER="${MC_VERSION_USER:-23.0.104}" MC_REPO_HARDCODE="jessie" BOARD_ID="54.0" ;;
|
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" ;;
|
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" ;;
|
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";;
|
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 ;;
|
*)
|
||||||
|
# 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
|
esac
|
||||||
else
|
else
|
||||||
err "Bad --mcversion"; print_help; exit 1
|
err "Bad --mcversion"; print_help; exit 1
|
||||||
@@ -290,21 +296,21 @@ init() {
|
|||||||
raspbian) ID="debian" ;;
|
raspbian) ID="debian" ;;
|
||||||
*mandriva*) ID="mandriva"
|
*mandriva*) ID="mandriva"
|
||||||
if ((REPO_INSTALL_SWITCH)); then
|
if ((REPO_INSTALL_SWITCH)); then
|
||||||
debug "Automatically using --install=local for Mandriva"
|
debug "Automatically using --install=local for Mandriva."
|
||||||
REPO_INSTALL_SWITCH=0
|
REPO_INSTALL_SWITCH=0
|
||||||
BUILD_SWITCH=1
|
BUILD_SWITCH=1
|
||||||
LOCAL_INSTALL_SWITCH=1
|
LOCAL_INSTALL_SWITCH=1
|
||||||
fi ;;
|
fi ;;
|
||||||
manjaro|arch|cachyos) ID="arch"
|
manjaro|arch|cachyos) ID="arch"
|
||||||
if ((REPO_INSTALL_SWITCH)); then
|
if ((REPO_INSTALL_SWITCH)); then
|
||||||
debug "Automatically using --install=local for Arch"
|
debug "Automatically using --install=local for Arch."
|
||||||
REPO_INSTALL_SWITCH=0
|
REPO_INSTALL_SWITCH=0
|
||||||
BUILD_SWITCH=1
|
BUILD_SWITCH=1
|
||||||
LOCAL_INSTALL_SWITCH=1
|
LOCAL_INSTALL_SWITCH=1
|
||||||
fi ;;
|
fi ;;
|
||||||
*suse*) ID="suse"
|
*suse*) ID="suse"
|
||||||
if ((REPO_INSTALL_SWITCH)); then
|
if ((REPO_INSTALL_SWITCH)); then
|
||||||
debug "Automatically using --install=local for SUSE"
|
debug "Automatically using --install=local for SUSE."
|
||||||
REPO_INSTALL_SWITCH=0
|
REPO_INSTALL_SWITCH=0
|
||||||
BUILD_SWITCH=1
|
BUILD_SWITCH=1
|
||||||
LOCAL_INSTALL_SWITCH=1
|
LOCAL_INSTALL_SWITCH=1
|
||||||
@@ -341,31 +347,31 @@ init() {
|
|||||||
fedora|centos|mandriva)
|
fedora|centos|mandriva)
|
||||||
local rpm_mgr
|
local rpm_mgr
|
||||||
rpm_mgr=$(command -v dnf &>/dev/null && echo "dnf" || echo "yum")
|
rpm_mgr=$(command -v dnf &>/dev/null && echo "dnf" || echo "yum")
|
||||||
PKG_INSTALL=(sudo "$rpm_mgr" install -y)
|
PKG_INSTALL=(sudo "$rpm_mgr" install --assumeyes)
|
||||||
PKG_REMOVE=(sudo "$rpm_mgr" remove -y)
|
PKG_REMOVE=(sudo "$rpm_mgr" remove --assumeyes)
|
||||||
PKG_UPDATE=(sudo "$rpm_mgr" makecache)
|
PKG_UPDATE=(sudo "$rpm_mgr" makecache --assumeyes)
|
||||||
PKG_QUERY=(rpm -q)
|
PKG_QUERY=(rpm -q)
|
||||||
PKG_INSTALL_LOCAL() { install_mc_rpm; }
|
PKG_INSTALL_LOCAL() { install_mc_rpm; }
|
||||||
;;
|
;;
|
||||||
debian|ubuntu)
|
debian|ubuntu)
|
||||||
PKG_INSTALL=(sudo apt-get -f install --install-recommends -y -q0)
|
PKG_INSTALL=(sudo apt-get install --fix-broken --install-recommends --assume-yes)
|
||||||
PKG_REMOVE=(sudo apt-get remove --auto-remove -y -q0)
|
PKG_REMOVE=(sudo apt-get remove --auto-remove --assume-yes)
|
||||||
PKG_UPDATE=(sudo apt-get update -y -q0)
|
PKG_UPDATE=(sudo apt-get update --assume-yes)
|
||||||
PKG_QUERY=(dpkg -s)
|
PKG_QUERY=(dpkg -s)
|
||||||
PKG_INSTALL_LOCAL() { install_mc_deb "$@"; }
|
PKG_INSTALL_LOCAL() { install_mc_deb "$@"; }
|
||||||
;;
|
;;
|
||||||
suse)
|
suse)
|
||||||
PKG_INSTALL=(sudo zypper --gpg-auto-import-keys --non-interactive --quiet install --force --force-resolution --replacefiles --no-confirm)
|
PKG_INSTALL=(sudo zypper --gpg-auto-import-keys --non-interactive install --force --force-resolution --replacefiles --no-confirm)
|
||||||
PKG_REMOVE=(sudo zypper --non-interactive --quiet remove --clean-deps)
|
PKG_REMOVE=(sudo zypper --non-interactive remove --clean-deps)
|
||||||
PKG_UPDATE=(sudo zypper --non-interactive --quiet refresh jriver)
|
PKG_UPDATE=(sudo zypper --non-interactive refresh jriver)
|
||||||
PKG_QUERY=(rpm -q)
|
PKG_QUERY=(rpm --query)
|
||||||
PKG_INSTALL_LOCAL() { install_mc_rpm; }
|
PKG_INSTALL_LOCAL() { install_mc_rpm; }
|
||||||
;;
|
;;
|
||||||
arch)
|
arch)
|
||||||
PKG_INSTALL=(sudo pacman -Sy --noconfirm)
|
PKG_INSTALL=(sudo pacman --sync --refresh --noconfirm)
|
||||||
PKG_REMOVE=(sudo pacman -Rs --noconfirm)
|
PKG_REMOVE=(sudo pacman --remove --recursive --noconfirm)
|
||||||
PKG_UPDATE=(sudo pacman -Syy)
|
PKG_UPDATE=(sudo pacman --sync --refresh --refresh)
|
||||||
PKG_QUERY=(sudo pacman -Qs)
|
PKG_QUERY=(sudo pacman --query --search)
|
||||||
PKG_INSTALL_LOCAL() { install_mc_arch; }
|
PKG_INSTALL_LOCAL() { install_mc_arch; }
|
||||||
;;
|
;;
|
||||||
unknown)
|
unknown)
|
||||||
@@ -434,8 +440,8 @@ set_mc_version() {
|
|||||||
# Determine latest version
|
# Determine latest version
|
||||||
# Containerized package manager
|
# Containerized package manager
|
||||||
if create_mc_apt_container &&
|
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) &&
|
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) &&
|
||||||
execute sudo buildah rm "$CNT" &&
|
buildah rm "$CNT" &>/dev/null &&
|
||||||
[[ $MC_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
[[ $MC_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
MC_VERSION_SOURCE="containerized package manager"
|
MC_VERSION_SOURCE="containerized package manager"
|
||||||
# Fallback to webscrape
|
# Fallback to webscrape
|
||||||
@@ -531,6 +537,8 @@ install_package() {
|
|||||||
((no_gpg_check)) && install_flags+=(--allow-unsigned-rpm) ;;
|
((no_gpg_check)) && install_flags+=(--allow-unsigned-rpm) ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
((silent)) && install_flags+=(--quiet)
|
||||||
|
|
||||||
# Install packages
|
# Install packages
|
||||||
if [[ ${#pkg_array[@]} -gt 0 ]]; then
|
if [[ ${#pkg_array[@]} -gt 0 ]]; then
|
||||||
if ! execute "${pkg_install[@]}" "${install_flags[@]}" "${pkg_array[@]}"; then
|
if ! execute "${pkg_install[@]}" "${install_flags[@]}" "${pkg_array[@]}"; then
|
||||||
@@ -734,7 +742,7 @@ install_mc_repo() {
|
|||||||
acquire_deb() {
|
acquire_deb() {
|
||||||
debug "${FUNCNAME[0]}()"
|
debug "${FUNCNAME[0]}()"
|
||||||
declare -g MC_DEB MC_SOURCE
|
declare -g MC_DEB MC_SOURCE
|
||||||
local fname mnt
|
local fname
|
||||||
|
|
||||||
[[ -d $OUTPUT_DIR/SOURCES ]] || execute mkdir -p "$OUTPUT_DIR/SOURCES"
|
[[ -d $OUTPUT_DIR/SOURCES ]] || execute mkdir -p "$OUTPUT_DIR/SOURCES"
|
||||||
|
|
||||||
@@ -749,10 +757,10 @@ acquire_deb() {
|
|||||||
MC_DEB="$OUTPUT_DIR/SOURCES/$fname"
|
MC_DEB="$OUTPUT_DIR/SOURCES/$fname"
|
||||||
MC_SOURCE="https://files.jriver-cdn.com/mediacenter/channels/v$MC_MVERSION/latest/$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 [[ -f $MC_DEB ]]; then
|
||||||
if [[ $(stat -c%s "$MC_DEB") -lt 10000000 ]]; then
|
if [[ $(stat -c%s "$MC_DEB") -lt 30000000 ]]; then
|
||||||
echo "Removing existing DEB under 10MB: $MC_DEB"
|
echo "Removing existing DEB under 30MB: $MC_DEB"
|
||||||
execute rm -f "$MC_DEB"
|
execute rm -f "$MC_DEB"
|
||||||
else
|
else
|
||||||
echo "Using existing DEB: $MC_DEB"
|
echo "Using existing DEB: $MC_DEB"
|
||||||
@@ -761,12 +769,18 @@ acquire_deb() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Download the deb file using the containerized package manager
|
# Download the deb file using the containerized package manager
|
||||||
if ! { create_mc_apt_container "apt-get download --allow-unauthenticated mediacenter$MC_MVERSION &>/dev/null" &&
|
# shellcheck disable=SC2016
|
||||||
mnt="$(sudo buildah mount "$CNT")" &&
|
if ! {
|
||||||
execute sudo find "$mnt" -maxdepth 1 -type f -name "*.deb" -exec cp {} "$MC_DEB" \; &&
|
# 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 ]] &&
|
[[ -f $MC_DEB ]] &&
|
||||||
execute sudo buildah umount "$CNT" &&
|
buildah rm "$CNT" &>/dev/null;
|
||||||
execute sudo buildah rm "$CNT"; }; then
|
}; then
|
||||||
debug "Failed to download DEB using containerized package manager"
|
debug "Failed to download DEB using containerized package manager"
|
||||||
echo "Using legacy download method"
|
echo "Using legacy download method"
|
||||||
# Define the repository search order
|
# Define the repository search order
|
||||||
@@ -934,8 +948,7 @@ translate_packages() {
|
|||||||
recommends_arr=('mesa-libgl' 'nvidia-libgl' 'nvidia-utils' 'vulkan-intel'
|
recommends_arr=('mesa-libgl' 'nvidia-libgl' 'nvidia-utils' 'vulkan-intel'
|
||||||
'vulkan-radeon' 'vorbis-tools' 'musepack-tools')
|
'vulkan-radeon' 'vorbis-tools' 'musepack-tools')
|
||||||
;;
|
;;
|
||||||
*)
|
*) echo "Skipping package translations for $ID" ;;
|
||||||
echo "Skipping package translations for $ID"
|
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1037,6 +1050,8 @@ build_rpm() {
|
|||||||
-bb
|
-bb
|
||||||
"$spec_file"
|
"$spec_file"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Run rpmbuild and verify output RPM exists
|
||||||
execute "${rpmbuild_cmd[@]}" && [[ -f $MC_RPM ]]
|
execute "${rpmbuild_cmd[@]}" && [[ -f $MC_RPM ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1982,14 +1997,14 @@ download() {
|
|||||||
local url="$1"
|
local url="$1"
|
||||||
local output="${2:-}"
|
local output="${2:-}"
|
||||||
local -a cmd
|
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)
|
cmd=(curl --silent --fail --location)
|
||||||
if [[ -n "$output" ]]; then
|
if [[ -n "$output" ]]; then
|
||||||
cmd+=(--output "$output")
|
cmd+=(--output "$output")
|
||||||
else
|
else
|
||||||
cmd+=(--remote-name)
|
cmd+=(--remote-name)
|
||||||
fi
|
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)
|
cmd=(wget --quiet)
|
||||||
[[ -n "$output" ]] && cmd+=("--output-document=$output")
|
[[ -n "$output" ]] && cmd+=("--output-document=$output")
|
||||||
else
|
else
|
||||||
@@ -2003,23 +2018,24 @@ create_mc_apt_container() {
|
|||||||
debug "${FUNCNAME[0]}()" "$@"
|
debug "${FUNCNAME[0]}()" "$@"
|
||||||
declare -g CNT
|
declare -g CNT
|
||||||
local -a cmds=("$@")
|
local -a cmds=("$@")
|
||||||
{ command -v buildah &>/dev/null || install_package buildah &>/dev/null; } &&
|
# shellcheck disable=SC2016
|
||||||
CNT=$(sudo buildah from --quiet alpine:edge) &&
|
{ command -v buildah &>/dev/null || install_package buildah; } &&
|
||||||
sudo buildah run "$CNT" -- sh -c '
|
CNT=$(buildah from --quiet alpine:edge) &&
|
||||||
apk add --no-cache apt curl gnupg &>/dev/null
|
buildah run --env MC_REPO="$MC_REPO" --env MC_ARCH="$MC_ARCH" "$CNT" -- sh -c '
|
||||||
curl -fsSL https://dist.jriver.com/mediacenter@jriver.com.gpg.key | gpg --dearmor -o /usr/share/keyrings/jriver-com-archive-keyring.gpg &>/dev/null
|
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
|
cat <<-EOF > /etc/apt/sources.list.d/jriver.sources
|
||||||
Types: deb
|
Types: deb
|
||||||
URIs: https://dist.jriver.com/latest/mediacenter/
|
URIs: https://dist.jriver.com/latest/mediacenter/
|
||||||
Signed-By: /usr/share/keyrings/jriver-com-archive-keyring.gpg
|
Signed-By: /usr/share/keyrings/jriver-com-archive-keyring.gpg
|
||||||
Suites: '"$MC_REPO"'
|
Suites: $MC_REPO
|
||||||
Components: main
|
Components: main
|
||||||
Architectures: '"$MC_ARCH"'
|
Architectures: $MC_ARCH
|
||||||
EOF
|
EOF
|
||||||
apt-get update &>/dev/null' &&
|
apt-get update -qq' &&
|
||||||
# If user passes command strings run them in the container
|
# If user passes command strings run them in the container
|
||||||
for cmd in "${cmds[@]}"; do
|
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
|
done
|
||||||
}
|
}
|
||||||
add_temp_repo() {
|
add_temp_repo() {
|
||||||
|
|||||||
Reference in New Issue
Block a user