motorrin/arch-smart-update

GitHub: motorrin/arch-smart-update

一个 Bash 封装脚本,通过在 Arch Linux 更新前提供包分类、稳定性建议、新闻警报和数据库备份,帮助用户做出明智的更新决策。

Stars: 32 | Forks: 2

![Bash](https://img.shields.io/badge/Language-Bash-4EAA25?style=for-the-badge&logo=gnu-bash) ![CachyOS](https://img.shields.io/badge/OS-CachyOS-008B8B?style=for-the-badge&logo=linux&logoColor=white) ![EndeavourOS](https://img.shields.io/badge/OS-EndeavourOS-7F3F98?style=for-the-badge&logo=endeavouros&logoColor=white) ![Arch Linux](https://img.shields.io/badge/OS-Arch_Linux-1793D1?style=for-the-badge&logo=arch-linux) ![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge) **厌倦了盲目运行 `pacman -Syu` 然后祈祷你的系统不要崩溃吗?**
**[跳转至安装说明](#installation)**
**arch-smart-update** 是一个 bash 封装脚本,旨在保护原生 **Arch Linux** 及其衍生版的系统更新安全。它不再让你盲目更新,而是通过提供**软件包构建日期**、**软件包描述**、官方 **Arch 新闻**警报,以及来自智能**更新顾问**的稳定性建议,让你完全掌控整个升级过程——让你在将实际事务直接委托给 **pacman**、**AUR helper** 或 **topgrade** 之前,能够做出明智的决定。 该脚本还支持 **EndeavourOS**(如 `eos-update`)和 **CachyOS**(如 `arch-update`)上的特定发行版工具,同时保持与其他任何基于 Arch 的系统的完全兼容性。 ⚠️ **重要免责声明:** 顾问提供的更新建议是有用的指导原则,而非绝对的规则。作为 Arch Linux 用户,**你就是系统管理员**,对你的机器负有最终责任。在按下“Y”之前,请务必检查更新列表并运用你自己的判断力。对于任何崩溃的系统、无法引导的内核或数据丢失,作者概不负责! ![01](https://static.pigsec.cn/wp-content/uploads/repos/cas/ec/ec92a76cc1a08192f7f39adf6fbe64ffff79495c72e6fa7654cec773603eac33.png) ![02](https://static.pigsec.cn/wp-content/uploads/repos/cas/b1/b1353de9c270cb04b63ab34c261724e40facb5231b664271fe2bb41d09570763.png) ## Daemon 预览(可选,可在首次启动时激活) ![03](https://static.pigsec.cn/wp-content/uploads/repos/cas/40/40e94e0e82dc8370fa3c2e8356d44aa962fd3cf0c7f78a3df093655638063e23.png) ## ✨ 为什么你需要这个脚本(核心功能) - **⚡ 安全的基于 RAM 的同步 (`/tmp`):** 脚本在检查阶段绝不会触碰你正在使用的本地 pacman 数据库。所有数据库同步和计算都在你内存 (`/tmp/checkupdates-db...`) 中一个隔离的临时目录里完成。如果你决定取消更新,这能 100% 防止灾难性的“部分升级”场景。 - **🧠 智能更新顾问:** 自动分析待处理软件包的关键程度。如果会导致系统崩溃的更新(如 Linux 内核、`glibc` 或 NVIDIA 驱动)发布不到 24 小时,脚本会强烈建议你等待,确保在你应用更新之前上游是稳定的。 - **📰 Arch 新闻集成 (RSS):** 获取最新的官方 Arch Linux 新闻源。如果有需要手动干预的最新帖子,在按下“Y”之前你会收到显眼的警告。 - **🛡️ 自动 Pacman 数据库备份:** 在应用任何更改之前,自动使用快速的 Zstandard 压缩为你的 `/var/lib/pacman/local` 数据库创建一个 `.tar.zst` 备份。它会保留最近的 5 个副本,让你随时可以无缝回滚。 - **🚀 智能 Mirror 管理:** 监控你的 mirrorlist 使用时间和同步速度。如果镜像存在时间超过 7 天或超时,它会检测到不稳定情况,并提议通过 `reflector`、`eos-rankmirrors` 或 `cachyos-rate-mirrors` 自动刷新它们。 - **📊 丰富的 CLI 分析:** 显示一个格式精美、带有颜色代码的终端表格,展示更新类型 (MAJOR、MINOR、PATCH、CALVER、EPOCH)、以小时为单位的包龄、下载大小、仓库和描述。 - **🔒 智能 Lock File 移除:** 检测过期的 `/var/lib/pacman/db.lck` 文件,并检查当前是否真的有包管理器在运行。它会在可用时使用 `fuser`,或者原生提取锁定 PID 并扫描进程表 (`pgrep` / `/proc`) 作为备用方案,以安全地移除幽灵锁定。 - **🚨 IgnorePkg 冲突检查:** 如果你通过 `pacman.conf` 冻结了软件包,脚本会在后台模拟更新,并警告你因跳过软件包而导致的任何依赖破坏。 - **🧹 自动系统清理:** 可选的更新后清理,可安全移除孤立的软件包、清除未完成的下载、清空 pacman/AUR 缓存、清理 systemd journal(保留 100M)以及清除用户缩略图缓存。 - **🧩 无缝生态集成:** 全面原生支持 AUR helper(`yay`、`paru`),并与 `eos-update` 和 `topgrade` 协同工作,以处理你的 Flatpak、固件和 dotfile。 - **👻 后台 Daemon 与通知:** 你可以允许脚本使用 user systemd timer 在后台运行。它会使用 `fakeroot` 静默检查更新(无需 sudo),并通过 `libnotify` 发送交互式桌面通知。针对 Arch 新闻设有智能的 3 次通知限制,以防止垃圾信息。 - **🎛️ 统一的配置管理:** 所有自定义命令、mirror 覆盖、行为设置和用户软件包数组都从一个单独的 `settings.conf` 文件中安全地解析。你的个人设置与上游默认值隔离,在脚本更新期间永远不会被覆盖。 ## ⚙️ 软件包分类与威胁等级 该脚本能识别数百个软件包(从桌面环境到基础系统组件),并将它们划分为四个威胁等级,同时计算出一个安全的“冷却”期: - **☢️ NUKE(系统核心):** `glibc`、`linux`、`nvidia`、`systemd`、`grub`、`cryptsetup`。 - **❗ CRIT & DEs(关键服务与桌面环境):** `mesa`、`wayland`、`dbus`、`KDE Plasma`、`GNOME`、`Hyprland` 等。 - **⭐ FEAT(通用功能与实用程序):** 音频/网络协议栈、框架、EOS 应用。 - **📦 标准软件包与 AUR:** - **💡 自定义列表:** 你不必为了将这些特定应用添加到这些类别中而等待更新!你可以使用 settings.conf 文件轻松地将自己的软件包追加到 NUKE、CRIT 或 FEAT 列表中,并且你的更改将在未来所有的脚本更新中保留。 ## 📁 配置与自定义 在首次运行时,脚本会在 `~/.config/arch-smart-update/` 创建一个配置文件夹,从 GitHub 下载最新的默认模板,并帮助你设置标准功能。每当你手动启动脚本时,它会在最顶部显示你当前活动配置文件的确切路径。 为了确保你的个人设置永远不会被脚本更新覆盖,配置被划分为两种类型: **1. 开发者管理(通过 GitHub 自动更新):** - `packages.conf` — 已分类软件包的主列表。 - `*.default.conf` — 展示最新推荐语法的模板。 **2. 用户管理(可安全防止被覆盖):** - `settings.conf` — 你的主配置文件。在这里你可以配置: - **通用设置:** `PROMPT_MIRROR_REFRESH`、`MAX_BACKUP_COPIES`、`AUR_HELPER_OVERRIDE`、`ENABLE_POST_CLEANUP`。 - **Daemon 与日志:** 配置 `ENABLE_BACKGROUND_CHECK`、systemd timer 间隔以及 `GENERATE_LOGS`。 - **覆盖:** 定义 `CUSTOM_REFLECTOR_CMD` 或定义 `CUSTOM_CMDS`(例如 `flatpak update -y`)来代替标准实用程序运行。 - **用户软件包:** 将你自己的应用添加到数组中(例如 `USER_CRITICAL_PKGS=("my-important-app")`),以将它们集成到顾问的威胁等级中。 *(注意:如果你是从 3.0 之前的版本升级的,该脚本具有自动迁移工具,它会在首次运行时将你旧的碎片化文件无缝合并到新的 `settings.conf` 中)。* 每当 GitHub 上的主配置更新时,脚本都会悄悄拉取更改,而不会触碰你的自定义文件! ## 📋 依赖项 该脚本依赖于标准的系统实用程序,但请确保你已安装以下软件包: `sudo pacman -S curl python bash tar gawk coreutils zstd util-linux` *(注意:python 包为 Arch 新闻 RSS 检查提供 python3,zstd 是加速本地数据库备份所必需的,而 util-linux 提供了用于交互式终端模拟的 script 实用程序)。* **可选依赖项:** - `base-devel`(特别是 `fakeroot`)— 后台 daemon 在没有 sudo 权限的情况下同步数据库所必需的。 - `libnotify`— 在 daemon 模式下进行桌面通知所必需的。 - `psmisc`— 提供用于标准 lock file 分析的 `fuser` 实用程序(尽管脚本在缺失时具有原生的备用方案)。 ## 🛠️ 安装 ## 方式 1:从 AUR 安装(推荐) 该脚本已在 Arch User Repository 中正式提供。你可以使用你最喜欢的 AUR helper 进行安装: 对于 yay: `yay -S arch-smart-update` 对于 paru: `paru -S arch-smart-update` ## 方式 2:手动安装 如果你选择手动安装该脚本,请记住你还需要手动下载新版本以确保稳定性: 1. `cd ~` 2. `curl -O https://raw.githubusercontent.com/motorrin/arch-smart-update/main/arch-smart-update.sh` 3. `chmod +x arch-smart-update.sh` ## ❓ 我该如何使用这个脚本? 如果你是通过 AUR 安装的,该命令已全局可用: `arch-smart-update` 如果你是手动安装的,命令为: `~/arch-smart-update.sh` ## ⌨️ 为什么要敲这么多字母?创建一个 alias 吧! ### 1. 检查你正在使用的 shell: `echo $SHELL` ### 2. 打开你的配置文件: 对于 bash: `nano ~/.bashrc` 对于 zsh: `nano ~/.zshrc` 对于 fish: `nano ~/.config/fish/config.fish` ### 3. 将 alias 添加到文件的最末尾: 如果你是通过 AUR 安装的: `alias up="arch-smart-update"` 如果你是手动安装的: `alias up="$HOME/arch-smart-update.sh"` ### 4. 立即应用更改: 对于 bash: `source ~/.bashrc` 对于 zsh: `source ~/.zshrc` 对于 fish: `source ~/.config/fish/config.fish` ## 🗑️ 卸载脚本 ### 1. 确保后台进程没有运行: `systemctl --user disable --now arch-smart-update.timer` ### 2. 移除脚本(根据你的安装方式运行其中一个): AUR: `sudo pacman -Rns arch-smart-update` 手动安装 *(如果你将其下载到了其他文件夹,请相应地更改路径)*: `rm ~/arch-smart-update.sh` ### 3. 移除配置文件、日志、新闻缓存和图标: `rm -rf ~/.config/arch-smart-update` ### 4. 移除生成的 systemd 文件: `rm -f ~/.config/systemd/user/arch-smart-update.service` `rm -f ~/.config/systemd/user/arch-smart-update.timer` `systemctl --user daemon-reload` ### 5. 删除 Pacman 数据库备份: `sudo rm -f /var/lib/pacman/backup/pacman_database_*.tar.zst` `sudo rm -f /var/lib/pacman/backup/pacman_database_*.tar.gz` ### 6. 清除 AUR helper 的构建缓存(如果是通过 AUR 安装的): `rm -rf ~/.cache/yay/arch-smart-update` `rm -rf ~/.cache/paru/clone/arch-smart-update`
标签:Arch Linux, Bash, 应用安全, 系统更新, 运维工具, 逆向工具