LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4197|回复: 72

[求助]征集实例

 关闭 [复制链接]
发表于 2008-10-30 13:27:12 | 显示全部楼层 |阅读模式
虽然我们能够使用autoconf、automake、make等工具实现自动化编译,但这种针对单个软件包的编译系统,在编译多个软件时仍然十分繁琐

假设需要编译emacs和vim,使用xft字体、图形界面支持,并去掉调试符号,需要分别作如下配置

emacs
./configure --prefix=/usr/local/         \
--no-debug                                \
--with-xft  --with-x-toolkit=gtk            \
--with-freetype   
vim  
./configure --prefix=/usr/local/         \
--no-debug                                \
--with-xft --with-x-toolkit=gtk  

这就像点菜时,你必须告诉厨师:鱼香肉丝(多放辣椒、不放蒜)、宫保鸡丁(多放辣椒、不放蒜)、麻婆豆腐(多放辣椒、不放蒜)……

实际上,大多数人这样点菜:鱼香肉丝、宫保鸡丁、麻婆豆腐……多放辣椒、不放蒜

emerge就是这样一种点菜方式,它是gentoo的包管理系统,提供了更为现代化的编译方式

可以通过指定USE标记xft、gtk、-debug来确定所有软件的编译方式
设置USE标记

以下方法按优先级由低到高排列:

在make.defaults文件中设置[15]:

/usr/portage/profile/base/make.defaults
/usr/portage/profile/default-linux/make.defaults
/usr/portage/profile/default-linux/x86/make.defaults
/usr/portage/profile/default-linux/x86/2007.0/make.defaults

在/etc/make.conf文件中声明永久USE标记(推荐)

USE="nptl nptlonly nls cjk php mysql -kde -qt3 -qt4"   

    * 带-的USE标记,表示排除

在/etc/portage/package.use文件中为单个包声明USE标记

app-editors/emacs-cvs xft
www-servers/lighttpd fastcgi
dev-lang/php mysqli cgi gd ctype pcre session unicode pic posix
dev-db/phpmyadmin vhosts
app-shells/zsh doc
net-ftp/pure-ftpd -ldap mysql pam ssl vchroot   

使用环境变量声明临时USE标记

USE="-java"
emerge seamonkey   

查看使用的USE标记:

merge --pretend --verbose seamonkey   

Calculating dependencies ...done!
[ebuild   R   ] www-client/seamonkey-1.0.7  USE="crypt gnome java -debug -ipv6
-ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango
-moznoroaming -postgres -xinerama -xprint" 0 kB

编译参数

/etc/make.conf

CFLAGS="-O2 -march=i686 -pipe" 1
CXXFLAGS="-O2 -march=i686 -pipe" 2

CHOST="i686-pc-linux-gnu" 3
MAKEOPTS="-j2" 4
   
FEATURES="parallel-fetch ccache" 5
CCACHE_DIR="/var/tmp/ccache" 6
CCACHE_SIZE="2G" 7

ACCEPT_KEYWORDS="x86" 8

USE="nptl nptlonly nls cjk php mysql" 9

FETCHCOMMAND="/usr/bin/axel -a -n4 \${URI} -o \${DISTDIR}" 10
RESUMECOMMAND="/usr/bin/axel -a -n4 \${URI} -o \${DISTDIR}"   

1
        针对C语言的优化选项,-march=设置目标架构

2
        针对C++语言的优化选项

3
        进行编译工作的机器架构

4
        编译选项

5
        emerge特性。并行下载、使用ccache缓冲编译结果

6
        ccache缓存目录

7
        ccache缓存大小

8
        通过关键字选择分支。x86表示x86架构的稳定分支,~x86表示x86架构的不稳定分支

9
        USE标记

10
        使用axel加速下载

gentoo支持多种架构:x86、 sparc、 amd64、 ppc、 ppc64、 alpha、 hppa、 mips、 ia64、 arm,我们使用的PC多为x86架构

