当前位置:首页 > 攻略

关于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/2499104.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看这里!微软OneDrive for Mac客户端本月将以.pkg格式提供

pkg看这里!微软OneDrive for Mac客户端本月将以.pkg格式提供

pkg相关介绍,IT家庭7月12日消息是今年4月,微软不久将在苹果Mac平台上发布。宣布将以pkg格式提供OneDrive客户端。 微软表示,这种格式将提供更快的更新和更好的安全性。 然而,早前微软推迟了上述更新。不...

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

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

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

【pkg】微软OneDrive for Mac客户端不久后将以.pkg格式提供

【pkg】微软OneDrive for Mac客户端不久后将以.pkg格式提供

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

【pkg文件怎么打开】Dark Reader for Safari mac(适用于Safari浏览器的深色模式插件)

【pkg文件怎么打开】Dark Reader for Safari mac(适用于Safari浏览器的深色模式插件)

pkg文件怎么打开相关介绍,内容介绍 Dark Reader for Safari edition是专为Safari浏览器设计的黑暗模式插件,可应用于所有网页或单个网页,只需按Dark Reader for Safari工具栏按...

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...