git.lirion.de

Of git, get, and gud

aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md7
-rwxr-xr-xbin/dnfu138
-rw-r--r--etc/sudoers.d/maint5
3 files changed, 150 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..420d70d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+## Content
+
+For now, this is just a dump where I throw in scripts I use on Red Hat
+derivatives (i.e. Fedora in most of these cases, rarely CentOS).
+
+Dedicated sections in this readme may follow, so may dedicated repositories on
+this server.
diff --git a/bin/dnfu b/bin/dnfu
new file mode 100755
index 0000000..3cb51bf
--- /dev/null
+++ b/bin/dnfu
@@ -0,0 +1,138 @@
+#!/usr/bin/env bash
+
+# A script to upgrade a RHEL derivative (Fedora, CentOS, ...). If you have ansible or puppet:
+# this is way more simple with an automation framework. This script works with the paradigm
+# that you only have a bash available and you want to see what happens without being murdered
+# by gazillions of output lines.
+
+# This script avoids combining options, e.g. dnf -C -q instead of dnf -Cq, since
+# dnf is perfectly capable of POSIX standards, but yum fails at combined parameters.
+# So we'll leave it this way in case of conversion of this script to yum or extension
+# to be capable of both. (tl;dr no combined options because yum sucks at POSIX standards)
+
+ROK="\033[666D[ \033[32mOK\033[0m ]\033[u\033[K"
+RWRN="\033[666D[\033[33mWARN\033[0m]\033[u\033[K"
+RERR="\033[666D[\033[31mFAIL\033[0m]\033[u\033[K"
+RINF="\033[666D[\033[37mINFO\033[0m]\033[u\033[K"
+
+UPDAVAIL=1
+SCMD="$(command -v snap 2>/dev/null)"
+UCMD="$(command -v dnf 2>/dev/null)"
+[ "$?" -ne 0 ]&&UCMD="$(command -v yum 2>/dev/null)"
+[ -z "$UCMD" ]&&printf "Neither yum nor dnf found!\n" >&2&&exit 1
+RETVAL=0
+
+function radd {
+ [ -z "$1" ]&&return 1
+ printf "\033[666D\033[u\033[K \033[37m(%b)\033[0m" "$1"
+}
+function rbeg {
+ [ -z "$1" ]&&return 1
+ printf "[....] %b.\033[s.." "$1"
+}
+function rok {
+ case "$1" in
+ "") printf "%b\n" "$ROK";;
+ *)
+ printf "%b" "$ROK"
+ radd "$1"
+ printf "\n"
+ ;;
+ esac
+}
+function rwrn {
+ case "$1" in
+ "") printf "%b\n" "$RWRN";;
+ *)
+ printf "%b" "$RWRN"
+ radd "$1"
+ printf "\n"
+ ;;
+ esac
+}
+function rerr {
+ case "$1" in
+ "") printf "%b\n" "$RERR";;
+ *)
+ printf "%b" "$RERR"
+ radd "$1"
+ printf "\n"
+ ;;
+ esac
+}
+function rinf {
+ case "$1" in
+ "") printf "%b\n" "$RINF";;
+ *)
+ printf "%b" "$RINF"
+ radd "$1"
+ printf "\n"
+ ;;
+ esac
+}
+function supgrade {
+ printf "Listing updates...:\n"
+ sudo "${UCMD}" -C -q check-upgrade
+ case "$?" in
+ 0|100) ;;
+ *) RETVAL=1;return 1;;
+ esac
+ rbeg "Upgrading system packages"
+ sudo "${UCMD}" -q -y upgrade
+ case "$?" in
+ 0) rok;;
+ 1)
+ rwrn "error occurred but was handled by dnf"
+ case "RETVAL" in
+ 0) RETVAL=255;;
+ esac
+ ;;
+ 255)
+ rwrn "Upgrade done but updates remaining"
+ case "$RETVAL" in
+ 0) RETVAL=255;;
+ esac
+ ;;
+ *)
+ rerr
+ RETVAL=1;return 1
+ ;;
+ esac
+ printf "Checking for outdated running services or necessity to reboot...:\n"
+ sudo "${UCMD}" needs-restarting
+}
+function snrefresh {
+ rbeg "Refreshing snapd snaps"
+ sudo "${SCMD}" refresh >/dev/null 2>&1
+ case "$?" in
+ 0) rok;;
+ *) rerr;RETVAL=1;return 1;;
+ esac
+}
+
+rbeg "Updating dnf cache"
+sudo "${UCMD}" -q makecache
+case "$?" in
+ 0) rok;;
+ 100) rwrn;;
+ *) rerr;exit 1;;
+esac
+rbeg "Checking for upgrades"
+sudo "${UCMD}" -C -q check-upgrade
+case "$?" in
+ 0)
+ rinf "No updates"
+ ;;
+ 100)
+ rok "Updates found"
+ UPDAVAIL=0
+ ;;
+esac
+
+if [ "$UPDAVAIL" -eq 0 ];then
+ supgrade
+fi
+
+if [ ! -z "$SCMD" ];then
+ snrefresh
+fi
diff --git a/etc/sudoers.d/maint b/etc/sudoers.d/maint
new file mode 100644
index 0000000..d02225f
--- /dev/null
+++ b/etc/sudoers.d/maint
@@ -0,0 +1,5 @@
+%maint ALL=(ALL) NOPASSWD:/usr/bin/snap refresh, /usr/bin/needs-restarting, /usr/bin/dnf needs-restarting
+# Using -C -q instead of -Cq because yum sucks at this. dnf can cope with it, but in case of
+# moving forth to a yum-only system...
+%maint ALL=(ALL) NOPASSWD:/usr/bin/dnf -q makecache,/usr/bin/dnf -C -q check-upgrade
+%maint ALL=(ALL) NOPASSWD:/usr/bin/dnf -q -y upgrade