在Arch Linux上使用Devtools

Devtools软件包最初是为受信任的用户制作的,可以为官方存储库正确创建软件包。但是,普通用户也可以使用它来构建AUR软件包,甚至可以修改官方软件包。

请参阅本指南,以大致了解和使用AUR,包括获取PKGBUILD。如果您选择编译软件包的方法,那么此文档仅显示特定于Devtools的步骤。

Devtools维护一个单独的干净Arch安装,位于中/var/lib/archbuild/<TARGET>/root,其中仅包含软件包组basebase-devel。如果不存在这种全新安装,它将自动创建它。如果确实存在,它将自动更新其中的所有软件包。当使用Devtools构建软件包时,它会以这种全新安装的副本开头,仅将必需的软件包安装到副本中,将源代码复制到其中,在其中进行编译和打包,然后仅复制出最终的软件包,格式与官方存储库中的格式相同。

makepkg直接运行相比,Devtools有很多优势。优点之一是,base-devel编译但不运行正在制作的程序包所必需的其他程序包永远不会出现在主系统中。这样就减少了需要定期升级和关注的软件包。尽管主要是为Arch软件包维护者带来好处,但是当a PKGBUILD错误时(例如,由于列出维护者恰好已经安装在其主系统中而导致缺少依赖项),此过程很容易暴露出来。您还可以使用构建软件包速度更快的计算机,然后将生成的软件包复制到运行该软件包的速度较慢的计算机上,而不会污染构建计算机的安装。

主要缺点是,干净的根目录始终存在,占用大约800MB的空间,通常单个副本在那里会占用更多的空间。请注意,如果/var/lib/archbuild/使用Btrfs,则干净根目录的副本将从Btrfs快照开始,因此这些文件不会占用两倍的空间。干净的根目录始终保留在该目录中,以避免每次制作软件包时都重新安装它。

使用Devtools进行编译

安装Devtools:

# pacman -S devtools

要构建软件包,Devtools包括archbuild,但您不能直接运行它。它还包括的符号链接{extra, gnome-unstable, kde-unstable, staging, testing}-x86_64-build。用于运行符号链接的对象将由进行检查archbuild,以确定您要使用的目标。可以运行这些不稳定/临时/测试存储库,这些存储库的版本可能比正式存储库发布的版本更高。要将正式存储库用于非AUR软件包,请在带有的目录中PKGBUILD,例如通过创建的目录git clone,运行以下命令:

$ extra-x86_64-build

注意: 本指南的其余部分将仅参考extra-x86_64-build

完成运行后,将得到以下结果:

  • /var/lib/archbuild/extra-x86_64/root- 干净的chroot,这是仅包含软件包组base和的最新安装base-devel
  • /var/lib/archbuild/extra-x86_64/<USERNAME>-这将包含一个构建chroot。这是干净chroot的副本,其中包含构建或运行正在构建的程序包所需的所有依赖关系以及其源代码,编译结果和程序包。
  • 您所在的目录将包含软件包和构建日志文件,以及所有已下载的源代码。

最后,您可能会注意到“ Checking PKGBUILD”和“ Checking <PKGNAME>-<PKGVER>-<PKGREL>-<ARCH>.pkg.tar.xz”。这些内容之后的所有行都是从中输出的namcap,它们会自动查找问题,例如格式错误的PKGBUILD文件,包似乎没有使用的依赖关系,包似乎没有使用的依赖关系等等。误报通常是由产生的namcap,但是它是进行调查的重要工具。如果您的程序包工作正常,则最好不要提醒维护人员namcap输出,除非您已仔细检查并确认应进行更改。

您可以pacman用来安装软件包,只要软件包在官方存储库或本地存储库中,它将安装运行该软件包所需的所有依赖项。

按照此处说明使用本地存储库,或直接安装文件:

# pacman -U <PKGNAME>-<PKGVER>-<PKGREL>-<ARCH>.pkg.tar.xz

如果要extra-x86_64-build立即或现在或以后使用此软件包或其他软件包再次运行,它将在需要时更新干净的chroot,删除生成的chroot并使其成为干净的chroot的新副本,然后执行相同的过程。如果您的目录仍然有上次下载的源代码,它将使用它。如果该软件包是开发性的AUR软件包,它将提取新的更改,而不是重新克隆。

在内部extra-x86_64-build运行makechrootpkg,在内部调用makepkg。的选项extra-x86_64-build包括:

  • -c:通过删除并重新创建整个/var/lib/archbuild/extra-x86_64/目录(包括其干净的chroot和所有构建的chroot目录)来清理chroot。仅当干净chroot损坏或以破坏向后兼容性的方式升级Devtools时,才很少需要这样做。
  • -r <dir>:使用不同于/var/lib/archbuild/extra-x86_64/包含chroot的目录。

