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 |
108
installJRMC
108
installJRMC
@@ -21,7 +21,7 @@
|
||||
# shellcheck disable=SC2329
|
||||
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_REPO_HARDCODE="bookworm" # should match the MC_VERSION_HARDCODE
|
||||
declare -g BOARD_ID="89.0" # MC34 board ID for automatic version detection
|
||||
@@ -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 ;;
|
||||
@@ -173,8 +173,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 +296,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 +347,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 +440,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
|
||||
@@ -531,6 +537,8 @@ install_package() {
|
||||
((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 +742,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 +757,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 +769,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" \; &&
|
||||
[[ -f $MC_DEB ]] &&
|
||||
execute sudo buildah umount "$CNT" &&
|
||||
execute sudo buildah rm "$CNT"; }; then
|
||||
# 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 ]] &&
|
||||
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 +948,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
|
||||
}
|
||||
|
||||
@@ -1037,6 +1050,8 @@ build_rpm() {
|
||||
-bb
|
||||
"$spec_file"
|
||||
)
|
||||
|
||||
# Run rpmbuild and verify output RPM exists
|
||||
execute "${rpmbuild_cmd[@]}" && [[ -f $MC_RPM ]]
|
||||
}
|
||||
|
||||
@@ -1982,14 +1997,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 +2018,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() {
|
||||
|
||||
Reference in New Issue
Block a user