New RPM package naming convention

This commit is contained in:
2022-06-08 10:48:09 -04:00
parent 5da37a0bc3
commit 59a876afe6

View File

@@ -1,12 +1,11 @@
#!/usr/bin/env bash
# This script will install JRiver Media Center and associated services on most major distros
# Install JRiver Media Center and associated services
# See installJRMC --help or printHelp() below
#
# Copyright (c) 2021-2022 Bryan C. Roessler
# This software is released under the Apache License.
# https://www.apache.org/licenses/LICENSE-2.0
#
# See installJRMC --help or printHelp() below
#
# TODO (v2)
# 1. Raspberry Pi OS support
# 2. Interactive installation (ncurses?)
@@ -18,7 +17,7 @@
shopt -s extglob
declare -g SCRIPTVERSION="1.0b16"
declare -g SCRIPTVERSION="1.0b17"
declare -g OUTPUTDIR="$PWD/output"
declare -g CREATEREPO_WEBROOT="/var/www/jriver"
declare -g USER="${SUDO_USER:-$USER}"
@@ -27,7 +26,7 @@ declare -g HOME; HOME=$(getent passwd "$USER" | cut -d: -f6)
printHelp() {
debug "Running: ${FUNCNAME[0]}"
cat <<- 'EOF'
cat <<-'EOF'
USAGE:
installJRMC [[OPTION] [VALUE]]...
@@ -43,7 +42,7 @@ printHelp() {
--compat
Build/install MC locally without minimum library specifiers
--mcversion VERSION
Specify the MC version, ex. "29.0.18" (Default: latest)
Specify the MC version, ex. "29.0.58" (Default: latest)
--outputdir PATH
Generate rpmbuild output in this directory (Default: ./output)
--restorefile RESTOREFILE
@@ -115,10 +114,10 @@ askOk() {
parseInput() {
debug "Running: ${FUNCNAME[0]}"
declare -g BUILD_SWITCH REPO_INSTALL_SWITCH COMPAT_SWITCH LOCAL_INSTALL_SWITCH CREATEREPO_SWITCH UNINSTALL_SWITCH
declare -g BUILD_SWITCH REPO_INSTALL_SWITCH COMPAT_SWITCH LOCAL_INSTALL_SWITCH CREATEREPO_SWITCH UNINSTALL_SWITCH TEST_SWITCH
declare -g OUTPUTDIR RESTOREFILE BETAPASS SERVICE_TYPE VNCPASS USER_DISPLAY CREATEREPO_WEBROOT
declare -ga SERVICES CONTAINERS
declare long_opts short_opts
declare long_opts short_opts input
# Allow some environment variables to override and set sane fallbacks
declare -g TARGET=${TARGET:-$ID}
@@ -136,8 +135,8 @@ parseInput() {
long_opts+="createrepo-webroot:,createrepo-user:,vncpass:,display:,container:,tests,compat"
short_opts="+i:vb::dhus:c:"
if _input=$(getopt -o $short_opts -l $long_opts -- "$@"); then
eval set -- "$_input"
if input=$(getopt -o $short_opts -l $long_opts -- "$@"); then
eval set -- "$input"
while true; do
case "$1" in
--install|-i)
@@ -202,19 +201,17 @@ parseInput() {
exit 0
;;
--debug|-d)
echo "Debugging on"
echo "installJRMC version: $SCRIPTVERSION"
DEBUG=1
;;
--help|-h)
printHelp && exit $?
printHelp
exit
;;
--uninstall|-u)
UNINSTALL_SWITCH=1
;;
--tests)
echo "Running tests, all other options are skipped"
tests
TEST_SWITCH=1
;;
--)
shift
@@ -227,8 +224,68 @@ parseInput() {
err "Incorrect options provided"
printHelp && exit 1
fi
}
(( DEBUG )) || echo "Use --debug for verbose output"
#######################################
# Perform OS detection and apply compatability overrides
#######################################
getOS() {
debug "Running: ${FUNCNAME[0]}"
declare -g ID RPM_MGR
if [[ -e "/etc/os-release" ]]; then
source "/etc/os-release"
else
err "/etc/os-release not found"
err "Your OS is unsupported"
printHelp
exit 1
fi
debug "Detected host platform: $ID $VERSION_ID"
# normalize ID
case "$ID" in
arch|debian)
;;
centos|fedora)
if hash dnf &>/dev/null; then
RPM_MGR="dnf"
elif hash yum &>/dev/null; then
RPM_MGR="yum"
fi
;;
rhel)
ID="centos"
;;
linuxmint|neon|*ubuntu*)
ID="ubuntu"
;;
*suse*)
ID="suse"
;;
*)
echo "Autodetecting distro, this may be unreliable and --compat may also be required"
if hash dnf &>/dev/null; then
ID="fedora"
RPM_MGR="dnf"
elif hash yum &>/dev/null; then
ID="centos"
RPM_MGR="yum"
COMPAT_SWITCH=1
elif hash apt &>/dev/null; then
ID="ubuntu"
elif hash pacman &>/dev/null; then
ID="arch"
else
err "OS detection failed!"
exit 1
fi
esac
debug "Using host platform: $ID $VERSION_ID"
}
@@ -239,9 +296,8 @@ parseInput() {
getVersion() {
debug "Running: ${FUNCNAME[0]}"
declare -g MCVERSION VERSION_SOURCE MVERSION MCPKG BASE="buster" # For container method
#declare -g BASE_NEXT="bullseye" # TODO possibly use for fallback to smooth upgrades
declare boardurl="https://yabb.jriver.com/interact/index.php/board,74.0.html" # MC28 (Buster), for fallback webscrape
declare -g MCVERSION VERSION_SOURCE MVERSION MCPKG MCRPM BASE="buster" #BASE_NEXT="bullseye"
declare boardurl="https://yabb.jriver.com/interact/index.php/board,74.0.html" # MC29 (Buster)
# User input
if [[ -v MCVERSION && "$MCVERSION" =~ ([0-9]+.[0-9]+.[0-9]+) ]]; then
@@ -263,16 +319,24 @@ getVersion() {
VERSION_SOURCE="webscrape"
# Hardcoded
else
MCVERSION="29.0.18"
MCVERSION="29.0.58"
VERSION_SOURCE="hardcoded version"
err "Warning! Using hardcoded version number"
fi
echo "Using MC version $MCVERSION determined by $VERSION_SOURCE"
[[ "$VERSION_SOURCE" != "user input" ]] && echo "To override, use --mcversion"
# Extract major version number
MVERSION="${MCVERSION%%.*}"
MCPKG="mediacenter$MVERSION"
MCRPM="$OUTPUTDIR/RPMS/x86_64/mediacenter$MVERSION-$MCVERSION.x86_64.rpm"
if [[ "$VERSION_SOURCE" == "user input" ]]; then
# Append explicit package version when user provides --mcversion
[[ "$ID" =~ ^(fedora|centos|suse)$ ]] && MCPKG+="-$MCVERSION"
[[ "$ID" =~ ^(debian|ubuntu)$ ]] && MCPKG+="=$MCVERSION"
else
echo "To override, use --mcversion"
fi
echo "Using MC version $MCVERSION determined by $VERSION_SOURCE"
debug "MVERSION: $MVERSION, MCVERSION: $MCVERSION, MCPKG: $MCPKG, MCRPM: $MCRPM"
}
@@ -358,72 +422,59 @@ installPackage() {
#######################################
# Adds the JRiver repository files
# Installs JRiver Media Center from a remote repository
#######################################
addRepo() {
installMCFromRepo() {
debug "Running: ${FUNCNAME[0]}"
if [[ "$ID" == "suse" ]]; then
echo "A SUSE repository is not yet available"
echo "Use --install local to locally install a SUSE RPM"
exit 1
fi
declare repo_dir
echo "Adding JRiver repository to package manager"
if [[ "$ID" =~ ^(fedora|centos)$ ]]; then
declare sources_dir="/etc/yum.repos.d/"
sudo bash -c "cat <<- EOF > $sources_dir/jriver.repo
case "$ID" in
fedora|centos)
repo_dir="/etc/yum.repos.d/"
sudo bash -c "cat <<-EOF > $repo_dir/jriver.repo
[jriver]
name=JRiver Media Center repo by BryanC
baseurl=https://repos.bryanroessler.com/jriver
gpgcheck=0
EOF"
elif [[ "$ID" =~ ^(debian|ubuntu)$ ]]; then
declare sources_dir="/etc/apt/sources.list.d"
[[ ! -d $sources_dir ]] && sudo mkdir -p "$sources_dir"
sudo rm -rf "$sources_dir"/mediacenter*.list
;;
debian|ubuntu)
repo_dir="/etc/apt/sources.list.d"
[[ ! -d $repo_dir ]] && sudo mkdir -p "$repo_dir"
sudo rm -rf "$repo_dir"/mediacenter*.list
installPackage wget
sudo bash -c "cat <<- EOF > $sources_dir/jriver.list
sudo bash -c "cat <<-EOF > $repo_dir/jriver.list
deb [trusted=yes arch=amd64,i386,armhf,arm64] http://dist.jriver.com/latest/mediacenter/ $BASE main
EOF"
#wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | sudo apt-key add - &>/dev/null
wget -qO- "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" | sudo tee /etc/apt/trusted.gpg.d/jriver.asc
elif [[ "$ID" == "suse" ]]; then
sudo zypper addrepo --no-gpgcheck "https://repos.bryanroessler.com/jriver" jriver &>/dev/null
elif [[ "$ID" == "arch" ]]; then
sudo bash -c "cat <<- EOF >
EOF"
fi
}
#######################################
# Installs JRiver Media Center from a repository
#######################################
installMCFromRepo() {
debug "Running: ${FUNCNAME[0]}"
addRepo
;;
*)
err "An MC repository for $ID is not yet available."
err "Try using --install local to install MC on $ID."
return 1
;;
esac
# Update package list
pkg_update_cmd="pkg_update"
declare pkg_update_cmd="pkg_update"
debug "$pkg_update_cmd" || pkg_update_cmd+=" &>/dev/null"
if ! eval "$pkg_update_cmd"; then
err "Package update failed!"
exit 1
return 1
fi
echo "Installing JRiver Media Center using package manager"
pkg_install_cmd="installPackage --skip-check-installed --nogpgcheck $MCPKG"
declare pkg_install_cmd="installPackage --skip-check-installed --nogpgcheck $MCPKG"
debug "$pkg_install_cmd" || pkg_install_cmd+=" &>/dev/null"
eval "$pkg_install_cmd"
if ! eval "$pkg_install_cmd"; then
err "Package install failed!"
return 1
fi
}
#######################################
# Acquires the source DEB package from JRiver's servers
# Acquires the source DEB package from JRiver
#######################################
acquireDeb() {
debug "Running: ${FUNCNAME[0]}"
@@ -435,7 +486,7 @@ acquireDeb() {
# If deb file already exists, skip download
if [[ -f "$MCDEB" ]]; then
echo "Using local source DEB: $MCDEB"
echo "Using existing DEB: $MCDEB"
return 0
fi
@@ -465,36 +516,6 @@ acquireDeb() {
}
#######################################
# Installs Media Center DEB package and optional compatability fixes
#######################################
installMCDEB() {
debug "Running: ${FUNCNAME[0]}"
declare pkg_install_cmd="installPackage --skip-check-installed --nogpgcheck"
if (( COMPAT_SWITCH )); then
declare extract_dir && extract_dir="$(mktemp -d)"
pushd "$extract_dir" &>/dev/null || return
ar x "$MCDEB"
tar -xJf "control.tar.xz"
# Remove minimum version specifiers from control file
sed -i 's/ ([^)]*)//g' "control"
sed -i 's/([^)]*)//g' "control" # TODO MC DEB package error
[[ "$ID" == "ubuntu" && "${VERSION_ID%.*}" -le 16 ]] &&
sed -i 's/libva2/libva1/g' "control"
tar -cJf "control.tar.xz" "control" "postinst"
declare -g MCDEB="${MCDEB/.deb/.compat.deb}"
ar rcs "$MCDEB" "debian-binary" "control.tar.xz" "data.tar.xz"
popd &>/dev/null || return
rm -rf "$extract_dir"
pkg_install_cmd+=" --allow-downgrades"
fi
pkg_install_cmd+=" $MCDEB"
debug "$pkg_install_cmd" || pkg_install_cmd+=" &>/dev/null"
eval "$pkg_install_cmd"
}
#######################################
# Creates a SPEC file and builds the RPM from the source DEB using rpmbuild
#######################################
@@ -503,7 +524,6 @@ buildRPM() {
declare i rpmbuild_cmd
declare -a requires recommends
declare -A dupes
# skip rebuilding the rpm if it already exists
if [[ -f "$MCRPM" ]]; then
@@ -589,15 +609,6 @@ buildRPM() {
;;
esac
# Remove duplicates
for i in "${requires[@]}"; do
if [[ ! -v dupes[${i%% *}] ]]; then
tmp+=("$i")
fi
dupes["${i%% *}"]=1
done
requires=("${tmp[@]}")
# Convert array to newline delim'd string (for heredoc)
printf -v requires "Requires: %s\n" "${requires[@]}"
printf -v recommends "Recommends: %s\n" "${recommends[@]}"
@@ -611,8 +622,8 @@ buildRPM() {
fi
# Create spec file
cat <<- EOF > "$OUTPUTDIR/SPECS/mediacenter.spec"
Name: MediaCenter
cat <<-EOF > "$OUTPUTDIR/SPECS/mediacenter.spec"
Name: mediacenter$MVERSION
Version: $MCVERSION
Release: 1
Summary: JRiver Media Center
@@ -626,6 +637,8 @@ buildRPM() {
$requires
$recommends
Conflicts: MediaCenter
Provides: mediacenter$MVERSION
License: Copyright 1998-2022, JRiver, Inc. All rights reserved. Protected by U.S. patents #7076468 and #7062468
@@ -656,7 +669,8 @@ buildRPM() {
EOF
# Run rpmbuild
echo "Building RPM for MC $MCVERSION, this may take awhile"
echo "Building MC $MCVERSION RPM, this may take awhile"
(( DEBUG )) || echo "Use --debug for verbose output"
rpmbuild_cmd="rpmbuild --define=\"%_topdir $OUTPUTDIR\" --define=\"%_libdir /usr/lib\" -bb"
rpmbuild_cmd+=" $OUTPUTDIR/SPECS/mediacenter.spec"
debug "$rpmbuild_cmd" || rpmbuild_cmd+=" &>/dev/null"
@@ -672,9 +686,52 @@ buildRPM() {
}
installMCArch() {
#######################################
# Installs local Media Center DEB package and optional compatability fixes
#######################################
installMCDEB() {
debug "Running: ${FUNCNAME[0]}"
declare pkg_install_cmd="installPackage --skip-check-installed --nogpgcheck"
if (( COMPAT_SWITCH )); then
declare extract_dir && extract_dir="$(mktemp -d)"
pushd "$extract_dir" &>/dev/null || return
ar x "$MCDEB"
tar -xJf "control.tar.xz"
# Remove minimum version specifiers from control file
sed -i 's/ ([^)]*)//g' "control"
sed -i 's/([^)]*)//g' "control" # TODO MC DEB package error
[[ "$ID" == "ubuntu" && "${VERSION_ID%.*}" -le 16 ]] &&
sed -i 's/libva2/libva1/g' "control"
tar -cJf "control.tar.xz" "control" "postinst"
declare -g MCDEB="${MCDEB/.deb/.compat.deb}"
ar rcs "$MCDEB" "debian-binary" "control.tar.xz" "data.tar.xz"
popd &>/dev/null || return
rm -rf "$extract_dir"
pkg_install_cmd+=" --allow-downgrades"
fi
pkg_install_cmd+=" $MCDEB"
debug "$pkg_install_cmd" || pkg_install_cmd+=" &>/dev/null"
eval "$pkg_install_cmd"
}
#######################################
# Installs local Media Center RPM package
#######################################
installMCRPM() {
debug "Running: ${FUNCNAME[0]}"
installPackage --skip-check-installed --nogpgcheck "$MCRPM"
}
#######################################
# Installs local Media Center PKGBUILD
#######################################
installMCARCH() {
debug "Running: ${FUNCNAME[0]}"
echo "Arch install under construction"
}
@@ -731,8 +788,6 @@ runCreaterepo() {
return 1
fi
fi
echo "Successfully updated repo"
}
@@ -801,20 +856,21 @@ openFirewall() {
# Create OS-specific port rules based on argument (service) name
declare -a f_ports # for firewall-cmd
declare u_ports # for ufw
declare -a n_ports # for nftables
#declare -a n_ports # for nftables
declare port
if [[ "$1" == "jriver-mediacenter" ]]; then
f_ports=(52100-52200/tcp 1900/udp)
u_ports="52100:52200/tcp|1900/udp"
n_ports=("tcp dport 52100-52200 accept" "udp dport 1900 accept")
#n_ports=("tcp dport 52100-52200 accept" "udp dport 1900 accept")
elif [[ "$1" =~ ^(jriver-x11vnc|jriver-xvnc)$ ]]; then
f_ports=("$PORT"/tcp 1900/udp)
u_ports="$PORT/tcp|1900/udp"
n_ports=("tcp dport $PORT accept" "udp dport 1900 accept")
#n_ports=("tcp dport $PORT accept" "udp dport 1900 accept")
fi
# Open the ports
if [[ "$ID" =~ ^(fedora|centos|suse)$ ]]; then
if ! case "$ID" in
fedora|centos|suse)
hash firewall-cmd 2>/dev/null || installPackage firewalld
if ! firewall_cmd --get-services | grep -q "$1"; then
firewall_cmd --permanent --new-service="$1" &>/dev/null
@@ -826,11 +882,12 @@ openFirewall() {
firewall_cmd --add-service "$1" --permanent &>/dev/null
firewall_cmd --reload &>/dev/null
fi
elif [[ "$ID" =~ ^(debian|ubuntu)$ ]]; then
;;
debian|ubuntu)
# Debian ufw package state is broken on fresh installations
hash ufw 2>/dev/null || installPackage ufw
if [[ ! -f "/etc/ufw/applications.d/$1" ]]; then
sudo bash -c "cat <<- EOF > /etc/ufw/applications.d/$1
sudo bash -c "cat <<-EOF > /etc/ufw/applications.d/$1
[$1]
title=$1
description=$1 installed by installJRMC
@@ -839,17 +896,16 @@ openFirewall() {
fi
firewall_cmd app update "$1" &>/dev/null
firewall_cmd allow "$1" &>/dev/null
elif [[ "$ID" == "arch" ]]; then
sysctl -w net.ipv4.ip_forward = 1
sudo nft create table inet "jriver"
sudo nft create chain inet "jriver" "$1" '{ type filter hook input priority 0; policy accept; }'
for port in "${n_ports[@]}"; do
sudo nft add rule inet jriver "$1" handle tcp dport "$port"
done
fi
# shellcheck disable=SC2181 # More concise
if [[ $? -ne 0 ]]; then
;;
arch)
# sysctl -w net.ipv4.ip_forward = 1
# sudo nft create table inet "jriver"
# sudo nft create chain inet "jriver" "$1" '{ type filter hook input priority 0; policy accept; }'
# for port in "${n_ports[@]}"; do
# sudo nft add rule inet jriver "$1" handle tcp dport "$port"
# done
;;
esac; then
err "Firewall ports could not be opened"
return 1
fi
@@ -974,7 +1030,7 @@ service_jriver-mediacenter() {
setServiceVars "${FUNCNAME[0]##*_}"
sudo bash -c "cat <<- EOF > $SERVICE_FNAME
sudo bash -c "cat <<-EOF > $SERVICE_FNAME
[Unit]
Description=JRiver Media Center $MVERSION
After=$GRAPHICAL_TARGET
@@ -1033,7 +1089,7 @@ service_jriver-xvnc() {
start_cmd="/usr/bin/vncserver $NEXT_DISPLAY -geometry 1440x900 -alwaysshared -rfbauth $HOME/.vnc/jrmc_passwd -autokill -xstartup /usr/bin/mediacenter$MVERSION"
fi
sudo bash -c "cat <<- EOF > $SERVICE_FNAME
sudo bash -c "cat <<-EOF > $SERVICE_FNAME
[Unit]
Description=Remote desktop service (VNC)
After=multi-user.target
@@ -1306,7 +1362,7 @@ service_jriver-createrepo() {
# brc add-pkg --virtual .build-deps wget
# brc sh -s <<- EOF
# brc sh -s <<-EOF
# wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | apt-key add - &>/dev/null
# EOF
@@ -1319,70 +1375,6 @@ service_jriver-createrepo() {
# brc del-pkg .build-deps
# }
#######################################
# Perform OS detection and use compatability modes if necessary
#######################################
getOS() {
debug "Running: ${FUNCNAME[0]}"
declare -g ID MGR
if [[ -e "/etc/os-release" ]]; then
source "/etc/os-release"
else
err "/etc/os-release not found"
err "Your OS is unsupported"
printHelp && exit 1
fi
debug "Detected host platform: $ID $VERSION_ID"
# normalize ID
case "$ID" in
fedora|arch|debian|centos)
;;
rhel)
ID="centos"
;;
linuxmint|neon|*ubuntu*)
ID="ubuntu"
;;
*suse*)
ID="suse"
;;
*)
echo "Autodetecting distro, this may be unreliable and --compat may also be required"
if hash dnf &>/dev/null; then
ID="fedora"
MGR="dnf"
elif hash yum &>/dev/null; then
ID="centos"
MGR="yum"
COMPAT_SWITCH=1
elif hash apt &>/dev/null; then
ID="ubuntu"
elif hash pacman &>/dev/null; then
ID="arch"
else
err "OS detection failed!"
exit 1
fi
esac
# Set package manager for RPM distros
case "$ID" in
centos|fedora)
if hash dnf &>/dev/null; then
MGR="dnf"
elif hash yum &>/dev/null; then
MGR="yum"
fi
;;
esac
debug "Using host platform: $ID $VERSION_ID"
}
#######################################
# Detects if MC is installed on btrfs and disables CoW
@@ -1432,11 +1424,6 @@ uninstall() {
declare service unit f i
if ! askOk "Do you really want to uninstall JRiver Media Center"; then
echo "Uninstall canceled"
exit 0
fi
echo "Stopping and removing all Media Center services"
for service in $(compgen -A "function" "service"); do
service="${service##service_}"
@@ -1487,8 +1474,8 @@ uninstall() {
eval "$firewall_cmd"
[[ -f "/etc/ufw/applications.d/jriver" ]] &&
sudo rm -f /etc/ufw/applications.d/jriver
elif hash nft 2>/dev/null; then
sudo nft delete table inet jriver
# elif hash nft 2>/dev/null; then
# sudo nft delete table inet jriver
fi
echo "Uninstalling JRiver Media Center package"
@@ -1498,8 +1485,7 @@ uninstall() {
echo "JRiver Media Center has been completely uninstalled"
echo "To remove your library files, run: rm -rf $HOME/.jriver"
elif [[ $? -eq 100 ]]; then
err "JRiver Media Center package '$MCPKG' is not present"
err "and was not uninstalled"
err "JRiver Media Center package '$MCPKG' is not present and was not uninstalled"
else
err "Could not remove Media Center package"
fi
@@ -1517,65 +1503,84 @@ main() {
getOS
parseInput "$@"
if (( DEBUG )); then
echo "Debugging on"
echo "installJRMC version: $SCRIPTVERSION"
fi
# Distro-specific commands
if [[ "$ID" =~ ^(fedora|centos)$ ]]; then
pkg_install(){ sudo "$MGR" install -y "$@"; }
pkg_remove(){ sudo "$MGR" remove -y "$@"; }
pkg_update(){ sudo "$MGR" makecache; }
case "$ID" in
fedora|centos)
pkg_install(){ sudo "$RPM_MGR" install -y "$@"; }
pkg_install_local() { installMCRPM; }
pkg_remove(){ sudo "$RPM_MGR" remove -y "$@"; }
pkg_update(){ sudo "$RPM_MGR" makecache; }
pkg_query(){ rpm -q "$@"; }
firewall_cmd(){ sudo firewall-cmd "$@"; }
elif [[ "$ID" =~ ^(debian|ubuntu)$ ]]; then
;;
debian|ubuntu)
pkg_install(){ sudo apt-get install -y -q0 "$@"; }
pkg_install_local() { installMCDEB; }
pkg_remove(){ sudo apt-get remove --auto-remove -y -q0 "$@"; }
pkg_update(){ sudo apt-get update -y -q0; }
pkg_query(){ dpkg -s "$@"; }
firewall_cmd(){ sudo ufw "$@"; }
elif [[ "$ID" == "suse" ]]; then
;;
suse)
pkg_install(){ sudo zypper --non-interactive -q install --force --no-confirm "$@"; }
pkg_install_local() { installMCRPM; }
pkg_remove(){ sudo zypper --non-interactive -q remove --clean-deps "$@"; }
pkg_update(){ sudo zypper --non-interactive -q refresh jriver; }
pkg_query(){ rpm -q "$@"; }
firewall_cmd(){ sudo firewall-cmd "$@"; }
elif [[ "$ID" == "arch" ]]; then
;;
arch)
pkg_install(){ sudo pacman -Sy --noconfirm "$@"; }
pkg_install_local() { installMCARCH; }
pkg_remove(){ sudo pacman -Rs --noconfirm "$@"; }
pkg_update(){ sudo pacman -Syy ; }
pkg_query(){ sudo pacman -Qs "$@"; }
firewall_cmd(){ sudo nft -A INPUT "$@"; }
fi
#firewall_cmd(){ sudo nft -A INPUT "$@"; }
;;
esac
parseInput "$@"
getVersion
# Set target package name
if [[ "$ID" =~ ^(fedora|centos|suse)$ ]]; then
MCPKG="MediaCenter"
[[ "$VERSION_SOURCE" == "user input" ]] && MCPKG="$MCPKG-$MCVERSION"
elif [[ "$ID" =~ ^(debian|ubuntu)$ ]]; then
MCPKG="mediacenter$MVERSION"
[[ "$VERSION_SOURCE" == "user input" ]] && MCPKG="$MCPKG=$MCVERSION"
fi
declare -g MCRPM="$OUTPUTDIR/RPMS/x86_64/MediaCenter-$MCVERSION.x86_64.rpm"
if (( UNINSTALL_SWITCH )); then
uninstall
if ((TEST_SWITCH)); then
echo "Running tests, all other options are skipped"
tests
exit
fi
# Some distros need external repos installed for MC libraries
if [[ "$ID" == "ubuntu" ]]; then
getVersion
if (( UNINSTALL_SWITCH )); then
if askOk "Do you really want to uninstall JRiver Media Center?"; then
uninstall
else
echo "Uninstall canceled."
fi
exit
fi
# Install external repos, if required
case "$ID" in
ubuntu)
if ! grep ^deb /etc/apt/sources.list|grep -q universe; then
echo "Adding universe repository"
sudo add-apt-repository universe
fi
elif [[ "$ID" =~ ^(centos)$ ]] && ! hash dpkg &>/dev/null; then
;;
centos)
if ! hash dpkg &>/dev/null; then
echo "Adding EPEL repository"
installPackage epel-release
fi
;;
esac
if (( REPO_INSTALL_SWITCH )); then
echo "Installing JRiver Media Center from remote repository"
if installMCFromRepo; then
echo "JRiver Media Center installed successfully from repo"
symlinkCerts
@@ -1585,7 +1590,7 @@ main() {
disableCoW
else
err "JRiver Media Center installation from repo failed"
exit 1
return 1
fi
fi
@@ -1599,14 +1604,11 @@ main() {
fi
if (( LOCAL_INSTALL_SWITCH )); then
if ([[ "$TARGET" =~ (debian|ubuntu) ]] && installMCDEB) ||
([[ "$TARGET" =~ (fedora|centos|suse) ]] &&
installPackage --skip-check-installed --nogpgcheck "$MCRPM") ||
([[ "$TARGET" == "arch" ]] && installMCArch); then
if pkg_install_local; then
echo "JRiver Media Center installed successfully from local package"
else
err "JRiver Media Center local package installation failed"
exit 1
return 1
fi
symlinkCerts
migrateLibrary
@@ -1616,7 +1618,11 @@ main() {
fi
if (( CREATEREPO_SWITCH )); then
runCreaterepo
if runCreaterepo; then
echo "Successfully updated repo"
else
err "Repo creation failed"
fi
fi
if [[ "${#SERVICES[@]}" -gt 0 ]]; then
@@ -1643,7 +1649,5 @@ main() {
# done
}
# Quickly turn debugging on (catch for real with getopt in parseInput())
[[ " $* " =~ ( --debug | -d ) ]] && echo "First Debugging on!" && DEBUG=1
main "$@"