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. NX二次开发-Ufun API Example

    UF公共类型 UF_begin_timer计时函数 https://www.cnblogs.com/nxopen2018/p/10957135.html UF_end_timer计时函数 https: ...

  2. 破解极验(geetest)验证码

      破解极验(geetest)验证码 这是两年前的帖子: http://www.v2ex.com/t/138479 一个月前的破解程序,我没用过 asp.net ,不知道是不是真的破解了, demo ...

  3. robotframework 时间控件的操作的几种方法总结。

  4. 【SVN】提交报错:×××文件is not under version control

    解决方法:1.删除出错的文件,然后在出错文件所在文件夹执行还原操作 2.VS中可将文件先排除在项目外,再包含在项目内,即可正常提交

  5. HDU 6627 equation (分类讨论)

    2019 杭电多校 5 1004 题目链接:HDU 6627 比赛链接:2019 Multi-University Training Contest 5 Problem Description You ...

  6. 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)

    题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...

  7. mysql优化1:建表原则

    建表三大原则: 定长和变长分离 常用字段和不常用字段分离 使用冗余字段或冗余表 1.定长与变长分离 如 id int,占4个字节,char(4)占4个字符长度,也是定长,time 即每一个单元值占的字 ...

  8. java实现邮件定时发送

    最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果.先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer) ...

  9. 高效IO之Java IO体系(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括J ...

  10. 【洛谷】P1288 取数游戏II

    题目链接:https://www.luogu.org/problemnew/show/P1288 题意:中文题面不赘述啦. 题解:代码很好写,其实就是判断边数是否为偶数.先手确定方向其实都是一样的,但 ...