paru 是 yay 的作者之一 Morganamilo 使用 Rust 编写的另一个 AUR 助手. 基本命令与功能与 yay 和 pacman 几乎一样, 所以迁移过来不会有任何困难.

0 安装

如果没有安装其他的 AUR 助手, 可以执行以下命令:

sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/paru-git.git
cd paru-git
makepkg -si

如果有安装 yay, 可以直接执行:

yay -S paru-git

1 基本用法

1.1 paru

当什么参数都不加的时候, 默认执行paru -Syu, 首先从软件仓库查找更新, 然后从 AUR 查找更新.

1.2 paru <search terms>

通过 paru 搜索关键词<search terms>的软件包, 并询问要安装哪一个. 以下是 paru texlive-full 的输出:

1 aur/texlive-full 1:2022.20220406-1 [+5 ~0.00] [已安装]
    This packages provides texlive-full in /opt. It also tricks ArchLinux into thinking it has its texlive packages installed.
:: 需要安装的包 (例如: 1 2 3, 1-3):
:: 

1.3 paru <operation> [options] [targets]

这里<operation>是一个必须参数, 表示操作. 用缩写的时候用一个大写字母表示, 例如-S表示--sync, <options>是选项. 多个选项可以写在一起, 例如paru --sync -y -u就是常见的paru -Syu.

2 paru 特有的操作

2.1 -P (--show)

打印相关的选项.

2.1.1 -c (--complete)

打印所有来自 AUR 和软件仓库的包, 用于自动补全, 用户不应直接使用.

2.1.2 -s (--state)

展示安装的软件包的信息以及系统健康情况, 以及是否有过期包, 孤儿包等.

2.1.3 -w (--news)

展示来自 Arch Linux 主页的新闻. 只展示比所有本地软件包构建日期要新的新闻, 要展示所有新闻, 请使用 -ww.

2.1.4 -o (--order)

展示目标软件包的构建顺序.

2.2 -G (--getpkgbuild)

从 ABS (Arch Linux Build System, Arch Linux 构建系统) 或者 AUR 下载 PKGBUILD, ABS 只能对 Arch Linux 软件仓库用.

2.2.1 -p (--print)

PKGBUILD 打印到终端, 而不是下载 PKGBUILD.

2.2.2 -c (--comments)

展示软件包的 AUR 评论.

2.2.3 -s (--ssh)

通过 ssh 克隆 AUR 仓库.

2.3 -U (--upgrade)

当不带目标执行的时候, 使用 makepkg 相同, 构建当前文件夹下的 PKGBUILD.

2.3.1 -i (--install)

构建完毕后同时安装.

2.4 -L (--repoctl)

列出所有仓库.

2.4.1 -l (--list)

显示本地仓库的软件包.

2.4.2 -d (--delete)

移除本地的一个软件包, 使用 -dd 同时卸载该软件包.

2.4.3 -y (--refresh)

刷新本地仓库.

2.4.4 -q (--quiet)

展示更少信息.

2.5 -C (--chrootctl)

到 chroot 的交互式命令行.

2.5.1 -i (--install)

将一个软件包安装到 chroot.

2.5.2 -u (--sysupgrade)

更新 chroot.

3 扩展 pacman 的操作

扩展到同时支持软件仓库和 AUR 的软件包的操作有 -R, -S, -Si, -Sl, -Ss, -Su, -Sc, -Qu, -T.

3.1 -R

paru 会同时清除关于 devel 包的缓存数据.

3.2 -Sc

paru 会同时清除缓存的 AUR 软件包以及缓存中任何未被跟踪的文件. 清除未被跟踪的文件会清除所有下载的 source 以及构建好的软件包,但是下载的 VCS source 会被保留。添加 -d 或者 --delete 可以删除整个软件包,而不是仅仅清理它.

3.3 -Ss

可以通过正则表达式搜索 AUR 软件包, 但是必须通过 -x--regex 明确指定。不管 --searchby 如何设定, 正则表达式都只匹配包名 (pkgname) 而不匹配描述 (pkgdesc).

3.4 -Sss

paru 会展示详细的搜索结果.