extra-x86_64-buildafter 内部使用它时,after的所有参数--都传递给makechrootpkg。几个参数总是自动传递extra-x86_64-buildmakechrootpkg。这些自动参数是-r <value given to extra-x86_64-build -r option if given, /var/lib/archbuild/extra-x86_64 otherwise> -c -n。他们告诉makechrootpkg删除构建chroot并使其成为干净chroot的新副本,并namcap在成功构建的软件包上运行。可以传递给的常用选项makechrootpkg-l <copy name>。这是提供构建chroot的目录名称,而不是<USERNAME>,对于维护多个副本或同时编译多个软件包非常有用。

Any arguments to makechrootpkg after -- are passed to makepkg, when it internally uses it to build the package. The first time makepkg is run by makechrootpkg, it is done with its own unchangeable options, to download source files, if needed, and perform integrity checks; thus nothing can be forwarded on this run. It runs makepkg a second time to build the package, and always automatically passes makepkg arguments of --syncdeps --noconfirm --log --holdver --skipinteg which tells makepkg to, within the build chroot, automatically install missing dependencies required for building and using the package, not to ask for confirmation during pacman, log the build process to text files in addition to stdout, don't update source code if in a version control system and don't perform source file verification checks.

您可以使用以下形式将它们链接在一起:

$ extra-x86_64-build <DEVTOOLS-OPTIONS> -- <MAKECHROOTPKG-OPTIONS> -- <MAKEPKG-OPTIONS>

请注意,/var/lib/archbuild可以将其视为临时目录。如果您有多个Vultr硬盘驱动器,则值得在此处安装RAID0(条带化)文件系统。如果您有大量RAM,则还可以安装RAM支持的文件系统,例如tmpfs。构建软件包后,将其复制到运行目录extra-x86_64-build,如果需要,此时可以将其删除/var/lib/archbuild。下次运行会比较慢,因为它将需要重新创建一个干净的根。另外,您可以删除它/var/lib/archbuild/<USERNAME>以从构建chroot中回收额外的空间,然后再由下次运行的Devtools自动删除它。因此,即使您在此处安装的RAID0文件系统发生故障,丢失最多的还是正在进行的编译。

Devtools配置文件

Devtools配置文件需要注意一些细节。它们位于中/usr/share/devtools/,例如makepkg-x86_64.confpacman-extra.conf

  • 对于和/etc这样的文件,您可以放心地对其进行编辑,并且在升级软件包时,它不会覆盖您的更改。而是将保存以结尾的新配置文件(如果它们与先前版本相比有所更改)。但是,Devtools配置文件不适合用户编辑,因此,在升级Devtools时,它将完全覆盖对这些文件的更改,而不会提醒您。已经提出并拒绝对此行为进行更改,因为这有助于确保将软件包发送到所有具有相同编译设置的正式存储库。makepkg.confpacman.conf.pacnew/usr/share/
  • 该值MAKEFLAGSPACKAGER以及{SRC,SRCPKG,PKG,LOG}DEST从拍摄/etc/makepkg.conf,而不是/usr/share/devtools/makepkg-x86_64.conf

本地存储库

如果要构建依赖于已构建的其他软件包的软件包,则需要使用本地存储库,以便pacman在构建chroot中运行时,它可以找到依赖关系。

要设置本地存储库,请参阅本指南的 “本地存储库”部分。

创建一个自定义目标:

# ln -s archbuild /usr/bin/custom-x86_64-build
# cp /usr/share/devtools/pacman-{extra,custom}.conf

编辑/usr/share/devtools/pacman-custom.conf,并在末尾添加以下内容:

[archLocalRepo]
SigLevel = Optional TrustAll
Server = file:///archLocalRepo

编辑/etc/pacman.conf,然后添加以下内容。这将强制将目录绑定安装在chroot中:

CacheDir    = /var/cache/pacman/pkg/ /archLocalRepo/

现在,代替extra-x86_64-build使用:

$ custom-x86_64-build

如果您始终要使用自定义目标,则可以删除/var/lib/archbuild/extra-x86_64-build/目录(如果存在),因为chroots现在位于/var/lib/archbuild/custom-x86_64-build/

包装更快

请注意,启用线程打包涉及编辑/usr/share/devtools配置文件,而官方不支持此配置文件,因此每次升级Devtools时都需要执行此更改。

Devtools将整个软件包组合成存档格式。默认情况下,它.tar.xz使用单个线程进行xz压缩。

在多CP​​U系统上,可以xz通过编辑允许使用多个线程/usr/share/devtools/makepkg-x86_64.conf,并更改以下行:

