From da199b127871d88d05c52645b7b9313039e67902 Mon Sep 17 00:00:00 2001 From: bryan Date: Wed, 6 Aug 2025 21:29:18 -0400 Subject: [PATCH] Silence erroneous shellcheck warnings and update docs --- .README.bbcode | 76 +++++++++++++++++++++++------------------------ README.md | 80 +++++++++++++++++++++++++------------------------- installJRMC | 78 +++++++++++++++++++++++++----------------------- 3 files changed, 120 insertions(+), 114 deletions(-) diff --git a/.README.bbcode b/.README.bbcode index d595d62..6f64a2f 100644 --- a/.README.bbcode +++ b/.README.bbcode @@ -1,10 +1,10 @@ [size=20pt]installJRMC[/size] -This program will install [url=https://www.jriver.com/]JRiver Media Center[/url] and associated services on most Linux distributions. +This program installs [url=https://www.jriver.com/]JRiver Media Center[/url] and associated services on most Linux distributions. You can find the latest version of installJRMC, changelog, and documentation in [url=https://git.bryanroessler.com/bryan/installJRMC]my repository[/url]. -[size=18pt]tl;dr One-line MC install[/size] +[size=18pt]tl;dr (One-line MC install)[/size] [code]curl https://git.bryanroessler.com/bryan/installJRMC/raw/master/installJRMC|bash[/code] [size=18pt]Instructions[/size] @@ -23,48 +23,48 @@ Specifying [tt]--build[/tt], [tt]--createrepo[/tt], [tt]--service[/tt], or [tt]- [code] $ installJRMC --help --install, -i repo|local - repo: Install MC from repository, future updates will be handled by the system package manager - local: Build and install MC package from official source package + repo: Install MC from repository, future updates will be handled by the system package manager. + local: Build and install MC package from official source package. --build[=suse|fedora|centos] - Build RPM from source DEB but do not install - Optionally, specify a target distro for cross-building (ex. --build=suse, note the '=') + Build RPM from source DEB but do not install. + Optionally, specify a target distro for cross-building (ex. --build=suse, note the '='). --compat - Build/install MC without minimum dependency version requirements + Build/install MC without minimum dependency version requirements. --mcversion VERSION - Specify the MC version, ex. "33", "34.0.51", or "34.0.51-1" (default: latest) + Specify the MC version, ex. "33", "34.0.51", or "34.0.51-1" (default: latest). --arch ARCH - Specify the target MC architecture, ex. "amd64", "arm64", etc (default: host architecture) + Specify the target MC architecture, ex. "amd64", "arm64", etc (default: host architecture). --mcrepo REPO - Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: host or official) + Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: host or official). --outputdir PATH - Generate reusable installJRMC output in this PATH (default: ./output) + Generate reusable installJRMC output in this PATH (default: ./output). --restorefile RESTOREFILE - Restore file location for automatic license registration + Restore file location for automatic license registration. --betapass PASSWORD - Enter beta team password for access to beta builds + Enter beta team password for access to beta builds. --service, -s SERVICE - See SERVICES section below for the list of services to deploy + See SERVICES section below for the list of services to deploy. --service-type user|system - Starts services at boot (system) or user login (user) (default: per-service, see SERVICES) + Starts services at boot (system) or user login (user) (default: per-service, see SERVICES). --container, -c CONTAINER (TODO: Under construction) - See CONTAINERS section below for a list of containers to deploy + See CONTAINERS section below for a list of containers to deploy. --createrepo[=suse|fedora|centos] Build rpm, copy to webroot, and run createrepo. - Optionally, specify a target distro for non-native repo (ex. --createrepo=fedora, note the '=') + Optionally, specify a target distro for non-native repo (ex. --createrepo=fedora, note the '='). --createrepo-webroot PATH - The webroot directory to install the repo (default: /var/www/jriver/) + The webroot directory to install the repo (default: /var/www/jriver/). --createrepo-user USER - The web server user if different from the current user + The web server user if different from the current user. --no-update - Disable the installJRMC update check + Disable the installJRMC update check. --yes, -y, --auto - Always assumes yes for questions + Always assumes yes for questions. --version, -v - Print installJRMC version and exit + Print installJRMC version and exit. --debug, -d - Print debug output + Print debug output. --help, -h - Print help dialog and exit + Print help dialog and exit. --uninstall, -u Uninstall JRiver MC, service files, firewall rules, etc. [/code] @@ -72,20 +72,20 @@ $ installJRMC --help [size=18pt]Services[/size] [code]jriver-mediaserver (user) - Enable and start a mediaserver systemd service (requires an existing X server) + Enable and start a mediaserver systemd service (requires an existing X server). jriver-mediacenter (user) - Enable and start a mediacenter systemd service (requires an existing X server) + Enable and start a mediacenter systemd service (requires an existing X server). jriver-x11vnc (user) - Enable and start x11vnc for the local desktop (requires an existing X server, does NOT support Wayland) - --vncpass and --display are also valid options (see below) + Enable and start x11vnc for the local desktop (requires an existing X server, does NOT support Wayland). + --vncpass and --display are also valid options (see below). jriver-xvnc (system) - Enable and start a new Xvnc session running JRiver Media Center + Enable and start a new Xvnc session running JRiver Media Center. --vncpass PASSWORD - Set vnc password for x11vnc/Xvnc access. If no password is set, the script will either use existing password stored in ~/.vnc/jrmc_passwd or else no password + Set vnc password for x11vnc/Xvnc access. If no password is set, the script will either use existing password stored in ~/.vnc/jrmc_passwd or else no password. --display DISPLAY - Manually specify display to use for x11vnc/Xvnc (ex. ':1') + Manually specify display to use for x11vnc/Xvnc (ex. ':1'). jriver-createrepo (system) - Install hourly service to build latest MC RPM and run createrepo + Install hourly service to build latest MC RPM and run createrepo. [/code] Services use a sane default [tt]--service-type[/tt] listed next to the service name in the Services description. @@ -110,11 +110,11 @@ installJRMC automatically creates port forwarding firewall rules for remote acce [size=18pt]Other Nicities[/size] [list] -[*]Automatically updates [tt]installJRMC[/tt] to the latest release -[*]Activates external third-party repositories for improved media playback (hardware decoding, etc.) -[*]Adds temporary legacy repositories to provide deprecated libraries -[*]Links non-standard SSL certs -[*]Activates MC if a valid license file is found in common locations +[*]Automatically updates [tt]installJRMC[/tt] to the latest release. +[*]Activates external third-party repositories for improved media playback (hardware decoding, etc.). +[*]Adds temporary legacy repositories to provide deprecated libraries. +[*]Links non-standard SSL certs. +[*]Activates MC if a valid license file is found in common locations. [/list] [size=18pt]Examples[/size] @@ -127,7 +127,7 @@ Install a more widely-compatible version of the latest MC version. [code]installJRMC --install repo --service jriver-mediacenter --service-type user[/code] Install MC from the repository and start/enable jriver-mediacenter.service as a user service. [code]installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 34.0.51[/code] -Build and install an MC 34.0.51 comptability RPM locally and activate it using the /path/to/license.mjr +Build and install an MC 34.0.51 comptability RPM locally and activate it using the [tt]/path/to/license.mjr[/tt]. [code]installJRMC --createrepo --createrepo-webroot /srv/jriver/repo --createrepo-user www-user[/code] Build an RPM locally for the current distro, move it to the webroot, and run createrepo as www-user. [code]installJRMC --service jriver-createrepo --createrepo-webroot /srv/jriver/repo --createrepo-user www-user[/code] diff --git a/README.md b/README.md index 51a4508..c781686 100755 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # installJRMC -This program will install [JRiver Media Center](https://www.jriver.com/) and associated services on most Linux distributions. +Install [JRiver Media Center](https://www.jriver.com/) and associated services on most Linux distributions. You can find the latest version of installJRMC, changelog, and documentation in [my repository](https://git.bryanroessler.com/bryan/installJRMC). -## Executing +## Usage `installJRMC [--option [ARGUMENT]]` -`installJRMC` defaults to `--install=repo` on distros with MC repositories and `--install=local` on all others. +`installJRMC` defaults to `--install=repo` on distros with Media Center repositories and `--install=local` on others. Specifying `--build`, `--createrepo`, `--service`, or `--uninstall` disables the default install method. ### tl;dr @@ -20,70 +20,70 @@ Specifying `--build`, `--createrepo`, `--service`, or `--uninstall` disables the ```text $ installJRMC --help --install, -i repo|local - repo: Install MC from repository, future updates will be handled by the system package manager - local: Build and install MC package locally from official source package + repo: Install MC from repository, future updates will be handled by the system package manager. + local: Build and install MC package locally from official source package. --build[=suse|fedora|centos|mandriva] - Build RPM from source DEB but do not install - Optionally, specify a target distro for cross-building (ex. --build=suse, note the '=') + Build RPM from source DEB but do not install. + Optionally, specify a target distro for cross-building (ex. --build=suse, note the '='). --compat - Build/install MC without minimum dependency version requirements + Build/install MC without minimum dependency version requirements. --mcversion VERSION - Build or install a specific MC version, ex. "34.0.51" or "33" (default: latest) + Build or install a specific MC version, ex. "34.0.51" or "33" (default: latest). --mcrepo REPO - Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: latest official) + Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: latest official). --arch ARCH - Specify the MC architecture, ex. "amd64", "arm64", etc (default: host architecture) + Specify the MC architecture, ex. "amd64", "arm64", etc (default: host architecture). --outputdir PATH - Generate rpmbuild output in this PATH (default: ./output) + Generate rpmbuild output in this PATH (default: ./output). --restorefile RESTOREFILE - Restore file location for automatic license registration + Restore file location for automatic license registration. --betapass PASSWORD - Enter beta team password for access to beta builds + Enter beta team password for access to beta builds. --service, -s SERVICE - See SERVICES section below for the list of services to deploy + See SERVICES section below for the list of services to deploy. --service-type user|system - Starts services at boot (system) or user login (user) (default: per-service, see SERVICES) + Starts services at boot (system) or user login (user) (default: per-service, see SERVICES). --container, -c CONTAINER (TODO: Under construction) - See CONTAINERS section below for a list of containers to deploy + See CONTAINERS section below for a list of containers to deploy. --createrepo[=suse|fedora|centos|mandriva] Build rpm, copy to webroot, and run createrepo. - Optionally, specify a target distro for non-native repo (ex. --createrepo=fedora, note the '=') + Optionally, specify a target distro for non-native repo (ex. --createrepo=fedora, note the '='). --createrepo-webroot PATH - The webroot directory to install the repo (default: /var/www/jriver/) + The webroot directory to install the repo (default: /var/www/jriver/). --createrepo-user USER - The web server user if different from the current user + The web server user if different from the current user. --no-update - Disable the installJRMC update check + Disable the installJRMC update check. --yes, -y, --auto - Always assume yes for questions + Always assume yes for questions. --version, -v - Print installJRMC version and exit + Print installJRMC version and exit. --debug, -d - Print debug output + Print debug output. --help, -h - Print help dialog and exit + Print help dialog and exit. --uninstall, -u - Uninstall JRiver MC, service files, and firewall rules (does not remove library or media files) + Uninstall JRiver MC, service files, and firewall rules (does not remove library or media files). ``` ### `--service=` ```text jriver-mediaserver [--service-type=user] - Enable and start a mediaserver systemd service (requires an existing X server) + Enable and start a mediaserver systemd service (requires an existing X server). jriver-mediacenter [--service-type=user] - Enable and start a mediacenter systemd service (requires an existing X server) + Enable and start a mediacenter systemd service (requires an existing X server). jriver-x11vnc [--service-type=user] - Enable and start x11vnc for the local desktop (requires an existing X server, does NOT support Wayland) - --vncpass and --display are also valid options (see below) + Enable and start x11vnc for the local desktop (requires an existing X server, does NOT support Wayland). + --vncpass and --display are also valid options (see below). jriver-xvnc [--service-type=system] - Enable and start a new Xvnc session running JRiver Media Center + Enable and start a new Xvnc session running JRiver Media Center. --vncpass PASSWORD - Set vnc password for x11vnc/Xvnc 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/Xvnc access. If no password is set, the script will either use existing password stored in ~/.vnc/jrmc_passwd or use no password. --display DISPLAY - Manually specify display to use for x11vnc/Xvnc (ex. ':1') + Manually specify display to use for x11vnc/Xvnc (ex. ':1'). jriver-createrepo [--service-type=system] - Install hourly service to build latest MC RPM and run createrepo + Install hourly service to build latest MC RPM and run createrepo. ``` #### `--service-type=` @@ -106,11 +106,11 @@ Multiple services (but not `--service-types`) can be installed at one time using ## Other Nicities -* Automatically updates `installJRMC` to the latest release -* Activates external third-party repositories for improved media playback (hardware decoding, etc.) -* Adds temporary legacy repositories to provide deprecated libraries -* Links non-standard SSL certs -* Activates MC if a valid license file is found in common locations +* Automatically updates `installJRMC` to the latest release. +* Activates external third-party repositories for improved media playback (hardware decoding, etc.). +* Adds temporary legacy repositories to provide deprecated libraries. +* Links non-standard SSL certs. +* Activates MC if a valid license file is found in common locations. ## Examples @@ -132,7 +132,7 @@ Multiple services (but not `--service-types`) can be installed at one time using * `installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 34.0.51` - Build and install an MC 34.0.51 compatibility RPM locally and activate it using the `/path/to/license.mjr` + Build and install an MC 34.0.51 compatibility RPM locally and activate it using the `/path/to/license.mjr`. * `installJRMC --createrepo --createrepo-webroot /srv/jriver/repo --createrepo-user www-user` diff --git a/installJRMC b/installJRMC index 54e541c..0354dc4 100755 --- a/installJRMC +++ b/installJRMC @@ -18,7 +18,7 @@ # * Avoid execute() for stdout # # Allow indirection to match service names to their functions -# shellcheck disable=SC2317 +# shellcheck disable=SC2329 shopt -s extglob declare -g SCRIPT_VERSION="1.34.9-dev" @@ -46,71 +46,71 @@ print_help() { OPTIONS --install, -i repo|local - repo: Install MC from repository, updates are handled by the system package manager - local: Build and install MC locally from official source package + repo: Install MC from repository, updates are handled by the system package manager. + local: Build and install MC locally from official source package. --build[=suse|fedora|centos|mandriva] - Build RPM from source DEB but do not install - Optionally, specify a target distro for cross-building (ex. --build=suse, note the '=') + Build RPM from source DEB but do not install. + Optionally, specify a target distro for cross-building (ex. --build=suse, note the '='). --compat - Build/install MC locally without minimum dependency version requirements + Build/install MC locally without minimum dependency version requirements. --mcversion VERSION - Specify the MC version, ex. "$MC_VERSION" or "${MC_VERSION%%.*}" (default: latest release) + Specify the MC version, ex. "$MC_VERSION" or "${MC_VERSION%%.*}" (default: latest release). --arch VERSION - Specify the target MC architecture, ex. "amd64", "arm64", etc (default: host) + Specify the target MC architecture, ex. "amd64", "arm64", etc (default: host). --mcrepo REPO - Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: auto) + Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: auto). --outputdir PATH - Generate reusable installJRMC output in this PATH (default: ./output) + Generate reusable installJRMC output in this PATH (default: ./output). --restorefile MJR_FILE - Restore file location for automatic license registration + Restore file location for automatic license registration. --betapass PASSWORD - Enter beta team password for access to beta builds + Enter beta team password for access to beta builds. --service, -s SERVICE - See SERVICES section below for a list of possible services to install + See SERVICES section below for a list of possible services to install. --service-type user|system - Starts services at boot (system) or at user login (user) (default: per service, see SERVICES) + Starts services at boot (system) or at user login (user) (default: per service, see SERVICES). --container, -c CONTAINER (TODO: Under construction) - See CONTAINERS section below for a list of possible services to install + See CONTAINERS section below for a list of possible services to install. --createrepo[=suse|fedora|centos|mandriva] Build rpm, copy to webroot, and run createrepo. - Use in conjunction with --build=TARGET for crossbuilding repos - Optionally, specify a target distro for non-native repo (ex. --createrepo=fedora, note the '=') + Use in conjunction with --build=TARGET for crossbuilding repos. + Optionally, specify a target distro for non-native repo (ex. --createrepo=fedora, note the '='). --createrepo-webroot PATH - Specify the webroot directory to install the repo (default: /var/www/jriver) + Specify the webroot directory to install the repo (default: /var/www/jriver). --createrepo-user USER - Specify the web server user if it differs from \$USER + Specify the web server user if it differs from \$USER. --no-update - Disable automatic installJRMC self-update + Disable automatic installJRMC self-update. --uninstall, -u - Uninstall JRiver MC, remove services, containers, and firewall rules (does not remove library files) + Uninstall JRiver MC, remove services, containers, and firewall rules (does not remove library files). --yes, -y, --auto - Assume yes response to questions + Assume yes response to questions. --version, -v - Print installJRMC version and exit + Print installJRMC version and exit. --debug, -d - Print debug output + Print debug output. --help, -h - Print help dialog and exit + Print help dialog and exit. SERVICES jriver-mediaserver (default --service-type=user) - Enable and start a mediaserver systemd service (requires an existing X server) + Enable and start a mediaserver systemd service (requires an existing X server). jriver-mediacenter (user) - Enable and start a mediacenter systemd service (requires an existing X server) + Enable and start a mediacenter systemd service (requires an existing X server). jriver-x11vnc (user) - Enable and start x11vnc for the local desktop (requires an existing X server) - Usually combined with jriver-mediaserver or jriver-mediacenter services - --vncpass and --display are optional (see below) + Enable and start x11vnc for the local desktop (requires an existing X server). + Usually combined with jriver-mediaserver or jriver-mediacenter services. + --vncpass and --display are optional (see below). jriver-xvnc (system) - Enable and start a new Xvnc session running JRiver Media Center + Enable and start a new Xvnc session running JRiver Media Center. --vncpass PASSWORD Set the vnc password for x11vnc/Xvnc access. If no password is set, installJRMC - will either use existing password stored in \$HOME/.vnc/jrmc_passwd or else no password + will either use existing password stored in \$HOME/.vnc/jrmc_passwd or else no password. --display DISPLAY Display to use for x11vnc/Xvnc (default: The current display (x11vnc) or the - current display incremented by 1 (Xvnc)) + current display incremented by 1 (Xvnc)). jriver-createrepo (system) - Install hourly service to build latest MC RPM and run createrepo + Install hourly service to build latest MC RPM and run createrepo. EOF } @@ -783,8 +783,8 @@ acquire_deb() { translate_packages() { debug "${FUNCNAME[0]}()" "$*" local deb_file="$1" - declare -n requires_arr="$2" - declare -n recommends_arr="$3" + # shellcheck disable=SC2178 + declare -n requires_arr="$2" recommends_arr="$3" local -i i # Load deb dependencies into array @@ -924,6 +924,8 @@ translate_packages() { *) echo "Skipping package translations for $ID" esac + + unset requires_arr recommends_arr } # @description Creates a SPEC file and builds the RPM from the source DEB using rpmbuild @@ -955,6 +957,9 @@ build_rpm() { # Convert array to newline delim'd string (for heredoc) printf -v requires_str "Requires: %s\n" "${requires_arr[@]}" printf -v recommends_str "Recommends: %s\n" "${recommends_arr[@]}" + + unset requires_arr recommends_arr + # Strip last newline requires_str="${requires_str%?}" recommends_str="${recommends_str%?}" @@ -1051,6 +1056,7 @@ build_pkgbuild() { bsdtar xf data.tar.xz -C "\$pkgdir" } EOF + unset requires_arr recommends_arr } # @description Installs Media Center via DEB package w/ optional compatability fixes