diff --git a/.gitignore b/.gitignore index a84bdc0..f77d0e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .old/ .vscode/ -README.bbcode installJRMC.zip README.shdoc.md output/ diff --git a/README.md b/README.md index 418b5c7..c4eee90 100755 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ $ installJRMC --help --compat Build/install MC without minimum dependency version requirements --mcversion VERSION - Build or install a specific MC version, ex. "34.0.20" or "33" (default: latest) + Build or install a specific MC version, ex. "34.0.31" or "33" (default: latest) --mcrepo REPO Specify the MC repository, ex. "bullseye", "bookworm", "noble", etc (default: latest official) --arch ARCH @@ -114,9 +114,9 @@ Multiple services (but not `--service-types`) can be installed at one time using Install the latest version of MC from the best available repository. -* `installJRMC --mcversion 32 --debug` +* `installJRMC --mcversion 33 --debug` - Install the latest version of MC32 from the best available repository with debugging output. + Install the latest version of MC33 from the best available repository with debugging output. * `installJRMC --install local --compat` @@ -126,9 +126,9 @@ Multiple services (but not `--service-types`) can be installed at one time using Install MC from the repository and start/enable `jriver-mediacenter.service` as a user service. -* `installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 34.0.20` +* `installJRMC --install local --compat --restorefile /path/to/license.mjr --mcversion 34.0.31` - Build and install an MC 34.0.20 compatibility RPM locally and activate it using the `/path/to/license.mjr` + Build and install an MC 34.0.31 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 24369c1..1058416 100755 --- a/installJRMC +++ b/installJRMC @@ -19,8 +19,8 @@ # * Avoid execute() for stdout shopt -s extglob -declare -g SCRIPT_VERSION="1.6.6-dev" -declare -g MC_VERSION="34.0.20" # do find all replace +declare -g SCRIPT_VERSION="1.34.0-dev" +declare -g MC_VERSION="34.0.31" # do find all replace declare -g MC_REPO="bookworm" # should match the MC_VERSION declare -g BOARD_ID="89.0" # MC34 declare -gi UPDATE_SWITCH=1 # set to 0 to disable automatic self-update @@ -151,11 +151,11 @@ parse_input() { if [[ $1 =~ ^([0-9]+)(\.[0-9]+\.[0-9]+)?(-([0-9]+))?$ ]]; then # Major version is required USER_MC_MVERSION="${BASH_REMATCH[1]}" - # If we get the full version, use it - [[ -n ${BASH_REMATCH[2]} ]] && USER_MC_VERSION="${BASH_REMATCH[1]}${BASH_REMATCH[2]}" # Set default release to 1 if not provided USER_MC_RELEASE="${BASH_REMATCH[4]:-1}" - + # If we get the full version, use it + [[ -n ${BASH_REMATCH[2]} ]] && USER_MC_VERSION="${BASH_REMATCH[1]}${BASH_REMATCH[2]}" + # Set major version defaults case "$USER_MC_MVERSION" in 34) MC_VERSION="${USER_MC_VERSION:-$MC_VERSION}" MC_REPO="bookworm" BOARD_ID="89.0" ;; @@ -291,7 +291,7 @@ init() { raspbian) ID="debian" ;; manjaro|arch) ID="arch" if ((REPO_INSTALL_SWITCH)); then - debug "Automatically using --install=local for SUSE" + debug "Automatically using --install=local for Arch" REPO_INSTALL_SWITCH=0 BUILD_SWITCH=1 LOCAL_INSTALL_SWITCH=1 @@ -480,27 +480,20 @@ install_package() { # Filter out already installed packages to create pkg_array for pkg in "$@"; do + # Use alias if present, otherwise just pkg itself + pkg_names=("$pkg") if [[ -v pkg_aliases[$pkg] ]]; then debug "Aliasing $pkg to ${pkg_aliases[$pkg]}" - IFS=' ' read -ra pkgs <<< "${pkg_aliases[$pkg]}" - for _pkg in "${pkgs[@]}"; do - if ((no_install_check)) || - ! { command -v "$_pkg" &>/dev/null || - "${PKG_QUERY[@]}" "$_pkg" &>/dev/null; }; then - pkg_array+=("$_pkg") - else - debug "$_pkg is already installed, skipping installation" - fi - done - else - if ((no_install_check)) || - ! { command -v "$pkg" &>/dev/null || - "${PKG_QUERY[@]}" "$pkg" &>/dev/null; }; then - pkg_array+=("$pkg") - else - debug "$pkg is already installed, skipping installation" - fi + IFS=' ' read -ra pkg_names <<< "${pkg_aliases[$pkg]}" fi + for p in "${pkg_names[@]}"; do + if (( no_install_check )) || + ! { command -v "$p" &>/dev/null || "${PKG_QUERY[@]}" "$p" &>/dev/null; }; then + pkg_array+=("$p") + else + debug "$p is already installed, skipping installation" + fi + done done # Generate installation flags based on the distribution @@ -520,7 +513,7 @@ install_package() { ((no_gpg_check)) && install_flags+=(--allow-unsigned-rpm) ;; esac - # Install packages if any need installation + # Install packages if [[ ${#pkg_array[@]} -gt 0 ]]; then if ! execute "${PKG_INSTALL[@]}" "${install_flags[@]}" "${pkg_array[@]}"; then ((silent)) || err "Failed to install ${pkg_array[*]}" @@ -569,7 +562,7 @@ install_external_repos() { # Install mesa-va-drivers-freeworld separately from the RPM using dnf swap install_mesa_freeworld ;; - suse) : # TODO may be needed if X11_XOrg is unavailable in default repos + suse) : # TODO may be needed if X11_XOrg is made unavailable in default repos # if ! zypper repos | grep -q "X11_XOrg"; then # echo "Installing the X11 repository" # execute sudo zypper --non-interactive --quiet addrepo \ @@ -625,7 +618,7 @@ install_mc_repo() { repo_file="/etc/apt/sources.list.d/jriver.sources" fi - # Remove old repo + # Remove deprecated repo files old_repo_files=( "/etc/apt/sources.list.d/jriver.list" "/etc/apt/sources.list.d/jriver-beta.list" @@ -924,9 +917,14 @@ build_rpm() { echo "Build successful. The RPM file is located at: $MC_RPM" else err "Build failed" - # After failire, remove the source DEB and reaquire it on next run - [[ -f $MC_DEB ]] && echo "Removing source DEB" && execute sudo rm -f "$MC_DEB" - exit 1 + # After failure, remove the source DEB and reaquire it on next run + if [[ -f $MC_DEB ]]; then + echo "Removing source DEB" + if ! execute rm -f "$MC_DEB"; then + execute sudo rm -f "$MC_DEB" + fi + fi + return 1 fi } @@ -1110,7 +1108,6 @@ install_mc_arch() { # @description Copy the RPM to createrepo-webroot and run createrepo as the createrepo-user run_createrepo() { debug "${FUNCNAME[0]}()" - local -a cr_cmd install_package createrepo_c @@ -1135,15 +1132,10 @@ run_createrepo() { fi # Run createrepo - cr_cmd=(sudo -u "$CREATEREPO_USER" createrepo -q "$CREATEREPO_WEBROOT") - [[ -d $CREATEREPO_WEBROOT/repodata ]] && cr_cmd+=(--update) - - if ! execute "${cr_cmd[@]}"; then - cr_cmd=(sudo createrepo "$CREATEREPO_WEBROOT") - [[ -d $CREATEREPO_WEBROOT/repodata ]] && cr_cmd+=(--update) - - if ! (execute "${cr_cmd[@]}" || - execute sudo chown -R "$CREATEREPO_USER:$CREATEREPO_USER" "$CREATEREPO_WEBROOT"); then + local -a cr_opts=(-q "$CREATEREPO_WEBROOT") + # [[ -d "$CREATEREPO_WEBROOT/repodata" ]] && cr_opts+=(--update) # TODO temporarily disabled for legacy createrepo + if ! execute sudo -u "$CREATEREPO_USER" createrepo "${cr_opts[@]}"; then + if ! (execute sudo createrepo "${cr_opts[@]}" && execute sudo chown -R "$CREATEREPO_USER:$CREATEREPO_USER" "$CREATEREPO_WEBROOT"); then err "createrepo failed" return 1 fi @@ -1727,9 +1719,10 @@ update() { # @description installJRMC main function main() { - debug "${FUNCNAME[0]}()" "$@" + debug "${FUNCNAME[0]}()" "$@" # prints function name and arguments echo "Starting installJRMC $SCRIPT_VERSION" + if ((DEBUG)); then echo "Debugging on" else