3.5 -S, -Si, -Sl, -Ss, -Su, -Qu

对于这些选项, paru 也能够处理 AUR 的包.

4 新的选项

4.1 --repo

假设所有目标来自于软件仓库,并且像 -u 只处理来自于软件仓库的软件包.

4.2 -a (--aur)

假设所有目标来自于 AUR, 并且 -u 之类的选项只处理来自于 AUR 的包.

4.3 --aururl

设置 AUR 代理 (只代理下载 AUR 仓库, 不代理下载打包的 source).

4.4 --clonedir <dir>

设置下载和运行 PKGBUILD 的目录.

4.5 --makepkg <command>

设置 makepkg 调用的命令, 可以是 PATH 里面的命令或者任意一个绝对路径指向的文件.

4.6 --makepkgconf <file>

为 chroot 环境指定一个 makepkg 的配置文件, 只能使用绝对路径.

4.7 --pacman <command>

调用 pacman 的命令, 可以是 PATH 里面的命令或者任意一个绝对路径指向的文件.

4.8 --git <command>

设置自定义 git 的命令, 可以是 PATH 里面的命令或者任意一个绝对路径指向的文件.

4.9 --gitflags <flags>

向 git 传递的参数, 每次当 paru 调用 git 的时候都会传递. 参数按空格分割, 然后用引号包裹起来, 即:

--gitflags "flag1 flag2 flag3"

4.10 --fmflags <flags>

向 fm 传递的参数, 每次当 paru 调用 gpg 的时候都会传递. 参数按空格分割, 然后用引号包裹起来. 即:

--fmflags "flag1 flag2 flag3"

4.11 --asp <command>

自定义的asp命令, 可以是 PATH 里面的命令或者任意一个绝对路径指向的文件.

4.12 --mflags <flags>

向 makepkg 传递的参数,每次当 paru 调用 makepkg 的时候都会传递. 参数按空格分割, 然后用引号包裹起来, 即:

--mflags "flag1 flag2 flag3"

4.13 --bat <command>

自定义的bat命令, 可以是 PATH 里面的命令或者任意一个绝对路径指向的文件.

4.14 --batflags <flags>

向 bat 传递的参数, 每次当 paru 调用 bat 的时候都会传. 参数按空格分割, 然后用引号包裹起来, 即:

--batflags "flag1 flag2 flag3"

4.15 --sudo <command>

自定义的 sudo 命令, 可以是 PATH 里面的命令或者任意一个绝对路径指向的文件. --sudoloop 选项不一定能和自定义的 sudo 命令兼容.

4.16 --sudoflags <flags>

向 sudo 传递的参数, 每次当 paru 调用 sudo 的时候都会传递. 参数按空格分割, 然后用引号包裹起来, 即:

--sudoflags "flag1 flag2 flag3"

4.17 --completioninterval <days>

刷新补全缓存的时间间隔,设置为 0 表示每次都刷新, -1 表示永不刷新,默认值为 7.

4.18 --sortby <votes|popularity|id|baseid|name|base|submitted|modified>

在搜索时对 AUR 的软件包按特定指标排序, 默认按 votes 降序排列.

4.19 --searchby <name|name-desc|maintainer|depends|checkdepends|makedepends|optdepends>

按指定域进行 AUR 搜索,默认按 name-desc 搜索.

4.20 --skipreview

跳过审阅过程.

4.21 --upgrademenu

展示详细的更新清单, 格式类似于 pacman 的 VerbosePkgLists 选项. 可以使用数字, 数字范围或者仓库名称跳过某些更新. 不建议跳过来自软件仓库的更新,因为这可能会导致部分更新. 该选项的目的是用于跳过某些 AUR 更新.

4.22 --nogrademenu

不展示更新菜单.

4.23 --removemake [yes|no|ask]

在安装完软件包后移除 makedepends. 如果设置为 ask, 在构建过程中会显示一个询问菜单. 没有指定选项时, 默认是 yes.

4.24 --topdown

从上往下打印搜索结果, 首先打印来自软件仓库的软件包. 这是默认行为.

4.25 --bottomup

从下往上打印搜索结果, 首先打印来自 AUR 的软件包.

