Erreur32 hat die Gist bearbeitet 5 months ago. Zu Änderung gehen
1 file changed, 0 insertions, 0 deletions
rcconf_2026-01-06.png(Datei erstellt)
Änderungen an Binärdateien werden nicht angezeigt
Erreur32 hat die Gist bearbeitet 5 months ago. Zu Änderung gehen
Keine Änderungen
Erreur32 hat die Gist bearbeitet 5 months ago. Zu Änderung gehen
1 file changed, 147 insertions
rcconf_bash.sh(Datei erstellt)
| @@ -0,0 +1,147 @@ | |||
| 1 | + | #!/usr/bin/env bash | |
| 2 | + | set -euo pipefail | |
| 3 | + | ||
| 4 | + | [ "$EUID" -ne 0 ] && { echo "Exécuter en root"; exit 1; } | |
| 5 | + | ||
| 6 | + | export TERM="${TERM:-xterm-256color}" | |
| 7 | + | export NCURSES_NO_UTF8_ACS=1 | |
| 8 | + | ||
| 9 | + | . /etc/os-release | |
| 10 | + | OS_INFO="$NAME $VERSION_ID" | |
| 11 | + | ||
| 12 | + | # dialog check + install | |
| 13 | + | if ! command -v dialog >/dev/null 2>&1; then | |
| 14 | + | echo "dialog non installé." | |
| 15 | + | read -rp "Installer dialog maintenant ? [O/n] " r | |
| 16 | + | r=${r:-O} | |
| 17 | + | if [[ "$r" =~ ^[Oo]$ ]]; then | |
| 18 | + | apt update && apt install -y dialog | |
| 19 | + | else | |
| 20 | + | exit 1 | |
| 21 | + | fi | |
| 22 | + | fi | |
| 23 | + | ||
| 24 | + | # Taille plein écran | |
| 25 | + | H=$(tput lines); W=$(tput cols) | |
| 26 | + | H=$((H - 4)); W=$((W - 4)) | |
| 27 | + | LISTH=$((H - 9)) | |
| 28 | + | [ "$LISTH" -lt 8 ] && LISTH=8 | |
| 29 | + | ||
| 30 | + | # Détection init | |
| 31 | + | if pidof systemd >/dev/null 2>&1; then | |
| 32 | + | INIT=systemd | |
| 33 | + | else | |
| 34 | + | INIT=sysv | |
| 35 | + | fi | |
| 36 | + | ||
| 37 | + | header_text() { | |
| 38 | + | cat <<EOF | |
| 39 | + | OS: $OS_INFO | Init: $INIT | |
| 40 | + | ──────────────────────────────────────── | |
| 41 | + | Espace: ON/OFF | Entrée: Appliquer | Esc: Quitter | |
| 42 | + | EOF | |
| 43 | + | } | |
| 44 | + | ||
| 45 | + | # ===== Build list (ON d'abord) ===== | |
| 46 | + | build_items_systemd() { | |
| 47 | + | local unit state | |
| 48 | + | ON_UNITS=() | |
| 49 | + | OFF_UNITS=() | |
| 50 | + | ||
| 51 | + | while read -r unit state; do | |
| 52 | + | [[ "$unit" =~ \.service$ ]] || continue | |
| 53 | + | [[ "$state" =~ ^(enabled|disabled)$ ]] || continue | |
| 54 | + | if [ "$state" = "enabled" ]; then | |
| 55 | + | ON_UNITS+=("$unit") | |
| 56 | + | else | |
| 57 | + | OFF_UNITS+=("$unit") | |
| 58 | + | fi | |
| 59 | + | done < <(systemctl list-unit-files --type=service --no-legend --no-pager | awk '{print $1,$2}') | |
| 60 | + | ||
| 61 | + | SERVICES=( "${ON_UNITS[@]}" "${OFF_UNITS[@]}" ) | |
| 62 | + | ITEMS=() | |
| 63 | + | ||
| 64 | + | for unit in "${ON_UNITS[@]}"; do | |
| 65 | + | ITEMS+=("$unit" "\Z4ON\Zn " "on") | |
| 66 | + | done | |
| 67 | + | for unit in "${OFF_UNITS[@]}"; do | |
| 68 | + | ITEMS+=("$unit" "\Z1OFF\Zn" "off") | |
| 69 | + | done | |
| 70 | + | } | |
| 71 | + | ||
| 72 | + | build_items_sysv() { | |
| 73 | + | local svc | |
| 74 | + | ON_UNITS=() | |
| 75 | + | OFF_UNITS=() | |
| 76 | + | ||
| 77 | + | while read -r svc; do | |
| 78 | + | if ls /etc/rc?.d/S*"$svc" >/dev/null 2>&1; then | |
| 79 | + | ON_UNITS+=("$svc") | |
| 80 | + | else | |
| 81 | + | OFF_UNITS+=("$svc") | |
| 82 | + | fi | |
| 83 | + | done < <(for s in /etc/init.d/*; do [ -x "$s" ] && basename "$s"; done | sort) | |
| 84 | + | ||
| 85 | + | SERVICES=( "${ON_UNITS[@]}" "${OFF_UNITS[@]}" ) | |
| 86 | + | ITEMS=() | |
| 87 | + | ||
| 88 | + | for svc in "${ON_UNITS[@]}"; do | |
| 89 | + | ITEMS+=("$svc" "\Z4ON\Zn " "on") | |
| 90 | + | done | |
| 91 | + | for svc in "${OFF_UNITS[@]}"; do | |
| 92 | + | ITEMS+=("$svc" "\Z3OFF\Zn" "off") | |
| 93 | + | done | |
| 94 | + | } | |
| 95 | + | ||
| 96 | + | apply_selection_systemd() { | |
| 97 | + | local sel="$1" unit | |
| 98 | + | for unit in "${SERVICES[@]}"; do | |
| 99 | + | if [[ " $sel " =~ \"${unit}\" ]]; then | |
| 100 | + | systemctl enable "$unit" >/dev/null 2>&1 || true | |
| 101 | + | else | |
| 102 | + | systemctl disable "$unit" >/dev/null 2>&1 || true | |
| 103 | + | fi | |
| 104 | + | done | |
| 105 | + | } | |
| 106 | + | ||
| 107 | + | apply_selection_sysv() { | |
| 108 | + | local sel="$1" svc | |
| 109 | + | for svc in "${SERVICES[@]}"; do | |
| 110 | + | if [[ " $sel " =~ \"${svc}\" ]]; then | |
| 111 | + | ls /etc/rc?.d/S*"$svc" >/dev/null 2>&1 || update-rc.d "$svc" defaults >/dev/null | |
| 112 | + | else | |
| 113 | + | ls /etc/rc?.d/S*"$svc" >/dev/null 2>&1 && update-rc.d -f "$svc" remove >/dev/null | |
| 114 | + | fi | |
| 115 | + | done | |
| 116 | + | } | |
| 117 | + | ||
| 118 | + | # ===== Loop : applique + refresh (live) ===== | |
| 119 | + | while true; do | |
| 120 | + | SERVICES=(); ITEMS=() | |
| 121 | + | ||
| 122 | + | if [ "$INIT" = "systemd" ]; then | |
| 123 | + | build_items_systemd | |
| 124 | + | else | |
| 125 | + | build_items_sysv | |
| 126 | + | fi | |
| 127 | + | ||
| 128 | + | exec 3>&1 | |
| 129 | + | SEL=$(dialog \ | |
| 130 | + | --colors \ | |
| 131 | + | --clear \ | |
| 132 | + | --backtitle " rcconf hybride " \ | |
| 133 | + | --title " Gestion des services " \ | |
| 134 | + | --checklist "$(header_text)" \ | |
| 135 | + | "$H" "$W" "$LISTH" \ | |
| 136 | + | "${ITEMS[@]}" \ | |
| 137 | + | 2>&1 1>&3) || { exec 3>&-; clear; exit 0; } | |
| 138 | + | exec 3>&- | |
| 139 | + | ||
| 140 | + | if [ "$INIT" = "systemd" ]; then | |
| 141 | + | apply_selection_systemd "$SEL" | |
| 142 | + | else | |
| 143 | + | apply_selection_sysv "$SEL" | |
| 144 | + | fi | |
| 145 | + | ||
| 146 | + | # refresh auto (ordre ON/OFF recalculé) -> loop continue | |
| 147 | + | done | |