#!/bin/bash # # sync-bashrc-all.sh # # Skrip all-in-one: # 1. Cek /etc/skel/.bashrc vs versi remote (gist) -> update kalau beda # 2. Cek /etc/shell-prompt.sh vs versi remote (gist) -> download/update kalau # belum ada atau beda # 3. Terapkan /etc/skel/.bashrc ke semua user existing di /home yang # .bashrc-nya belum sesuai # # Jalankan sebagai root: sudo bash sync-bashrc-all.sh set -euo pipefail BASHRC_URL="https://gist.darto.id/dartokloning/866220d4bda046fe93508ed50dac1965/download/HEAD/.bashrc" PROMPT_URL="https://gist.darto.id/dartokloning/def50cb1b3024c3b8683960c873caf34/download/HEAD/shell-prompt.sh" SKEL_BASHRC="/etc/skel/.bashrc" PROMPT_FILE="/etc/shell-prompt.sh" if [ "$(id -u)" -ne 0 ]; then echo "Skrip ini harus dijalankan sebagai root (pakai sudo)." >&2 exit 1 fi TMP_DIR="$(mktemp -d)" trap 'rm -rf "$TMP_DIR"' EXIT fetch() { # fetch URL DEST_TMPFILE -> berhenti dengan pesan jelas kalau gagal local url="$1" dest="$2" if ! wget -q -O "$dest" "$url"; then echo "Error: gagal download $url (cek koneksi internet)." >&2 exit 1 fi } echo "== 1. Cek /etc/skel/.bashrc ==" tmp_bashrc="$TMP_DIR/.bashrc" fetch "$BASHRC_URL" "$tmp_bashrc" if [ ! -f "$SKEL_BASHRC" ] || ! cmp -s "$tmp_bashrc" "$SKEL_BASHRC"; then cp "$tmp_bashrc" "$SKEL_BASHRC" echo " -> $SKEL_BASHRC diperbarui dari gist." else echo " -> $SKEL_BASHRC sudah sesuai dengan gist, tidak ada perubahan." fi echo echo "== 2. Cek /etc/shell-prompt.sh ==" tmp_prompt="$TMP_DIR/shell-prompt.sh" fetch "$PROMPT_URL" "$tmp_prompt" if [ ! -f "$PROMPT_FILE" ] || ! cmp -s "$tmp_prompt" "$PROMPT_FILE"; then cp "$tmp_prompt" "$PROMPT_FILE" chmod 644 "$PROMPT_FILE" echo " -> $PROMPT_FILE diperbarui dari gist." else echo " -> $PROMPT_FILE sudah sesuai dengan gist, tidak ada perubahan." fi echo echo "== 3. Terapkan template ke user existing di /home ==" for home_dir in /home/*/; do home_dir="${home_dir%/}" user="$(basename "$home_dir")" # skip kalau bukan user valid (mis. lost+found, direktori nyasar) if ! id "$user" >/dev/null 2>&1; then continue fi target="$home_dir/.bashrc" # kalau .bashrc user sudah identik dengan template skel, skip if [ -f "$target" ] && cmp -s "$SKEL_BASHRC" "$target"; then echo "[SKIP] $user - .bashrc sudah sesuai template" continue fi # backup .bashrc lama, hanya sekali (tidak menimpa backup yang sudah ada) if [ -f "$target" ] && [ ! -f "$home_dir/.bashrc.original" ]; then cp -a "$target" "$home_dir/.bashrc.original" echo "[BACKUP] $user - .bashrc lama disimpan sebagai .bashrc.original" fi cp "$SKEL_BASHRC" "$target" chown "$user":"$user" "$target" echo "[APPLY] $user - .bashrc diperbarui dari template skel" done echo echo "Selesai." echo "Catatan: user yang sedang login perlu 'source ~/.bashrc' atau login ulang" echo "agar shell aktifnya ikut memakai .bashrc yang baru."