最後活躍 1789531939

Automatically sync .bashrc for all users for Administrator.

dartokloning's Avatar dartokloning 已修改 1789531939. 還原成這個修訂版本

1 file changed, 41 insertions, 93 deletions

sync-bashrc-all.sh

@@ -1,16 +1,15 @@
1 1 #!/bin/bash
2 2 #
3 - # sync-bashrc-all.sh (v2)
3 + # sync-bashrc-all.sh (v3)
4 4 #
5 - # Skrip all-in-one:
6 - # 0. Pastikan dependency (vivid, fastfetch) terinstall via apt
7 - # 1. Cek /etc/skel/.bashrc vs versi remote (gist) -> update kalau beda
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
11 - # .bashrc-nya belum sesuai
5 + # 0. Pastikan dependency vivid + fastfetch tersedia
6 + # 1. Sinkronkan /etc/skel/.bashrc
7 + # 2. Sinkronkan /etc/shell-prompt.sh
8 + # 3. Sinkronkan /etc/fastfetch/config.jsonc
9 + # 4. Terapkan .bashrc ke semua user existing di /home
10 + # 5. Terapkan .bashrc yang sama ke root
12 11 #
13 - # Jalankan sebagai root: sudo bash sync-bashrc-all.sh
12 + # Jalankan: sudo bash sync-bashrc-all.sh
14 13
15 14 set -euo pipefail
16 15 export DEBIAN_FRONTEND=noninteractive
@@ -32,7 +31,6 @@ TMP_DIR="$(mktemp -d)"
32 31 trap 'rm -rf "$TMP_DIR"' EXIT
33 32
34 33 fetch() {
35 - # fetch URL DEST_TMPFILE -> berhenti dengan pesan jelas kalau gagal
36 34 local url="$1" dest="$2"
37 35 if ! wget -q -O "$dest" "$url"; then
38 36 echo "Error: gagal download $url (cek koneksi internet)." >&2
@@ -41,8 +39,6 @@ fetch() {
41 39 }
42 40
43 41 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 42 local url="$1" dest="$2" label="$3" mode="${4:-}"
47 43 local tmp="$TMP_DIR/$(basename "$dest")"
48 44
@@ -60,6 +56,32 @@ sync_file() {
60 56 fi
61 57 }
62 58
59 + apply_bashrc() {
60 + local user="$1" home_dir="$2"
61 + local target="$home_dir/.bashrc"
62 + local backup="$home_dir/.bashrc.original"
63 +
64 + if [ -f "$target" ] && cmp -s "$SKEL_BASHRC" "$target"; then
65 + echo "[SKIP] $user - .bashrc sudah sesuai template"
66 + return
67 + fi
68 +
69 + if [ -f "$target" ] && [ ! -f "$backup" ]; then
70 + cp -a "$target" "$backup"
71 + echo "[BACKUP] $user - .bashrc lama disimpan sebagai .bashrc.original"
72 + fi
73 +
74 + cp "$SKEL_BASHRC" "$target"
75 +
76 + if [ "$user" = "root" ]; then
77 + chown root:root "$target"
78 + else
79 + chown "$user":"$(id -gn "$user")" "$target"
80 + fi
81 +
82 + echo "[APPLY] $user - .bashrc diperbarui dari template skel"
83 + }
84 +
63 85 echo "== 0. Pastikan dependency (vivid, fastfetch) terinstall =="
64 86 need_install=()
65 87 command -v vivid >/dev/null 2>&1 || need_install+=("vivid")
@@ -88,93 +110,19 @@ sync_file "$FASTFETCH_CONFIG_URL" "$FASTFETCH_CONFIG_FILE" "$FASTFETCH_CONFIG_FI
88 110 echo
89 111 echo "== 4. Terapkan template ke user existing di /home =="
90 112 for home_dir in /home/*/; do
113 + [ -d "$home_dir" ] || continue
91 114 home_dir="${home_dir%/}"
92 115 user="$(basename "$home_dir")"
93 116
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"
117 + id "$user" >/dev/null 2>&1 || continue
118 + apply_bashrc "$user" "$home_dir"
116 119 done
117 120
118 121 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 -
123 - echo "== 1. Cek /etc/skel/.bashrc =="
124 - tmp_bashrc="$TMP_DIR/.bashrc"
125 - fetch "$BASHRC_URL" "$tmp_bashrc"
126 -
127 - if [ ! -f "$SKEL_BASHRC" ] || ! cmp -s "$tmp_bashrc" "$SKEL_BASHRC"; then
128 - cp "$tmp_bashrc" "$SKEL_BASHRC"
129 - echo " -> $SKEL_BASHRC diperbarui dari gist."
130 - else
131 - echo " -> $SKEL_BASHRC sudah sesuai dengan gist, tidak ada perubahan."
132 - fi
133 -
134 - echo
135 - echo "== 2. Cek /etc/shell-prompt.sh =="
136 - tmp_prompt="$TMP_DIR/shell-prompt.sh"
137 - fetch "$PROMPT_URL" "$tmp_prompt"
138 -
139 - if [ ! -f "$PROMPT_FILE" ] || ! cmp -s "$tmp_prompt" "$PROMPT_FILE"; then
140 - cp "$tmp_prompt" "$PROMPT_FILE"
141 - chmod 644 "$PROMPT_FILE"
142 - echo " -> $PROMPT_FILE diperbarui dari gist."
143 - else
144 - echo " -> $PROMPT_FILE sudah sesuai dengan gist, tidak ada perubahan."
145 - fi
146 -
147 - echo
148 - echo "== 3. Terapkan template ke user existing di /home =="
149 - for home_dir in /home/*/; do
150 - home_dir="${home_dir%/}"
151 - user="$(basename "$home_dir")"
152 -
153 - # skip kalau bukan user valid (mis. lost+found, direktori nyasar)
154 - if ! id "$user" >/dev/null 2>&1; then
155 - continue
156 - fi
157 -
158 - target="$home_dir/.bashrc"
159 -
160 - # kalau .bashrc user sudah identik dengan template skel, skip
161 - if [ -f "$target" ] && cmp -s "$SKEL_BASHRC" "$target"; then
162 - echo "[SKIP] $user - .bashrc sudah sesuai template"
163 - continue
164 - fi
165 -
166 - # backup .bashrc lama, hanya sekali (tidak menimpa backup yang sudah ada)
167 - if [ -f "$target" ] && [ ! -f "$home_dir/.bashrc.original" ]; then
168 - cp -a "$target" "$home_dir/.bashrc.original"
169 - echo "[BACKUP] $user - .bashrc lama disimpan sebagai .bashrc.original"
170 - fi
171 -
172 - cp "$SKEL_BASHRC" "$target"
173 - chown "$user":"$user" "$target"
174 - echo "[APPLY] $user - .bashrc diperbarui dari template skel"
175 - done
122 + echo "== 5. Terapkan template ke root =="
123 + apply_bashrc "root" "/root"
176 124
177 125 echo
178 126 echo "Selesai."
179 - echo "Catatan: user yang sedang login perlu 'source ~/.bashrc' atau login ulang"
180 - echo "agar shell aktifnya ikut memakai .bashrc yang baru."
127 + echo "User yang sedang login perlu 'source ~/.bashrc' atau login ulang."
128 + echo "Untuk menguji root prompt: sudo -i"

dartokloning's Avatar dartokloning 已修改 1787969767. 還原成這個修訂版本

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 已修改 1787968413. 還原成這個修訂版本

1 file changed, 96 insertions

sync-bashrc-all.sh(檔案已創建)

@@ -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."
上一頁 下一頁