Browse Source

Silence erroneous shellcheck warnings and update docs

bryan 19 hours ago
parent
commit
da199b1278
3 changed files with 120 additions and 114 deletions
  1. 38 38
      .README.bbcode
  2. 40 40
      README.md
  3. 42 36
      installJRMC

+ 38 - 38
.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]

+ 40 - 40
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`
 

+ 42 - 36
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