125 lines
2.6 KiB
Bash
125 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
system_require_bash() {
|
|
if [[ -z "${BASH_VERSION:-}" ]]; then
|
|
printf 'Bash est requis.\n' >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
system_require_debian() {
|
|
if [[ ! -r /etc/os-release ]]; then
|
|
ui_error "Impossible de detecter le systeme"
|
|
exit 1
|
|
fi
|
|
|
|
if ! grep -Eq '^ID=debian$|^ID_LIKE=.*debian' /etc/os-release; then
|
|
ui_error "Ce script cible Debian"
|
|
exit 1
|
|
fi
|
|
|
|
ui_success "Systeme Debian detecte"
|
|
}
|
|
|
|
system_require_root() {
|
|
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
|
|
ui_error "Relancer ce script avec sudo ou en root"
|
|
exit 1
|
|
fi
|
|
|
|
ui_success "Privileges root valides"
|
|
}
|
|
|
|
system_can_prompt_password() {
|
|
[[ -t 0 && -t 1 ]]
|
|
}
|
|
|
|
system_reexec_as_root() {
|
|
local entrypoint="${POSTINSTALL_ENTRYPOINT:-}"
|
|
local quoted_args=""
|
|
local arg=""
|
|
|
|
if [[ "${EUID:-$(id -u)}" -eq 0 ]]; then
|
|
return 0
|
|
fi
|
|
|
|
if [[ -z "$entrypoint" || ! -f "$entrypoint" ]]; then
|
|
ui_error "Impossible de relancer automatiquement en root depuis cette execution"
|
|
return 1
|
|
fi
|
|
|
|
if ! system_can_prompt_password; then
|
|
ui_error "Privileges root requis et aucun terminal interactif disponible"
|
|
return 1
|
|
fi
|
|
|
|
for arg in "$@"; do
|
|
quoted_args="${quoted_args} $(printf '%q' "$arg")"
|
|
done
|
|
|
|
if command -v sudo >/dev/null 2>&1; then
|
|
ui_info "Privileges root requis, tentative avec sudo"
|
|
exec sudo --preserve-env=TMPDIR bash "$entrypoint" "$@"
|
|
fi
|
|
|
|
if command -v su >/dev/null 2>&1; then
|
|
ui_info "Privileges root requis, bascule vers root avec su"
|
|
exec su -c "bash $(printf '%q' "$entrypoint")$quoted_args"
|
|
fi
|
|
|
|
ui_error "Ni sudo ni su ne sont disponibles pour obtenir les privileges root"
|
|
return 1
|
|
}
|
|
|
|
system_user_exists() {
|
|
local user_name="$1"
|
|
id "$user_name" >/dev/null 2>&1
|
|
}
|
|
|
|
system_group_exists() {
|
|
local group_name="$1"
|
|
getent group "$group_name" >/dev/null 2>&1
|
|
}
|
|
|
|
system_user_in_group() {
|
|
local user_name="$1"
|
|
local group_name="$2"
|
|
id -nG "$user_name" 2>/dev/null | tr ' ' '\n' | grep -Fx "$group_name" >/dev/null 2>&1
|
|
}
|
|
|
|
system_primary_interface() {
|
|
ip route get 1.1.1.1 2>/dev/null | awk '
|
|
/dev/ {
|
|
for (i = 1; i <= NF; i++) {
|
|
if ($i == "dev") {
|
|
print $(i + 1)
|
|
exit
|
|
}
|
|
}
|
|
}'
|
|
}
|
|
|
|
system_origin_user() {
|
|
if [[ -n "${SUDO_USER:-}" ]]; then
|
|
printf '%s\n' "$SUDO_USER"
|
|
return 0
|
|
fi
|
|
|
|
if [[ -n "${PKEXEC_UID:-}" ]]; then
|
|
getent passwd "$PKEXEC_UID" | cut -d: -f1
|
|
return 0
|
|
fi
|
|
|
|
printf '%s\n' "$(id -un)"
|
|
}
|
|
|
|
system_privilege_mode() {
|
|
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
|
|
printf 'utilisateur\n'
|
|
elif [[ -n "${SUDO_USER:-}" ]]; then
|
|
printf 'sudo\n'
|
|
else
|
|
printf 'root direct\n'
|
|
fi
|
|
}
|