4.26 --limit <limit>

在一次搜索中限制返回的结果的数量, 默认是 0 (无限制). 可以分别对 AUR 和软件仓库进行限制.

4.27 --nocheck

不解决依赖或者不运行 PKGBUILD 中的 check 函数.

4.28 --installdebug

如果一个包提供 debug 包, 同时安装 debug 包.

4.29 --noinstalldebug

当一个包提供 debug 包时, 不安装 debug 包.

4.30 --devel

在系统更新 (sysUpgrade) 时, 同时检查 AUR 包的 Development 更新,目前只支持 git 包 (即 *-git 之类的包).

4.31 --nodevel

在系统更新时, 不检查 Development 的软件包.

4.32 --develsuffixes

paru 用来决定一个包是否是 Devel Package 的后缀,当启用 --needed 选项时用于决定是否要更新 pkgver. 注意 suffixes 是复数, 即可以有多个后缀.

4.33 --cleanafter

在安装后移除未被跟踪的文件 (不移除目录). 这使得采用版本控制系统 (VCS) 的软件包能够轻松拉取更新, 而不是重新克隆整个仓库.

4.34 --nocleanafter

安装后不移除软件包的源文件 (source).

4.35 --redownload [yes|no|all]

即使在本地缓存有 PKGBUILD 的时候也总是重新下载一份 PKGBUIL . 如果指定 all, 所有软件包的 PKGBUILD 都会重新下载, 而不仅仅是目标 (targets) 软件包, 当指定了该选项时, 默认为 yes.

4.36 --noredownload

当下载 PKGBUILD 时, 如果本地缓存的 PKGBUILD 跟 AUR 的一样新或者比 AUR 的新时, 不重新下载 PKGBUILD.

4.37 --provides

查找匹配 Provides 的 AUR 软件包. 当有多个结果时, 提示用户选择一个. 该选项会增加解决依赖的时间 (但是感知不强).

4.38 --noprovides

不查找 AUR 软件包的 Provides 部分. paru 不会展示 Provider 菜单, 但是 pacman 仍然会为软件仓库中的包展示 Provider 菜单.

4.39 --pgpfetch

提示从每个 PKGBUILDvalidpgpkeys 部分导入未知的 PGP 密钥.

4.40 --nopgpfetch

不提示导入未知的 PGP 密钥. 这可能会导致软件包构建失败, 除非使用 --skippgpcheck 或者自定义的 GPG 配置.

4.41 --newsonupgrade

在系统更新时打印新的新闻.

4.42 --useask

使用 pacman 的--ask来自动确认软件包冲突. paru 会提前列出冲突列表. paru 有可能会没有检测到软件包冲突, 导致一个软件包没有经过询问就被移除. 但是这是几乎不可能的.

4.43 --nouseask

在安装过程中手动解决冲突, 不冲突的软件包不需要手动确认.

4.44 --savechanges

在审阅 PKGBUILD 的过程中提交更改.

4.45 --nosavechanges

不提交审阅过程中的更改.

4.46 --combinedupgrade

在系统更新的过程中, paru 首先首先刷新数据库, 然后展示将要更新的软件包. 在完成审阅 PKGBUILD 以后, 来自软件仓库和 AUR 的更新将不需要手动干预. 如果 paru 在刷新数据库后退出而没有进行系统更新, 用户需要自己通过 pacman 进行更新.

4.47 --nocombinedupgrade

系统更新过程中, 首先执行 pacman -Syu, 然后更新来自 AUR 的软件包.

4.48 --batchinstall

当构建和安装 AUR 软件包的时候, 将每个需要安装的软件包加入队列, 当所有软件包都构建好之后, 批量安装.

4.49 --nobatchinstall

当每个 AUR 软件包构建完成之后立即安装.

4.50 --rebuild [yes|no|all]

即使当本地有构建好的副本也重新构建软件包. 如果选择 all 所有包都被重新构建, 而不仅仅是目标软件包. 默认值是 no.

4.51 --norebuild

当构建软件包时, 如果本地有相同版本的软件包, 则跳过构建, 使用现有的软件包.

4.52 --sudoloop [= args...]

