标签:
杂谈 |
整理的文章,原文来自 http://zh.gentoo-wiki.com/index.php?title=HOWTO_Write_Ebuilds&variant=zh-cn介绍了如何编写 ebuild ,从而建立一个你私人的overlay,用于你个人的软件库 。
-
建立一个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频道中寻求帮助.
附言 By yyc:
其实 portage 中提供了很多的辅助函数,例如 econf, emake,
einstall等等,由这些辅助函数就可以很轻松的完成一个简单的 ebuild
的编写工作,下面是一个简单的模版,可以在这个的基础上进行逐步的添加,从而形成一个丰富完整的 ebuild:
# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/gnome-base/gconf/gconf-2.26.2-r1.ebuild,v 1.10 2010/07/20 15:32:51 jer Exp $ DESCRIPTION="(>>FILE<<)" DOCS="AUTHORS ChangeLog NEWS README TODO" EAPI="2" HOMEPAGE="http://www.bukengnikengshui.com/(joke)" IUSE="doc" KEYWORDS="amd64 x86" LICENSE="LGPL-2" SLOT="0" SRC_URI="http://abc.org/${P}.tar.bz2" src_configure(){ local myconf myconf="${myconf} --prefix=/usr --sysconfdir=/etc" econf ${myconf} } src_compile(){ emake -j3 || dir "Make failed." } src_install() { einstall } |
Author:yangyingchao, 2010-10-09