first commit
This commit is contained in:
177
run.sh
Executable file
177
run.sh
Executable file
@@ -0,0 +1,177 @@
|
||||
#!/usr/bin/env bash
|
||||
# Point d'entree pour le provisioning NETbian
|
||||
|
||||
export PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
export ROLE_DIR="$PROJECT_DIR/roles"
|
||||
export PROFILE_DIR="$PROJECT_DIR/profiles"
|
||||
|
||||
source "$PROJECT_DIR/lib.sh"
|
||||
enable_strict_mode
|
||||
|
||||
PROG="$(basename "$0")"
|
||||
usage() {
|
||||
local exit_code="${1:-1}"
|
||||
cat <<EOM >&2
|
||||
Usage: $PROG [options]
|
||||
Options:
|
||||
-p, --profile <server|desktop|devel|cli> Profile to install (required)
|
||||
-l, --lang <code> Language code if translations are needed (e.g. fr, es, de)
|
||||
--config <path> Config file path (default: /etc/netbian.conf)
|
||||
--list-profiles List available profiles and exit
|
||||
--list-roles List available roles and exit
|
||||
-h, --help Show this help
|
||||
EOM
|
||||
exit "$exit_code"
|
||||
}
|
||||
|
||||
PROFILE_OVERRIDE="${NETBIAN_PROFILE:-}"
|
||||
LANG_OVERRIDE="${NETBIAN_LANG:-}"
|
||||
CONFIG_FILE="${NETBIAN_CONFIG_FILE:-/etc/netbian.conf}"
|
||||
ARGS_PROVIDED=false
|
||||
LIST_PROFILES=false
|
||||
LIST_ROLES=false
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
ARGS_PROVIDED=true
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-p | --profile)
|
||||
shift
|
||||
[[ $# -gt 0 && -n "${1:-}" ]] || {
|
||||
err "Option --profile requires a value."
|
||||
usage
|
||||
}
|
||||
PROFILE_OVERRIDE="$1"
|
||||
shift
|
||||
;;
|
||||
-l | --lang)
|
||||
shift
|
||||
[[ $# -gt 0 && -n "${1:-}" ]] || {
|
||||
err "Option --lang requires a value."
|
||||
usage
|
||||
}
|
||||
LANG_OVERRIDE="$1"
|
||||
shift
|
||||
;;
|
||||
--config)
|
||||
shift
|
||||
[[ $# -gt 0 && -n "${1:-}" ]] || {
|
||||
err "Option --config requires a path."
|
||||
usage
|
||||
}
|
||||
CONFIG_FILE="$1"
|
||||
shift
|
||||
;;
|
||||
--list-profiles)
|
||||
LIST_PROFILES=true
|
||||
shift
|
||||
;;
|
||||
--list-roles)
|
||||
LIST_ROLES=true
|
||||
shift
|
||||
;;
|
||||
-h | --help)
|
||||
usage 0
|
||||
;;
|
||||
-*)
|
||||
err "Unknown option: $1"
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
err "Positional arguments are not supported."
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if $LIST_PROFILES; then
|
||||
list_available_profiles | sort
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if $LIST_ROLES; then
|
||||
list_available_roles | sort
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[[ "$(id -u)" -eq 0 ]] || fatal "Please run this script as root."
|
||||
require_debian_version "13"
|
||||
if exists_cmd curl; then
|
||||
curl -fsSI --connect-timeout 10 https://deb.debian.org/ >/dev/null || fatal "Network unavailable (HTTP test failed with curl)."
|
||||
elif exists_cmd wget; then
|
||||
wget -q --timeout=10 --spider https://deb.debian.org/ >/dev/null 2>&1 || fatal "Network unavailable (HTTP test failed with wget)."
|
||||
else
|
||||
fatal "curl or wget is required for the network availability check."
|
||||
fi
|
||||
|
||||
cat <<'EOM'
|
||||
_ _ _____ _____ _ _
|
||||
| \ | | ____|_ _| |__ (_) __ _ _ __
|
||||
| \| | _| | | | '_ \| |/ _` | '_ \
|
||||
| |\ | |___ | | | |_) | | (_| | | | |
|
||||
|_| \_|_____| |_| |_.__/|_|\__,_|_| |_|
|
||||
|
||||
EOM
|
||||
|
||||
declare -A CFG
|
||||
CONFIG_EXISTED=false
|
||||
if [[ -f "$CONFIG_FILE" ]]; then
|
||||
CONFIG_EXISTED=true
|
||||
validate_config_file "$CONFIG_FILE"
|
||||
source "$CONFIG_FILE"
|
||||
[[ -n "${profile:-}" ]] && CFG[profile]="$profile"
|
||||
[[ -n "${lang:-}" ]] && CFG[lang]="$lang"
|
||||
fi
|
||||
|
||||
if [[ -n "$PROFILE_OVERRIDE" ]]; then
|
||||
PROFILE_OVERRIDE="$(tr '[:upper:]' '[:lower:]' <<<"$PROFILE_OVERRIDE")"
|
||||
case "$PROFILE_OVERRIDE" in
|
||||
server | desktop | devel | cli) CFG[profile]="$PROFILE_OVERRIDE" ;;
|
||||
*)
|
||||
err "Invalid profile"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [[ -n "$LANG_OVERRIDE" ]]; then
|
||||
CFG[lang]="$(tr '[:upper:]' '[:lower:]' <<<"$LANG_OVERRIDE" | tr '_' '-')"
|
||||
fi
|
||||
|
||||
[[ -n "${CFG[profile]:-}" ]] || {
|
||||
err "Profile not provided. Use --profile or NETBIAN_PROFILE."
|
||||
usage
|
||||
}
|
||||
|
||||
TMP_IN="$(mktemp --tmpdir netbian.conf.in.XXXXXX)" || TMP_IN="/tmp/netbian.conf.in.$$"
|
||||
TMP_OUT="$(mktemp --tmpdir netbian.conf.out.XXXXXX)" || TMP_OUT="/tmp/netbian.conf.out.$$"
|
||||
trap 'rm -f "$TMP_IN" "$TMP_OUT"' EXIT
|
||||
|
||||
if [[ -f "$CONFIG_FILE" ]]; then
|
||||
grep -v -E '^(profile|lang)=' "$CONFIG_FILE" >"$TMP_IN" || true
|
||||
else
|
||||
: >"$TMP_IN"
|
||||
fi
|
||||
|
||||
{
|
||||
cat "$TMP_IN"
|
||||
printf 'profile=%s\n' "${CFG[profile]}"
|
||||
[[ -n "${CFG[lang]:-}" ]] && printf 'lang=%s\n' "${CFG[lang]}"
|
||||
} >"$TMP_OUT"
|
||||
|
||||
if write_if_changed "$TMP_OUT" "$CONFIG_FILE"; then
|
||||
echo "Configuration written to $CONFIG_FILE:"
|
||||
grep -E '^(profile|lang)=' "$CONFIG_FILE" || true
|
||||
elif $CONFIG_EXISTED; then
|
||||
if $ARGS_PROVIDED; then
|
||||
echo "No changes; configuration remains in $CONFIG_FILE:"
|
||||
else
|
||||
echo "Configuration read from $CONFIG_FILE:"
|
||||
fi
|
||||
grep -E '^(profile|lang)=' "$CONFIG_FILE" || true
|
||||
else
|
||||
echo "No configuration file present and no changes were made."
|
||||
fi
|
||||
|
||||
export CONFIG_FILE
|
||||
exec "$PROJECT_DIR/roles.sh"
|
||||
Reference in New Issue
Block a user