ソースを参照

Remove automode and a small refactor

bryan 5 年 前
コミット
05a2d8eaea
2 ファイル変更129 行追加90 行削除
  1. 6 2
      README.md
  2. 123 88
      install_MC_fedora.sh

+ 6 - 2
README.md

@@ -6,15 +6,19 @@
 
 **How to run:**
 
+`./install_MC_fedora.sh [-v|--version] [version] [-b|--build-mode] [-i|--install-repo] [-p|--password]`
+
 1. Download the script
 
-2. Install or update MC (the script will ask for your sudo password to install packages):
-`./install_MC_fedora.sh 25.0.41` (where 25.0.41 is the current Debian AMD64 version)
+2A. Install or update MC locally (the script will ask for your sudo password to install packages):
+`./install_MC_fedora.sh 25.0.48` (where 25.0.48 is the current Debian AMD64 version)
 
 If no version number is specified the script will try to scrape Interact for the latest MC version
 
 If beta version, the script will prompt for the beta team password
 
+2B. Install the repo file: `./install_MC_fedora.sh -i`
+
 3. (Optional) Install your .mjr license:
   `mediacenter25 /RestoreFromFile YOURMEDIACENTER25MJRFILE.mjr`
 

+ 123 - 88
install_MC_fedora.sh

@@ -1,9 +1,10 @@
 #!/usr/bin/env bash
 shopt -s extglob
 
-# Usage: ./install_MC_fedora.sh [-v|--version] [version] [-a|--auto] [-b|--build-only] [-i|--install-repo]
-# e.g. ./install_MC_fedora.sh -v 25.0.41
-# If no version number is specified (i.e. ./install_MC_fedora.sh or ./install_MC_fedora.sh --build-only), automatic mode will be attempted
+# Usage: ./install_MC_fedora.sh [-v|--version] [version] [-b|--build-mode] [-i|--install-repo] [-p|--password]
+# e.g. ./install_MC_fedora.sh -v 25.0.48
+# If no version number is specified (i.e. ./install_MC_fedora.sh or ./install_MC_fedora.sh -b), the script
+# will attempt to install the latest version from Interact
 
 # URL for latest MC for Linux board (for automatic version scraping)
 boardurl="https://yabb.jriver.com/interact/index.php/board,62.0.html"
@@ -12,10 +13,10 @@ boardurl="https://yabb.jriver.com/interact/index.php/board,62.0.html"
 ####### FUNCTIONS ########
 ##########################
 
-parse_inp () {
+parse_input_and_version () {
+
     # clear user vars
-    build_only_mode=false
-    auto_mode=false
+    build_mode=false
     install_mode=false
 
     # parse user input
@@ -25,51 +26,56 @@ parse_inp () {
                 echo "Installing repo file!"
                 install_mode=true
                 ;;
-            -a |--auto )
-                echo "Using auto mode!"
-                auto_mode=true
-                ;;
-            -b |--build-only )
-                echo "Using build-only mode!"
-                build_only_mode=true
+            -b |--build-mode )
+                echo "Using build mode!"
+                build_mode=true
                 ;;
             -v |--version )
-                echo "Using manual mode!"
                 shift
                 version="$1"
                 ;;
+            -p |--password )
+                shift
+                betapwd="$1"
+                ;;
             +([0-9]).[0-9].+([0-9]) )
-                echo "Using manual mode!"
                 version="$1"
+                ;;
         esac
         shift
     done
 
