一款基于 Tauri 的原生 Linux 桌面应用,将 apt、snap、flatpak 更新以及系统健康检查、故障修复和深度清理整合到一个无需终端操作的图形界面中。

# ButterUp
**像黄油般顺滑的系统更新 —— 在一个窗口中搞定 apt、snap 和 flatpak。**
*源自印地语俗语“makkhan jaisa chalna” —— 运行如黄油般顺滑。* 🧈
[](https://github.com/abdulfarhath/ButterUp/releases/latest)
[](https://github.com/abdulfarhath/ButterUp/releases)
[](LICENSE)


## 你的更新崩溃了。现在怎么办?
`dpkg was interrupted, you must manually run…`(dpkg 被中断,你必须手动运行……)—— 如果这句话曾经毁掉
你的午后时光,那么 ButterUp 就是为你而生的。保持基于 Debian 的系统健康意味着
要同时应付 apt、snap 和 flatpak;当更新出错时,你最终只能从十年前的论坛帖子里
复制粘贴各种终端咒语。
ButterUp 将这一切整合到一个友好的窗口中:查看所有待处理的内容,
一键更新所有内容(或仅更新安全修复),**检测并修复
经典的损坏状态**,并回收隐藏在缓存、旧内核和被遗忘的 snap 修订版本中的数 GB 空间。
无需终端 —— 提权操作通过系统原生的密码对话框(polkit)完成。
## 安装
从[最新发布](https://github.com/abdulfarhath/ButterUp/releases/latest)中获取安装包 ——
每个版本都提供 **amd64**(Intel/AMD)和 **arm64**(Raspberry Pi 4/5,ARM 笔记本电脑)版本:
| 你的系统 | 文件 | 安装方式 |
|---|---|---|
| Ubuntu 22.04+, Debian 12+, Mint, Pop!\_OS 等 | `ButterUp_*.deb` | `sudo apt install ./ButterUp_*.deb` |
| Fedora, openSUSE, RHEL | `ButterUp-*.rpm` | `sudo dnf install ./ButterUp-*.rpm` |
| 其他任何系统(无需安装) | `ButterUp_*.AppImage` | `chmod +x` 并运行 |
大功告成 —— 从你的应用菜单中启动 **ButterUp** 即可。
完整体验(健康修复、清理、历史记录)专为 apt/dpkg 系统打造。
在非 Debian 发行版上,PackageKit 更新、snap 和 flatpak 功能仍然有效;
而 apt 专属的工具则会自动隐藏。
建议在标准桌面上使用预装的 PackageKit 和 pkexec。
## 功能特性
| | |
|---|---|
| 🔄 **更新一切** | 并排显示 apt(通过 PackageKit)、snap 和 flatpak —— 可更新全部、部分更新或**仅更新安全修复**,并预先显示实时进度和下载大小 |
| 🩺 **健康检查** | 8 项针对导致系统崩溃状态的检查:dpkg 被中断、依赖损坏、保留的包、`/boot` 空间将满、内核堆积、过时的软件包列表、待重启 |
| 🔧 **一键修复** | 每个问题都附带引导式的、由 polkit 授权的修复方案 —— 就是论坛上会建议你运行的那些命令,但你不再需要去翻论坛 |
| 🧹 **深度清理** | autoremove + 旧内核、apt 缓存、被取代的 snap 修订版本、systemd 日志 —— 在你确认执行前会显示可清理的大小 |
| 📜 **历史记录** | 系统上的每一次软件包变更,均从 apt 自身的事务日志中解析得出:时间、内容,以及操作发起者 |
| 🪶 **轻量级** | 原生 Tauri 2 应用(使用系统 WebKit,不含 Electron)—— .deb 包仅约 4 MB |
## 为什么不直接使用内置的更新程序?
Ubuntu 的更新程序只为你展示更新 —— 仅此而已。当更新*失败*时,
你就只能自求多福了。ButterUp 的健康检查能够捕获经典的失败状态,
并通过一次授权点击即可修复它们。而且与老旧的清理工具(如 Stacer 等)不同的是,
它建立在系统原生且规范的接口之上 —— 通过 D-Bus 通信的 PackageKit、polkit、snapd ——
而不是粗暴抓取命令行结果,因此它能与你的包管理器保持可靠一致。
它以 root 身份运行的所有操作都是一个简短、固定的白名单,你可以在[这个文件](src-tauri/src/privileged.rs)中进行审计。
## 从源码构建
系统依赖项(Ubuntu/Debian):
```
sudo apt install build-essential curl wget file pkg-config \
libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev \
librsvg2-dev nodejs npm rustc cargo
```
在开发环境中运行:
```
npm install
npm run tauri dev
```
构建发布版 `.deb`:
```
npm run tauri build
```
针对你的在线系统运行(只读)冒烟测试:
```
cd src-tauri && cargo test --test smoke -- --nocapture
```
## 路线图
- [x] 统一更新:apt(通过 D-Bus 的 PackageKit)、snap、flatpak
- [x] 仅安全更新 + 下载大小预览
- [x] 健康检查,支持一键 polkit 授权修复
- [x] 清理:autoremove、旧内核、包缓存、snap 修订版本、日志
- [x] 更新历史(apt 事务日志)
- [x] .deb 打包 + CI 发布
- [ ] 托盘图标 + 后台更新通知
- [ ] Flatpak 未使用运行时清理
- [ ] PPA / apt 仓库发布
欢迎贡献代码 —— 代码库小巧且易读(Rust + React),
上述路线图是一个很好的入手点。
## 技术栈
- **前端:** React + TypeScript + Vite
- **外壳:** [Tauri 2](https://v2.tauri.app)(系统 WebKitGTK,非 Electron)
- **后端:** Rust —— 使用 `zbus` 处理 PackageKit/D-Bus,调用 snap 和 flatpak CLI,通过 pkexec 进行 polkit 授权
## 许可证
[GPL-3.0-or-later](LICENSE)