首页 > Linux > [ZT]HOWTO_Write_Ebuilds

[ZT]HOWTO_Write_Ebuilds

2008年4月17日 Galaxy 发表评论 阅读评论

http://zh.gentoo-wiki.com/HOWTO_Write_Ebuilds#.E6.B5.8B.E8.AF.95.E5.AE.83

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

[编辑] 文件

我们需要一个空间来存放我们刚才写的脚本,比如某个网络空间,当然在这个例子中,我们这个脚本是很简短小巧的,所以就直接存放在portage树中的脚本目录中了.Gentoo的规则中,小于20K的文件是可以直接存储于portage树中的.我们在这里建立一个目录来存放它.

mkdir files

压缩该文件:

gzip /path/to/unmask
gzip /path/to/readme

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

cp /path/to/unmask.gz files/
cp /path/to/readme.gz files/

[编辑] 进入正题–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=""        # 这个地址应该指向该软件包可以下载的链接,由于我们把它放入树中了,这里就留空
HOMEPAGE=""       # 这个就没什么好说的了,如果你在某个站点发布你的软件,那在这里加上网站的链接就是了
IUSE="doc"        # 这里设置USE标记,较为复杂,这里就只加一个doc作例子了

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

src_unpack() # 这个函数用于解压源代码
{
# ${S}是src_unpack函数起始执行的地方,由emerge系统自动创建
cp ${FILESDIR}/unmask.gz ${S} #FILESDIR这个变量指明了我们存放该包的路径也就是 /usr/portage/local/myebuilds/app-portage/unmask/files
gzip -d ${S}/unmask.gz
}
# src_compile() { } #如果你需要编译什么东西,就在这个函数中完成.
src_install()
{
dosbin unmask # 使用dosbin将目标程序安装到/usr/sbin/目录,相应的,如果要安装到/usr/bin,可以使用dobin,这是ebuild本身提供的几个简单的安装函数,可以在man 5 ebuild中查到它们
if use doc; then                  #如果使用doc这个USE标记,我们就把readme也复制进去.
dodoc ${FILESDIR}/readme.gz # 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频道中寻求帮助.

Tags: , , , , ,

Related posts

分类: Linux 标签: , , , , , 199 views
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

Locations of visitors to this page