COMPRESSXZ=(xz -c -z -)

要允许拥有虚拟核心的线程数量尽可能多:

COMPRESSXZ=(xz -c -z - --threads=0)

要允许使用多个虚拟内核,但不能全部使用,以减少对整体系统性能的影响,请添加特定数量:

COMPRESSXZ=(xz -c -z - --threads=21)

指定的线程数多于您拥有的虚拟核心数会降低性能。

如果您不介意打包文件较大(可能很大),请通过编辑禁用压缩/usr/share/devtools/makepkg-x86_64.conf,然后更改以下行:

PKGEXT='.pkg.tar.xz'

将其更改为如下所示:

PKGEXT='.pkg.tar'


Leave a Comment

在Arch Linux上安装Spigot Server

在Arch Linux上安装Spigot Server

本教程说明了如何在Arch Linux上使用Spigot设置Minecraft服务器。本教程假定您是普通用户(非root用户)并且具有hav

使用Btrfs快照安装Arch Linux

使用Btrfs快照安装Arch Linux

前言Arch Linux是一种通用发行版,以其先进的技术和灵活的配置而闻名。使用Btrfs快照,我们可以

如何在Arch Linux上安装MariaDB 10.3或MySQL 8.0

如何在Arch Linux上安装MariaDB 10.3或MySQL 8.0

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)Sudo访问:需要以root身份运行的命令以#开头,其中一个

在Arch Linux上安装Mumble Server

在Arch Linux上安装Mumble Server

本教程说明了如何在Arch Linux上设置Mumble服务器(Murmur)。本教程中完成的所有操作均以root用户身份完成。安装

如何在Arch Linux上安装Nginx 1.14

如何在Arch Linux上安装Nginx 1.14

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)Sudo访问。需要以root身份运行的命令带有#前缀。钍

如何在Arch Linux Web服务器上安装PHP 7.3

如何在Arch Linux Web服务器上安装PHP 7.3

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)正在运行的Web服务器,可以使用Apache或Nginx Sudo访问。命令要求

在Arch Linux上设置反恐精英:全球攻势(CSGO)服务器

在Arch Linux上设置反恐精英:全球攻势(CSGO)服务器

本教程说明了如何在Arch Linux上设置“反恐精英:全球攻势”服务器。本教程假定您以标准用法登录

如何在Arch Linux上安装PostgreSQL 11.1

如何在Arch Linux上安装PostgreSQL 11.1

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)Sudo访问。需要以root身份运行的命令以#开头,其中一个

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

如果直接使用makepkg,它将对您的系统造成一定的污染。必须安装base-devel软件包组。这样,默认情况下,仅需要依赖项

在Vultr服务器上安装2019 Arch Linux

在Vultr服务器上安装2019 Arch Linux

简介Arch Linux的规模较小,但仍然比流行的发行版本强大。其理念截然不同,具有优势

如何在Arch Linux Web服务器上安装Python 3.7

如何在Arch Linux Web服务器上安装Python 3.7

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)正在运行的Web服务器,可以使用Apache或Nginx Sudo访问:命令需要

如何在Arch Linux Web服务器上使用HTTPS

如何在Arch Linux Web服务器上使用HTTPS

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)运行中的Web服务器,Apache或Nginx Sudo访问命令要求t

如何在Arch Linux上安装MongoDB 4.0

如何在Arch Linux上安装MongoDB 4.0

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文)Sudo访问:需要以root身份运行的命令以#开头,其中一个

在Arch Linux上构建软件包(包括AUR)

在Arch Linux上构建软件包(包括AUR)

在Arch Linux上,官方存储库为:核心,额外和社区。这些软件包已被编译,并通过pacman安装。向前

在Vultr服务器上安装Arch Linux

在Vultr服务器上安装Arch Linux

Vultr除了出色的模板之外,还为您提供了令人敬畏的功能,使您可以使用自己的自定义图像,从而使您可以运行

如何在Arch Linux上安装Apache 2.4

如何在Arch Linux上安装Apache 2.4

先决条件运行最新Arch Linux的Vultr服务器。有关更多信息,请参见本指南。须藤访问。需要以root用户身份运行的命令

如何在Arch Linux Web服务器上安装Perl 5.28

如何在Arch Linux Web服务器上安装Perl 5.28

先决条件运行最新的Arch Linux的Vultr服务器(请参阅本文。)正在运行的Web服务器,可以使用Apache或Nginx Sudo访问:命令需要

在Arch Linux上设置Team Fortress 2服务器

在Arch Linux上设置Team Fortress 2服务器

本教程说明了如何在Arch Linux上设置Team Fortress 2服务器。我假设您使用具有sudo访问权限的非root用户帐户登录

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。