Learn BashScript from Daniel Robbins /*003*/

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
时间: 2024-10-07 13:26:42

Learn BashScript from Daniel Robbins /*003*/的相关文章

iOS开发——OC篇&消息传递机制(KVO/NOtification/Block/代理/Target-Action)

iOS开发中消息传递机制(KVO/NOtification/Block/代理/Target-Action) 今晚看到了一篇好的文章,所以就搬过来了,方便自己以后学习 虽然这一期的主题是关于Foundation Framework的,不过本文中还介绍了一些超出Foundation Framework(KVO和Notification)范围的一些消息传递机制,另外还介绍了delegation,block和target- action. 大多数情况下,消息传递该使用什么机制,是很明确的了,当然了,在某

iOS开发——笔记篇&关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结

关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 1 /******************************************************************************/ 2 一:简单plist读取 3 4 1:定义一个数组用来保存读取出来的plist数据 5 @property (nonatomic, strong) NSArray *shops; 6 7 2:使用懒加载的方

iOS开发——OC篇&协议篇/NSCoder/NSCoding/NSCoping

协议篇/NSCoder/NSCoding/NSCoping 协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承.它类似java中的接口. 正式协议(formal protocol)------------------------------------------------------------------------------------声明正式协议使用@protocol指令,以@end结尾. @protocol MyXMLSupport

iOS开发——UI篇OC篇&UIView/UIWindow/UIScreen/CALayer

UIView/UIWindow/UIScreen/CALayer 1.UIScreen可以获取设备屏幕的大小. 1 2 3 4 5 6 7 // 整个屏幕的大小 {{0, 0}, {320, 480}} CGRect bounds = [UIScreen mainScreen].bounds; NSLog(@"UIScreen bounds: %@", NSStringFromCGRect(bounds)); // 应用程序窗口大小 {{0, 20}, {320, 460}} CGRe

iOS开发——UI篇&代理/通知/Block传值(实现UItableView分组的收缩与展开)

代理/通知/Block传值实现UItableView分组的收缩与展开 初始化之后出现下面的界面 准备: 1:定义一个BOOL值用来记录点击 1 @property (nonatomic, assign, getter = isOpen) BOOL open; 2:在相应的点击方法里面是实现点击 1 self.group.open = !self.group.open; 3:在numberOfRowsInSection中返回的时候使用三木判断是否点击,并且实现伸缩与展开, 1 return mod

jQuery -> 获取/设置/删除DOM元素的属性

Sum square difference Problem 6 The sum of the squares of the first ten natural numbers is, 12 + 22 + ... + 102 = 385 The square of the sum of the first ten natural numbers is, (1 + 2 + ... + 10)2 = 552 = 3025 Hence the difference between the sum of

搜索当前目录下所有文件包含某关键词的文本/文件名/行号

工作中希望通过命令能够找到nginx的一堆conf文件中配置某个域名的conf的文件名:或者找读书笔记里面包含某个关键词的所有读书笔记markdown文档: 或者找到某个公司/作者/演员/tag的所有作品的文章,如果你像我一样,记性很烂,但只是记得某个关键词就想要找到以前的东西,那么看这篇就对了. 这篇文章基于Unix/Linux/MacOS环境,当然windows如果安装bash命令行也是可以的.通过find命令查找当前目录下所有带有某个字符串的文件名以及行号.或者上下文. 通过find命令查

易语言支持库 找不到指定的命令/子程序/Dll命令调用名称“取特定目录”。

例如: 运行 (取特定目录 (#windos系统目录)+"\calc.exe",假) 输出框: 错误(37): 找不到指定的命令/子程序/Dll命令调用名称“取特定目录”. 编译现行易程序失败或被中止! 解决:在支持库配置里勾选操作系统界面功能支持库即可. 或者:运行(“notepad.exe”,假,) 参考:http://bbs.eyuyan.com/simple/?t236023.html

ios开发——实用技术篇&Block/KVO/通知/代理

Block/KVO/通知/代理简单介绍与使用 关于iOS开发中数据传递的方法有很多种,但是使用最多的就是这里的四种,而且我们要学会在适当的时候使用合适的方式,才能充分的提高app的性能 下面简单介绍一下这些方法的使用 Block 第一.综述 block是OC中另外一种对象和对象的通信方式,是一对一的关系,类似于delegate,而通知时一对多的关系 第二.定义block类型 int (^myBlock)(int) 第三.block的声明 mylock=^(int a) { int result