mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-05 14:59:27 -05:00
Eliminate repeated sudo password prompts during installation
This commit is contained in:
@@ -80,6 +80,56 @@ function prevent_sudo_or_root(){
|
|||||||
root) echo -e "${STY_RED}[$0]: This script is NOT to be executed with sudo or as root. Aborting...${STY_RST}";exit 1;;
|
root) echo -e "${STY_RED}[$0]: This script is NOT to be executed with sudo or as root. Aborting...${STY_RST}";exit 1;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Initialize sudo session and keep it alive in background
|
||||||
|
# Store PID in a global variable that can be accessed by trap
|
||||||
|
declare -g SUDO_KEEPALIVE_PID=""
|
||||||
|
|
||||||
|
function sudo_init_keepalive(){
|
||||||
|
# Check if sudo is available
|
||||||
|
if ! command -v sudo >/dev/null 2>&1; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only initialize for install-related commands that need sudo
|
||||||
|
case "${SUBCMD_NAME}" in
|
||||||
|
install|install-deps|install-setups) ;;
|
||||||
|
*) return 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Skip if already initialized
|
||||||
|
if [[ -n "$SUDO_KEEPALIVE_PID" ]] && kill -0 "$SUDO_KEEPALIVE_PID" 2>/dev/null; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prompt for sudo password once at the beginning
|
||||||
|
echo -e "${STY_CYAN}[$0]: Requesting sudo privileges for installation...${STY_RST}"
|
||||||
|
if ! sudo -v; then
|
||||||
|
echo -e "${STY_RED}[$0]: Failed to obtain sudo privileges. Aborting...${STY_RST}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start background process to keep sudo session alive
|
||||||
|
# This updates the sudo timestamp every 60 seconds
|
||||||
|
(
|
||||||
|
while true; do
|
||||||
|
sleep 60
|
||||||
|
sudo -v 2>/dev/null || exit 0
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
SUDO_KEEPALIVE_PID=$!
|
||||||
|
|
||||||
|
echo -e "${STY_GREEN}[$0]: Sudo session initialized and will be kept alive (PID: $SUDO_KEEPALIVE_PID)${STY_RST}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Stop the sudo keepalive background process
|
||||||
|
function sudo_stop_keepalive(){
|
||||||
|
if [[ -n "$SUDO_KEEPALIVE_PID" ]] && kill -0 "$SUDO_KEEPALIVE_PID" 2>/dev/null; then
|
||||||
|
kill "$SUDO_KEEPALIVE_PID" 2>/dev/null
|
||||||
|
wait "$SUDO_KEEPALIVE_PID" 2>/dev/null
|
||||||
|
SUDO_KEEPALIVE_PID=""
|
||||||
|
fi
|
||||||
|
}
|
||||||
function git_auto_unshallow(){
|
function git_auto_unshallow(){
|
||||||
# We need this function for latest_commit_hash to work properly
|
# We need this function for latest_commit_hash to work properly
|
||||||
if [[ -f "$(git rev-parse --git-dir)/shallow" ]]; then
|
if [[ -f "$(git rev-parse --git-dir)/shallow" ]]; then
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ source ./sdata/lib/package-installers.sh
|
|||||||
source ./sdata/lib/dist-determine.sh
|
source ./sdata/lib/dist-determine.sh
|
||||||
|
|
||||||
prevent_sudo_or_root
|
prevent_sudo_or_root
|
||||||
|
|
||||||
|
# Trap to ensure sudo keepalive is stopped on exit
|
||||||
|
trap sudo_stop_keepalive EXIT INT TERM
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
@@ -71,6 +75,8 @@ case ${SUBCMD_NAME} in
|
|||||||
$function
|
$function
|
||||||
done
|
done
|
||||||
pause
|
pause
|
||||||
|
# Initialize sudo keepalive for the entire install process
|
||||||
|
sudo_init_keepalive
|
||||||
if [[ "${SKIP_ALLGREETING}" != true ]]; then
|
if [[ "${SKIP_ALLGREETING}" != true ]]; then
|
||||||
source ${SUBCMD_DIR}/0.greeting.sh
|
source ${SUBCMD_DIR}/0.greeting.sh
|
||||||
fi
|
fi
|
||||||
@@ -89,6 +95,8 @@ case ${SUBCMD_NAME} in
|
|||||||
$function
|
$function
|
||||||
done
|
done
|
||||||
pause
|
pause
|
||||||
|
# Initialize sudo keepalive for dependency installation
|
||||||
|
sudo_init_keepalive
|
||||||
if [[ "${SKIP_ALLDEPS}" != true ]]; then
|
if [[ "${SKIP_ALLDEPS}" != true ]]; then
|
||||||
source ${SUBCMD_DIR}/1.deps-router.sh
|
source ${SUBCMD_DIR}/1.deps-router.sh
|
||||||
fi
|
fi
|
||||||
@@ -98,6 +106,8 @@ case ${SUBCMD_NAME} in
|
|||||||
$function
|
$function
|
||||||
done
|
done
|
||||||
pause
|
pause
|
||||||
|
# Initialize sudo keepalive for setup steps
|
||||||
|
sudo_init_keepalive
|
||||||
if [[ "${SKIP_ALLSETUPS}" != true ]]; then
|
if [[ "${SKIP_ALLSETUPS}" != true ]]; then
|
||||||
source ${SUBCMD_DIR}/2.setups.sh
|
source ${SUBCMD_DIR}/2.setups.sh
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user