-    # if no version number specified, enter auto_mode
-    [ -z $version ] && [ $auto_mode == false ] %% [ $install_mode == false ] && echo "Using auto mode!" && auto_mode=true
+    # If version number not supplied by user, scrape Interact
+    [ -z "$version" ] && version=$(curl -s "$boardurl" | grep -o "2[0-9]\.[0-9]\.[0-9]\+" | head -n 1)
+    [ -z "$version" ] && read -t 60 -p "Version number cannot be scraped, re-enter it now manually, otherwise Ctrl-C to exit: " version
+    [ -z "$version" ] && echo "No version number available, exiting..." && exit 0
+
+    # parse version number
+    variation=${version##*.}
+    mversion=${version%%.*}
 }
 
 
 find_os () {
 
-    if [ $build_only_mode == false ]; then
+    if [ "$build_mode" == false ]; then
         if [ -e /etc/os-release ]; then
             source /etc/os-release
-            if [ $ID = "centos" ] && [ "$VERSION_ID" -ge "8" ]; then
+            if [ "$ID" = "centos" ] && [ "$VERSION_ID" -ge "8" ]; then
                 ID="el"
                 SID="el"
                 PM="yum"
-            elif [ $ID = "fedora" ]; then
+            elif [ "$ID" = "fedora" ]; then
                 ID="fedora"
                 SID="fc"
                 PM="dnf"
-            elif [ $install_mode == false ]; then
-                echo "You are not running Fedora or CentOS >=8, falling back to build-only mode..."
-                build_only_mode=true
+            elif [ "$install_mode" == false ]; then
+                echo "You are not running Fedora or CentOS >=8, falling back to build mode..."
+                build_mode=true
             fi
-        elif [ $install_mode == false ]; then
-            echo "You are not running Fedora or CentOS >=8, falling back to build-only mode..."
-            build_only_mode=true
+        elif [ "$install_mode" == false ]; then
+            echo "You are not running Fedora or CentOS >=8, falling back to build mode..."
+            build_mode=true
         fi
     fi
 }
