Small refactor

This commit is contained in:
2022-01-12 10:12:05 -05:00
parent 79c185770e
commit 690700bff3

View File

@@ -103,80 +103,6 @@ printHelp() {
EOF 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 # Helpers
debug() { (( DEBUG )) && [[ $# -gt 0 ]] && echo "Debug: $*"; } debug() { (( DEBUG )) && [[ $# -gt 0 ]] && echo "Debug: $*"; }
err() { echo "Error: $*" >&2; } err() { echo "Error: $*" >&2; }
@@ -240,6 +166,7 @@ parseInput() {
case "$1" in case "$1" in
rpm) rpm)
RPM_BUILD_SWITCH=1 RPM_BUILD_SWITCH=1
RPM_INSTALL_SWITCH=1
;; ;;
deb) deb)
DEB_INSTALL_SWITCH=1 DEB_INSTALL_SWITCH=1
@@ -361,10 +288,10 @@ getLatestVersion() {
installPackage wget installPackage wget
if MCVERSION=$(wget -qO- "$BOARDURL" | grep -o "[0-9][0-9]\.[0-9]\.[0-9]\+" | head -n 1); then if MCVERSION=$(wget -qO- "$BOARDURL" | grep -o "[0-9][0-9]\.[0-9]\.[0-9]\+" | head -n 1); then
version_source="webscrape" version_source="webscrape"
fi else
err "$BOARDURL could not be parsed"
if ! [[ -v MCVERSION ]]; then err "MC version could not be determined"
err "MC version could not be determined. Please check the boardurl: $BOARDURL or specify a version manually using --MCVERSION" err "Specify a version manually using --mcversion"
exit 1 exit 1
fi fi
} }
@@ -429,7 +356,6 @@ installPackage() {
fi fi
for pkg in "$@"; do for pkg in "$@"; do
# Check for alias
if [[ ! -v nocheck && -v PKG_ALIASES[$pkg] ]]; then if [[ ! -v nocheck && -v PKG_ALIASES[$pkg] ]]; then
pkg=${PKG_ALIASES[$pkg]} pkg=${PKG_ALIASES[$pkg]}
fi fi
@@ -459,7 +385,7 @@ addRepo() {
debug "Running: ${FUNCNAME[0]}" debug "Running: ${FUNCNAME[0]}"
if [[ "$ID" =~ ^(fedora|centos)$ ]]; then 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] [jriver]
name=JRiver Media Center repo by BryanC name=JRiver Media Center repo by BryanC
baseurl=https://repos.bryanroessler.com/jriver baseurl=https://repos.bryanroessler.com/jriver
@@ -736,10 +662,6 @@ runCreaterepo() {
installPackage createrepo_c installPackage createrepo_c
# if [[ "$CREATEREPO_USER" != "$USER" ]]
# If the webroot does not exist, create it # If the webroot does not exist, create it
if [[ ! -d "$CREATEREPO_WEBROOT" ]]; then if [[ ! -d "$CREATEREPO_WEBROOT" ]]; then
#cr_mkdir_cmd="sudo -u $CREATEREPO_USER mkdir -p $CREATEREPO_WEBROOT" #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 # Debian ufw package state is broken on fresh installations
installPackage ufw installPackage ufw
if [[ ! -f "/etc/ufw/applications.d/$1" ]]; then 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] [$1]
title=$1 title=$1
description=$1 installed by installJRMC description=$1 installed by installJRMC
@@ -974,8 +896,7 @@ setDisplay() {
setServiceVars() { setServiceVars() {
debug "Running: ${FUNCNAME[0]}" 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_system_dir="/usr/lib/systemd/system"
declare service_user_dir="$USER_HOME/.config/systemd/user" declare service_user_dir="$USER_HOME/.config/systemd/user"
@@ -989,11 +910,13 @@ setServiceVars() {
if [[ "$SERVICE_TYPE" == "system" ]]; then # i.e. systemd system service if [[ "$SERVICE_TYPE" == "system" ]]; then # i.e. systemd system service
service_dir="$service_system_dir" service_dir="$service_system_dir"
EXEC_USER="root"
systemctl_reload_cmd(){ sudo systemctl daemon-reload; } systemctl_reload_cmd(){ sudo systemctl daemon-reload; }
systemctl_enable_cmd(){ sudo systemctl enable --now "$@"; } systemctl_enable_cmd(){ sudo systemctl enable --now "$@"; }
systemctl_disable_cmd(){ sudo systemctl disable --now "$@"; } systemctl_disable_cmd(){ sudo systemctl disable --now "$@"; }
elif [[ "$SERVICE_TYPE" == "user" ]]; then # i.e. systemd user service elif [[ "$SERVICE_TYPE" == "user" ]]; then # i.e. systemd user service
service_dir="$service_user_dir" service_dir="$service_user_dir"
EXEC_USER="$USER"
systemctl_reload_cmd(){ systemctl --user daemon-reload; } systemctl_reload_cmd(){ systemctl --user daemon-reload; }
systemctl_enable_cmd(){ systemctl --user enable --now "$@"; } systemctl_enable_cmd(){ systemctl --user enable --now "$@"; }
systemctl_disable_cmd(){ systemctl --user disable --now "$@"; } systemctl_disable_cmd(){ systemctl --user disable --now "$@"; }
@@ -1025,7 +948,7 @@ setServiceVars() {
service_jriver-mediacenter() { service_jriver-mediacenter() {
debug "Running: ${FUNCNAME[0]}" debug "Running: ${FUNCNAME[0]}"
bash_cmd "cat <<- EOF > $SERVICE_FNAME sudo -u "$EXEC_USER" -c "cat <<- EOF > $SERVICE_FNAME
[Unit] [Unit]
Description=JRiver Media Center $MVERSION Description=JRiver Media Center $MVERSION
After=graphical.target 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" start_cmd="/usr/bin/vncserver $NEXT_DISPLAY -geometry 1440x900 -alwaysshared -rfbauth $HOME/.vnc/jrmc_passwd -autokill -xstartup /usr/bin/mediacenter$MVERSION"
fi fi
bash_cmd "cat <<- EOF > $SERVICE_FNAME sudo -u "$EXEC_USER" -c "cat <<- EOF > $SERVICE_FNAME
[Unit] [Unit]
Description=Remote desktop service (VNC) Description=Remote desktop service (VNC)
After=syslog.target network.target 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" start_cmd="/usr/bin/x11vnc -display $DISPLAY -noscr -auth guess -forever -bg -rfbauth $HOME/.vnc/jrmc_passwd"
fi fi
bash_cmd "cat <<-EOF > $SERVICE_FNAME sudo -u "$EXEC_USER" -c "cat <<-EOF > $SERVICE_FNAME
[Unit] [Unit]
Description=x11vnc Description=x11vnc
After=multi.service After=multi.service
@@ -1166,7 +1089,7 @@ service_jriver-createrepo() {
declare id="${TARGET:-$ID}" declare id="${TARGET:-$ID}"
bash_cmd "cat <<-EOF > $SERVICE_FNAME sudo -u "$EXEC_USER" -c "cat <<-EOF > $SERVICE_FNAME
[Unit] [Unit]
Description=Builds JRiver Media Center RPM file, moves it to the repo dir, and runs createrepo 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 WantedBy=default.target
EOF" EOF"
bash_cmd "cat <<-EOF > $TIMER_FNAME sudo -u "$EXEC_USER" -c "cat <<-EOF > $TIMER_FNAME
[Unit] [Unit]
Description=Run JRiver MC rpmbuild hourly Description=Run JRiver MC rpmbuild hourly
@@ -1433,20 +1356,80 @@ tests() {
main() { main() {
debug "Running: ${FUNCNAME[0]}" 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 if (( UNINSTALL_SWITCH )); then
uninstall uninstall
exit $? exit $?
fi fi
# Install dependency dependencies :-)
[[ "$ID" == "centos" ]] && installPackage epel-release
# Install MC using package manager
if (( REPO_INSTALL_SWITCH )); then if (( REPO_INSTALL_SWITCH )); then
if [[ "$ID" =~ ^opensuse.*$ ]]; then if [[ "$ID" =~ ^opensuse.*$ ]]; then
echo "A SUSE repository is not yet available." echo "A SUSE repository is not yet available."
@@ -1466,7 +1449,9 @@ main() {
if (( DEB_INSTALL_SWITCH )); then if (( DEB_INSTALL_SWITCH )); then
acquireDeb acquireDeb
if (( COMPAT_SWITCH )); then
declare extract_dir && extract_dir="$(mktemp -d)" declare extract_dir && extract_dir="$(mktemp -d)"
MCDEB="$MCDEB.compat"
ar x --output "$extract_dir" "$MCDEB" ar x --output "$extract_dir" "$MCDEB"
tar -xJf "$extract_dir/control.tar.xz" -C "$extract_dir" tar -xJf "$extract_dir/control.tar.xz" -C "$extract_dir"
# Remove minimum version specifiers from control file # Remove minimum version specifiers from control file
@@ -1474,28 +1459,22 @@ main() {
tar -C "$extract_dir" \ tar -C "$extract_dir" \
--ignore-failed-read \ --ignore-failed-read \
-cvJf "control.tar.xz" "control" "postinst" -cvJf "control.tar.xz" "control" "postinst"
ar rcs "$MCDEB.compat" "$extract_dir/debian-binary" "$extract_dir/control.tar.xz" "$extract_dir/data.tar.xz" ar rcs "$MCDEB" "$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"
rm -rf "$extract_dir" rm -rf "$extract_dir"
fi 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 if (( RPM_BUILD_SWITCH )); then
installPackage "wget" "dpkg" "rpm-build" installPackage "wget" "dpkg" "rpm-build"
acquireDeb acquireDeb
buildRPM buildRPM
fi fi
# Run createrepo if (( RPM_INSTALL_SWITCH )); then
if (( CREATEREPO_SWITCH )); then
runCreaterepo
exit $?
fi
# Install RPM
if (( REPO_INSTALL_SWITCH )); then
#rpm --upgrade "$MCRPM" #rpm --upgrade "$MCRPM"
@@ -1510,8 +1489,13 @@ main() {
openFirewall "jriver" openFirewall "jriver"
fi fi
# Install services if (( CREATEREPO_SWITCH )); then
runCreaterepo
exit $?
fi
if [[ "${#SERVICES[@]}" -gt 0 ]]; then if [[ "${#SERVICES[@]}" -gt 0 ]]; then
declare service
setDisplay setDisplay
for service in "${SERVICES[@]}"; do for service in "${SERVICES[@]}"; do
if ! setServiceVars "$service"; then if ! setServiceVars "$service"; then
@@ -1527,7 +1511,6 @@ main() {
done done
fi fi
# Install containers
# for _container in "${CONTAINERS[@]}"; do # for _container in "${CONTAINERS[@]}"; do
# if ! "_container_$_container"; then # if ! "_container_$_container"; then
# if [[ $? -eq 127 ]]; then # if [[ $? -eq 127 ]]; then