installJRMC v0.1

This commit is contained in:
2020-04-01 18:14:19 -04:00
parent 36f326e581
commit 146d10c58a
5 changed files with 955 additions and 325 deletions

939
installJRMC Executable file
View File

@@ -0,0 +1,939 @@
#!/usr/bin/env bash
# This script will download, build, and install JRiver Media Center with optional systemd services
# on Fedora, CentOS, Debian, and Ubuntu
#
# To-dos:
# 1. Raspberry Pi support -- do not own one so difficult to test
# 2. Arch support -- would love some testing and PRs
# 3. ncurses graphical installer
shopt -s extglob
installJRMC () {
########################
####### DEFAULTS #######
########################
_scriptversion="0.1"
[[ -z "$_boardurl" ]] && \
_boardurl="https://yabb.jriver.com/interact/index.php/board,64.0.html"
[[ -z "$_outputdir" ]] && \
_outputdir="$_basedir/output"
[[ -z $_createrepo_webroot ]] && \
_createrepo_webroot="/var/www/jriver"
[[ -z $_createrepo_user ]] && \
_createrepo_user="www-user"
[[ -z $_user ]] && \
_user="$(whoami)"
[[ -z $_display ]] && \
_display="${DISPLAY:-":0"}"
########################
###### FUNCTIONS #######
########################
_printHelpAndExit () {
cat <<-'EOF'
USAGE:
installJRMC [[OPTION] [VALUE]]...
OPTIONS
--repo
Install JRiver MC repository using the OS package manager (recommended)
--build
Build the rpm, do nothing else
--buildpath PATH
Run rpmbuild in this directory (Default: the current working directory)
--mcversion VERSION
Build or install a specific version (Default: scrape the latest version from Interact)
--restorefile RESTOREFILE
Restore file location for registration (Default: skip registration)
--boardurl URL
Interact board url to scrape for latest version number (Default: see DEFAULTS)
--deburl URL
Specify URL to source DEB package (Default: automatic)
--betapass PASSWORD
Enter beta team password for access to beta builds
-v|--version
Print this script version and exit
-d|--debug
Enter debug mode
-h|--help
Print help dialog and exit
-u|--uninstall
Uninstall JRiver MC, cleanup service files, and remove firewall rules (does not remove
library files)
CREATEREPO
--createrepo
Build rpm, copy to webroot, and run createrepo
--createrepo-webroot PATH
The webroot directory to install the repo (Default: /var/www/html)
--createrepo-user USER
The web server user (Default: www-user)
See SERVICES for service-createrepo to automate createrepo
SERVICES
--service-mediaserver
Install JRiver MC mediaserver service
--service-x11vnc-mediaserver
Install JRiver MC mediaserver service and x11vnc (for headless installations without
an existing X server)
--vncpass PASSWORD
Set vnc password for x11vnc access. If no password is set, the script will either use
existing password stored in ~/.vnc/jrmc_passwd or use no password
--display DISPLAY
Start X11VNC on this display (Default: The current display or :0 if current display is
unaccessible)
--service-createrepo
Install service to build latest MC and run createrepo hourly
EOF
# Exit using passed exit code
[[ -z $1 ]] && exit 0 || exit "$1"
}
_parseInput () {
if _input=$(getopt -o +vdhu -l repo,build,outputdir:,mcversion:,restorefile:,boardurl:,deburl:,betapass:,version,debug,help,uninstall,createrepo,createrepo-webroot:,createrepo-user:,service-mediaserver,service-x11vnc-mediaserver,vncpass:,display:,service-createrepo -- "$@"); then
eval set -- "$_input"
while true; do
case "$1" in
--repo)
echo "Installing JRMC from repository"
_installrepo="true"
;;
--build)
echo "Using build only mode"
_buildonly="true"
;;
--outputdir)
shift && _outputdir="$1"
;;
--mcversion)
shift && _mcversion="$1"
;;
--restorefile)
shift && _restorefile="$1"
;;
--boardurl)
shift && _boardurl="$1"
;;
--deburl)
shift && _deburl="$1"
;;
--betapass)
shift && _betapass="$1"
;;
--version|-v)
echo "Version: $_scriptversion"
exit 0
;;
--debug|-d)
echo "Debugging on"
_debug="true"
;;
--help|-h)
_printHelpAndExit 0
;;
--uninstall|-u)
echo "Uninstalling..."
_uninstall="true"
;;
--createrepo)
_createrepo="true"
;;
--createrepo-webroot)
shift && _createrepo_webroot="$1"
;;
--createrepo-user)
shift && _createrepo_user="$1"
;;
--service-mediaserver)
_service_ms="true"
;;
--service-x11vnc-mediaserver)
_service_xms="true"
;;
--vncpass)
shift && _vncpass="$1"
;;
--display)
shift && _display="$1"
;;
--service-createrepo)
_service_createrepo="true"
;;
--)
shift
break
;;
esac
shift
done
else
echo "Incorrect options provided"
_print-help-and-exit 1
fi
}
_checkUser () {
if [[ "$_user" == "root" ]]; then
cat <<EOF
Warning! You are currently running installJRMC as the root user. This is not recommended! When
running as a regular user, installJRMC will ask you for your sudo password when necessary.
Installation will continue but any systemd services will be installed as system services and you
may run into permissions issues.
EOF
else
[[ -n $_debug ]] && echo "Installing as user: $_user"
fi
}
_getOS () {
if [[ -e /etc/os-release ]]; then
source /etc/os-release
else
echo "No /etc/os-release found!"
echo "Your OS is unsupported"
_printHelpAndExit 1
fi
}
_sanityChecks () {
if [[ -n $_service_ms && -n $_service_xms ]]; then
echo "--service-mediaserver is redundant when --service-x11vnc-mediaserver is set, unsetting..."
unset _service_ms
fi
if ! [[ "$ID" == "fedora" || "$ID" == "centos" ]] && \
[[ -z $_installrepo && -z $_buildonly && -z $_createrepo ]]; then
echo "You must specify --repo, --build, or --createrepo on non-RHEL distributions!"
_printHelpAndExit 1
fi
}
_buildCommands () {
# build some basic command arrays based on OS and user input
if [[ "$ID" == "fedora" || "$ID" == "centos" ]]; then
_install_cmd=("dnf" "install" "-y")
_update_cmd=("dnf" "update" "-y")
_pkg_query_cmd=("rpm" "-q")
elif [[ "$ID" == "ubuntu" || "$ID" == "debian" ]]; then
_install_cmd=("apt-get" "install" "-y")
_update_cmd=("apt-get" "update" "-y")
_pkg_query_cmd=("dpkg" "-l")
fi
_bash_cmd=("bash" "-c")
_install_cmd_nogpg=("${_install_cmd[@]}" "--nogpgcheck")
# append sudo to non-containers and non-root users
if [[ "$_user" != "root" ]]; then
_install_cmd=("sudo" "${_install_cmd[@]}")
_install_cmd_nogpg=("sudo" "${_install_cmd_nogpg[@]}")
_update_cmd=("sudo" "${_update_cmd[@]}")
_bash_cmd=("sudo" "${_bash_cmd[@]}")
#_pkg_query_cmd=("sudo" "${_pkg_query_cmd[@]}")
fi
[[ -n $_debug ]] && \
echo "Install command: " "${_install_cmd[@]}" && \
echo "Update command: " "${_update_cmd[@]}" && \
echo "Bash command: " "${_bash_cmd[@]}" && \
echo "Package query command: " "${_pkg_query_cmd[@]}"
}
_installPackage () {
# We will add packages to this array if their command is not available
local -a _pkg_array
# parse commands
for _pkg in "$@"; do
_pkg=$(_packageOverrides "$_pkg")
# Insert the package name to test if already installed one element from the end
# and silence output
if ! "${_pkg_query_cmd[@]}" "$_pkg" > /dev/null 2>&1; then
_pkg_array+=("$_pkg")
fi
done
if [[ ${#_pkg_array[@]} -ge 1 ]]; then
[[ -n $_debug ]] && echo "${_install_cmd[@]}" "${_pkg_array[@]}"
"${_install_cmd[@]}" "${_pkg_array[@]}"
fi
}
_packageOverrides () {
if [[ "$ID" == "ubuntu" || "$ID" == "debian" ]]; then
if [[ "$1" == "rpm-build" ]]; then
echo "rpm"
elif [[ "$1" == "createrepo_c" ]]; then
echo "createrepo"
else
echo "$1"
fi
else
echo "$1"
fi
}
_setVersion () {
if [[ -z "$_mcversion" ]]; then
_installPackage wget
# Get latest version from Interact
echo "Scraping MC version number from Interact..."
if ! _mcversion=$(wget -qO- "$_boardurl" | grep -o "[0-9][0-9]\.[0-9]\.[0-9]\+" | head -n 1); then
echo "MC version could not be scraped. Please specify a version manually using --mcversion or check your --boardurl"
fi
fi
if [[ "$_mcversion" =~ ^[0-9]+.[0-9].[0-9]+ ]]; then
echo "Using MC version: $_mcversion"
else
echo "MC version: $_mcversion could not be parsed!"
_printHelpAndExit 1
fi
# Extract major and variation version numbers
_mversion="${_mcversion%%.*}"
#_variation="${_mcversion##*.}"
}
_installExternalRepos () {
if [[ "$ID" == "fedora" ]]; then
if ! rpm --quiet --query rpmfusion-free-release; then
echo "Installing rpmfusion-free-release repo..."
"${_install_cmd_nogpg[@]}" "https://download1.rpmfusion.org/free/$ID/rpmfusion-free-release-$VERSION_ID.noarch.rpm"
fi
elif [[ "$ID" == "centos" ]]; then
if ! rpm --quiet --query epel-release; then
echo "Installing epel-release repo..."
"${_install_cmd_nogpg[@]}" epel-release
fi
if ! rpm --quiet --query rpmfusion-free-release; then
echo "Installing rpmfusion-free-release repo..."
"${_install_cmd_nogpg[@]}" "https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$VERSION_ID.noarch.rpm"
fi
fi
}
_installRepo () {
_installPackage wget gnupg
if [[ "$ID" == "fedora" || "$ID" == "centos" ]]; then
"${_bash_cmd[@]}" 'cat <<-EOF > /etc/yum.repos.d/jriver.repo
[jriver]
name=JRiver Media Center repo by BryanC
baseurl=https://repos.bryanroessler.com/jriver
gpgcheck=0
EOF'
[[ -n $_debug ]] && cat /etc/yum.repos.d/jriver.repo
if "${_update_cmd[@]}" && "${_install_cmd[@]}" MediaCenter; then
echo "JRiver Media Center installed successfully!"
echo "You can check for future MC updates by running \"sudo dnf update\""
else
echo "JRiver Media Center installation failed!"
_printHelpAndExit 1
fi
elif [[ "$ID" == "ubuntu" || "$ID" == "debian" ]]; then
if [[ $_user != "root" ]]; then
wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | sudo apt-key add -
sudo wget "http://dist.jriver.com/latest/mediacenter/mediacenter$_mversion.list" -O "/etc/apt/sources.list.d/jriver.list"
else
wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | apt-key add -
wget "http://dist.jriver.com/latest/mediacenter/mediacenter$_mversion.list" -O "/etc/apt/sources.list.d/jriver.list"
fi
[[ -n $_debug ]] && cat "/etc/apt/sources.list.d/jriver.list"
echo "Installing latest JRiver Media Center from repo..."
if "${_update_cmd[@]}" && "${_install_cmd[@]}" "mediacenter$_mversion"; then
echo "JRiver Media Center installed successfully!"
echo "You can check for future MC updates by running \"apt-get update && apt-get dist-upgrade\""
else
echo "JRiver Media Center installation failed!"
_printHelpAndExit 1
fi
fi
}
_acquireDeb () {
# If necessary, create SOURCES dir
[[ ! -d "$_outputdir/SOURCES" ]] && mkdir -p "$_outputdir/SOURCES"
# if $_deburl is set, try it first and overwrite local files
if [[ -n "$_deburl" ]]; then
if wget -q -O "$_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb" "$_deburl"; then
true
else
echo "Your --deburl is broken, trying automatic download instead"
fi
# If deb file already exists, skip download
elif [[ -f "$_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb" ]]; then
echo "Using local DEB file: $_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb"
# Else check beta repo
elif [[ -n $_betapass ]]; then
if wget -q -O "$_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb" \
"https://files.jriver.com/mediacenter/channels/v${_mversion}/beta/${_betapass}/MediaCenter-${_mcversion}-amd64.deb"; then
true
fi
# Else check test repo
elif wget -q -O "$_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb" \
"https://files.jriver.com/mediacenter/test/MediaCenter-${_mcversion}-amd64.deb"; then
true
# Else check latest repo
elif wget -q -O "$_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb" \
"https://files.jriver.com/mediacenter/channels/v${_mversion}/latest/MediaCenter-${_mcversion}-amd64.deb"; then
true
else
echo "Cannot find DEB file. Exiting..." && exit 1
fi
if [[ ! -f "$_outputdir/SOURCES/MediaCenter-${_mcversion}-amd64.deb" ]]; then
echo "Downloaded DEB file missing or corrupted, exiting..."
exit 1
fi
}
_buildRPM () {
# install build dependencies
_installPackage wget dpkg rpm-build
# If necessary, make build directories
[[ ! -d "$_outputdir/SPECS" ]] && mkdir -p "$_outputdir/SPECS"
# rpmbuild uses rpm to check for build dependencies
# this will fail on non-rpm distros
if [[ "$ID" == "fedora" || "$ID" == "centos" ]]; then
_build_requires=$'BuildRequires: rpm >= 4.11.0\nBuildRequires: dpkg'
else
_build_requires=''
fi
# Create spec file
bash -c "cat <<EOF > $_outputdir/SPECS/mediacenter.spec
Name: MediaCenter
Version: $_mcversion
Release: 1
Summary: JRiver Media Center
Group: Applications/Media
Source0: http://files.jriver.com/mediacenter/channels/v$_mversion/latest/MediaCenter-$_mcversion-amd64.deb
$_build_requires
BuildArch: x86_64
%define _rpmfilename %%{ARCH}/%%{NAME}-%%{version}.%%{ARCH}.rpm
AutoReq: 0
Requires: glibc >= 2.19
Requires: alsa-lib >= 1.0.28
Requires: libuuid >= 2.25
Requires: libX11 >= 1.6
Requires: libX11-common >= 1.6
Requires: libXext >= 1.3
Requires: libxcb >= 1.1
Requires: libXdmcp >= 1.1
Requires: libstdc++ >= 4.9
Requires: gtk3 >= 3.14
Requires: mesa-libGL
Requires: libglvnd-glx
Requires: pango >= 1.36
Requires: pangox-compat >= 0.0.2
Requires: xdg-utils
Requires: libgomp >= 4.9
Requires: gstreamer1 >= 1.4.4
Requires: gstreamer1-plugins-base >= 1.4.4
Requires: nss >= 3.26
Requires: nspr >= 4.12
Requires: ca-certificates
Requires: python >= 2.7
Recommends: vorbis-tools >= 1.4.0
Provides: mediacenter$_mversion
License: Copyright 1998-2020, JRiver, Inc. All rights reserved. Protected by U.S. patents #7076468 and #7062468
URL: http://www.jriver.com/
%description
Media Center is more than a world class player.
%global __os_install_post %{nil}
%prep
%build
%install
dpkg -x %{S:0} %{buildroot}
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%{_bindir}/mediacenter$_mversion
%{_libdir}/jriver
%{_datadir}
/etc/security/limits.d/*
EOF"
# skip rebuilding the rpm if it already exists
if [[ -f "$_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm" ]]; then
echo "$_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm already exists! Skipping build step..."
else
# Run rpmbuild
echo "Building version $_mcversion, please wait..."
if rpmbuild --quiet --define="%_topdir $_outputdir" --define="%_libdir /usr/lib" -bb "$_outputdir/SPECS/mediacenter.spec"; then
echo "Build complete!"
echo "The RPM is located at $_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm"
else
echo "Build failed! Exiting..."
exit 1
fi
fi
}
_runCreateRepo () {
_installPackage createrepo_c
unset _prefix
if [[ $_createrepo_user != "root" ]]; then
_prefix=("sudo" "-u" "$_createrepo_user")
fi
_createrepo_cmd=("createrepo" "-q")
# If the webroot does not exist, create it
[[ ! -d "$_createrepo_webroot" ]] && "${_prefix[@]}" mkdir -p "$_createrepo_webroot"
# Copy built rpms to webroot
if "${_prefix[@]}" cp -n "$_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm" "$_createrepo_webroot"; then
echo "Copied $_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm to $_createrepo_webroot/MediaCenter-$_mcversion.x86_64.rpm"
fi
# If repodata exists, append --update to createrepo command
[[ -d "$_createrepo_webroot/repodata" ]] && _createrepo_cmd+=("--update")
# Run createrepo
if "${_prefix[@]}" "${_createrepo_cmd[@]}" "$_createrepo_webroot"; then
echo "Successfully updated repo!"
else
echo "Update repo failed!"
return 1
fi
}
_installRPM () {
# skip installing same version
_installed_ver="$(rpm --query MediaCenter)"
_to_be_installed_ver="MediaCenter-$_mcversion.x86_64"
if [[ $_installed_ver == "$_to_be_installed_ver" ]]; then
echo "JRiver Media Center $_mcversion is already installed! Skipping installation..."
return
fi
# install rpm
if [[ -f "$_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm" ]]; then
echo "Attempting to install version $_mcversion..."
if "${_install_cmd[@]}" "$_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm"; then
echo "JRiver Media Center $_mcversion was installed successfully!"
else
echo "JRiver Media Center $_mcversion installation failed!"
exit 1
fi
else
echo "$_outputdir/RPMS/x86_64/MediaCenter-${_mcversion}.x86_64.rpm is missing!"
echo "JRiver Media Center ${_mcversion} installation failed!"
exit 1
fi
}
_symlinkCerts () {
if [[ ! -f /etc/ssl/certs/ca-certificates.crt && \
-f /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem ]]; then
echo "Symlinking /etc/ssl/certs/ca-certificates.crt to /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"
if [[ "$_user" == "root" ]]; then
ln -s /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/ssl/certs/ca-certificates.crt
else
sudo ln -s /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/ssl/certs/ca-certificates.crt
fi
fi
}
_restoreLicense () {
# Allow user to drop an mjr file next to installJRMC
if [[ -z $_restorefile ]]; then
for _mjr in "$_basedir"/*.mjr; do
[[ $_mjr -nt $_restorefile ]] && _restorefile="$_mjr"
done
fi
# Restore license
if [[ -f "$_restorefile" ]]; then
if ! "mediacenter${_mversion}" /RestoreFromFile "$_restorefile"; then
echo "Automatic license restore failed"
fi
fi
}
_openFirewallPorts () {
# RHEL
if [[ "$ID" == "fedora" || "$ID" == "centos" ]] && [[ -x $(command -v firewall-cmd) ]]; then
if ! firewall-cmd --get-services | grep -q jriver; then
# shellcheck disable=SC2140,SC1079,SC1078
"${_bash_cmd[@]}" "cat <<-EOF > /etc/firewalld/services/jriver.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>jriver</short>
<description>JRiver Media Center Media Server</description>
<port protocol="udp" port="1900" />
<port protocol="tcp" port="52100-52200"/>
</service>
EOF"
fi
# Enable service
if [[ "$_user" == "root" ]]; then
firewall-cmd --permanent --zone=default --add-service=jriver
else
sudo firewall-cmd --permanent --zone=default --add-service=jriver
fi
# Ubuntu
elif [[ "$ID" == "ubuntu" && -x $(command -v ufw) ]]; then
if [[ ! -f "/etc/ufw/applications.d/jriver.service" ]]; then
"${_bash_cmd[@]}" "cat <<-EOF > /etc/ufw/applications.d/jriver.service
[jriver]
title=JRiver Media Center
description=Allows JRiver Media Server access
ports=52100-52200/tcp|1900/udp
EOF"
fi
# Enable service
if [[ "$_user" == "root" ]]; then
ufw app update --add-new jriver
ufw allow jriver
else
sudo ufw app update --add-new jriver
sudo ufw allow jriver
fi
fi
}
_setVNCPass () {
if [[ "$_user" == "root" ]]; then
_vncpassfile="/root/.vnc/jrmc_passwd"
else
_vncpassfile="$HOME/.vnc/jrmc_passwd"
fi
if [[ -n $_vncpass ]]; then
# Remove existing password file if it exists and write a new one
[[ -f "$_vncpassfile" ]] && rm -f "$_vncpassfile"
x11vnc -storepasswd "$_vncpass" "$_vncpassfile"
# Else disable authentication
elif [[ ! -f "$_vncpassfile" ]]; then
_novncauth="true"
fi
}
_systemctlReloadAndEnable () {
echo "Enabling $1"
if [[ "$_user" == "root" ]]; then
systemctl daemon-reload
systemctl enable --now "$1"
else
systemctl --user daemon-reload
systemctl --user enable --now "$1"
fi
}
_generateServiceVars () {
unset _service_fname _service_name _timer_fname _timer_name _systemd_user
_service_name="$1.service"
_timer_name="$1.timer"
if [[ "$_user" == "root" ]]; then
_service_fname="/usr/lib/systemd/system/$1.service"
_timer_fname="/usr/lib/systemd/system/$1.timer"
else
_service_fname="$HOME/.config/systemd/user/$1.service"
_timer_fname="$HOME/.config/systemd/user/$1.timer"
_systemd_user="User=$_user"
fi
}
_serviceMediaserver () {
_generateServiceVars "jriver-mediaserver"
"${_bash_cmd[@]}" "cat <<-EOF > $_service_fname
[Unit]
Description=JRiver Media Center $_mversion Media Server
After=graphical.target
[Service]
Type=simple
$_systemd_user
Environment=DISPLAY=$_display
ExecStart=/usr/bin/mediacenter$_mversion /MediaServer
Restart=always
RestartSec=10
KillSignal=SIGHUP
TimeoutStopSec=30
[Install]
WantedBy=graphical.target
EOF"
_systemctlReloadAndEnable "$_service_name"
}
_serviceX11VNC () {
_installPackage x11vnc
_setVNCPass
_generateServiceVars "jriver-x11vnc"
if [[ "$_novncauth" == "true" ]]; then
_exec_start_cmd="/usr/bin/x11vnc -display $_display -geometry 1920x1080 -auth guess -forever -bg -nopw"
else
_exec_start_cmd="/usr/bin/x11vnc -display $_display -geometry 1920x1080 -rfbauth $HOME/.vnc/jrmc_passwd -auth guess -forever -bg"
fi
"${_bash_cmd[@]}" "cat <<-EOF > $_service_fname
[Unit]
Description=x11vnc
After=display-manager.service
[Service]
Type=forking
$_systemd_user
Environment=DISPLAY=$_display
ExecStart=$_exec_start_cmd
Restart=always
RestartSec=10
[Install]
WantedBy=graphical.target
EOF"
_systemctlReloadAndEnable "$_service_name"
}
_serviceCreaterepo () {
_generateServiceVars "jriver-createrepo"
"${_bash_cmd[@]}" "cat <<-EOF > $_service_fname
[Unit]
Description=Builds JRiver Media Center RPM file, moves it to the repo dir, and runs createrepo
[Service]
$_systemd_user
ExecStart=$_basedir/installJRMC --buildpath=$_outputdir --createrepo --createrepo-webroot $_createrepo_webroot --createrepo-user $_createrepo_user
[Install]
WantedBy=multi-user.target
EOF"
"${_bash_cmd[@]}" "cat <<-EOF > $_timer_fname
[Unit]
Description=Run JRiver MC rpmbuild hourly
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
EOF"
_systemctlReloadAndEnable "$_timer_name"
}
_uninstall () {
read -r -p "Do you really want to uninstall all JRiver Media Center files? [y/N] " _response
_response=${_response,,} # tolower
[[ ! "$_response" =~ ^(yes|y)$ ]] && echo "Cancelling uninstall..." && exit 0
echo "Stopping and disabling all Media Center services"
sudo systemctl disable --now jriver-createrepo.timer jriver-x11vnc.service jriver-mediaserver.service
echo "Removing repo and service files"
for _service in "jriver-mediaserver" "jriver-x11vnc" "jriver-createrepo"; do
[[ -f "/usr/lib/systemd/system/$_service.service" ]] \
&& sudo rm -f "/usr/lib/systemd/system/$_service.service"
[[ -f "$HOME/.config/systemd/user/$_service.service" ]] \
&& sudo rm -f "$HOME/.config/systemd/user/$_service.service"
done
[[ -e /etc/yum.repos.d/jriver.repo ]] \
&& sudo rm -f "/etc/yum.repos.d/jriver.repo"
[[ -e /etc/apt/sources.list.d/jriver.list ]] \
&& sudo rm -f "/etc/apt/sources.list.d/jriver.list"
sudo rm /etc/apt/sources.list.d/mediacenter26.list
if [[ -x $(command -v firewall-cmd) ]]; then
echo "Removing firewall rules"
sudo firewall-cmd --permanent --remove-service=jriver
sudo firewall-cmd --permanent --delete-service=jriver
sudo firewall-cmd --reload
fi
if [[ -x $(command -v ufw) ]]; then
echo "Removing firewall rules"
sudo ufw delete allow jriver
[[ -f "/etc/ufw/applications.d/jriver.service" ]] && sudo rm /etc/ufw/applications.d/jriver.service
fi
echo "Uninstalling Media Center"
if [[ "$ID" == "fedora" || "$ID" == "centos" ]]; then
sudo dnf remove MediaCenter -y
elif [[ "$ID" == "ubuntu" || "$ID" == "debian" ]]; then
sudo apt-get remove "mediacenter$_mversion" -y
fi
echo "JRiver Media Center has been completely uninstalled"
[[ "$_user" != "root" ]] && echo "Your library files will remain at $HOME/.jriver"
}
__main () {
# Check user
_checkUser
# Parse input
_parseInput "$@"
# Detect OS
_getOS
# Sanity checks
_sanityChecks
# Build some commands based on the selected OS
_buildCommands
# Set version to install
_setVersion
# Uninstall and exit
if [[ -n $_uninstall ]]; then
_uninstall
return $?
fi
# Install external repos
_installExternalRepos
# install repo file and install MC using package manager
if [[ -n $_installrepo ]]; then
_installRepo
_symlinkCerts
_restoreLicense
return $?
fi
# Install MC systemd services
if [[ -n $_service_xms ]]; then
_serviceMediaserver
_serviceX11VNC
fi
if [[ -n $_service_ms ]]; then
_serviceMediaserver
fi
# Install createrepo systemd service
if [[ -n $_service_createrepo ]]; then
_serviceCreaterepo
fi
# Acquire source deb package
_acquireDeb
# build
_buildRPM
if [[ -n $_buildonly ]]; then
return 0
fi
# create repo at webroot
if [[ -n $_createrepo ]]; then
_runCreateRepo
return $?
fi
# install MC
_installRPM
_symlinkCerts
_restoreLicense
_openFirewallPorts
}
# Execute function when called
__main "$@"
}
# Allow this file to be executed directly if not being sourced
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
_basedir=$(dirname "$(readlink -f "$0")")
installJRMC "$@"
fi