git.lirion.de

Of git, get, and gud

aboutsummaryrefslogtreecommitdiffstats
path: root/bin/dnfu
blob: 3cb51bf508925da14421d31fe5e7aaac38970e88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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