假设你主要使用x86稳定分支,但少数软件要使用最新版本,在/etc/portage/package.keywords文件中为单个包设置关键字

app-editors/emacs-cvs ~x86
x11-misc/emacs-desktop ~x86
app-i18n/fcitx ~x86
app-editors/vim x86
app-editors/vim-core x86
   
media-video/mplayer ~x86
media-libs/win32codecs ~x86   
   
app-i18n/man-pages-zh_CN ~x86   

微调

在/etc/portage/目标下包含一些文件,可以在软件包级别上进行调节。前面已经介绍了package.use和package.keywords

package.keywords

    还未被确认适合你的系统或架构,但是你希望能安装的软件包
package.use

    特定软件包而不是整个系统使用的USE标记
package.provided

    屏蔽的软件包(需要指明版本号)
package.mask

    永远不希望Portage安装的软件包。
package.unmask

    被Gentoo开发者屏蔽的软件包,但是你希望能安装的软件包。

软件包可能由于以下原因被屏蔽
~架构 keyword         意味着这个软件没有经过充分的测试,不能进入稳定分支,请等待一段时间后在尝试使用它
-架构 keyword或-* keyword         意味着这个软件不能工作在您机器的体系结构中
missing keyword         意味着这个软件还没有在您机器的体系结构中进行过测试
package.mask         意味着这个软件被认为是损坏的,不稳定的或者有更严重的问题,它被故意标识为“不应使用”
profile         意味着这个软件不适用于您的profile。安装这样的应用软件可能会破坏您的系统,或者只是不能与您使用的profile相兼容

例如:

gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
dev-util/cvsd-1.0.2 (masked by: missing keyword)
games-fps/unreal-tournament-451 (masked by: package.mask)
sys-libs/glibc-2.3.2-r11 (masked by: profile)

使用emerge

查找.

查找名字包含pdf的软件包

emerge --search pdf   

查找与pdf相关的软件包

emerge --searchdesc pdf
emerge -S pdf   

查看软件拥有的USE标记

emerge -vp 软件包名称     

管理.

安装软件包

emerge 软件包名称   

模拟安装软件包

emerge --pretend 软件包名称   

下载软件包的源代码包

emerge --fetchonly 软件包名称   

从系统中删除软件包

emerge --unmerge 软件包名称   

更新.

更新系统

emerge --update --ask world   
emerge -ua world   

更新整个系统

emerge --update --deep world   
emerge -uD world   

使用新的USE标记重新构建系统

emerge --update --deep --newuse world   
emerge -uDN world   

移除孤立依赖的软件包

emerge --update --deep --newuse world1
emerge --depclean2
revdep-rebuild3   

1
        重新构建系统

2
        清除孤立依赖包

3
        重新构建依赖关系

revdep-rebuild工具由gentoolkit包提供;使用前别忘了首先emerge它:

emerge gentoolkit   


[15] 在升级Portage的时候,这个文件将会被覆盖

但问题是,我现在并没有安装gentoo,我不知道现在的gentoo系统中make.defaults是哪些文件^_^!!
/usr/portage/profile/base/make.defaults
/usr/portage/profile/default-linux/make.defaults
/usr/portage/profile/default-linux/x86/make.defaults
/usr/portage/profile/default-linux/x86/2007.0/make.defaults
发表于 2008-10-30 14:59:10 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2008-10-30 15:08:46 | 显示全部楼层
gentoo里起效的make.defaults不是某一个
而是某一些
具体是那些是你指定的profile决定的

关于profile请查阅一下手册

btw,你的这个点菜的比喻非常恰当,:-D
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 16:19:34 | 显示全部楼层
谢谢各位^_^
还要写其它部分,晕头转向的,不去翻那些东西了

关于make.defaults 回头再整理吧
实例改成了emacs 和 vim

把相关的部分发上来大伙审查一下:)


Linux下安装软件,大致有两种方式:二进制和源代码。如何使用源代码安装软件,参阅编译工具链

