Add distro detection, confirm helper, remote self-bootstrap
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+65
-2
@@ -51,6 +51,35 @@ print_banner() {
|
||||
echo ""
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Phát hiện distro qua /etc/os-release → debian | arch | unknown
|
||||
# -----------------------------
|
||||
detect_distro() {
|
||||
[ -r /etc/os-release ] || { echo unknown; return; }
|
||||
local id id_like
|
||||
. /etc/os-release 2>/dev/null
|
||||
id="${ID:-}"; id_like="${ID_LIKE:-}"
|
||||
case "$id $id_like" in
|
||||
*arch*) echo arch ;;
|
||||
*debian*) echo debian ;;
|
||||
*ubuntu*) echo debian ;;
|
||||
*) echo unknown ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Hỏi Y/n (Enter = Yes). Trả về 0 = đồng ý, 1 = hủy.
|
||||
# -----------------------------
|
||||
confirm_yn() {
|
||||
local prompt="$1" confirm
|
||||
read -r -p " ${prompt} (Y/n): " confirm
|
||||
if [[ -n "$confirm" && ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then
|
||||
echo " Đã hủy."
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Danh sách target fix cứng (alias từ ~/.ssh/config)
|
||||
# -----------------------------
|
||||
@@ -98,20 +127,54 @@ select_target() {
|
||||
done
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Chạy tuần tự 6 bước (stub — các bước thêm ở Task 4-9)
|
||||
# -----------------------------
|
||||
run_all_steps() {
|
||||
echo " (các bước cleanup sẽ thêm ở Task 4-9)"
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Chạy trên target đã chọn.
|
||||
# local → chạy tại chỗ.
|
||||
# alias → self-bootstrap: base64 script qua argv, giữ stdin=terminal
|
||||
# để read/màu tương tác hoạt động qua PTY của `ssh -t`.
|
||||
# -----------------------------
|
||||
run_on_target() {
|
||||
local target="$1"
|
||||
if [ "$target" = "local" ]; then
|
||||
run_all_steps
|
||||
return $?
|
||||
fi
|
||||
local b64
|
||||
b64=$(base64 < "$0" | tr -d '\n') || {
|
||||
echo "${C_DEL} ✗ Không mã hóa được script.${C_RESET}"
|
||||
return 1
|
||||
}
|
||||
# Giải mã ra file tạm trên remote rồi chạy; stdin không bị redirect → read OK.
|
||||
ssh -t "$target" \
|
||||
"umask 077; t=\$(mktemp); printf '%s' '$b64' | base64 -d > \"\$t\" && bash \"\$t\" --run-steps; r=\$?; rm -f \"\$t\"; exit \$r" \
|
||||
|| { echo "${C_DEL} ✗ ssh tới $target thất bại.${C_RESET}"; return 1; }
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# Main (phân nhánh theo argv)
|
||||
# -----------------------------
|
||||
main() {
|
||||
if [ "${1:-}" = "--run-steps" ]; then
|
||||
echo "${C_TITLE}===== 🧹 Cleanup-server (--run-steps) =====${C_RESET}"
|
||||
echo " (chưa có bước nào — sẽ thêm ở task sau)"
|
||||
echo ""
|
||||
run_all_steps
|
||||
echo ""
|
||||
echo "${C_OK}===== ✅ Cleanup-server hoàn tất =====${C_RESET}"
|
||||
return
|
||||
fi
|
||||
print_banner
|
||||
echo "${C_TITLE}===== 🧹 Cleanup-server =====${C_RESET}"
|
||||
echo ""
|
||||
select_target
|
||||
echo " Đã chọn target: ${C_TITLE}${TARGET}${C_RESET} (chạy sẽ thêm ở Task 3)"
|
||||
echo ""
|
||||
run_on_target "$TARGET"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user