paru 进阶教程

本文最后更新于 2022年4月29日 凌晨

最近从 yay 换到了 paru, 但是 paru 不像 yay 一样有一个竹林写的 yay进阶, 因此,我打算开一个坑。

Paru 是 yay 的作者之一 Morganamilo 使用 rust 编写的另一个 aur helper。基本命令与功能与 yay 和 pacman 几乎一样,所以迁移过来不会有任何困难。

基本用法

本部分也是摘抄自 man paru.

  • paru

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

  • paru <search terms> 例如: paru foo

通过 paru 搜索带有 foo 关键词的软件包,并询问你要安装哪一个。以下是 paru texlive-full 的输出。

1
2
3
4
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):
::
  • paru <operation> [options] [targets]

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

Paru 特有的操作

paru 有以下几个操作:

  • -P (--show)

    打印相关的选项

  • -G (--getpkgbuild)

    从 ABS (archlinux build system, arch 构建系统) 或者 AUR 下载 PKGBUILD, ABS 只能对 Arch LInux 软件仓库用。

  • -U (--upgrade)

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

  • -L (--repoctl)

    列出所有仓库。

  • -C (--chrootctl)

    到 chroot 的交互式命令行。

  • 如果不带任何操作,默认执行 paru -Syu

扩展 pacman 的操作

扩展到同时支持软件仓库和 AUR 的软件包的操作有

-R, -S, -Si, -Sl, -Ss, -Su, -Sc, -Qu, -T

  • -R

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

  • -Sc

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

  • -Ss

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

  • -Sss

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

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

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

  • -Ts

    从一列包中筛选出在 AUR 中的包。

operation

当没有 operation 的时候, paru 默认是交互式搜索并询问用户要安装那个软件包.

如果也不带搜索内容,就默认是 paru -Syu. 下面介绍各种选项

  • --gendb

生成数据库,当且仅当从另一个 AUR helper 迁移到 paru 时,才应使用此选项。简单来说就是把 PKGBUILD 下载下来对比是否要更新。

  • -c (--clean)

移除不被需要的依赖。如果它是某个包的 makecheck 或者可选依赖话,也不会被移除,这时可以使用 -cc 进行移除。

打印信息相关 -P (--show)

  • -c (--complete)

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

  • -s (--state)

展示安装的软件包的信息以及系统健康情况,以及是否有过期、孤儿包等。下面是 paru -Ps 的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
paru v1.10.0 +git - libalpm v13.0.1
===========================================
共安装包: 1543
AUR 包: 42
软件库包: 1500
单独指定安装的包: 349
软件包共占用空间: 57.29GiB
===========================================
最大的十个包:
matlab: 26.43GiB
texlive-full: 6.90GiB
cuda: 4.01GiB
anaconda: 3.18GiB
wps-office-cn: 1.19GiB
dingtalk-bin: 652.62MiB
zoom: 456.30MiB
go: 445.68MiB
nvidia-utils: 437.66MiB
blender: 325.33MiB
===========================================
:: 不在 AUR 中的软件包: foxitpdfeditor-bin
:: 被标记为已过期: mongodb-tools
  • -w (--news)

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

  • -o (--order)

展示 目标软件包的构建顺序,例如 paru -Po icalingua++

1
AUR TARGET icalingua++ icalingua++

获取 PKGBUILD 相关 -G (--getpkgbuild)

  • -p (--print)

将 PKGBUILD 打印到终端(而不是下载 PKGBUILD)

  • -c (--comments)

展示软件包的 AUR 评论。

  • -s (--ssh)

通过 ssh 克隆 AUR 仓库,例如 可读写的远程。

仓库控制相关 -L (--repoctl)

  • -l (--list)

显示本地仓库的软件包

  • -d (--delete)

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

  • -y (--refresh)

刷新本地仓库

  • -q (--quiet)

展示更少信息。

CHROOT 相关 -C (--chrootctl)

  • -i (--install)

将一个软件包安装到 chroot

  • -u (--sysupgrade)

更新 chroot

更新相关 -U (--upgrade)

  • -i (--install)

构建完毕后同时安装。

新的选项

下面的选项适用于所有选项

  • --repo

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

  • -a (--aur)

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

  • --aururl

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

  • --clonedir <dir>

设置下载和运行 PKGBUILD 的目录

  • --makepkg <command>

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

  • --makepkgconf <file>

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

  • --pacman <command>

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

  • --git <command>

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

  • --gitflags <flags>

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

--gitflags "flag1 flag2 flag3"

  • --gpg <command>

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

  • --gpgflags <flags>

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

--gpgflags "flag1 flag2 flag3"

  • --fm <command>

启用 fm (file manager) 模式,使用指定的 文件管理器完成 PKGBUILD 审阅,并且能够编辑 PKGBUILD 与相关的文件。要使更改持久化,请提交 (commit).

  • --fmflags <flags>

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

