HOWTO Write Ebuilds

出自Gentoo Linux Wiki

跳转到: 导航, 搜索

如果你是一名程序员,写了一个程序或是一个有用的脚本,你可能正在寻找一个简单明了的方法来把它安装在你的机器上或是与你的朋友分享它.

公认的最简便的方法是通过emerge来安装它.

本指南将向你介绍关于ebuild如何工作的基本原理,如何建立一个Ebuild.通过学习你可以掌握如何建立一个你私人的overlay,用于你个人的软件库.

本指南基于Official Ebuild Howto题写.

本指南面向非开发人员,所以力求简单易懂.

目录

[编辑] 建立一个overlay

首先我们需要有一个地方来放置自己私人的Ebuild,所以我们先来学习一下如何建立一个overlay.

mkdir -p /usr/portage/local/myebuilds
echo PORTDIR_OVERLAY=”/usr/portage/local/myebuilds” >> /etc/make.conf

[编辑] 目录

现在举一个例子,假设你正在写一个简单的脚本来实现自动unmask软件包

#!/bin/sh
# version 0.1
echo “$1 ~x86″ >> /etc/portage/package.keywords

你还为这个脚本写了一个简单的使用说明.

首先我们需要为自己写的脚本进行归类管理,所以我们先看一下系统中是否已有一个合适的类别来放置这种脚本.

ls /usr/portage

好,app-portage看起来是个合适的类别,所以我们在自己的overlay中建立一个名为app-portage的目录.

mkdir /usr/portage/local/myebuilds/app-portage

现在,我们要为这个脚本命名,”unmask”看来是个挺不错的名称,当然在决定使用这个名称之前我们要先确认一下这个名称是不是 已经被别人使用过了:

emerge unmask -p
These are the packages that would be merged, in order:

Calculating dependencies
emerge: there are no ebuilds to satisfy “unmask”.

看来这个名称暂时还没有人用过,所以我们建立一个名为unmask的目录,并进入该目录.

mkdir /usr/portage/local/myebuilds/app-portage/unmask
cd /usr/portage/local/myebuilds/app-portage/unmask

[编辑] 文件

我们需要一个空间来存放我们刚才写的脚本。一般的软件都有自己的项目主页,源代码应该放在项目主页空间里。这里为了简单起见,就直接把软件源代码包放在/usr/portage/distfiles里。软件源代码包下载下来之后,都会被放在/usr/portage/distfiles里。 建立压缩包。压缩包的名字要包含软件版本:

mkdir /tmp/unmask-0.1
cp /path/to/unmask /path/to/readme /tmp/unmask-0.1
cd /tmp
tar jcvf unmask-0.1.tar.bz2 unmask-0.1

然后,复制它到正确的位置

cp /tmp/unmask-0.1.tar.bz2 /usr/portage/distfiles

[编辑] 进入正题–Ebuild

好,启动你最喜欢的编辑器来编写该ebuild.ebuild的名称就是该包的名称(unmask),-及版本号(0.1)

nano unmask-0.1.ebuild

每个ebuild都是以一系列的变量声明作为开始的,其实至少包括下面这些变量:

SLOT="0"           # 通常这里写成0就可以了,这主要用于GCC,emacs这类可以多版本共存的软件包
LICENSE="GPL-2" # 软件许可协议
KEYWORDS="~x86" # 这只是个简单的脚本,所以在各种架构上都应该是可以正常运行的,不过,我们只想在x86上测试它,并且所有起始的ebuild都应该先进行测试,所以只写上~x86
DESCRIPTION=”A simple script to unmask packages” # 这是对你的软件包进行的简短说明
SRC_URI="http://abc.org/${P}.tar.bz2"      # 这个地址应该指向该软件包可以下载的链接。本例中软件包已经放在/usr/portage/distfiles里了,所以emerge不会从这个地址下载文件。再加上本来我们这个软件就没有主页,所以就用abc.org代替,正式的ebuild里应该写上正确的地址。
HOMEPAGE=""       # 这个就没什么好说的了,如果你在某个站点发布你的软件,那在这里加上网站的链接就是了
IUSE="doc"        # 这里设置USE标记,较为复杂,这里就只加一个doc作例子了

接下去,我们要加入几个函数,emerge安装这个包时时将会依次调用它们.

# src_unpack() # 这个函数用于解压源代码过程中打补丁
# src_compile() { } #如果你需要编译什么东西,就在这个函数中完成.
src_install()
{
  dosbin unmask # 使用dosbin将目标程序安装到/usr/sbin/目录,相应的,如果要安装到/usr/bin,可以使用dobin,这是ebuild本身提供的几个简单的安装函数,可以在man 5 ebuild中查到它们
  if use doc; then                  #如果使用doc这个USE标记,我们就把readme也复制进去.
    dodoc readme # dodoc也是ebuild脚本所提供的一个安装文档的函数,它会自动创建/usr/share/doc/${PF}并且将文档安装进去
  fi
}

[编辑] 建立一个清单

最后我们需要建立一个清单,很简单:

ebuild unmask-0.1.ebuild digest

[编辑] 测试它

emerge unmask

[编辑] 其他帮助

这里你可以找到一个很不错的ebuild例子:/usr/portage/skel.ebuild 关于更多的变量和函数,参阅: "The Official Ebuild HOWTO" 也可以参阅: http://devmanual.gentoo.org/ 或在freenode的 #gentoo-dev-help频道中寻求帮助.

个人工具