2
This commit is contained in:
87
scripts/03c-snapshot-before-desktop.sh
Normal file
87
scripts/03c-snapshot-before-desktop.sh
Normal file
@ -0,0 +1,87 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==============================================================================
|
||||
# 03c-snapshot-before-desktop.sh
|
||||
# Creates a system snapshot before installing major Desktop Environments.
|
||||
# ==============================================================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# 1. 引用工具库
|
||||
if [ -f "$SCRIPT_DIR/00-utils.sh" ]; then
|
||||
source "$SCRIPT_DIR/00-utils.sh"
|
||||
else
|
||||
echo "Error: 00-utils.sh not found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 权限检查
|
||||
check_root
|
||||
|
||||
section "Phase 3c" "System Snapshot"
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
create_checkpoint() {
|
||||
local MARKER="Before Desktop Environments"
|
||||
|
||||
# 0. 检查 snapper 是否安装
|
||||
if ! command -v snapper &>/dev/null; then
|
||||
warn "Snapper tool not found. Skipping snapshot creation."
|
||||
return
|
||||
fi
|
||||
|
||||
# 1. Root 分区快照
|
||||
# 检查 root 配置是否存在
|
||||
if snapper -c root get-config &>/dev/null; then
|
||||
# 检查是否已存在同名快照 (避免重复创建)
|
||||
if snapper -c root list --columns description | grep -Fqx "$MARKER"; then
|
||||
log "Snapshot '$MARKER' already exists on [root]."
|
||||
else
|
||||
log "Creating safety checkpoint on [root]..."
|
||||
# 使用 --type single 表示这是一个独立的存档点
|
||||
snapper -c root create --description "$MARKER"
|
||||
success "Root snapshot created."
|
||||
fi
|
||||
else
|
||||
warn "Snapper 'root' config not configured. Skipping root snapshot."
|
||||
fi
|
||||
|
||||
# 2. Home 分区快照 (如果存在 home 配置)
|
||||
if snapper -c home get-config &>/dev/null; then
|
||||
if snapper -c home list --columns description | grep -Fqx "$MARKER"; then
|
||||
log "Snapshot '$MARKER' already exists on [home]."
|
||||
else
|
||||
log "Creating safety checkpoint on [home]..."
|
||||
snapper -c home create --description "$MARKER"
|
||||
success "Home snapshot created."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# 执行
|
||||
# ==============================================================================
|
||||
# --- Identify User & DM Check ---
|
||||
log "Identifying target user..."
|
||||
detect_target_user
|
||||
|
||||
if [[ -z "$TARGET_USER" || ! -d "$HOME_DIR" ]]; then
|
||||
error "Target user invalid or home directory does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Preparing to create restore point..."
|
||||
create_checkpoint
|
||||
|
||||
HYRPLAND_AUTOSTART="$HOME_DIR/.config/systemd/user/hyprland-autostart.service"
|
||||
NIRI_AUTOSTART="$HOME_DIR/.config/systemd/user/niri-autostart.service"
|
||||
if [ -f "$HYPRLAND_AUTOSTART" ]; then
|
||||
log "Removing existing Hyprland autostart service..."
|
||||
rm -f "$HYPRLAND_AUTOSTART"
|
||||
fi
|
||||
if [ -f "$NIRI_AUTOSTART" ]; then
|
||||
log "Removing existing Niri autostart service..."
|
||||
rm -f "$NIRI_AUTOSTART"
|
||||
fi
|
||||
log "Module 03c completed."
|
||||
Reference in New Issue
Block a user