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
}
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,36 +1449,32 @@ main() {
if (( DEB_INSTALL_SWITCH )); then
acquireDeb
declare extract_dir && extract_dir="$(mktemp -d)"
ar x --output "$extract_dir" "$MCDEB"
tar -xJf "$extract_dir/control.tar.xz" -C "$extract_dir"
# Remove minimum version specifiers from control file
sed -i 's/ ([^)]*)//g' "$extract_dir/control"
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"
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
sed -i 's/ ([^)]*)//g' "$extract_dir/control"
tar -C "$extract_dir" \
--ignore-failed-read \
-cvJf "control.tar.xz" "control" "postinst"
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"
rm -rf "$extract_dir"
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