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)
88if [ " $( id -u) " -eq 0 ]; then
99 echo -e " \n[+] USER:$( whoami) Running as root, skipping passwordless Sudo Checks"
1010else
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
2017fi
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
3127fi
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
3748fi
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
5063if [ -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
5568else
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
6073fi
6174# Image
6275if [ -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} "
6780else
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} "
7285fi
7386# Env File
7487if [ -z " ${PODMAN_ENV_FILE} " ]; then
101114# ------------------------------------------------------------------------------------#
102115# Stop Existing
103116echo -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 &
105118wait
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
108121echo -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 &
111124set +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} "
115128echo -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 &
117130set +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
120133set +x && echo -e " [+] Executing Runner..."
121134while 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
128141done
129142# ------------------------------------------------------------------------------------#
130143# END
131- popd > /dev/null 2>&1
144+ popd & > /dev/null
132145echo -e " \n\n[+] Completed Runner ${PODMAN_CONTAINER_NAME} (LOGFILE: ${PODMAN_LOG_FILE} )\n\n"
133146sed ' /^$/d' " ${PODMAN_LOG_FILE} "
134147echo -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