加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

gentoo 编写 ebuild

(2010-10-09 15:22:29)
标签:

杂谈

简介:
整理的文章,原文来自 http://zh.gentoo-wiki.com/index.php?title=HOWTO_Write_Ebuilds&variant=zh-cn介绍了如何编写 ebuild ,从而建立一个你私人的overlay,用于你个人的软件库 。


  1. 建立一个overlay

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

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

  4. 现在举一个例子,假设你正在写一个简单的脚本来实现自动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
  5. 文件

  6. 我们需要一个空间来存放我们刚才写的脚本。一般的软件都有自己的项目主页,源代码应该放在项目主页空间里。这里为了简单起见,就直接把软件源代码包 放在/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
    
  7. 进入正题–Ebuild

  8. 好,启动你最喜欢的编辑器来编写该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
    }
  9. 建立一个清单

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

    ebuild unmask-0.1.ebuild digest
    
  11. 测试它

  12. emerge unmask
    
  13. 其他帮助

  14. 这里你可以找到一个很不错的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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有