在后台周期性调用 sudo 来在耗时长的构建中防止超时. 可选参数可以用来决定如何循环调用, 在使用 doas 的时候可能会有用.

4.53 --nosudoloop

不在后台循环调用 sudo.

4.54 --localrepo [= Repos...]

使用一个本地仓库来构建和更新 AUR 软件包.

paru 会作用于启用的软件仓库而不是外部软件包上. 这个仓库必须已经在 pacman.conf 中声明, 但是不必已经存在于硬盘上.

可选地, 可以传递一个仓库列表, paru 默认会考虑所有本地仓库, 将软件包构建到第一个软件仓库, 并更新其他启用的仓库的软件包.

4.55 --chroot [= /path/to/chroot]

在 chroot 中构建软件包,这需要启用 localrepo 选项,可选指定 chroot 的创建路径.

4.56 --nochroot

不在 chroot 中构建软件包.

4.57 --sign [= key]

使用 GPG 对软件包进行签名, 可选指定使用哪个 Key 进行签名.

4.58 --nosign

不对软件包进行 GPG 签名.

4.59 --keeprepocache

通常情况下, 当 AUR 的软件包升级时, 旧的版本会被清理. 这个选项禁用了上述行为, 保留了所有版本, 仅更新了数据库.

4.60 --nokeeprepocache

不保留旧的软件包.

4.61 --signdb [= key]

使用 GPG 对数据库进行签名, 可选指定使用哪个 Key 进行签名.

4.62 --nosigndb

不对数据库进行 GPG 签名.

5 环境变量

5.1 AURDEST

用于设置构建软件包的目录, 使用 --clonedir 覆盖该变量.

5.2 PARU_CONF

覆盖 paru 查找自身配置文件的位置.

5.3 PARU_PAGER

paru 用于审阅文件的 pager, 优先级高于 PAGER 环境变量,但是低于 paru.conf 的设置。

6 相关文件

6.1 配置目录

paru 的配置文件目录位于 $XDG_CONFIG_HOME/paru/, 如果 $XDG_CONFIG_HOME 未设定, 则为 $HOME/.config/paru. paru.conf 用于保存 paru 所有的选项. 实际上 paru.conf/etc 下.

6.2 缓存目录

缓存目录在 $XDG_CACHE_HOME/paru/, 如果 $XDG_CACHE_HOME 为空则是 $HOME/.cache/paru. packages.aur 保存了一份 AUR 软件包的列表用于补全, 默认情况下补全文件 7 天更新一次. devel.json 保存了一份所有 VCS 软件包的名称以及它们最新的提交, 如果任何一个提交发生变化, 对应的软件包会被重新构建.

6.3 构建目录

除非重新指定, 该目录的位置与缓存目录相同. 该目录用于存放下载的 AUR 包以及它们的 souce 文件和构建好的软件包.

6.4 pacman.conf

paru 使用 pacman.conf 通过 alpm.rs 或者 paru本身来设置某些 pacman 选项. 大部分的 libalpm 选项和 pacman 选项都被继承了.

7 使用 paru 编辑 PKGBUILD

首先执行以下命令:

sudo pacman -S vifm --needed

接下来, 打开 /etc/paru.conf, 找到:

#[bin]
#FileManager = vifm
#MFlags = --skippgpcheck
#Sudo = doas

改为:

[bin]
FileManager = vifm
MFlags = --skippgpcheck --skipchecksum
#Sudo = doas

顺便分享下我自己修改的 paru.conf:

#
# $PARU_CONF
# /etc/paru.conf
# ~/.config/paru/paru.conf
#
# See the paru.conf(5) manpage for options

#
# GENERAL OPTIONS
#
[options]
PgpFetch
Devel
Provides
DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil
#AurOnly
BottomUp
RemoveMake
SudoLoop
#UseAsk
SaveChanges
#CombinedUpgrade
CleanAfter
UpgradeMenu
NewsOnUpgrade

#LocalRepo
#Chroot
#Sign
#SignDb
#KeepRepoCache

#
# Binary OPTIONS
#
[bin]
FileManager = vifm
MFlags = --skipinteg
#Sudo = doas

© 转载请注明出处