Skip to content

Commit a49b883

Browse files
committed
update
1 parent a02b897 commit a49b883

File tree

1 file changed

+54
-41
lines changed

1 file changed

+54
-41
lines changed

Github/Runners/run_linux.sh

Lines changed: 54 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,71 +4,84 @@
44
#SELF: bash <(curl -qfsSL "https://raw.githubusercontent.com/pkgforge/devscripts/refs/heads/main/Github/Runners/run_linux.sh")
55

66
#------------------------------------------------------------------------------------#
7-
#Requires passwordless sudo
7+
#Requires passwordless sudo (only if needed for docker/podman)
88
if [ "$(id -u)" -eq 0 ]; then
99
echo -e "\n[+] USER:$(whoami) Running as root, skipping passwordless Sudo Checks"
1010
else
11-
if sudo -n -l | grep -q NOPASSWD; then
11+
if sudo -n -l | grep -qi 'NOPASSWD'; then
1212
echo -e "\n[+] Passwordless sudo is Configured"
1313
sudo -n -l 2>/dev/null
1414
else
15-
echo -e "\n[-] Passwordless sudo is NOT Configured"
16-
echo -e "\n[-] READ: https://web.archive.org/web/20230614212916/https://linuxhint.com/setup-sudo-no-password-linux/\n"
17-
#exit
18-
exit 1
15+
echo -e "\n[+] Passwordless sudo is NOT Configured (may still work if docker/podman don't require sudo)"
1916
fi
2017
fi
2118
#------------------------------------------------------------------------------------#
2219

2320
#------------------------------------------------------------------------------------#
24-
#Sanity Check
25-
if ! command -v podman &> /dev/null; then
26-
#If this doesn't work with sudo: sudo ln -s "$(which podman)" "/usr/local/bin/podman"
21+
#Sanity Check & Sudo Detection
22+
if ! command -v podman &>/dev/null; then
2723
echo -e "\n[-] Podman is NOT Installed/Configured"
2824
echo -e "[-] Install ALL Dependencies && Configure ENV VARS|PATH\n"
2925
echo -e "\n[-] READ: https://github.com/pkgforge/devscripts/blob/main/Github/Runners/README.md#additional-notes--refs\n"
30-
exit 1
26+
exit 1
3127
fi
32-
if ! command -v docker &> /dev/null; then
33-
echo -e "\n[-] Docker is NOT Installed/Configured"
34-
echo -e "[-] Install ALL Dependencies && Configure ENV VARS|PATH\n"
35-
echo -e "\n[-] READ: https://github.com/pkgforge/devscripts/blob/main/Github/Runners/README.md#additional-notes--refs\n"
36-
exit 1
28+
29+
#Determine if sudo is needed for podman
30+
echo -e "\n[+] Checking if sudo is required for podman operations..."
31+
if podman version &>/dev/null; then
32+
PODMAN_SUDO=""
33+
echo -e "[+] Podman works without sudo"
34+
else
35+
if sudo podman version &>/dev/null; then
36+
PODMAN_SUDO="sudo"
37+
echo -e "[+] Podman requires sudo"
38+
# Check if we can actually use sudo
39+
if [ "$(id -u)" -ne 0 ] && ! sudo -n -l | grep -qi 'NOPASSWD'; then
40+
echo -e "\n[-] Podman requires sudo but passwordless sudo is not configured"
41+
echo -e "\n[-] READ: https://web.archive.org/web/20230614212916/https://linuxhint.com/setup-sudo-no-password-linux/\n"
42+
exit 1
43+
fi
44+
else
45+
echo -e "\n[-] Podman is not working with or without sudo"
46+
exit 1
47+
fi
3748
fi
49+
export PODMAN_SUDO
3850
#------------------------------------------------------------------------------------#
3951

