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 |
|
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
)
移除不被需要的依赖。如果它是某个包的 make
或 check
或者可选依赖话,也不会被移除,这时可以使用 -cc
进行移除。
打印信息相关 -P
(--show
)
-c
(--complete
)
打印所有来自 AUR 和软件仓库的包,用于自动补全,用户不应直接使用。
-s
(--state
)
展示安装的软件包的信息以及系统健康情况,以及是否有过期、孤儿包等。下面是 paru -Ps
的输出
1 |
|
-w
(--news
)
展示来自 Arch Linux 主页的新闻。只展示比所有本地软件包构建日期要新的新闻,要展示所有新闻,请使用 -ww
-o
(--order
)
展示 目标软件包的构建顺序,例如 paru -Po icalingua++
1 |
|
获取 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
展示详细的更新清单,格式类似于 pacman
的 VerbosePkgLists
选项。可以使用 数字、数字范围或者仓库名称跳过某些更新。 不建议跳过来自软件仓库的更新,因为这可能会导致部分更新。该选项的目的是用于跳过某些 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/paru
。 paru.conf
用于保存 paru
所有的选项。实际上 arch 的 paru.conf
在 /etc
下面
缓存目录
缓存目录在 $XDG_CACHE_HOME/paru/
,如果 $XDG_CACHE_HOME
为空则是 $HOME/.cache/paru
。packages.aur
保存了一份 AUR 软件包的列表用于补全,默认情况下补全文件 7 天更新一次。 devel.json
保存了一份所有 VCS 软件包的名称以及它们最新的提交,如果任何一个提交发生变化,对应的软件包会被重新构建。
构建目录
除非重新指定,该目录的位置与缓存目录相同。该目录用于存放下载的 AUR 包以及它们的 souce 文件和构建好的软件包。
pacman.conf
paru
使用 pacman.conf
通过 alpm.rs
或者 paru
本身来设置某些 pacman
选项。大部分的 libalpm
选项和 pacman
选项都被继承了。
常用命令
- 更新系统:
paru
或者paru -Syu
- 强制刷新文件数据库:
paru -Fyy
- 移除软件包及其依赖:
paru -Rsc foo
- 清理不被需要的软件包:
paru -c
- 查看最大的10个软件包:
paru -Ps
就写这几个吧,其实有些是 pacman
命令的。
结语
其实我是从 yay
转到 paru
的,还是习惯打 yay
,于是我在我的 .zshrc
里面加上了一行
1 |
|
于是我又可以愉快地使用 yay
了!