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
提示从每个PKGBUILD
的validpgpkeys
部分导入未知的 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