4052
#------------------------------------------------------------------------------------#
4153
##ENV
4254
SYSTMP="$(dirname $(mktemp -u))" && export SYSTMP="$SYSTMP"
4355
USER="$(whoami)" && export USER="${USER}"
44-
HOME="$(getent passwd ${USER} | cut -d: -f6)" && export HOME="${HOME}" ; pushd "${HOME}" >/dev/null 2>&1
56+
HOME="$(getent passwd ${USER} | cut -d: -f6)" && export HOME="${HOME}" ; pushd "${HOME}" &>/dev/null
4557
echo -e "\n[+] USER = ${USER}"
4658
echo -e "[+] HOME = ${HOME}"
4759
echo -e "[+] WORKDIR = $(realpath .)"
48-
echo -e "[+] PATH = ${PATH}\n"
60+
echo -e "[+] PATH = ${PATH}"
61+
echo -e "[+] PODMAN_SUDO = '${PODMAN_SUDO}'\n"
4962
#Cleanup Existing Containers
5063
if [ -z "${PODMAN_CONTAINER_NAME}" ]; then
51-
echo -e "\n[+] Setting Default Container Name: gh-runner-arm64x-gcp"
52-
export PODMAN_CONTAINER_NAME="gh-runner-arm64x-gcp"
53-
sudo podman stop "${PODMAN_CONTAINER_NAME}" >/dev/null 2>&1
54-
sudo podman rm "${PODMAN_CONTAINER_NAME}" --force >/dev/null 2>&1
64+
echo -e "\n[+] Setting Default Container Name: self-hosted-$(uname -m)"
65+
export PODMAN_CONTAINER_NAME="self-hosted-$(uname -m)"
66+
${PODMAN_SUDO} podman stop "${PODMAN_CONTAINER_NAME}" &>/dev/null
67+
${PODMAN_SUDO} podman rm "${PODMAN_CONTAINER_NAME}" --force &>/dev/null
5568
else
5669
export PODMAN_CONTAINER_NAME="${PODMAN_CONTAINER_NAME}"
5770
echo -e "\n[+] Setting Default Container Name: ${PODMAN_CONTAINER_NAME}"
58-
sudo podman stop "${PODMAN_CONTAINER_NAME}" >/dev/null 2>&1
59-
sudo podman rm "${PODMAN_CONTAINER_NAME}" --force >/dev/null 2>&1
71+
${PODMAN_SUDO} podman stop "${PODMAN_CONTAINER_NAME}" &>/dev/null
72+
${PODMAN_SUDO} podman rm "${PODMAN_CONTAINER_NAME}" --force &>/dev/null
6073
fi
6174
#Image
6275
if [ -z "${PODMAN_CONTAINER_IMAGE}" ]; then
6376
echo -e "\n[+] Setting Default Container Image: pkgforge/gh-runner-aarch64-ubuntu"
6477
export PODMAN_CONTAINER_IMAGE="pkgforge/gh-runner-aarch64-ubuntu"
65-
sudo podman rmi "${PODMAN_CONTAINER_IMAGE}" --force >/dev/null 2>&1
66-
sudo podman pull "${PODMAN_CONTAINER_IMAGE}"
78+
${PODMAN_SUDO} podman rmi "${PODMAN_CONTAINER_IMAGE}" --force &>/dev/null
79+
${PODMAN_SUDO} podman pull "${PODMAN_CONTAINER_IMAGE}"
6780
else
6881
export PODMAN_CONTAINER_IMAGE="${PODMAN_CONTAINER_IMAGE}"
6982
echo -e "\n[+] Setting Default Container Image: ${PODMAN_CONTAINER_IMAGE}"
70-
sudo podman rmi "${PODMAN_CONTAINER_IMAGE}" --force >/dev/null 2>&1
71-
sudo podman pull "${PODMAN_CONTAINER_IMAGE}"
83+
${PODMAN_SUDO} podman rmi "${PODMAN_CONTAINER_IMAGE}" --force &>/dev/null
84+
${PODMAN_SUDO} podman pull "${PODMAN_CONTAINER_IMAGE}"
7285
fi
7386
#Env File
7487
if [ -z "${PODMAN_ENV_FILE}" ]; then
@@ -101,39 +114,39 @@ fi
101114
#------------------------------------------------------------------------------------#
102115
#Stop Existing
103116
echo -e "\n[+] Cleaning PreExisting Container\n"
104-
sudo podman stop "$(sudo podman ps -aqf name=${PODMAN_CONTAINER_NAME})" >/dev/null 2>&1 &
117+
${PODMAN_SUDO} podman stop "$(${PODMAN_SUDO} podman ps -aqf name=${PODMAN_CONTAINER_NAME})" &>/dev/null &
105118
wait
106-
sudo podman stop "$(sudo podman ps -aqf name=${PODMAN_CONTAINER_NAME})" >/dev/null 2>&1 && sleep 5
119+
${PODMAN_SUDO} podman stop "$(${PODMAN_SUDO} podman ps -aqf name=${PODMAN_CONTAINER_NAME})" &>/dev/null && sleep 5
107120
#RUN
108121
echo -e "\n[+] Starting Runner Container (LOGFILE: ${PODMAN_LOG_FILE})\n"
109-
sudo mkdir -p "/var/lib/containers/tmp"
110-
set -x && nohup sudo podman run --privileged --network="bridge" --systemd="always" --ulimit="host" --volume="/var/lib/containers/tmp:/tmp" --tz="UTC" --pull="always" --name="${PODMAN_CONTAINER_NAME}" --rm --env-file="${PODMAN_ENV_FILE}" "${PODMAN_CONTAINER_IMAGE}" > "${PODMAN_LOG_FILE}" 2>&1 &
122+
${PODMAN_SUDO} mkdir -p "/var/lib/containers/tmp"
123+
set -x && nohup ${PODMAN_SUDO} podman run --privileged --network="bridge" --systemd="always" --ulimit="host" --volume="/var/lib/containers/tmp:/tmp" --tz="UTC" --pull="always" --name="${PODMAN_CONTAINER_NAME}" --rm --env-file="${PODMAN_ENV_FILE}" "${PODMAN_CONTAINER_IMAGE}" > "${PODMAN_LOG_FILE}" 2>&1 &
111124
set +x && echo -e "[+] Waiting 30s..." && sleep 30
112125
#Get logs
113-
PODMAN_ID="$(sudo podman ps -qf name=${PODMAN_CONTAINER_NAME})" && export PODMAN_ID="${PODMAN_ID}"
114-
PODMAN_LOGPATH="$(sudo podman inspect --format='{{.HostConfig.LogConfig.Path}}' ${PODMAN_CONTAINER_NAME})" && export PODMAN_LOGPATH="${PODMAN_LOGPATH}"
126+
PODMAN_ID="$(${PODMAN_SUDO} podman ps -qf name=${PODMAN_CONTAINER_NAME})" && export PODMAN_ID="${PODMAN_ID}"
127+
PODMAN_LOGPATH="$(${PODMAN_SUDO} podman inspect --format='{{.HostConfig.LogConfig.Path}}' ${PODMAN_CONTAINER_NAME})" && export PODMAN_LOGPATH="${PODMAN_LOGPATH}"
115128
echo -e "\n[+] Writing Logs to ${PODMAN_LOGPATH} (${PODMAN_CONTAINER_NAME} :: ${PODMAN_ID})\n"
116-
sudo podman exec --user "runner" --env-file="${PODMAN_ENV_FILE}" "${PODMAN_ID}" "/usr/local/bin/manager.sh" >> "${PODMAN_LOG_FILE}" 2>&1 &
129+
${PODMAN_SUDO} podman exec --user "runner" --env-file="${PODMAN_ENV_FILE}" "${PODMAN_ID}" "/usr/local/bin/manager.sh" >> "${PODMAN_LOG_FILE}" 2>&1 &
117130
set +x && echo -e "[+] Waiting 10s..." && sleep 10
118-
#sudo jq -r '.log' "${PODMAN_LOGPATH}""
131+
#${PODMAN_SUDO} jq -r '.log' "${PODMAN_LOGPATH}""
119132
#Monitor & Stop on Exit
120133
set +x && echo -e "[+] Executing Runner..."
121134
while true; do
122135
if ! pgrep -f "/usr/local/bin/manager.sh" > /dev/null; then
123136
cat "${PODMAN_LOG_FILE}"
124-
sudo podman stop "${PODMAN_ID}" --ignore
137+
${PODMAN_SUDO} podman stop "${PODMAN_ID}" --ignore
125138
exit 0
126139
fi
127140
sleep 5
128141
done
129142
#------------------------------------------------------------------------------------#
130143
#END
131-
popd >/dev/null 2>&1
144+
popd &>/dev/null
132145
echo -e "\n\n[+] Completed Runner ${PODMAN_CONTAINER_NAME} (LOGFILE: ${PODMAN_LOG_FILE})\n\n"
133146
sed '/^$/d' "${PODMAN_LOG_FILE}"
134147
echo -e "\n\n[+] Listing All Running Containers\n"
135-
sudo podman ps ; echo
136-
echo -e 'RUN (Remove ALL Containers): sudo podman ps -aq | xargs sudo podman stop 2>/dev/null && sudo podman rm "$(podman ps -aq)" --force' && echo
137-
echo -e 'RUN (Remove ALL Images): sudo podman rmi -f $(podman images -q) >/dev/null 2>&1' && echo
148+
${PODMAN_SUDO} podman ps ; echo
149+
echo -e "RUN (Remove ALL Containers): ${PODMAN_SUDO} podman ps -aq | xargs ${PODMAN_SUDO} podman stop 2>/dev/null && ${PODMAN_SUDO} podman rm \"\$(${PODMAN_SUDO} podman ps -aq)\" --force" && echo
150+
echo -e "RUN (Remove ALL Images): ${PODMAN_SUDO} podman rmi -f \$(${PODMAN_SUDO} podman images -q) &>/dev/null" && echo
138151
#EOF
139-
#------------------------------------------------------------------------------------#
152+
#------------------------------------------------------------------------------------#

0 commit comments

Comments
 (0)