嫌弃arch仓库的二进制文件编译选项

前言

偶然机会从archlinuxcn升级了polybar,
发现新的polybar不能再使用i3和alsa的插件.
经查询发现 polybar -vvv 的输出中,
新的版本编译时没有选择i3和alsa.
遂决定查一下arch上如何自行选择编译选项.

前提知识

  • pacman下载的都是编译好的 *.pkg.tar.xz 文件
  • 想要自己编译需要使用ABS(Arch Build System)
  • 人性化的软件会在检测到以来满足时自动打开编译的选项
    • 使用 pacman -Si <pkg-name> 查看一下仓库中该软件的编译依赖,看满足没
    • 使用 pacman -Qi <pkg-name> 查看本地安装着的该软件的详细信息
    • 可能其他人并不满足依赖,所以其他人编译的自己可能用不了

ABS的编译方式

Arch上的一套类port系统
(port为*BSD上的称呼,表示一个文件夹结构,
当配置好所有文件后可以用一个命令进行下载,解压缩,打补丁,编译,安装)
当中包含了一个重要的文件 PKGBUILRD
包含了该软件包需要依赖什么,版本是什么等等,可以根据需要编辑
在包含PKGBUILD文件下执行 makepkg 即可打包生成 *.pkg.tar.xz
(在 /etc/makepkg.conf 文件中定义了编译时的一些选项, 可以在编译前编辑)
然后使用 pacman -U *.pkg.tar.xz 安装

何处下载成套的文件夹

如果是官方的软件包,可以使用 asp checkout package 来方便地安装整个文件结构
(官方原先有abs可以使用,由于服务器维护成本增加,放弃了abs转向asp)
如果在asp找不到,可以在aur网站上寻找,
具体为 git clone https://aur.archlinux.org/package.git 来下载

防止被系统更高版本覆盖

在 PKGBUILD 文件中添加

1
groups=('modified')

/etc/pacman.conf 文件中将名为modified的group加入IgnoreGroup 中

1
IgnoreGroup = modified

polybar的解决方式

1
2
3
4
5
git clone https://aur.archlinux.org/polybar.git
cd polybar
makepkg # 过程中会显示编译时使用的依赖情况,暂时不会多线程编译
sudo pacman -U polybar-xxx.pkg.tar.xz
polybar -vvv # 重点查看i3,alsa,pulseaudio这些在china库中没有支持的选项是否被支持