#!/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="/srv/jriver" [[ -z $_createrepo_user ]] && \ _createrepo_user="$(whoami)" [[ -z $_user ]] && \ _user="$(whoami)" [[ -z $_display ]] && \ _display="${DISPLAY:-":0"}" ######################## ###### FUNCTIONS ####### ######################## _printHelpAndExit () { _runDebug "${FUNCNAME[0]}" cat <<-'EOF' USAGE: installJRMC [[OPTION] [VALUE]]... OPTIONS --rpmbuild Debian/Ubuntu: Build RPM from source DEB Fedora/CentOS: Build RPM from source DEB and install it --outputdir PATH Generate rpmbuild output in this directory (Default: $PWD/outputdir) --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) --betapass PASSWORD Enter beta team password for access to beta builds --service SERVICE See SERVICES section below for a list of possible service to install -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: /srv/jriver/) --createrepo-user USER The web server user (Default: current user) SERVICES mediaserver Create and enable a JRiver MC Media Server systemd service for the current user x11vnc-mediaserver Create and enable a JRiver MC mediaserver service and x11vnc (for headless installations without an existing X server) service for the current user --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) createrepo Install service to build latest MC RPM and run createrepo hourly for the current user EOF # Exit using passed exit code [[ -z $1 ]] && exit 0 || exit "$1" } _parseInput () { _runDebug "${FUNCNAME[0]}" if _input=$(getopt -o +vdhu -l rpmbuild,outputdir:,mcversion:,restorefile:,betapass:,service:,version,debug,help,uninstall,createrepo,createrepo-webroot:,createrepo-user:,vncpass:,display: -- "$@"); then eval set -- "$_input" while true; do case "$1" in --rpmbuild) _rpmbuild="true" ;; --outputdir) shift && _outputdir="$1" ;; --mcversion) shift && _mcversion="$1" ;; --restorefile) shift && _restorefile="$1" ;; --betapass) shift && _betapass="$1" ;; --service) shift && _service="$1" ;; --version|-v) echo "Version: $_scriptversion" exit 0 ;; --debug|-d) echo "Debugging on" _debug="true" ;; --help|-h) _printHelpAndExit 0 ;; --uninstall|-u) _uninstall="true" ;; --createrepo) _createrepo="true" ;; --createrepo-webroot) shift && _createrepo_webroot="$1" ;; --createrepo-user) shift && _createrepo_user="$1" ;; --vncpass) shift && _vncpass="$1" ;; --display) shift && _display="$1" ;; --) shift break ;; esac shift done else echo "Incorrect options provided" _printHelpAndExit 1 fi } _runDebug () { [[ -n $_debug ]] && echo "Running: " "$@" } _checkUser () { _runDebug "${FUNCNAME[0]}" if [[ "$_user" == "root" ]]; then cat < /dev/null 2>&1; then if [[ -n $_url_pkg ]]; then _url_pkg_array+=("$_url_pkg") else _pkg_array+=("$_pkg") fi fi done if [[ ${#_pkg_array[@]} -ge 1 ]]; then echo "Installing: " "${_pkg_array[@]}" "${_install_cmd[@]}" "${_pkg_array[@]}" > /dev/null 2>&1 fi if [[ ${#_url_pkg_array[@]} -ge 1 ]]; then echo "Installing: " "${_url_pkg_array[@]}" "${_install_cmd_nogpg[@]}" "${_url_pkg_array[@]}" > /dev/null 2>&1 fi } _packageQuirks () { _runDebug "${FUNCNAME[0]}" "$@" unset _url_pkg if [[ "$1" == "rpm-build" && "$ID" =~ ^(ubuntu|debian)$ ]]; then _pkg="rpm" elif [[ "$1" == "createrepo_c" && "$ID" =~ ^(ubuntu|debian)$ ]]; then _pkg="createrepo" elif [[ "$1" == "rpmfusion-free-release" ]]; then if [[ "$ID" == "fedora" ]]; then _url_pkg="https://download1.rpmfusion.org/free/$ID/rpmfusion-free-release-$VERSION_ID.noarch.rpm" _pkg="$1" elif [[ "$ID" == "centos" ]]; then _url_pkg="https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$VERSION_ID.noarch.rpm" _pkg="$1" else _pkg="" fi elif [[ "$1" == "epel-release" && "$ID" != "centos" ]]; then _pkg="" else _pkg="$1" fi } _setVersion () { _runDebug "${FUNCNAME[0]}" if [[ -z "$_mcversion" ]]; then _installPackage wget # Get latest version from Interact echo -n "Scraping latest 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 "$_mcversion" else echo "MC version: $_mcversion could not be parsed!" _printHelpAndExit 1 fi # Extract major and variation version numbers _mversion="${_mcversion%%.*}" #_variation="${_mcversion##*.}" } _sanityChecks () { _runDebug "${FUNCNAME[0]}" # Cannot create a repo without an rpm if [[ -n $_createrepo || "$_service" == "createrepo" ]]; then _rpmbuild="true" fi # Check for bad service name if [[ -n $_service && ! "$_service" =~ ^(mediaserver|x11vnc-mediaserver|createrepo)$ ]]; then echo "Incorrect service type provided!" _printHelpAndExit 1 fi } _installExternalRepos () { _runDebug "${FUNCNAME[0]}" _installPackage rpmfusion-free-release epel-release } _installRepo () { _runDebug "${FUNCNAME[0]}" _installPackage wget gnupg if [[ "$ID" =~ ^(fedora|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 echo "Installing latest JRiver Media Center from repo..." if "${_update_cmd[@]}" && "${_install_cmd[@]}" MediaCenter > /dev/null 2>&1; 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|debian)$ ]]; then if [[ $_user != "root" ]]; then wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | sudo apt-key add - > /dev/null 2>&1 sudo wget "http://dist.jriver.com/latest/mediacenter/mediacenter$_mversion.list" -O "/etc/apt/sources.list.d/jriver.list" > /dev/null 2>&1 else wget -q "http://dist.jriver.com/mediacenter@jriver.com.gpg.key" -O- | apt-key add - > /dev/null 2>&1 wget "http://dist.jriver.com/latest/mediacenter/mediacenter$_mversion.list" -O "/etc/apt/sources.list.d/jriver.list" > /dev/null 2>&1 fi [[ -n $_debug ]] && cat "/etc/apt/sources.list.d/jriver.list" echo "Installing JRiver Media Center from repo..." if "${_update_cmd[@]}" > /dev/null 2>&1 && "${_install_cmd[@]}" "mediacenter$_mversion" > /dev/null 2>&1; 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 () { _runDebug "${FUNCNAME[0]}" # If necessary, create SOURCES dir [[ ! -d "$_outputdir/SOURCES" ]] && mkdir -p "$_outputdir/SOURCES" # If deb file already exists, skip download if [[ -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 () { _runDebug "${FUNCNAME[0]}" # 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|centos)$ ]]; then _build_requires=$'BuildRequires: rpm >= 4.11.0\nBuildRequires: dpkg' else _build_requires='' fi if [[ "$ID" == "centos" ]]; then _requires='Requires: pangox-compat >= 0.0.2' else _requires='' fi # Create spec file bash -c "cat < $_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 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: python3 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 () { _runDebug "${FUNCNAME[0]}" _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 if [[ ! -d "$_createrepo_webroot" ]]; then if ! "${_prefix[@]}" mkdir -p "$_createrepo_webroot"; then echo "Could not create the createrepo-webroot path!" echo "Make sure that the createrepo-webroot is writeable by createrepo-user!" fi fi # 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" else echo "Could not copy the RPM to the createrepo-webroot path!" echo "Make sure that the createrepo-webroot path is writeable by createrepo-user!" 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 () { _runDebug "${FUNCNAME[0]}" # 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 () { _runDebug "${FUNCNAME[0]}" 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 () { _runDebug "${FUNCNAME[0]}" # 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 } _openFirewall () { _runDebug "${FUNCNAME[0]}" # RHEL if [[ "$ID" =~ ^(fedora|centos)$ ]] && [[ -x $(command -v firewall-cmd) ]]; then if ! firewall-cmd --get-services | grep -q jriver; then # shellcheck disable=SC2140,SC1079,SC1078 "${_firewall_cmd[@]}" --permanent --new-service=jriver > /dev/null 2>&1 "${_firewall_cmd[@]}" --permanent --service=jriver --set-description="JRiver Media Center Media Server" > /dev/null 2>&1 "${_firewall_cmd[@]}" --permanent --service=jriver --set-short="jriver" > /dev/null 2>&1 "${_firewall_cmd[@]}" --permanent --service=jriver --add-port=52100-52200/tcp > /dev/null 2>&1 "${_firewall_cmd[@]}" --permanent --service=jriver --add-port=1900/udp > /dev/null 2>&1 "${_firewall_cmd[@]}" --reload > /dev/null 2>&1 fi # Ubuntu elif [[ "$ID" =~ ^(ubuntu|debian)$ ]] && [[ -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 "${_firewall_cmd[@]}" allow jriver > /dev/null 2>&1 fi } _setVNCPass () { _runDebug "${FUNCNAME[0]}" _vncpassfile="$HOME/.vnc/jrmc_passwd" 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 () { _runDebug "${FUNCNAME[0]}" echo "Enabling $1" if [[ "$_user" == "root" ]]; then systemctl daemon-reload systemctl enable --now "$1" > /dev/null 2>&1 else sudo systemctl daemon-reload sudo systemctl enable --now "$1" > /dev/null 2>&1 fi } _generateServiceVars () { _runDebug "${FUNCNAME[0]}" unset _service_fname _service_name _timer_fname _timer_name _user_specifier if [[ "$_user" == "root" ]]; then _service_fname="/usr/lib/systemd/system/$1.service" _timer_fname="/usr/lib/systemd/system/$1.timer" _service_name="$1.service" _timer_name="$1.timer" _user_specifier="" else _service_fname="/usr/lib/systemd/system/$1@.service" _timer_fname="/usr/lib/systemd/system/$1@.timer" _service_name="$1@$_user.service" _timer_name="$1@$_user.timer" _user_specifier="User=%I" fi } _serviceMediaserver () { _runDebug "${FUNCNAME[0]}" _generateServiceVars "jriver-mediaserver" "${_bash_cmd[@]}" "cat <<-EOF > $_service_fname [Unit] Description=JRiver Media Center $_mversion Media Server After=graphical.target [Service] $_user_specifier Type=simple 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 () { _runDebug "${FUNCNAME[0]}" _installPackage x11vnc _setVNCPass _generateServiceVars "jriver-x11vnc" if [[ "$_novncauth" == "true" ]]; then _exec_start_cmd="/usr/bin/x11vnc -display $_display -noscr -geometry 1920x1080 -auth guess -forever -bg -nopw" else _exec_start_cmd="/usr/bin/x11vnc -display $_display -noscr -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] $_user_specifier Type=forking Environment=DISPLAY=$_display ExecStart=$_exec_start_cmd Restart=always RestartSec=10 [Install] WantedBy=default.target EOF" _systemctlReloadAndEnable "$_service_name" } _serviceCreaterepo () { _runDebug "${FUNCNAME[0]}" _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] $_user_specifier ExecStart=$_basedir/installJRMC --outputdir $_outputdir --createrepo --createrepo-webroot $_createrepo_webroot --createrepo-user $_createrepo_user [Install] WantedBy=default.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 () { _runDebug "${FUNCNAME[0]}" 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 _generateServiceVars _service [[ -f "$_service_fname" ]] && "${_rm_cmd[@]}" "$_service_fname" [[ -f "$_timer_fname" ]] && "${_rm_cmd[@]}" "$_timer_fname" done [[ -f "/etc/yum.repos.d/jriver.repo" ]] \ && "${_rm_cmd[@]}" "/etc/yum.repos.d/jriver.repo" [[ -f "/etc/apt/sources.list.d/jriver.list" ]] \ && "${_rm_cmd[@]}" "/etc/apt/sources.list.d/jriver.list" if [[ -x $(command -v firewall-cmd) ]]; then echo "Removing firewall rules" sudo firewall-cmd --permanent --remove-service=jriver > /dev/null 2>&1 sudo firewall-cmd --permanent --delete-service=jriver > /dev/null 2>&1 sudo firewall-cmd --reload > /dev/null 2>&1 elif [[ -x $(command -v ufw) ]]; then echo "Removing firewall rules" sudo ufw delete allow jriver > /dev/null 2>&1 [[ -f "/etc/ufw/applications.d/jriver.service" ]] \ && "${_rm_cmd[@]}" /etc/ufw/applications.d/jriver.service fi echo "Uninstalling Media Center" if [[ "$ID" =~ ^(fedora|centos)$ ]]; then sudo dnf remove MediaCenter -y elif [[ "$ID" =~ ^(ubuntu|debian)$ ]]; then sudo apt-get remove "mediacenter$_mversion" -y fi echo "JRiver Media Center has been completely uninstalled" echo "Your library files will remain at $HOME/.jriver" } __main () { # Check user _checkUser # Parse input _parseInput "$@" # Detect OS _getOS # Build some commands based on the selected OS _buildCommands # Set version to install/uninstall _setVersion # Sanity checks _sanityChecks # Uninstall and exit if [[ -n $_uninstall ]]; then _uninstall return $? fi # Install external repos _installExternalRepos echo "RPMBUILD: " $_rpmbuild # install MC using package manager (default) if [[ -z $_rpmbuild ]]; then _installRepo _symlinkCerts _restoreLicense _openFirewall else _acquireDeb _buildRPM if [[ -n $_createrepo ]]; then _runCreateRepo # Go ahead and install MC from RPM if on a supported platform elif [[ "$ID" =~ ^(fedora|centos)$ ]]; then _installRPM _symlinkCerts _restoreLicense _openFirewall fi fi # Install systemd services if [[ "$_service" == "createrepo" ]]; then _serviceCreaterepo elif [[ "$_service" == "x11vnc-mediaserver" ]]; then _serviceMediaserver _serviceX11VNC elif [[ "$_service" == "mediaserver" ]]; then _serviceMediaserver fi } # Execute main 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