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> 的软件包,并询问要安装哪一个。

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 的时候也总是重新下载一份 PKGBUILD。如果指定 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/paruparu.conf 用于保存 paru 所有的选项。实际上 paru.conf/etc 下。

6.2 缓存目录

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

6.3 构建目录

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

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
转载请注明出处