本文简要介绍如何创建自己的 ebuild 和 overlay。
自定义 overlay
ebuild 是规定软件包安装的文件,overlay 可以看成是盛放 ebuild 的容器。为了方便包管理系统和维护者管理及使用 ebuild,overlay 是必不可少的。因此在编写 ebuild 之前,首先需要创建一个自己的 overlay。
overlay 的存在形式有两种,一种在本地,一种在远程。本文使用第二种方式。
首先在本地创建一个 overlay。
sudo eselect repository create overlay_name
# overlay的默认存储位置在/usr/portage,笔者将该位置修改为/var/db/repos,下文中不再提醒。
cd /var/db/repos/overlay_name
然后在 github 上建立一个仓库,把仓库 clone 下来,将/var/db/repos/overlay_name
中所有文件复制到仓库中。
注意仓库的名称可以与之前设置的 overlay_name 不同。
然后将修改后的仓库推送到远程。并执行以下命令删除本地 overlay。
sudo eselect repository remove -f overlay_name
然后再通过以下命令添加远程 overlay。
# git_url 为仓库地址
sudo eselect repository add overlay_name git git_url
现在远程 overlay 已经建立完成,只需修改本地仓库,然后推送到远程,然后使用eix-sync
或者其他方式同步 overlay 即可。
ebuild 的处理
首先来看写好的 ebuild 如何处理。先在gentoo portage overlay处随意搜索并下载一个 ebuild。比如app-editors/neovim
。然后在本地仓库中新建目录app-editors/neovim
,并把neovim-9999.ebuild
复制到该目录下。
下一步是对该 ebuild 进行签名。这一步需要用到app-portage/repoman
(也可以使用老的ebuild
命令,但建议用新的)。
# 首先将当前目录加入到repoman的执行对象中。
pushd path_to_repository/app-editors/neovim
# 然后进行签名。
repoman manifest
# 然后可以将当前目录退出。
popd
签名成功后,在该目录下会生成一个 Manifest 文件。
现在,将修改后的仓库推送上去并且同步 overlay 就可以安装刚才配置好的neovim-9999
了。
ebuild 的写法
接下来写一个简单的dev-util/ctags/ctags-5.5.4.ebuild
。内容如下。
# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DESCRIPTION="Exuberant ctags generates tags files for quick source navigation"
HOMEPAGE="https://ctags.io/ https://github.com/universal-ctags/ctags"
SRC_URI="mirror://sourceforge/ctags/${P}.tar.gz"
LICENSE="GPL-2+"
SLOT="0"
KEYWORDS="~mips ~sparc ~x86"
src_configure() {
econf --with-posix-regex
}
src_install() {
emake DESTDIR="${D}" install
dodoc FAQ NEWS README
}
ebuild 是被 shell 解析的,也就是说这个文件中的内容其实是 shell 脚本的一堆变量声明以及函数调用。
ebuild 文件的一二两行只是一些声明,内容可以是固定的,具体可以参考/var/db/repos/gentoo/header.txt
。
EAPI 是 ebuild 使用的 shell 函数库的版本,这里选择的是 8,是较新的版本。
要查看这种变量的详情,可以使用 man 1 ebuild,man 5 ebuild。
为节省篇幅,其他内容不作说明,需要了解的可以查看文档或者在网上查询。
写好之后使用之前提到的处理方式进行处理,但暂时不要推送到远程,还需在本地进行测试。
首先测试从上游拉取和解压源码。
sudo ebuild ./ctags-5.5.4.ebuild clean unpack
然后测试是否可以成功编译并安装。(注意这不是正式安装)
sudo ebuild ./ctags-5.5.4.ebuild clean test install
最后还需要通过repoman full -dx
进行质量检测。注意该命令需要在同步 overlay 后在 ebuild 的最终位置,即/var/db/repos/overlay_name/…
下执行。
本文只是介绍了自建 overlay 和编写使用 ebuild 的基本流程,对于最关键的一步,即如何编写 ebuild 并未做详细介绍。这是因为这部分内容非常专业且内容繁杂,此外 gentoo 社区中关于这方面的资源非常丰富,完全可以自行学习。gentoo wiki ebuild guide 中的External resources
一节列出了比较丰富的资源,可以参考使用。
如果你不想自己写 ebuild,也可以下载现成的。这种下载来的 ebuild 主要有两种用途。第一,修改版本。这种情况下基本上只需要修改极少部分内容。第二,解决验证方面的问题。比如下载的文件在校验时发现大小对不上,这种基本上就是 Manifest 有问题。特别常见于从仓库拉取源码的版本,即一串 9 的99999
版本。原因是 Manifest 没有及时更新,当前从仓库拉取的源码大小已经与之前的不同了。这种情况下只需要拿到这个 ebuild 然后自己生成一个 Manifest 即可。其他的用途比较少见,比如解决软件依赖冲突问题,这种除非是运气好可以直接改某个依赖的版本,否则对于非专业人士而言,自己折腾不如等别人改好。