ABSTRACT:

  Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM developerWorks articles about Linux. Daniel currently serves as Benevolent Dictator for Life (BDFL) of Funtoo Linux. Funtoo Linux is a Gentoo-based distribution and continuation of Daniel's original Gentoo vision.


Section 3

Operation logic of the original version of Portage(a package manager used by Gentoo,Funtoo,etc.)


ebuild.conf: 

1 # /etc/ebuild.conf:set system-wide ebuild options in this file
2 # MAKEOPTS are options passed to make
3 MAKEOPTS="-j2"

package.ebuild:

1 #this ebuild file overrides the default user_compile()
2 P=e2fsprogs-1.18
3 A=${P}.tar.gz
4 user_compile() {
5   ./configure --enable-elf-shlibs
6 make
7 }  #e2fsprogs.ebuild

ebuild:

 1 #!/usr/bin/env bash
2 if [ $# -ne 2 ]
3 then
4   echo "Please specify ebuild file and unpack, compile or all"
5 exit 1
6 fi
7 source /etc/ebuild.conf
8 if [ -z "$DISTDIR" ]
9 then
10 # set DISTDIR to /usr/src/distfiles if not already set
11   DISTDIR=/usr/src/distfiles
12 fi
13 export DISTDIR
14 ebuild_unpack() {
15   #make sure we're in the right directory
16   cd ${ORIGDIR}
17 if [ -d ${WORKDIR} ]
18 then
19   rm -rf ${WORKDIR}
20 fi
21 mkdir ${WORKDIR}
22 cd ${WORKDIR}
23 if [ ! -e ${DISTDIR}/${A} ]
24 then
25   echo "${DISTDIR}/${A} does not exist. Please download first."
26 exit 1
27 fi
28 tar xzf ${DISTDIR}/${A}
29 echo "Unpacked ${DISTDIR}/${A}."
30 #source is now correctly unpacked
31 }
32 user_compile()
33 {
34 #we're already in ${SRCDIR}
35 if [ -e configure ]
36 then
37 #run configure script if it exists
38   ./configure --prefix=/usr
39 fi
40   #run make
41   make $MAKEOPTS MAKE="make $MAKEOPTS"
42 }
43 ebuild_compile() {
44 if [ ! -d "${SRCDIR}" ]
45 then
46   echo "${SRCDIR} does not exist -- please unpack first."
47 exit 1
48 fi
49 #make sure we're in the right directory
50 cd ${SRCDIR}
51 user_compile
52 }
53 export ORIGDIR=`pwd`
54 export WORKDIR=${ORIGDIR}/work
55 if [ -e "$1" ]
56 then
57   source $1
58 else
59   echo "Ebuild file $1 not found."
60 exit 1
61 fi
62 export SRCDIR=${WORKDIR}/${P}
63 case "${2}" in
64   unpack)
65     ebuild_unpack ;;
66   compile)
67     ebuild_compile ;;
68   all)
69     ebuild_unpack ebuild_compile ;;
70   *)
71     echo "Please specify unpack, compile or all as the second arg"
72     exit 1 ;;
73 esac

REFERENCES:

  • http://www.funtoo.org/Bash_by_Example,_Part_1
  • http://www.funtoo.org/Bash_by_Example,_Part_2
  • http://www.funtoo.org/Bash_by_Example,_Part_3
  • http://www.jb51.net/article/51342.htm

『BASH』——Learn BashScript from Daniel Robbins——[003]的更多相关文章

  1. 『BASH』——Learn BashScript from Daniel Robbins——[001-002]

    ABSTRACT: Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM develop ...

  2. 『BASH』——文件权限批量恢复脚本——「Permission Revovery」

    一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...

  3. 『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"

    /*为节省时间,本文以汉文撰写*/ -前言- 深入学习正则表达式,可以很好的提高思维逻辑的缜密性:又因正则应用于几乎所有高级编程语言,其重要性不言而喻,是江湖人士必备的内功心法. 正则表达式概要(ob ...

  4. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  5. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  6. JS 中通过对象关联实现『继承』

    JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...

  7. 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】

    今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...

  8. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...

  9. 『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...

随机推荐

  1. delphi动态创建控件

    动态创建控件 其实动态创建控件很简单,相信看过本文后你会全明白的. 1 先在单元的initialization 部分注册它,(这样在单元使用时会自动注册的)如: RegisterClass( TBut ...

  2. Windows注册表的学习

    什么是注册表 注册表是Windows在Win95/98系统开始引入的一种核心数据库,里面存放着各类的配置信息.参数等.直接控制着系统的启动.硬件的装载以及Winodws程序的运行 手册表的功能 记录用 ...

  3. nuxt 2.0采坑计之 (引入静态文件css)

    nuxt 2.0采坑计之静态文件css 外部引入css 全局引用方法为   (在nuxt.config.js配置中在   module.exports = {}  中添加) head: { meta: ...

  4. C语言新手写扫雷源代码

    今天发布源代码,由于写在一个文件里非常乱,所以分三个文件写 绘图和鼠标函数graph.h /*绘图与鼠标相关函数*/ #include<graphics.h> #include <e ...

  5. Jquery里live事件移除原因

    live()事件 $('a').live('click', function() { alert("That tickles!") }); live事件Jq把alert函数绑定到$ ...

  6. win7 cmd 常用命令

    进入不同的分区  d: 查看之栏目树:tree 查看当前目录下的子目录:dir 切换不同的目录:cd

  7. 在一台机上搭建多个MYSQL并设置主从

    安装 cd /usr/local/src/ -linux2.-x86_64.tar.gz -linux2.-x86_64 /usr/local/mysql grep mysql /etc/passwd ...

  8. 谈谈-Android Studio 调试功能

    先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指 ...

  9. POJ 3304 Segments (判断直线与线段相交)

    题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...

  10. 剑指offer——04二维数组中的查找

    题目: 数组中唯一只出现一次的数字.在一个数组中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 题解: 如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现 ...