『BASH』——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
『BASH』——Learn BashScript from Daniel Robbins——[003]的更多相关文章
- 『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 ...
- 『BASH』——文件权限批量恢复脚本——「Permission Revovery」
一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...
- 『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"
/*为节省时间,本文以汉文撰写*/ -前言- 深入学习正则表达式,可以很好的提高思维逻辑的缜密性:又因正则应用于几乎所有高级编程语言,其重要性不言而喻,是江湖人士必备的内功心法. 正则表达式概要(ob ...
- 『AngularJS』$location 服务
项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...
- [原创] 【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 ...
- JS 中通过对象关联实现『继承』
JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...
- 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】
今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...
- 『开源』Slithice 2013 服务器集群 设计和源码
相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...
- 『片段』OracleHelper (支持 多条SQL语句)
C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...
随机推荐
- 贪心——cf708b
先求0,1的个数,然后贪心输出01即可 #include<bits/stdc++.h> using namespace std; #define ll long long ll a,b,c ...
- xStream.jar踩坑指南
前言 第一次接触Xstream,是在做一个socket通信的项目,由于是二次重新开发,所以有部分代码沿用了原来的代码(改造前用的webservice),其中xml字符串转换为对象,以及对象转换为xml ...
- 在C#.NET中,如何生成PDF文件?主要有以下几个途径
1.使用.NET文件流技术:若通过.NET的文件流技术生成PDF文件,必须对PDF文件的语法很清楚,例如BT表示实体内容开始:ET表示实体内容结束:TD表示换行等等.我们可以从Adobe的官方网站上下 ...
- 微信小程序 在使用wx.request时显示加载中
微信小程序中,向后台请求数据是,通常想给用户提示正在加载中,如下图: 我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.re ...
- Java-Class-FC:java.lang.StringBuilder
ylbtech-Java-Class-FC:java.lang.StringBuilder 1.返回顶部 2.返回顶部 1. @Override public String toString() ...
- CSS:CSS margin(外边距)
ylbtech-CSS:CSS margin(外边距) 1.返回顶部 1. CSS margin(外边距) CSS margin(外边距)属性定义元素周围的空间. margin margin 清除周围 ...
- cd 命令行进入目标文件夹
当我在默认路径中使用cd命令时,如果我要进入D:\mytext 文件夹,那么直接使用cd D:\mytext 是不行的 正确的使用是先使用d:进入D盘,然后再进入mytext文件夹
- Jquery的Ready方法加载为什么两次?
Ready方法会调用两次? 查看对应的页面是否存在<iframe src="#" --> 存在iframe加载这个页面的时候,页面就会加载两次. $(document) ...
- 1044 Shopping in Mars (25 分)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- Java服务定位器模式
当我们想要使用JNDI查找来定位各种服务时,使用服务定位器设计模式. 考虑到为服务查找JNDI的高成本,所以在服务定位器模式使用缓存技术. 首次需要服务时,服务定位器在JNDI中查找并缓存服务对象. ...