Skip to content

Commit 40567ee

Browse files
committed
utils: lib_docker.sh: docker install/run helpers, sudo/group support
Signed-off-by: Srikanth Muppandam <smuppand@qti.qualcomm.com>
1 parent 110bb40 commit 40567ee

1 file changed

Lines changed: 88 additions & 0 deletions

File tree

Runner/utils/lib_docker.sh

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#!/bin/sh
2+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3+
# SPDX-License-Identifier: BSD-3-Clause-Clear
4+
# Docker helpers. Requires lib_common.sh and lib_apt.sh
5+
6+
docker_is_installed() { have_cmd docker; }
7+
8+
docker_install() {
9+
if docker_is_installed; then
10+
log_info "Docker already installed"
11+
return 0
12+
fi
13+
14+
log_info "Installing docker.io via apt"
15+
apt_install_pkgs docker.io || return $?
16+
17+
if have_cmd systemctl; then
18+
if ! need_root_or_skip; then
19+
log_skip "Cannot enable docker service (root escalation would prompt)."
20+
return 2
21+
fi
22+
log_info "cmd(root): systemctl enable --now docker"
23+
sh -c "$SUDO systemctl enable --now docker"
24+
fi
25+
26+
# Add current user to 'docker' group (best-effort), so future runs won't need sudo
27+
if have_cmd usermod; then
28+
if ! id -nG 2>/dev/null | grep -qw docker; then
29+
if need_root_or_skip; then
30+
log_info "cmd(root): usermod -aG docker $(id -un) || true"
31+
sh -c "$SUDO usermod -aG docker $(id -un) || true"
32+
log_info "You may need to re-login for docker group membership to apply."
33+
else
34+
log_skip "Cannot add user to 'docker' group (root escalation would prompt)."
35+
fi
36+
fi
37+
fi
38+
39+
return 0
40+
}
41+
42+
docker_can_run() {
43+
DCMD="$(docker_cmd)"
44+
# shellcheck disable=SC2086
45+
$DCMD version >/dev/null 2>&1
46+
}
47+
48+
docker_cmd() {
49+
if is_root; then
50+
printf '%s\n' "docker"
51+
return
52+
fi
53+
54+
# If the user is in the docker group, no sudo needed
55+
if id -nG 2>/dev/null | grep -qw docker; then
56+
printf '%s\n' "docker"
57+
return
58+
fi
59+
60+
# Fall back to sudo, but strictly non-interactive to avoid hangs
61+
if have_cmd sudo && sudo -n true >/dev/null 2>&1; then
62+
printf '%s\n' "sudo -n -E docker"
63+
else
64+
# Last resort: plain docker (will fail in docker_can_run if unusable)
65+
printf '%s\n' "docker"
66+
fi
67+
}
68+
69+
docker_image_exists() {
70+
img="$1"
71+
DCMD="$(docker_cmd)"
72+
$DCMD image inspect "$img" >/dev/null 2>&1
73+
}
74+
75+
# ---- New: uninstall docker (package) + optional disable service ----
76+
docker_uninstall_pkg() {
77+
if ! docker_is_installed; then
78+
return 0
79+
fi
80+
apt_remove_pkgs docker.io || return $?
81+
if have_cmd systemctl; then
82+
if need_root_or_skip; then
83+
log_info "cmd(root): systemctl disable --now docker || true"
84+
sh -c "$SUDO systemctl disable --now docker || true"
85+
fi
86+
fi
87+
return 0
88+
}

0 commit comments

Comments
 (0)