二进制预编译软件包,可以快速安装部署你所需要的软件,但是你不能决定软件的特性。就像在麦当劳吃饭,只要几分钟,你就可以填饱肚子。但假设你不吃辣椒,或者你喜欢口感老一点的,你不能要求他们为你定作一份没有辣椒的汉堡,或者把鸡翅炸上半个小时;因为配方和工序都是固定的

使用源代码安装软件,虽然比较耗时,但可以满足你的特殊要求。就像在餐馆里吃饭,你可以要求厨师为你作不含辣椒的菜以适应你的口味(软件),还可以要求厨师控制火候,作的老一点,以适应你的肠胃(硬件)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-10-30 16:22:16 | 显示全部楼层
我会错了意……
回复 支持 反对

使用道具 举报

发表于 2008-10-30 16:39:13 | 显示全部楼层
楼主兄弟,好像您以前在mail list 里面说过要翻译一本书,是您吗?

我强烈请求查看其它章节。由于对 gentoo / GNU 了解实在肤浅,所以我希望尽可能阅读参考优秀资料。

阅读参考完后,就是完成下面这些个人学习笔记,然后公开。
https://docs.google.com/Doc?id=d3q8n99_11dssgh2hd
https://docs.google.com/Doc?id=d3q8n99_8fz2n83f8

笔记不想提太多。今天看了一个自己的个人年度计划,很多事情没有完成……


以下文字带有强烈的个人主观意见和信仰色彩,可能会引起读者不快,如果您不想影响您的情绪,请勿继续阅读。
就像在麦当劳吃饭
请不要扯上麦当劳,gentoo 不是垃圾,gnu 更不是

谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 17:07:42 | 显示全部楼层
呵呵,这位仁兄……我觉得我的意思应该是这样的:

预编译软件包=麦当劳
编译(gentoo)=下馆子

当然,如果这样表述,那非 gentoo/编译 的系统就成了“麦当劳”了,似乎也不太厚道
不知道换成 “肯得基” 会不会好一点^_^!!(其实只是为了说明概念,不用太过较真)

其实就gnu来说,争议也很多的,基本的共识是 gnu != 开源
对于有争议的话题,如果没有办法处理,我会尽可能的回避^_^

好像我从来没上过任何mail list,也没有翻译任何书的计划(本人英文一级都没过哈)
不过关于审稿的事,我是非常赞同的……事实上我正在发愁找不到人审稿

这个文档的完成度还不高,甚至不够预览版的标准
已完成的部分还有很多需要重新写过
既然兄弟想看,我就放上来了,惶恐惶恐……
(使用RAR分卷压缩,见笑^_^!!)

另外:
由于源文档中通过注释的方式记录了一些构思、规划之类的东西
还没有经过整理,所以源文档就不放出了
等完成度比较高的时候,我整理过再放出^_^!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 17:12:17 | 显示全部楼层
还要说明的是
这个文档并不是只针对gentoo的
计划增加一个 stage3 安装gentoo的章节
还有就是emerge ,至于gentoo系统的其它要素,超出了我了解的范围,所以就不详细介绍了
回复 支持 反对

使用道具 举报

发表于 2008-10-30 17:21:50 | 显示全部楼层
好像我从来没上过任何mail list,也没有翻译任何书的计划(本人英文一级都没过哈)
不过关于审稿的事,我是非常赞同的……事实上我正在发愁找不到人审稿

我对 GNU / GPL / Linux / Gentoo 的理解很肤浅
我没有能力审稿,只能说,提提可有可无的意见罢了。

这样吧
预编译软件包=吃快餐
编译(gentoo)=吃自助餐 / 自己下厨
:-D

说到下厨,我想起了一部优秀电影 everyone can cook
http://www.google.cn/search?hl=z ... %E7%B4%A2&meta=

哎,www.google.com 又不能正常访问, http://www.google.cn/ 出来的,尽是垃圾
回复 支持 反对

使用道具 举报

发表于 2008-10-30 18:07:26 | 显示全部楼层
你在帮什么媒体写稿?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表