Utoljára aktív 1787969768

Automatically sync .bashrc for all users for Administrator.

dartokloning's Avatar dartokloning gist felülvizsgálása 1787969767. Revízióhoz ugrás

1 file changed, 88 insertions, 4 deletions

sync-bashrc-all.sh

@@ -1,23 +1,27 @@
1 1 #!/bin/bash
2 2 #
3 - # sync-bashrc-all.sh
3 + # sync-bashrc-all.sh (v2)
4 4 #
5 5 # Skrip all-in-one:
6 + # 0. Pastikan dependency (vivid, fastfetch) terinstall via apt
6 7 # 1. Cek /etc/skel/.bashrc vs versi remote (gist) -> update kalau beda
7 - # 2. Cek /etc/shell-prompt.sh vs versi remote (gist) -> download/update kalau
8 - # belum ada atau beda
9 - # 3. Terapkan /etc/skel/.bashrc ke semua user existing di /home yang
8 + # 2. Cek /etc/shell-prompt.sh vs versi remote (gist) -> update kalau beda
9 + # 3. Cek /etc/fastfetch/config.jsonc vs versi remote (gist) -> update kalau beda
10 + # 4. Terapkan /etc/skel/.bashrc ke semua user existing di /home yang
10 11 # .bashrc-nya belum sesuai
11 12 #
12 13 # Jalankan sebagai root: sudo bash sync-bashrc-all.sh
13 14
14 15 set -euo pipefail
16 + export DEBIAN_FRONTEND=noninteractive
15 17
16 18 BASHRC_URL="https://gist.darto.id/dartokloning/866220d4bda046fe93508ed50dac1965/download/HEAD/.bashrc"
17 19 PROMPT_URL="https://gist.darto.id/dartokloning/def50cb1b3024c3b8683960c873caf34/download/HEAD/shell-prompt.sh"
20 + FASTFETCH_CONFIG_URL="https://gist.darto.id/dartokloning/655822e458964d0a93085c205506443f/download/HEAD/config.jsonc"
18 21
19 22 SKEL_BASHRC="/etc/skel/.bashrc"
20 23 PROMPT_FILE="/etc/shell-prompt.sh"
24 + FASTFETCH_CONFIG_FILE="/etc/fastfetch/config.jsonc"
21 25
22 26 if [ "$(id -u)" -ne 0 ]; then
23 27 echo "Skrip ini harus dijalankan sebagai root (pakai sudo)." >&2
@@ -36,6 +40,86 @@ fetch() {
36 40 fi
37 41 }
38 42
43 + sync_file() {
44 + # sync_file URL DEST_PATH LABEL [CHMOD_MODE]
45 + # return 0 kalau file diperbarui, 1 kalau sudah sesuai (tidak ada perubahan)
46 + local url="$1" dest="$2" label="$3" mode="${4:-}"
47 + local tmp="$TMP_DIR/$(basename "$dest")"
48 +
49 + fetch "$url" "$tmp"
50 + mkdir -p "$(dirname "$dest")"
51 +
52 + if [ ! -f "$dest" ] || ! cmp -s "$tmp" "$dest"; then
53 + cp "$tmp" "$dest"
54 + [ -n "$mode" ] && chmod "$mode" "$dest"
55 + echo " -> $label diperbarui."
56 + return 0
57 + else
58 + echo " -> $label sudah sesuai, tidak ada perubahan."
59 + return 1
60 + fi
61 + }
62 +
63 + echo "== 0. Pastikan dependency (vivid, fastfetch) terinstall =="
64 + need_install=()
65 + command -v vivid >/dev/null 2>&1 || need_install+=("vivid")
66 + command -v fastfetch >/dev/null 2>&1 || need_install+=("fastfetch")
67 +
68 + if [ "${#need_install[@]}" -gt 0 ]; then
69 + echo " -> Menginstall: ${need_install[*]}"
70 + apt-get update -qq
71 + apt-get install -y "${need_install[@]}"
72 + else
73 + echo " -> vivid & fastfetch sudah terinstall, skip."
74 + fi
75 +
76 + echo
77 + echo "== 1. Cek /etc/skel/.bashrc =="
78 + sync_file "$BASHRC_URL" "$SKEL_BASHRC" "$SKEL_BASHRC" || true
79 +
80 + echo
81 + echo "== 2. Cek /etc/shell-prompt.sh =="
82 + sync_file "$PROMPT_URL" "$PROMPT_FILE" "$PROMPT_FILE" "644" || true
83 +
84 + echo
85 + echo "== 3. Cek /etc/fastfetch/config.jsonc =="
86 + sync_file "$FASTFETCH_CONFIG_URL" "$FASTFETCH_CONFIG_FILE" "$FASTFETCH_CONFIG_FILE" "644" || true
87 +
88 + echo
89 + echo "== 4. Terapkan template ke user existing di /home =="
90 + for home_dir in /home/*/; do
91 + home_dir="${home_dir%/}"
92 + user="$(basename "$home_dir")"
93 +
94 + # skip kalau bukan user valid (mis. lost+found, direktori nyasar)
95 + if ! id "$user" >/dev/null 2>&1; then
96 + continue
97 + fi
98 +
99 + target="$home_dir/.bashrc"
100 +
101 + # kalau .bashrc user sudah identik dengan template skel, skip
102 + if [ -f "$target" ] && cmp -s "$SKEL_BASHRC" "$target"; then
103 + echo "[SKIP] $user - .bashrc sudah sesuai template"
104 + continue
105 + fi
106 +
107 + # backup .bashrc lama, hanya sekali (tidak menimpa backup yang sudah ada)
108 + if [ -f "$target" ] && [ ! -f "$home_dir/.bashrc.original" ]; then
109 + cp -a "$target" "$home_dir/.bashrc.original"
110 + echo "[BACKUP] $user - .bashrc lama disimpan sebagai .bashrc.original"
111 + fi
112 +
113 + cp "$SKEL_BASHRC" "$target"
114 + chown "$user":"$user" "$target"
115 + echo "[APPLY] $user - .bashrc diperbarui dari template skel"
116 + done
117 +
118 + echo
119 + echo "Selesai."
120 + echo "Catatan: user yang sedang login perlu 'source ~/.bashrc' atau login ulang"
121 + echo "agar shell aktifnya ikut memakai .bashrc yang baru."}
122 +
39 123 echo "== 1. Cek /etc/skel/.bashrc =="
40 124 tmp_bashrc="$TMP_DIR/.bashrc"
41 125 fetch "$BASHRC_URL" "$tmp_bashrc"

dartokloning's Avatar dartokloning gist felülvizsgálása 1787968413. Revízióhoz ugrás

1 file changed, 96 insertions

sync-bashrc-all.sh(fájl létrehozva)

@@ -0,0 +1,96 @@
1 + #!/bin/bash
2 + #
3 + # sync-bashrc-all.sh
4 + #
5 + # Skrip all-in-one:
6 + # 1. Cek /etc/skel/.bashrc vs versi remote (gist) -> update kalau beda
7 + # 2. Cek /etc/shell-prompt.sh vs versi remote (gist) -> download/update kalau
8 + # belum ada atau beda
9 + # 3. Terapkan /etc/skel/.bashrc ke semua user existing di /home yang
10 + # .bashrc-nya belum sesuai
11 + #
12 + # Jalankan sebagai root: sudo bash sync-bashrc-all.sh
13 +
14 + set -euo pipefail
15 +
16 + BASHRC_URL="https://gist.darto.id/dartokloning/866220d4bda046fe93508ed50dac1965/download/HEAD/.bashrc"
17 + PROMPT_URL="https://gist.darto.id/dartokloning/def50cb1b3024c3b8683960c873caf34/download/HEAD/shell-prompt.sh"
18 +
19 + SKEL_BASHRC="/etc/skel/.bashrc"
20 + PROMPT_FILE="/etc/shell-prompt.sh"
21 +
22 + if [ "$(id -u)" -ne 0 ]; then
23 + echo "Skrip ini harus dijalankan sebagai root (pakai sudo)." >&2
24 + exit 1
25 + fi
26 +
27 + TMP_DIR="$(mktemp -d)"
28 + trap 'rm -rf "$TMP_DIR"' EXIT
29 +
30 + fetch() {
31 + # fetch URL DEST_TMPFILE -> berhenti dengan pesan jelas kalau gagal
32 + local url="$1" dest="$2"
33 + if ! wget -q -O "$dest" "$url"; then
34 + echo "Error: gagal download $url (cek koneksi internet)." >&2
35 + exit 1
36 + fi
37 + }
38 +
39 + echo "== 1. Cek /etc/skel/.bashrc =="
40 + tmp_bashrc="$TMP_DIR/.bashrc"
41 + fetch "$BASHRC_URL" "$tmp_bashrc"
42 +
43 + if [ ! -f "$SKEL_BASHRC" ] || ! cmp -s "$tmp_bashrc" "$SKEL_BASHRC"; then
44 + cp "$tmp_bashrc" "$SKEL_BASHRC"
45 + echo " -> $SKEL_BASHRC diperbarui dari gist."
46 + else
47 + echo " -> $SKEL_BASHRC sudah sesuai dengan gist, tidak ada perubahan."
48 + fi
49 +
50 + echo
51 + echo "== 2. Cek /etc/shell-prompt.sh =="
52 + tmp_prompt="$TMP_DIR/shell-prompt.sh"
53 + fetch "$PROMPT_URL" "$tmp_prompt"
54 +
55 + if [ ! -f "$PROMPT_FILE" ] || ! cmp -s "$tmp_prompt" "$PROMPT_FILE"; then
56 + cp "$tmp_prompt" "$PROMPT_FILE"
57 + chmod 644 "$PROMPT_FILE"
58 + echo " -> $PROMPT_FILE diperbarui dari gist."
59 + else
60 + echo " -> $PROMPT_FILE sudah sesuai dengan gist, tidak ada perubahan."
61 + fi
62 +
63 + echo
64 + echo "== 3. Terapkan template ke user existing di /home =="
65 + for home_dir in /home/*/; do
66 + home_dir="${home_dir%/}"
67 + user="$(basename "$home_dir")"
68 +
69 + # skip kalau bukan user valid (mis. lost+found, direktori nyasar)
70 + if ! id "$user" >/dev/null 2>&1; then
71 + continue
72 + fi
73 +
74 + target="$home_dir/.bashrc"
75 +
76 + # kalau .bashrc user sudah identik dengan template skel, skip
77 + if [ -f "$target" ] && cmp -s "$SKEL_BASHRC" "$target"; then
78 + echo "[SKIP] $user - .bashrc sudah sesuai template"
79 + continue
80 + fi
81 +
82 + # backup .bashrc lama, hanya sekali (tidak menimpa backup yang sudah ada)
83 + if [ -f "$target" ] && [ ! -f "$home_dir/.bashrc.original" ]; then
84 + cp -a "$target" "$home_dir/.bashrc.original"
85 + echo "[BACKUP] $user - .bashrc lama disimpan sebagai .bashrc.original"
86 + fi
87 +
88 + cp "$SKEL_BASHRC" "$target"
89 + chown "$user":"$user" "$target"
90 + echo "[APPLY] $user - .bashrc diperbarui dari template skel"
91 + done
92 +
93 + echo
94 + echo "Selesai."
95 + echo "Catatan: user yang sedang login perlu 'source ~/.bashrc' atau login ulang"
96 + echo "agar shell aktifnya ikut memakai .bashrc yang baru."
Újabb Régebbi