| ... | ... |
@@ -548,6 +548,26 @@ function install_package() {
|
| 548 | 548 |
} |
| 549 | 549 |
|
| 550 | 550 |
|
| 551 |
+# Distro-agnostic function to tell if a package is installed |
|
| 552 |
+# is_package_installed package [package ...] |
|
| 553 |
+function is_package_installed() {
|
|
| 554 |
+ if [[ -z "$@" ]]; then |
|
| 555 |
+ return 1 |
|
| 556 |
+ fi |
|
| 557 |
+ |
|
| 558 |
+ if [[ -z "$os_PACKAGE" ]]; then |
|
| 559 |
+ GetOSVersion |
|
| 560 |
+ fi |
|
| 561 |
+ if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 562 |
+ dpkg -l "$@" > /dev/null |
|
| 563 |
+ return $? |
|
| 564 |
+ else |
|
| 565 |
+ rpm --quiet -q "$@" |
|
| 566 |
+ return $? |
|
| 567 |
+ fi |
|
| 568 |
+} |
|
| 569 |
+ |
|
| 570 |
+ |
|
| 551 | 571 |
# Test if the named environment variable is set and not zero length |
| 552 | 572 |
# is_set env-var |
| 553 | 573 |
function is_set() {
|
| ... | ... |
@@ -182,11 +182,7 @@ if [[ $EUID -eq 0 ]]; then |
| 182 | 182 |
sleep $ROOTSLEEP |
| 183 | 183 |
|
| 184 | 184 |
# Give the non-root user the ability to run as **root** via ``sudo`` |
| 185 |
- if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 186 |
- dpkg -l sudo || install_package sudo |
|
| 187 |
- else |
|
| 188 |
- rpm -qa | grep sudo || install_package sudo |
|
| 189 |
- fi |
|
| 185 |
+ is_package_installed sudo || install_package sudo |
|
| 190 | 186 |
if ! getent group stack >/dev/null; then |
| 191 | 187 |
echo "Creating a group called stack" |
| 192 | 188 |
groupadd stack |
| ... | ... |
@@ -215,12 +211,7 @@ if [[ $EUID -eq 0 ]]; then |
| 215 | 215 |
exit 1 |
| 216 | 216 |
else |
| 217 | 217 |
# We're not **root**, make sure ``sudo`` is available |
| 218 |
- if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 219 |
- CHECK_SUDO_CMD="dpkg -l sudo" |
|
| 220 |
- else |
|
| 221 |
- CHECK_SUDO_CMD="rpm -q sudo" |
|
| 222 |
- fi |
|
| 223 |
- $CHECK_SUDO_CMD || die "Sudo is required. Re-run stack.sh as root ONE TIME ONLY to set up sudo." |
|
| 218 |
+ is_package_installed sudo || die "Sudo is required. Re-run stack.sh as root ONE TIME ONLY to set up sudo." |
|
| 224 | 219 |
|
| 225 | 220 |
# UEC images ``/etc/sudoers`` does not have a ``#includedir``, add one |
| 226 | 221 |
sudo grep -q "^#includedir.*/etc/sudoers.d" /etc/sudoers || |
| ... | ... |
@@ -239,3 +239,44 @@ test_disable_negated_services 'a,-a' '' |
| 239 | 239 |
test_disable_negated_services 'b,a,-a' 'b' |
| 240 | 240 |
test_disable_negated_services 'a,b,-a' 'b' |
| 241 | 241 |
test_disable_negated_services 'a,-a,b' 'b' |
| 242 |
+ |
|
| 243 |
+ |
|
| 244 |
+echo "Testing is_package_installed()" |
|
| 245 |
+ |
|
| 246 |
+if [[ -z "$os_PACKAGE" ]]; then |
|
| 247 |
+ GetOSVersion |
|
| 248 |
+fi |
|
| 249 |
+ |
|
| 250 |
+if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 251 |
+ is_package_installed dpkg |
|
| 252 |
+ VAL=$? |
|
| 253 |
+else |
|
| 254 |
+ is_package_installed rpm |
|
| 255 |
+ VAL=$? |
|
| 256 |
+fi |
|
| 257 |
+if [[ "$VAL" -eq 0 ]]; then |
|
| 258 |
+ echo "OK" |
|
| 259 |
+else |
|
| 260 |
+ echo "is_package_installed() on existing package failed" |
|
| 261 |
+fi |
|
| 262 |
+ |
|
| 263 |
+if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 264 |
+ is_package_installed dpkg bash |
|
| 265 |
+ VAL=$? |
|
| 266 |
+else |
|
| 267 |
+ is_package_installed rpm bash |
|
| 268 |
+ VAL=$? |
|
| 269 |
+fi |
|
| 270 |
+if [[ "$VAL" -eq 0 ]]; then |
|
| 271 |
+ echo "OK" |
|
| 272 |
+else |
|
| 273 |
+ echo "is_package_installed() on more than one existing package failed" |
|
| 274 |
+fi |
|
| 275 |
+ |
|
| 276 |
+is_package_installed zzzZZZzzz |
|
| 277 |
+VAL=$? |
|
| 278 |
+if [[ "$VAL" -ne 0 ]]; then |
|
| 279 |
+ echo "OK" |
|
| 280 |
+else |
|
| 281 |
+ echo "is_package_installed() on non-existing package failed" |
|
| 282 |
+fi |