一个用来下载安装My_Aur的脚本
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-18 21:25:58 +08:00
LICENSE Initial commit 2026-09-18 20:01:40 +08:00
oru update 2026-09-18 21:25:58 +08:00
README.md init 2026-09-18 20:56:45 +08:00

oru

oru 是 My_AUR 个人打包仓库的选择器 + 批量安装器: 一条命令拉起 fzf 界面,从远端 package_list 里挑包(可多选),回车后自动依次 makepkg -si。

一句话:oru = package_list 解析器 + fzf 选择界面 + makepkg 批量执行器。

仓库/项目目录名是 Oru/,可执行文件本身叫小写的 oru;脚本用 ${0##*/} 取自身名字, 因此重命名成别的名字时提示信息会跟着变。

安装

单文件脚本、无扩展名、不依赖同目录下的其他文件,直接丢进 PATH 即可:

install -Dm755 oru ~/.local/bin/oru      # 或 /usr/local/bin/oru

依赖(Arch Linux):fzf、git、makepkg(base-devel)、pacman;bat 可选,缺失时预览自动降级为 cat。

sudo pacman -S --needed fzf git base-devel bat

用法

oru                      # 打开 TUI:Tab 多选 / Enter 安装 / Esc 退出
oru fwaifu_alvin         # 跳过 TUI 直接安装(可按给定顺序给多个包名)
oru --list               # 只打印列表(纯文本、不联网、不进 TUI)
oru --refresh            # 只 clone / pull 缓存仓库
oru --no-pull            # 与默认流程 / 直接安装组合:跳过 git pull,用本地缓存

oru --clean-cache        # 删除缓存仓库(打印路径与占用后确认)
oru --clean-log          # 删除日志文件
oru --clean-log --days 30  # 只删 30 天前的日志
oru --clean              # 缓存 + 日志一起清
oru --clean --yes        # 清理时免确认(非交互式/脚本里必须加)
oru --clean-log --dry-run  # 只打印将要删除的内容

oru -h | --help          # 完整中文帮助
oru -V | --version       # 版本号与仓库地址

TUI 界面

上方是包列表:Tab / Shift-Tab 切换选中,输入即模糊搜索;[已安装](绿)表示 pacman 已装, [缺目录](红)表示列表里有但缓存仓库里找不到包目录。

下方预览窗格显示所选包的信息面板(pacman -Si 风格)+ 该包的 PKGBUILD 原文:

软件库      : My_AUR
名字        : fwaifu_alvin
版本        : 1.2.1-1
描述        : Terminal anime girl viewer powered by fastfetch and chafa
URL         : https://github.com/cublueer/fwaifu
仓库路径    : ~/.cache/oru/My_AUR/fwaifu/PKGBUILD
组          : 无
许可证      : MIT
提供        : 无
依赖于      : fastfetch
生成依赖    : cargo rust git
检查依赖    : 无
可选依赖    : imagemagick chafa
冲突于      : 无
替代        : 无
维护者      : alvin
状态        : 已安装

── PKGBUILD ──
# Maintainer: alvin <starriver_alvin@163.com>
pkgname=fwaifu_alvin
...

字段全部来自 PKGBUILD 的文本解析(绝不 source,多行数组也支持);缺失的字段显示「无」; 可选依赖 只留依赖名、去掉 : 说明(与 pacman 一致,说明本身在下方 PKGBUILD 里);列表版本与 PKGBUILD 不一致时会在 版本 一栏附注 (列表: x.y.z-n);软件库 取自仓库地址末段 (ORU_REPO_URL 换了名字这里会跟着变)。

环境变量与路径

用途 默认值 覆盖变量
仓库地址 https://git.starriver.cc/alvin/My_AUR ORU_REPO_URL
缓存仓库 ${XDG_CACHE_HOME:-$HOME/.cache}/oru/My_AUR ORU_CACHE_DIR
日志目录 ${XDG_STATE_HOME:-$HOME/.local/state}/oru/log ORU_LOG_DIR
缓存锁文件 缓存仓库同级目录下的 .oru.lock ORU_LOCK_FILE
彩色开关 非 tty 自动关闭 NO_COLOR

ORU_REPO_URL 可以指向任何公开可读的 git 仓库,也可以指向本地路径,便于离线验证:

ORU_REPO_URL=/path/to/local/My_AUR ORU_CACHE_DIR=/tmp/oru-cache oru --list

退出码

码 含义
0 全部成功(清理模式:已清理或本来就没有可清理的)
1 运行中出错(网络、分叉、缺目录、列表为空…),或至少一个包安装失败
2 命令行参数用法错误
130 用户取消(TUI 里 Esc / Ctrl-C、安装过程中 Ctrl-C,或清理时拒绝确认)

清理缓存与日志

oru --clean-cache            # 只删缓存仓库
oru --clean-log              # 只删日志(默认全部)
oru --clean-log --days 30    # 只删 30 天前的日志
oru --clean                  # 两者都清
  • 删除前会打印将删除的路径与占用大小,并在交互式终端里问一次 [y/N];回答 n 视为取消,退出码 130。
  • --yes(-y)免确认;非交互式环境(管道/脚本)不给 --yes 会直接拒绝删除并退出 1。
  • --dry-run 只打印将要删除的内容,不真删。
  • 缓存删除会先拿 flock,不会和正在跑的 oru 抢仓库;只删自己算出来的缓存路径,/、$HOME 等危险路径直接拒绝。
  • 清理模式不写日志(否则会边写边删),也不需要 fzf / git。

日志

每次运行写一个日志文件 $ORU_LOG_DIR/<YYYYmmdd-HHMMSS>.log,内容包括:时间戳、完整命令行、 仓库地址与 git pull 前后 commit、每个包的实际目录、makepkg 的完整 stdout/stderr、 每个包的退出码与最终汇总。构建输出同时出现在终端和日志里(tee 式),不会因为写日志而看不到进度。 日志不做自动清理(oru --clean-log 手动清);同秒内的两次运行会追加到同一个文件。

工作方式与边界

  • 解析:跳过 //、# 注释与空行;有效行为 包名 版本-rel - 维护者。格式异常的行只跳过并在 stderr 警告,不会让整次运行失败;展示与安装顺序统一按包名字典序(LC_ALL=C),稳定可复现。
  • 目录映射:列表名未必等于目录名(例:列表/pkgname 是 fwaifu_alvin,目录是 fwaifu)。先找同名目录,找不到就扫描各目录 PKGBUILD 的 pkgname(只做文本解析,绝不 source),仍找不到则标 [缺目录],选中时明确报错并计入失败。
  • 已安装标记:一次 pacman -Qq 批量查询,同时按条目名、包目录名、目录内 pkgname 三者判定;已安装的包仍可选中重装(默认不预选)。
  • 版本口径:列表版本只用于展示,实际安装版本以 PKGBUILD 为准;两者不一致时打印一行提示,不打断流程。
  • 构建:按顺序逐个 cd 到包目录执行 makepkg -si(不加 --noconfirm,保留 pacman 的交互确认);单个包失败不中断后续包,最后打印 成功 X / 失败 Y / 跳过 Z 与日志路径。
  • 缓存仓库:clone / pull 全程 flock 串行化;pull 只用 --ff-only,遇到本地改动或分叉时给出路径后退出,绝不 reset --hard;缓存目录不是合法 git 仓库时先打印将删除的路径再重建。

不做的事:不解析依赖树、不处理 AUR 依赖(失败时提示用 paru 自行解决)、不做版本升级、不卸载、 不清理缓存包与构建产物、不做 GUI 与多仓库管理、不 source 远端仓库里的任何文件。