当前位置:首页 > 话题广场 > 攻略专题 > 单机攻略

pkg专题之Arch Linux 软件包制作入门

PKGBUILD文件是为衍生版本(如Arch Linux和Manjaro)创建和创建软件包的方法。

如果你曾经使用过 AUR(即 Arch Linux 的用户维护的PKGBUILD存储库),你甚至可能也遇到过它们。

但是,到底是如何从 PKGBUILD到可安装软件包的呢?这两者之间到底发生了什么,如何把自己的软件制作成软件包呢?你将在这篇文章中了解这些。

PKGBUILD 基础知识

对于那些熟悉 Bash 或其他 shell 的人来说,你可能知道,PKGBUILD就是一个带有一些变量的 shell 脚本。

PKGBUILD文件由变量和函数组成,所有这些都是用来定义软件包本身,以及如何构建它。

为了从 PKGBUILD中创建一个软件包,需要使用makepkg命令行工具。在获得PKGBUILD文件后,你只需在包含PKGBUILD的目录中运行 `makepkg',就可以得到一个可安装的软件包了。

在本教程中,你将会看到我刚刚制作的软件包,它在运行时打印出 “Hello World!”。

准备

为了继续学习本教程,你需要创建几个文件。

首先,你需要创建一个名为 PKGBUILD的文件,它将作为构建你的软件包的“配方”。

你需要做的另一个文件是一个叫 的文件。我稍后会解释它的用途。

你也可以用一个命令来创建这两个文件:

touch PKGBUILD

你可以用 ls命令检查这些文件是否被创建。

然后你就可以开始了!

设置你的 PKGBUILD 文件

我不会让你复制粘贴整个文件,而是和你一起键入每一行,这样你就能更好地理解每一行的目的。如果你不喜欢这种学习方式,我强烈推荐 Arch 维基中为 Arch Linux 创建软件包的文章。

这篇文章也没有介绍 PKGBUILD中可以设置的每一个选项,只是介绍了一些常用的选项,以便你能尽快上手。

说完了这些,打开你的文本编辑器,让我们直接进入正题吧。

pkgname

首先是 pkgname变量。这是安装时定义软件包名称的东西,也是Arch Linux 的软件包管理器 pacman跟踪软件包的方式。

这个变量(以及其他一些变量)的格式是 variable=value,变量名在左边,变量的值在右边,用等号隔开。

要设置包的名称,请在 PKGBUILD中输入以下内容:

pkgname="hello-world"
  • 要设置一个不同的软件包名称,用你的软件包的名称替换 hello-world
  • 这并不设置用于运行程序的命令,这将在下面的 package部分中处理。

pkgver

正如变量名称本身所述,它设置了你的软件包的版本(即 1.0.0)。这在用户更新他们的系统时很有用,因为设置更高的版本会提示用户升级。

要设置版本号,请在 PKGBUILD中输入以下内容(在前一行之后):

pkgver="1.0.0"

pkgrel

这与 pkgver变量有关,通常不需要知道。不过和pkgver变量一样,如果它被换到一个更高的数字,就将通知用户进行升级。

它适用于任何需要保持 pkgver不变的情况下,例如PKGBUILD本身发生了变化。如果你为一个你使用的程序创建了一个PKGBUILD(并希望保持软件包的版本相同),而你需要修复PKGBUILD本身的一个错误,这将是非常有用的。

要设置这个变量,请在 PKGBUILD中输入以下内容:

pkgver="1"

这个变量应该 总是从1开始,然后一次一次地向上移动。当pkgver本身向上移动时,这个变量可以(也应该)重置为1,因为pkgver本身会通知用户升级。

pkgdesc

这将设置软件包的描述,用于帮助更好地识别该软件包。

要设置它,只需将描述放在引号内:

pkgdesc="Hello world in your terminal!"

arch

这个变量设置软件包所兼容的 硬件架构。如果你不明白什么是架构,那也没关系,因为在大多数情况下,这个变量几乎是无用的。

无论如何,makepkg仍然需要设置它,这样它就知道这个软件包与我们的系统是兼容的。

这个变量支持设置多个值,所以 makepkg需要一个不同的语法,如下所示。

要设置它,请在 PKGBUILD中输入以下内容:

arch=("x86_64")

如果你要设置多个值,需要用空格和引号分隔每个值,像这样。arch=(“x86_x64" "arm")

depends

这列出了提供了我们的软件包所需功能的所有软件包。与 arch一样,它也可以包含多个值,因此必须使用括号语法。

由于我们的软件包没有任何依赖关系,所以我们不需要在 PKGBUILD中输入这个字段。然而,如果我们的软件包有依赖关系,我们就会使用与arch相同的语法。

optdepends

这里列出了那些并不是提供所需功能而是额外功能的软件包。

这与 depends的语法相同。

conflicts

这告诉 pacman哪些软件包会导致我们的软件包出现问题,或者以我们不希望的方式行事。

这里列出的任何软件包都会在我们的软件包被安装之前被卸载。

这与 depends的语法相同。

license

这定义了你的程序所采用的 软件许可证。如果你需要帮助你选择一个许可证,Arch 维基提供了一些信息。如果你不知道该怎么设置,将其设置为custom也可以。

这与 archdepends的语法相同:

license=("custom")

source

这就是 makepkg如何知道要用什么文件来构建我们的软件包。它可以包含各种不同类型的源,包括本地文件和 URL。

在添加本地文件时,要输入相对于 PKGBUILD文件的文件路径,比如以下目录布局:

PKGBUILD src

如果你想在我们的 PKGBUILD中包括,你需要输入src作为其名称。

当输入 URL 时,你只需输入完整的 URL,即

你的这个软件包只需要 文件,由于它和PKGBUILD在同一个目录中,你只需输入它的名字作为source的值。

这个变量也使用与 archdepends相同的语法:

source=("")

sha512sums

这是用来验证 source中的文件没有被修改或下载错误。如何获得这个值的信息可以在Arch 维基关于 PKGBUILD 的文章中找到。

如果你宁愿不设置这个(或者你只是不需要,例如对于本地文件),你可以为 source变量中的每个文件输入SKIP

sha512sums=("SKIP")

package

这是最后一个,也是实际制作我们的包的最重要的部分。在处理这个问题时,知道两个变量很重要。

  • ${srcdir}:这是makepkg放置source变量中文件的地方。在这个目录中,你可以与这些文件进行交互,并对文件进行任何其他需要的修改。
  • ${pkgdir}:这是我们放置将被安装在系统中的文件的地方。${pkgdir}的文件夹结构是按照实际系统中的情况设置的(例如,使用pacman安装时,${pkgdir}/usr/bin/hello-world会创建文件/usr/bin/hello-world)。

package包含一个用于创建软件包的命令列表。

因此,如果(假设)你需要有个在 /usr/share写着 “Linux is superior to Windows ”的文件,你会运行这样的东西:

package { mkdir -p "${pkgdir}/usr/share" echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share" }

关于上述命令的一些说明:

  • ${pkgdir}里面最初是不包含目录的。如果你跳过了mkdir 命令,tee会输出一个错误,说这个目录不存在。
  • 在指定目录时,总是在它们前面加上${pkgdir}${srcdir}变量。如果输入/usr/share,就会按照字面意义指向你当前运行的系统中的/usr/share

对于你的 PKGBUILD,你将把文件放在目标系统的/usr/bin/hello-world中。你还将使该文件在运行时说 “Hello to you!”。

要做到这一点,请在 PKGBUILD中输入以下内容:

package { echo 'Hello to you!' > "${srcdir}/" mkdir -p "${pkgdir}/usr/bin" cp "${srcdir}/" "${pkgdir}/usr/bin/hello-world" chmod +x "${pkgdir}/usr/bin/hello-world" }

然后就完成了!用 makepkg -si构建和安装软件包,然后在终端运行hello-world,查看其输出。

总结

就这样,你已经制作了你的第一个 PKGBUILD!你走在了为自己甚至是为 AUR 制作实际的软件包的路上。

有什么问题,或者有什么地方不对吗?请随时在下面的评论区发表。

via:

作者:Hunter Wittenborn选题:lujun9972译者:wxy校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出

1.《pkg专题之Arch Linux 软件包制作入门》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《pkg专题之Arch Linux 软件包制作入门》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2560808.html

上一篇

快播的再一次上热搜,却是最后一次

pkg文件怎么打开看这里!最详细教程:最新ACR14.2独立安装包(Win+Mac)

pkg文件怎么打开看这里!最详细教程:最新ACR14.2独立安装包(Win+Mac)

pkg文件怎么打开相关介绍,三天前,PS2022的最新版本(包括ACR14.2)推送后,很多人认为,整个PS2022升级安装包太大,下载起来不仅麻烦,而且安装整个PS coverage太难。 我不想重新安装PS2022,只想把A...

pkg专题之在FreeBSD中pkg包管理器使用实例

pkg专题之在FreeBSD中pkg包管理器使用实例

pkg相关介绍,本文件说明如何在PKG套件管理员的协助下管理安装套件 系统环境 Freebsd 12.2-版本 使用PKG命令搜索软件 1.在FreeBSD中搜索应用程序的最简单方法是使用PKG命令行。 语法格式:p...

【pkg文件怎么打开】1分钟视频解决mac软件已损坏,打不开,来自身份不明的开发者问题

【pkg文件怎么打开】1分钟视频解决mac软件已损坏,打不开,来自身份不明的开发者问题

pkg文件怎么打开相关介绍,安装Mac应用程序时,“软件损坏,无法打开。 您应该将它移到废纸篓」,有的提示:「打不开该软件,因为它来自身份不明的开发者」,有没有什么解决方法呢?别着急,其实解决办法非常简单!一串代码就能搞定。 您...

【pkg文件怎么打开】专题自己动手:智能电视机升级失败后的刷机修复

【pkg文件怎么打开】专题自己动手:智能电视机升级失败后的刷机修复

pkg文件怎么打开相关介绍,这段时间,家里的智能互联网电视在升级过程中因为中途停电升级失败,系统受损。 打开电视机,屏幕上出现“升级失败,将进入Recovery模式!”的错误提示,并且电视机会不停地自动重启,一直在反复地循环。此...

pkg专题之微软OneDrive for Mac客户端不久后将以.pkg格式提供

pkg专题之微软OneDrive for Mac客户端不久后将以.pkg格式提供

pkg相关介绍,早在4月份,微软就在苹果Mac平台上。宣布将以pkg格式提供OneDrive客户端。 微软表示,这种格式将允许更快的更新并带来更好的安全性。随后更新的推出被推迟了,但今天微软宣布,常规供应应该在7月中...

【pkg】Wells Fargo & Company:维持Packaging Corp of America(PKG)为持股观望评级,目标价为155.00美元

【pkg】Wells Fargo & Company:维持Packaging Corp of America(PKG)为持股观望评级,目标价为155.00美元

pkg相关介绍,Wells Fargo Company6于6月21日发表了投资研究报告,维持了Packaging Corp of America...

pkg文件怎么打开专题之Mac 安装软件那些事

pkg文件怎么打开专题之Mac 安装软件那些事

pkg文件怎么打开相关介绍,有的朋友说不知道怎么安装Mac软件,也不知道从哪里下载。 这次再来详细聊聊 macOS 安装软件那些事。 安装篇 App Store 直接安装 Mac 有自己的应用商店 App Store。可以在里面...

【pkg文件怎么打开】专题YouTube mac(YouTube客户端)

【pkg文件怎么打开】专题YouTube mac(YouTube客户端)

pkg文件怎么打开相关介绍,Clicker for YouTube MAC edition是一款YouTube视频播放器,可在基于Swift的高效应用程序中提供与网站相同的功能,并内置广告拦截器、睡眠计时器、弹出播放器和Touc...