--fmflags "flag1 flag2 flag3"

  • --asp <command>

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

  • --mflags <flags>

makepkg 传递的参数,每次当 paru 调用 makepkg 的时候都会传递。参数按空格分割,然后用引号包裹起来,即--mflags "flag1 flag2 flag3"

  • --bat <command>

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

  • --batflags <flags>

bat 传递的参数,每次当 paru 调用 bat 的时候都会传递。参数按空格分割,然后用引号包裹起来,也就是

--batflags "flag1 flag2 flag3"

  • --sudo <command>

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

  • --sudoflags <flags>

sudo 传递的参数,每次当 paru 调用 sudo 的时候都会传递。参数按空格分割,然后用引号包裹起来,也就是 --sudoflags "flag1 flag2 flag3"

  • --completioninterval <days>

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

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

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

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

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

  • --skipreview

跳过审阅过程

  • --review

不跳过审阅过程

  • --upgrademenu

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

  • --nogrademenu

不展示更新菜单

  • --removemake [yes|no|ask]

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

  • --noremovemake

在安装完软件包后不移除 makedepends

  • --topdown

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

  • --bottomup

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

  • --limit <limit>

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

  • -x (--regex)

在 AUR 搜索中启用正则表达式。只匹配 pkgname(包名), 不匹配 pkgdesc(描述)。

  • --nocheck

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

  • --installdebug

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

  • --noinstalldebug

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

  • --devel

在系统更新 (sysupgrade) 时,同时检查 aur 的包 development 更新,目前只支持 git 包 (即 foo-git 之类的包)。

  • --nodevel

在系统更新时, 不检查 development 的软件包。

  • --develsuffixes

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

  • --cleanafter

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

  • --nocleanafter

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

  • --redownload [yes|no|all]

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

  • --noredownload

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

  • --provides

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

  • --noprovides

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

  • --pgpfetch

提示从每个 PKGBUILD 的 validpgpkeys 部分导入未知的 PGP 密钥。

  • --nopgpfetch

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

  • --newsonupgrade

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

  • --useask

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

  • --nouseask

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

  • --savechanges

在审阅 PKGBUILD 的过程中提交 (commit) 更改。

  • --nosavechanges

不提交审阅过程中的更改

  • --combinedupgrade

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

  • --nocombinedupgrade

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

  • --batchinstall

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

  • --nobatchinstall

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

  • --rebuild [yes|no|all]

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

  • --norebuild

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

  • --sudoloop [= args...]

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

  • --nosudoloop

不在后台循环调用 sudo

  • --localrepo [= Repos...]

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

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

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

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

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

  • --nochroot

不在 chroot 中构建软件包。

  • --sign [= key]

使用 gpg 对软件包进行签名,可选指定使用哪个 key 进行签名。

  • --nosign

不对软件包进行 gpg 签名。

  • --keeprepocache

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

  • --nokeeprepocache

不保留旧的软件包。

  • --signdb [= key]

使用 gpg 对数据库进行签名,可选指定使用哪个 key 进行签名。

  • --nosigndb

不对数据库进行 gpg 签名。

一些例子

  • paru foo

从软件仓库和 AUR 交互式搜索和安装软件包。

  • paru -Syu

更新软件包列表,并升级所有已安装的软件包。

  • paru -Sua

更新所有已安装的来自 AUR 的软件包。

  • paru -S foo

从软件仓库或者 AUR 安装软件包 foo

  • paru -Ss foo

从 软件仓库或者 AUR 搜索软件包 foo

  • paru -Si foo

从软件仓库或者 AUR 获取有关软件包 foo 的信息。

  • paru -S foo --mflags "--skipchecksums --skippgpcheck"

安装软件包 foo 并跳过校验和与 PGP 检验。

环境变量

paru 支持以下的环境变量。我相信你永远不会用上它们。

  • AURDEST

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

  • PARU_CONF

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

  • PARU_PAGER

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

相关文件

配置目录

paru 的配置文件目录位于 $XDG_CONFIG_HOME/paru/, 如果 $XDG_CONFIG_HOME 未设定,则为

$HOME/.config/paruparu.conf 用于保存 paru 所有的选项。实际上 arch 的 paru.conf/etc 下面

缓存目录

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

构建目录

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

pacman.conf

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

常用命令

  1. 更新系统: paru 或者 paru -Syu
  2. 强制刷新文件数据库: paru -Fyy
  3. 移除软件包及其依赖: paru -Rsc foo
  4. 清理不被需要的软件包: paru -c
  5. 查看最大的10个软件包: paru -Ps

就写这几个吧,其实有些是 pacman命令的。

结语

其实我是从 yay 转到 paru 的,还是习惯打 yay,于是我在我的 .zshrc 里面加上了一行

1
alias yay=paru

于是我又可以愉快地使用 yay 了!


paru 进阶教程
https://blog.askk.cc/2022/04/27/paru/
作者
sukanka
发布于
2022年4月27日
许可协议