gentoo 编写 ebuild - jues
linux 下更快的vnc
计算两个GPS坐标的距离

gentoo 编写 ebuild

jues posted @ 2014年4月13日 10:12 in 笔记(转载) , 956 阅读
简介:
整理的文章,原文来自 http://zh.gentoo-wiki.com/index.php?title=HOWTO_Write_Ebuilds&variant=zh-cn介绍了如何编写 ebuild ,从而建立一个你私人的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的名称就是该包的名称(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频道中寻求帮助.

  1. 建立一个overlay

  2. 目录

  3. 文件

  4. 进入正题–Ebuild

  5. 建立一个清单

  6. 测试它

  7. 其他帮助


附言 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

 

http://blog.163.com/vic_kk/blog/static/4947052420109932141528/

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter