Small refactor
This commit is contained in:
211
installJRMC
211
installJRMC
@@ -103,80 +103,6 @@ printHelp() {
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
init() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
|
||||
declare version_source
|
||||
declare -g MCVERSION MVERSION MCRPM
|
||||
declare -g CREATEREPO_USER="${CREATEREPO_USER:-$USER}"
|
||||
|
||||
getOS
|
||||
|
||||
# Make sure universe repo is installed on Ubuntu
|
||||
if [[ "$ID" == "ubuntu|neon" ]]; then
|
||||
if ! grep ^deb /etc/apt/sources.list|grep -q universe; then
|
||||
sudo add-apt-repository universe
|
||||
fi
|
||||
fi
|
||||
|
||||
# Agnostic commands
|
||||
bash_cmd(){ sudo bash -c "$@"; }
|
||||
cp_cmd(){ sudo cp -nf "$@"; }
|
||||
mkdir_cmd(){ sudo mkdir -p "$@"; }
|
||||
chown_cmd(){ sudo chown "$1":"$1" -R "${@:2}"; }
|
||||
ln_cmd(){ sudo ln -s "$@"; }
|
||||
|
||||
# OS-specific commands
|
||||
if [[ "$ID" =~ ^(fedora|centos)$ ]]; then
|
||||
pkg_install(){ sudo dnf install -y "$@"; }
|
||||
pkg_remove(){ sudo dnf remove -y "$@"; }
|
||||
pkg_update(){ sudo dnf makecache; }
|
||||
pkg_query(){ rpm -q "$@"; }
|
||||
firewall_cmd(){ sudo firewall-cmd "$@"; }
|
||||
elif [[ "$ID" =~ ^(debian|ubuntu|linuxmint|neon)$ ]]; then
|
||||
pkg_install(){ sudo apt-get install -y -q0 "$@"; }
|
||||
pkg_remove(){ sudo apt-get remove --auto-remove -y -q0 "$@"; }
|
||||
pkg_update(){ sudo apt-get update -y -q0; }
|
||||
pkg_query(){ dpkg -s "$@"; }
|
||||
firewall_cmd(){ sudo ufw "$@"; }
|
||||
elif [[ "$ID" =~ ^opensuse.* ]]; then
|
||||
pkg_install(){ sudo zypper --non-interactive -q install --force --no-confirm "$@"; }
|
||||
pkg_remove(){ sudo zypper --non-interactive -q remove --clean-deps "$@"; }
|
||||
pkg_update(){ sudo zypper --non-interactive -q refresh jriver; }
|
||||
pkg_query(){ rpm -q "$@"; }
|
||||
firewall_cmd(){ sudo firewall-cmd "$@"; }
|
||||
fi
|
||||
|
||||
parseInput "$@"
|
||||
|
||||
# Select MC version to work with
|
||||
if [[ -v MCVERSION ]]; then
|
||||
version_source="user input"
|
||||
else
|
||||
getLatestVersion
|
||||
fi
|
||||
[[ ! "$MCVERSION" =~ ([0-9]+.[0-9]+.[0-9]+) ]] && err "Invalid version number" && exit 1
|
||||
|
||||
echo "Using MC version $MCVERSION determined by $version_source"
|
||||
[[ "$version_source" != "user input" ]] && echo "To override, use --mcversion"
|
||||
|
||||
# Extract major version number
|
||||
MVERSION="${MCVERSION%%.*}"
|
||||
|
||||
# Set target package name
|
||||
if [[ "$ID" =~ ^(fedora|centos|opensuse.*)$ ]]; then
|
||||
MCRPM="MediaCenter"
|
||||
[[ "$version_source" == "user input" ]] && MCRPM="$MCRPM-$MCVERSION"
|
||||
elif [[ "$ID" =~ ^(debian|ubuntu|linuxmint|neon)$ ]]; then
|
||||
MCRPM="mediacenter$MVERSION"
|
||||
[[ "$version_source" == "user input" ]] && MCRPM="$MCRPM=$MCVERSION"
|
||||
fi
|
||||
|
||||
# Minor version (not needed)
|
||||
# _variation="${MCVERSION##*.}"
|
||||
}
|
||||
|
||||
# Helpers
|
||||
debug() { (( DEBUG )) && [[ $# -gt 0 ]] && echo "Debug: $*"; }
|
||||
err() { echo "Error: $*" >&2; }
|
||||
@@ -240,6 +166,7 @@ parseInput() {
|
||||
case "$1" in
|
||||
rpm)
|
||||
RPM_BUILD_SWITCH=1
|
||||
RPM_INSTALL_SWITCH=1
|
||||
;;
|
||||
deb)
|
||||
DEB_INSTALL_SWITCH=1
|
||||
@@ -361,10 +288,10 @@ getLatestVersion() {
|
||||
installPackage wget
|
||||
if MCVERSION=$(wget -qO- "$BOARDURL" | grep -o "[0-9][0-9]\.[0-9]\.[0-9]\+" | head -n 1); then
|
||||
version_source="webscrape"
|
||||
fi
|
||||
|
||||
if ! [[ -v MCVERSION ]]; then
|
||||
err "MC version could not be determined. Please check the boardurl: $BOARDURL or specify a version manually using --MCVERSION"
|
||||
else
|
||||
err "$BOARDURL could not be parsed"
|
||||
err "MC version could not be determined"
|
||||
err "Specify a version manually using --mcversion"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@@ -429,7 +356,6 @@ installPackage() {
|
||||
fi
|
||||
|
||||
for pkg in "$@"; do
|
||||
# Check for alias
|
||||
if [[ ! -v nocheck && -v PKG_ALIASES[$pkg] ]]; then
|
||||
pkg=${PKG_ALIASES[$pkg]}
|
||||
fi
|
||||
@@ -459,7 +385,7 @@ addRepo() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
|
||||
if [[ "$ID" =~ ^(fedora|centos)$ ]]; then
|
||||
bash_cmd 'cat <<- EOF > /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
|
||||
@@ -736,10 +662,6 @@ runCreaterepo() {
|
||||
|
||||
installPackage createrepo_c
|
||||
|
||||
# if [[ "$CREATEREPO_USER" != "$USER" ]]
|
||||
|
||||
|
||||
|
||||
# If the webroot does not exist, create it
|
||||
if [[ ! -d "$CREATEREPO_WEBROOT" ]]; then
|
||||
#cr_mkdir_cmd="sudo -u $CREATEREPO_USER mkdir -p $CREATEREPO_WEBROOT"
|
||||
@@ -870,7 +792,7 @@ openFirewall() {
|
||||
# Debian ufw package state is broken on fresh installations
|
||||
installPackage ufw
|
||||
if [[ ! -f "/etc/ufw/applications.d/$1" ]]; then
|
||||
bash_cmd "cat <<- EOF > /etc/ufw/applications.d/$1
|
||||
sudo bash -c "cat <<- EOF > /etc/ufw/applications.d/$1
|
||||
[$1]
|
||||
title=$1
|
||||
description=$1 installed by installJRMC
|
||||
@@ -974,8 +896,7 @@ setDisplay() {
|
||||
setServiceVars() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
|
||||
declare -g SERVICE_NAME SERVICE_FNAME TIMER_NAME TIMER_FNAME USER_STRING
|
||||
|
||||
declare -g SERVICE_NAME SERVICE_FNAME TIMER_NAME TIMER_FNAME USER_STRING EXEC_USER
|
||||
declare service_system_dir="/usr/lib/systemd/system"
|
||||
declare service_user_dir="$USER_HOME/.config/systemd/user"
|
||||
|
||||
@@ -989,11 +910,13 @@ setServiceVars() {
|
||||
|
||||
if [[ "$SERVICE_TYPE" == "system" ]]; then # i.e. systemd system service
|
||||
service_dir="$service_system_dir"
|
||||
EXEC_USER="root"
|
||||
systemctl_reload_cmd(){ sudo systemctl daemon-reload; }
|
||||
systemctl_enable_cmd(){ sudo systemctl enable --now "$@"; }
|
||||
systemctl_disable_cmd(){ sudo systemctl disable --now "$@"; }
|
||||
elif [[ "$SERVICE_TYPE" == "user" ]]; then # i.e. systemd user service
|
||||
service_dir="$service_user_dir"
|
||||
EXEC_USER="$USER"
|
||||
systemctl_reload_cmd(){ systemctl --user daemon-reload; }
|
||||
systemctl_enable_cmd(){ systemctl --user enable --now "$@"; }
|
||||
systemctl_disable_cmd(){ systemctl --user disable --now "$@"; }
|
||||
@@ -1025,7 +948,7 @@ setServiceVars() {
|
||||
service_jriver-mediacenter() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
|
||||
bash_cmd "cat <<- EOF > $SERVICE_FNAME
|
||||
sudo -u "$EXEC_USER" -c "cat <<- EOF > $SERVICE_FNAME
|
||||
[Unit]
|
||||
Description=JRiver Media Center $MVERSION
|
||||
After=graphical.target
|
||||
@@ -1080,7 +1003,7 @@ service_jriver-xvnc() {
|
||||
start_cmd="/usr/bin/vncserver $NEXT_DISPLAY -geometry 1440x900 -alwaysshared -rfbauth $HOME/.vnc/jrmc_passwd -autokill -xstartup /usr/bin/mediacenter$MVERSION"
|
||||
fi
|
||||
|
||||
bash_cmd "cat <<- EOF > $SERVICE_FNAME
|
||||
sudo -u "$EXEC_USER" -c "cat <<- EOF > $SERVICE_FNAME
|
||||
[Unit]
|
||||
Description=Remote desktop service (VNC)
|
||||
After=syslog.target network.target
|
||||
@@ -1133,7 +1056,7 @@ service_jriver-x11vnc() {
|
||||
start_cmd="/usr/bin/x11vnc -display $DISPLAY -noscr -auth guess -forever -bg -rfbauth $HOME/.vnc/jrmc_passwd"
|
||||
fi
|
||||
|
||||
bash_cmd "cat <<-EOF > $SERVICE_FNAME
|
||||
sudo -u "$EXEC_USER" -c "cat <<-EOF > $SERVICE_FNAME
|
||||
[Unit]
|
||||
Description=x11vnc
|
||||
After=multi.service
|
||||
@@ -1166,7 +1089,7 @@ service_jriver-createrepo() {
|
||||
|
||||
declare id="${TARGET:-$ID}"
|
||||
|
||||
bash_cmd "cat <<-EOF > $SERVICE_FNAME
|
||||
sudo -u "$EXEC_USER" -c "cat <<-EOF > $SERVICE_FNAME
|
||||
[Unit]
|
||||
Description=Builds JRiver Media Center RPM file, moves it to the repo dir, and runs createrepo
|
||||
|
||||
@@ -1178,7 +1101,7 @@ service_jriver-createrepo() {
|
||||
WantedBy=default.target
|
||||
EOF"
|
||||
|
||||
bash_cmd "cat <<-EOF > $TIMER_FNAME
|
||||
sudo -u "$EXEC_USER" -c "cat <<-EOF > $TIMER_FNAME
|
||||
[Unit]
|
||||
Description=Run JRiver MC rpmbuild hourly
|
||||
|
||||
@@ -1433,20 +1356,80 @@ tests() {
|
||||
main() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
|
||||
declare service
|
||||
declare version_source
|
||||
declare -g MCVERSION MVERSION MCRPM
|
||||
declare -g CREATEREPO_USER="${CREATEREPO_USER:-$USER}"
|
||||
|
||||
init "$@"
|
||||
getOS
|
||||
|
||||
# Some distros need external repos installed for MC libraries
|
||||
if [[ "$ID" == "ubuntu|neon" ]]; then
|
||||
echo "Adding universe repository"
|
||||
if ! grep ^deb /etc/apt/sources.list|grep -q universe; then
|
||||
sudo add-apt-repository universe
|
||||
fi
|
||||
elif [[ "$ID" == "centos" ]]; then
|
||||
echo "Adding EPEL repository"
|
||||
installPackage epel-release
|
||||
fi
|
||||
|
||||
# Agnostic commands
|
||||
bash_cmd(){ sudo bash -c "$@"; }
|
||||
cp_cmd(){ sudo cp -nf "$@"; }
|
||||
mkdir_cmd(){ sudo mkdir -p "$@"; }
|
||||
chown_cmd(){ sudo chown "$1":"$1" -R "${@:2}"; }
|
||||
ln_cmd(){ sudo ln -s "$@"; }
|
||||
|
||||
# OS-specific commands
|
||||
if [[ "$ID" =~ ^(fedora|centos)$ ]]; then
|
||||
pkg_install(){ sudo dnf install -y "$@"; }
|
||||
pkg_remove(){ sudo dnf remove -y "$@"; }
|
||||
pkg_update(){ sudo dnf makecache; }
|
||||
pkg_query(){ rpm -q "$@"; }
|
||||
firewall_cmd(){ sudo firewall-cmd "$@"; }
|
||||
elif [[ "$ID" =~ ^(debian|ubuntu|linuxmint|neon)$ ]]; then
|
||||
pkg_install(){ sudo apt-get install -y -q0 "$@"; }
|
||||
pkg_remove(){ sudo apt-get remove --auto-remove -y -q0 "$@"; }
|
||||
pkg_update(){ sudo apt-get update -y -q0; }
|
||||
pkg_query(){ dpkg -s "$@"; }
|
||||
firewall_cmd(){ sudo ufw "$@"; }
|
||||
elif [[ "$ID" =~ ^opensuse.* ]]; then
|
||||
pkg_install(){ sudo zypper --non-interactive -q install --force --no-confirm "$@"; }
|
||||
pkg_remove(){ sudo zypper --non-interactive -q remove --clean-deps "$@"; }
|
||||
pkg_update(){ sudo zypper --non-interactive -q refresh jriver; }
|
||||
pkg_query(){ rpm -q "$@"; }
|
||||
firewall_cmd(){ sudo firewall-cmd "$@"; }
|
||||
fi
|
||||
|
||||
parseInput "$@"
|
||||
|
||||
# Select MC version to work with
|
||||
if [[ -v MCVERSION ]]; then
|
||||
version_source="user input"
|
||||
else
|
||||
getLatestVersion
|
||||
fi
|
||||
[[ ! "$MCVERSION" =~ ([0-9]+.[0-9]+.[0-9]+) ]] && err "Invalid version number" && exit 1
|
||||
echo "Using MC version $MCVERSION determined by $version_source"
|
||||
[[ "$version_source" != "user input" ]] && echo "To override, use --mcversion"
|
||||
|
||||
# Extract major version number
|
||||
MVERSION="${MCVERSION%%.*}"
|
||||
|
||||
# Set target package name
|
||||
if [[ "$ID" =~ ^(fedora|centos|opensuse.*)$ ]]; then
|
||||
MCRPM="MediaCenter"
|
||||
[[ "$version_source" == "user input" ]] && MCRPM="$MCRPM-$MCVERSION"
|
||||
elif [[ "$ID" =~ ^(debian|ubuntu|linuxmint|neon)$ ]]; then
|
||||
MCRPM="mediacenter$MVERSION"
|
||||
[[ "$version_source" == "user input" ]] && MCRPM="$MCRPM=$MCVERSION"
|
||||
fi
|
||||
|
||||
# Uninstall and exit
|
||||
if (( UNINSTALL_SWITCH )); then
|
||||
uninstall
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Install dependency dependencies :-)
|
||||
[[ "$ID" == "centos" ]] && installPackage epel-release
|
||||
|
||||
# Install MC using package manager
|
||||
if (( REPO_INSTALL_SWITCH )); then
|
||||
if [[ "$ID" =~ ^opensuse.*$ ]]; then
|
||||
echo "A SUSE repository is not yet available."
|
||||
@@ -1466,7 +1449,9 @@ main() {
|
||||
|
||||
if (( DEB_INSTALL_SWITCH )); then
|
||||
acquireDeb
|
||||
if (( COMPAT_SWITCH )); then
|
||||
declare extract_dir && extract_dir="$(mktemp -d)"
|
||||
MCDEB="$MCDEB.compat"
|
||||
ar x --output "$extract_dir" "$MCDEB"
|
||||
tar -xJf "$extract_dir/control.tar.xz" -C "$extract_dir"
|
||||
# Remove minimum version specifiers from control file
|
||||
@@ -1474,28 +1459,22 @@ main() {
|
||||
tar -C "$extract_dir" \
|
||||
--ignore-failed-read \
|
||||
-cvJf "control.tar.xz" "control" "postinst"
|
||||
ar rcs "$MCDEB.compat" "$extract_dir/debian-binary" "$extract_dir/control.tar.xz" "$extract_dir/data.tar.xz"
|
||||
pkg_install_cmd="installPackage --nocheck --nogpgcheck $MCDEB.compat"
|
||||
debug "$pkg_install_cmd" || pkg_install_cmd+=" &>/dev/null"
|
||||
eval "$pkg_install_cmd"
|
||||
ar rcs "$MCDEB" "$extract_dir/debian-binary" "$extract_dir/control.tar.xz" "$extract_dir/data.tar.xz"
|
||||
rm -rf "$extract_dir"
|
||||
fi
|
||||
pkg_install_cmd="installPackage --nocheck --nogpgcheck $MCDEB"
|
||||
debug "$pkg_install_cmd" || pkg_install_cmd+=" &>/dev/null"
|
||||
eval "$pkg_install_cmd"
|
||||
|
||||
fi
|
||||
|
||||
# Build RPM from source deb package
|
||||
if (( RPM_BUILD_SWITCH )); then
|
||||
installPackage "wget" "dpkg" "rpm-build"
|
||||
acquireDeb
|
||||
buildRPM
|
||||
fi
|
||||
|
||||
# Run createrepo
|
||||
if (( CREATEREPO_SWITCH )); then
|
||||
runCreaterepo
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Install RPM
|
||||
if (( REPO_INSTALL_SWITCH )); then
|
||||
if (( RPM_INSTALL_SWITCH )); then
|
||||
|
||||
#rpm --upgrade "$MCRPM"
|
||||
|
||||
@@ -1510,8 +1489,13 @@ main() {
|
||||
openFirewall "jriver"
|
||||
fi
|
||||
|
||||
# Install services
|
||||
if (( CREATEREPO_SWITCH )); then
|
||||
runCreaterepo
|
||||
exit $?
|
||||
fi
|
||||
|
||||
if [[ "${#SERVICES[@]}" -gt 0 ]]; then
|
||||
declare service
|
||||
setDisplay
|
||||
for service in "${SERVICES[@]}"; do
|
||||
if ! setServiceVars "$service"; then
|
||||
@@ -1527,7 +1511,6 @@ main() {
|
||||
done
|
||||
fi
|
||||
|
||||
# Install containers
|
||||
# for _container in "${CONTAINERS[@]}"; do
|
||||
# if ! "_container_$_container"; then
|
||||
# if [[ $? -eq 127 ]]; then
|
||||
|
||||
Reference in New Issue
Block a user