diff --git a/installJRMC b/installJRMC index 98b063d..6d88ce5 100755 --- a/installJRMC +++ b/installJRMC @@ -20,13 +20,12 @@ shopt -s extglob ####################################### installJRMC() { - _scriptversion="0.3" + _scriptversion="0.4" _boardurl="https://yabb.jriver.com/interact/index.php/board,64.0.html" _outputdir="$_basedir/output" _createrepo_webroot="/srv/jriver" - _createrepo_user="$(whoami)" - _user="$(whoami)" - _available_services=("createrepo" "x11vnc" "mediaserver" "mediacenter" "mediacenter-vncserver") + _exec_user="$(whoami)" + _available_services=("jriver-createrepo" "jriver-x11vnc" "jriver-mediaserver" "jriver-mediacenter" "jriver-vnc-mediacenter") #_available_containers=("mediacenter-vncserver" "createrepo") @@ -55,6 +54,8 @@ OPTIONS Restore file location for registration (Default: skip registration) --betapass PASSWORD Enter beta team password for access to beta builds + --service-user USER + Install systemd services and containers for USER --service, -s SERVICE See SERVICES section below for a list of possible services to install --container, -c CONTAINER @@ -77,21 +78,22 @@ OPTIONS Uninstall JRiver MC, cleanup service files, and remove firewall rules (does not remove library files) SERVICES - mediaserver + jriver-mediaserver Enable and start a mediaserver systemd service (requires an existing X server) - mediacenter + jriver-mediacenter Enable and start a mediacenter systemd service (requires an existing X server) - x11vnc + jriver-x11vnc Enable and start x11vnc for the local desktop (requires an existing X server) --vncpass and --display are also valid options (see below) - mediacenter-vncserver + jriver-vnc-mediacenter Enable and start a vncserver running JRiver Media Center --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 + Set vnc password for x11vnc/vncserver access. If no password is set, the script + will either use existing password stored in ~/.vnc/jrmc_passwd or use no password --display DISPLAY - Display to start vncserver/x11vnc (Default: The current display (x11vnc) or next available display (vncserver)) - createrepo + Display to start vncserver/x11vnc (Default: The current display (x11vnc) or next + available display (vncserver)) + jriver-createrepo Install hourly service to build latest MC RPM and run createrepo CONTAINERS @@ -114,7 +116,7 @@ EOF return 1 fi - if _input=$(getopt -o +vdhus:c: -l install-repo,install-rpmbuild,rpmbuild,outputdir:,mcversion:,restorefile:,betapass:,service:,version,debug,force,help,uninstall,createrepo,createrepo-webroot:,createrepo-user:,vncpass:,display:,container: -- "$@"); then + if _input=$(getopt -o +vdhus:c: -l install-repo,install-rpmbuild,rpmbuild,outputdir:,mcversion:,restorefile:,betapass:,service-user:,service:,version,debug,force,help,uninstall,createrepo,createrepo-webroot:,createrepo-user:,vncpass:,display:,container: -- "$@"); then eval set -- "$_input" while true; do case "$1" in @@ -140,6 +142,9 @@ EOF --betapass) shift && _betapass="$1" ;; + --service-user) + shift && _service_user="$1" + ;; --service|-s) shift && _services+=("$1") ;; @@ -209,11 +214,13 @@ EOF ####################################### - # Prepend this to any command that you wish to execute with sudo (i.e. when _user is NOT root) + # Prepend this to any command that you wish to execute with sudo + # Requires: + # _exec_user ####################################### _ifSudo() { - if [[ "$_user" != "root" ]]; then + if [[ "$_exec_user" != "root" ]]; then sudo "$@" else "$@" @@ -221,25 +228,6 @@ EOF } - _checkUser() { - - _runDebug "${FUNCNAME[0]}" - - if [[ "$_user" == "root" ]]; then - - cat < $_service_fname [Unit] @@ -1083,16 +1138,16 @@ WantedBy=graphical.target EOF" _systemctl_reload && \ _systemctl_start "$_service_name" && \ - _systemctl_enable "$_service_name" + _systemctl_enable "$_service_name" && \ + _openFirewall "jriver" } - _serviceMediacenter() { + _service_jriver-mediacenter() { _runDebug "${FUNCNAME[0]}" - # Set the display to use - [[ -z $_display ]] && _display="${DISPLAY:-":0"}" + _setDisplayAndPort _bash_cmd "cat <<-EOF > $_service_fname [Unit] @@ -1102,7 +1157,7 @@ After=graphical.target [Service] $_user_specifier Type=simple -Environment=DISPLAY=$_display +Environment=DISPLAY=$_service_display Environment=XAUTHORITY=$XAUTHORITY ExecStart=/usr/bin/mediacenter$_mversion Restart=always @@ -1115,36 +1170,27 @@ WantedBy=graphical.target EOF" _systemctl_reload && \ _systemctl_start "$_service_name" && \ - _systemctl_enable "$_service_name" + _systemctl_enable "$_service_name" && \ + _openFirewall "jriver" } - _serviceVNC() { + _service_jriver-vnc-mediacenter() { _runDebug "${FUNCNAME[0]}" _installPackage tigervnc-server + _setDisplayAndPort 1 _setVNCPass if [[ -n $_novncauth ]]; then - _exec_start_cmd="/usr/bin/vncserver $_display -geometry 1440x900 -alwaysshared -fg -SecurityTypes None -xstartup /usr/bin/mediacenter$_mversion" + _exec_start_cmd="/usr/bin/vncserver $_service_display -geometry 1440x900 -alwaysshared -fg -SecurityTypes None -xstartup /usr/bin/mediacenter$_mversion" else - _exec_start_cmd="/usr/bin/vncserver $_display -geometry 1440x900 -alwaysshared -fg -rfbauth $HOME/.vnc/jrmc_passwd -xstartup /usr/bin/mediacenter$_mversion" + _exec_start_cmd="/usr/bin/vncserver $_service_display -geometry 1440x900 -alwaysshared -fg -rfbauth $HOME/.vnc/jrmc_passwd -xstartup /usr/bin/mediacenter$_mversion" fi - # Set the display to use - if [[ -z $_display ]]; then - # If we are running on existing X server then increment DISPLAY by one - if [[ -n $DISPLAY ]]; then - _display=$(( ${DISPLAY#:} + 1 )) - _display=":$_display" - else - _display=":0" - fi - fi - - declare -g _port=$(( ${_display#:} + 5900 )) + declare -g _port=$(( ${_service_display#:} + 5900 )) _bash_cmd "cat <<-EOF > $_service_fname [Unit] @@ -1154,9 +1200,9 @@ After=syslog.target network.target [Service] Type=simple $_user_specifier -ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill $_display > /dev/null 2>&1 || :' +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill $_service_display > /dev/null 2>&1 || :' ExecStart=$_exec_start_cmd -ExecStop=/usr/bin/vncserver -kill $_display +ExecStop=/usr/bin/vncserver -kill $_service_display [Install] WantedBy=multi-user.target @@ -1164,31 +1210,30 @@ EOF" _systemctl_reload && \ _systemctl_start "$_service_name" && \ _systemctl_enable "$_service_name" && \ - echo "vncserver running on localhost:$_port" + echo "vncserver running on localhost:$_port" && \ + _openFirewall "vncserver" && \ + _openFirewall "jriver" } - _serviceX11VNC() { + _service_jriver-x11vnc() { _runDebug "${FUNCNAME[0]}" _installPackage x11vnc + _setDisplayAndPort _setX11VNCPass - [[ -z $_display ]] && _display="${DISPLAY:-":0"}" - - declare -g _port=$(( ${_display#:} + 5900 )) - # Get current desktop resolution # TODO: may need to break this out into its own function and get smarter at identifying multi-monitors local _res _res=$(xdpyinfo | grep dimensions | awk '{print $2}') if [[ -n $_novncauth ]]; then - _exec_start_cmd="/usr/bin/x11vnc -display $_display -noscr -geometry $_res -auth guess -forever -bg -nopw" + _exec_start_cmd="/usr/bin/x11vnc -display $_service_display -noscr -geometry $_res -auth guess -forever -bg -nopw" else - _exec_start_cmd="/usr/bin/x11vnc -display $_display -noscr -geometry $_res -auth guess -forever -bg -rfbauth $HOME/.vnc/jrmc_passwd" + _exec_start_cmd="/usr/bin/x11vnc -display $_service_display -noscr -geometry $_res -auth guess -forever -bg -rfbauth $HOME/.vnc/jrmc_passwd" fi _bash_cmd "cat <<-EOF > $_service_fname @@ -1199,7 +1244,7 @@ After=multi.service [Service] $_user_specifier Type=forking -Environment=DISPLAY=$_display +Environment=DISPLAY=$_service_display ExecStart=$_exec_start_cmd Restart=always RestartSec=10 @@ -1209,12 +1254,13 @@ WantedBy=multi-user.target EOF" _systemctl_reload && \ _systemctl_start "$_service_name" && \ - _systemctl_enable "$_service_name" - echo "x11vnc running on localhost:$_port" + _systemctl_enable "$_service_name" && \ + echo "x11vnc running on localhost:$_port" && \ + _openFirewall "x11vnc" } - _serviceCreaterepo() { + _service_jriver-createrepo() { _runDebug "${FUNCNAME[0]}" @@ -1314,21 +1360,21 @@ EOF" __main() { - # Check user - _checkUser - # Parse input _parseInput "$@" + # Sanity checks + _sanityChecks + + # Set user variables + _setUser + # Build some OS-specific commands based on the selected OS _buildCommands # Set version to install/uninstall _setVersion - # Sanity checks - _sanityChecks - # Uninstall and exit if [[ -n $_uninstall ]]; then _uninstall @@ -1369,42 +1415,12 @@ EOF" # Install services for _service in "${_services[@]}"; do _servicePrep "$_service" - case "$_service" in - createrepo) - _serviceCreaterepo - ;; - x11vnc) - _serviceX11VNC - _openFirewall "x11vnc" - ;; - mediaserver) - _serviceMediaserver - ;; - mediacenter) - _serviceMediacenter - ;; - mediacenter-vncserver) - _serviceVNC - _openFirewall "vncserver" - ;; - *) - esac + "_service_$_service" done # Install containers for _container in "${_containers[@]}"; do - case "$_container" in - createrepo) - _containerCreaterepo - ;; - mediacenter-vncserver) - _containerVNC - ;; - mediacenter) - _containerMC - ;; - *) - esac + "_container_$_container" done } }