@@ -77,62 +83,41 @@ find_os () {
 
 get_source_deb () {
 
-    # Skip if in install mode
-    [ $install_mode == true ] && return
-
-    # Get version number from user input or scrape Interact
-    if [ $auto_mode == true ]; then
-        version=$(curl -s "${boardurl}" | grep -o "2[0-9]\.[0-9]\.[0-9]\+" | head -n 1)
-        while [ -z ${version} ]; do
-            read -p "Version number cannot be scraped, re-enter it now manually, otherwise Ctrl-C to exit: " version
-        done
+    # If deb file exists, skip download
+    if [ -f $builddir/SOURCES/MediaCenter-${version}-amd64.deb ]; then
+        echo "Using local DEB file: $builddir/SOURCES/MediaCenter-${version}-amd64.deb"
+        return
     fi
 
-    # parse version number
-    variation=${version##*.}
-    mversion=${version%%.*}
-
-    # in automatic mode and build only mode, skip building/reinstalling the same version
-    if [ $auto_mode == true ]; then
-        if [ $build_only_mode == true ]; then
-            if [ -f $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.x86_64.rpm ]; then
-                echo "$builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.x86_64.rpm already exists!"
-                exit 0
-            fi
-        else
-            installed_ver="$(rpm --quiet --query MediaCenter)"
-            to_be_installed_ver="MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64"
-            if [ "${installed_ver}" == "${to_be_installed_ver}" ]; then
-                echo "MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64 is already installed!"
-                exit 0
-            fi
-        fi
+    # Acquire DEB
+    echo "Attempting to download MC $version DEB file..."
+    wget -q -O $builddir/SOURCES/MediaCenter-${version}-amd64.deb \
+               http://files.jriver.com/mediacenter/channels/v${mversion}/latest/MediaCenter-${version}-amd64.deb
+    if [ $? -ne 0 ]; then
+        echo "Specified Media Center version not found! Retrying the test repo..."
+        wget -q -O $builddir/SOURCES/MediaCenter-${version}-amd64.deb \
+                   http://files.jriver.com/mediacenter/test/MediaCenter-${version}-amd64.deb
+    fi
+    if [ $? -ne 0 ]; then
+        [ -z $betapwd ] && read -t 60 -p "Not found in test repo, if beta version, enter beta password to retry, otherwise Ctrl-C to exit: " betapwd
+        [ -z $betapwd ] && echo "Cannot find DEB file, re-check version number or beta password. Exiting..." && exit 1
+        wget -q -O $builddir/SOURCES/MediaCenter-${version}-amd64.deb \
+                   http://files.jriver.com/mediacenter/channels/v${mversion}/beta/${betapwd}/MediaCenter-${version}-amd64.deb
+        [ $? -ne 0 ] && echo "Cannot find DEB file, re-check version number or beta password. Exiting..." && exit 1
     fi
 
-    # Acquire DEB if missing
     if [ -f $builddir/SOURCES/MediaCenter-${version}-amd64.deb ]; then
-        echo "Using local DEB file: $builddir/SOURCES/MediaCenter-${version}-amd64.deb"
+        echo "Downloaded MC $version DEB file to $builddir/SOURCES/MediaCenter-${version}-amd64.deb"
     else
-        echo "Downloading source DEB..."
-        wget -O $builddir/SOURCES/MediaCenter-${version}-amd64.deb http://files.jriver.com/mediacenter/channels/v${mversion}/latest/MediaCenter-${version}-amd64.deb
-        if [ $? -ne 0 ]; then
-            echo "Specified Media Center version not found! Retrying the test repo..."
-            wget -O $builddir/SOURCES/MediaCenter-${version}-amd64.deb http://files.jriver.com/mediacenter/test/MediaCenter-${version}-amd64.deb
-            while [ $? -ne 0 ]; do
-                read -p "Not found in test repo, if beta version, enter beta password to retry, otherwise Ctrl-C to exit: " betapwd
-                wget -O $builddir/SOURCES/MediaCenter-${version}-amd64.deb http://files.jriver.com/mediacenter/channels/v${mversion}/beta/${betapwd}/MediaCenter-${version}-amd64.deb
-            done
-        fi
+        echo "Downloaded DEB file missing or corrupted, exiting..."
+        exit 1
     fi
 }
 
 
 install_dependencies () {
 
-    # Skip if in install mode
-    [ $install_mode == true ] && return
-
-    if [ $build_only_mode == false ]; then
+    if [ $build_mode == false ]; then
         if ! rpm --quiet --query rpmfusion-free-release; then echo "Installing rpmfusion-free-release repo..."; \
             sudo ${PM} -y --nogpgcheck install https://download1.rpmfusion.org/free/${ID}/rpmfusion-free-release-${VERSION_ID}.noarch.rpm; fi
         if ! rpm --quiet --query rpm-build; then echo "Installing rpm-build..."; sudo ${PM} install rpm-build -y; fi
@@ -146,8 +131,14 @@ install_dependencies () {
 
 build_rpm () {
 
-    # Skip if in install mode
-    [ $install_mode == true ] && return
+    # skip rebuilding the rpm if it exists
+    if [ -f $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.x86_64.rpm ]; then
+        echo "$builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.x86_64.rpm already exists! Skipping build step..."
+        return
+    elif [ -f $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm ]; then 
+        echo "$builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm already exists! Skipping build step..."
+        return
+    fi
 
     # If necessary, make build directories
     [ -d SOURCES ] || mkdir -p SOURCES
@@ -161,7 +152,7 @@ build_rpm () {
     echo 'Group:   Applications/Media' >> SPECS/mediacenter.spec
     echo "Source0: http://files.jriver.com/mediacenter/channels/v${mversion}/latest/MediaCenter-%{_version}-amd64.deb" >> SPECS/mediacenter.spec
     echo '' >> SPECS/mediacenter.spec
-    if [ $build_only_mode == false ]; then
+    if [ $build_mode == false ]; then
         echo 'BuildRequires: rpm >= 4.11.0' >> SPECS/mediacenter.spec
         echo 'BuildRequires: dpkg' >> SPECS/mediacenter.spec
     fi
@@ -198,6 +189,7 @@ build_rpm () {
 
     # Run rpmbuild
     cd ${builddir}/SPECS
+    echo "Building version ${version}, please wait..."
     rpmbuild --quiet --define="%_topdir $builddir" --define="%_variation $variation" --define="%_tversion ${mversion}" \
              --define="%_version ${version}" --define="%_libdir /usr/lib" -bb mediacenter.spec
 }
@@ -205,49 +197,92 @@ build_rpm () {
 
 install_rpm () {
 
-    # Install mode
-    if [ $install_mode == true ]; then
+    # Skip reinstalling the same version
+    installed_ver="$(rpm --quiet --query MediaCenter)"
+    to_be_installed_ver="MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64"
+    if [ "${installed_ver}" == "${to_be_installed_ver}" ]; then
+        echo "MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64 is already installed! Exiting..."
+        return
+    fi
+
+    if [ -f $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm ]; then
+        echo "Attempting to install version ${version}..."
+        sudo ${PM} install $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm -y
+        if [ $? -eq 0 ]; then
+            echo "JRiver Media Center ${version} was installed successfully!" 
+        else
+            echo "JRiver Media Center ${version} installation failed!"
+            exit 1
+        fi
+    else
+        echo "$builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm is missing!"
+        echo "JRiver Media Center ${version} installation failed!"
+        exit 1
+    fi
+}
+
 
-        echo "Attempting to install repo file"
-        sudo bash -c 'cat << EOF > /etc/yum.repos.d/jriver.repo
+install_repo () {
+
+    echo "Installing repo file to /etc/yum.repos.d/jriver.repo"
+    sudo bash -c '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'
-        echo "Attempting to install JRiver Media Center version ${version} from repo..."
-        sudo ${PM} update && sudo ${PM} install MediaCenter -y
 
-    elif [ -f $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm ]; then
-        echo "Attempting to install version ${version}..."
-        sudo ${PM} install $builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm -y && echo "JRiver Media Center ${version} installed successfully!"
+    echo "Installing latest JRiver Media Center from repo..."
+    sudo ${PM} update && sudo ${PM} install MediaCenter -y
+    if [ $? -eq 0 ]; then
+        echo "JRiver Media Center installed successfully!"
+        echo "You can check for future MC updates by running \"sudo dnf|yum update\""
+        echo "To remove the repo file run \"sudo rm /etc/yum.repos.d/jriver.repo\""
     else
-        echo "$builddir/RPMS/x86_64/MediaCenter-${mversion}-${variation}.${SID}${VERSION_ID}.x86_64.rpm is missing!"
-        echo "Installation Failed!"
+        echo "JRiver Media Center installation failed!"
         exit 1
     fi
+}
+
+
+symlink_certs_and_restore () {
 
-    # Symlink certificates
     if [ ! -e /etc/ssl/certs/ca-certificates.crt ] && [ -e /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem ]; then
         echo "Symlinking ca-certificates for license registration..."
         sudo ln -s /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/ssl/certs/ca-certificates.crt
+        read -p "To install your .mjr license, enter the full filepath to your .mjr file, or enter Ctrl-C to skip: " restorefile
+        while [ ! -z "$restorefile" ] || [ ! -f "$restorefile" ]; do
+            echo "File not found!"
+            read -p "To install your .mjr license, enter the full filepath to your .mjr file, or enter Ctrl-C to skip: " restorefile
+        done
+        mediacenter${mversion} /RestoreFromFile "$restorefile"
     fi
 }
 
 
 
+
+
 ##########################
 ######## EXECUTE #########
 ##########################
 
 # set build directory to current path
 builddir="$(pwd)"
-parse_inp "${@}"
+
+parse_input_and_version "${@}"
+
+[ "$install_mode" == true ] && find_os \
+                            && install_repo \
+                            && symlink_certs_and_restore \
+                            && exit 0
+
 find_os
 get_source_deb
 install_dependencies
-echo "Building version ${version}, please wait..."
 build_rpm
-[ $build_only_mode == false ] && install_rpm
+[ "$build_mode" == true ] && exit 0
+install_rpm
+symlink_certs_and_restore
 
 exit 0