在制作Linux发行版中Linux from Scratch可谓是真正的大师级。Linux from Scratch是在线的社区创建的一本电子书,目的是帮助那些根深蒂固的想方设法提高计算机性能的人(tweaker)帮助他们来创建自己毫无争论的独一无二的发行版本。
Linux from Scratch
困难程度:高;时间需求:200分钟;自定义程度:极高
对于想自定义他们的发行版本中所有的东西,从核心驱动的选择到默认文本编辑器是Vi还是Emacs的真正的Linux强者,没有比通过scratch来搭建你自己的核心和每个重要的组件更彻底的方法了。这就是Linux From Scratch的存在的意义。LFS(Linux from Scratch)是在线的社区创建的一本电子书,目的是帮助那些根深蒂固的想方设法提高计算机性能的人(tweaker)帮助他们来创建自己毫无争论的独一无二的发行版本。
电子书本身(在这个月的封面光盘上可以找到)包含了你需要知道的所有的细节,从构建跨平台的编译器到使用chroot来建立你的用户环境。然而,在你创建你的LFS系统的时候仍有许多骗人的把戏(gotchas)需要你注意。但是,我们已经把这些困难的部分提出了,所以你不用担心了。下面是这本电子书的精华LXF,每一条对于每个人来说都意味着大脑充血的,满头大汗的不眠之夜。我们的测试根据LFS6.3,因为这个稳定的live CD包含了我们需要的所有的工具,软件包和补丁,但是如果你想要最新最强大的LFS(我们要出版6.5),那么所有的电子书涵盖了怎样用你的主流的发行版本来搭建LSF系统。无论你选了哪条路,这些提示会帮助你无争议的安装!
Linux from Scratch电子书版格式清晰,并且保证每个阶段准确到位。
分区
当你开始初始化cfdisk的时候,最常见的错误是退出的时候没有保存你的修改(人们然后就想知道为什么mke2fs提示‘dev/hda1 不存在 ‘错误),所以在你提交你的程序之前一定要再一次检查你的分区对于你用户的系统是可用的。
本地源
如果你使用LFS live CD,你所有的工具,源和补丁都被存储在/lfs-sources中。一旦你建立了 ‘lfs‘ 用户,推荐你把这些源拷贝这些到 $LFS/sources ,因为你之后将可以正确的完成大多数阶段而不需要root允许。如果你遇到了任何问题,再一次检查你的工作目录是不是 $LFS/sources。下面的命令将返回 /mnt/lfs :
echo $LFS
引导
你一次你运行GCC构建的时候(使用‘bootstarp‘选项),我们推荐你离开去喝一杯咖啡。然后去喝另一杯,这个特殊的阶段需要花费一些时间,因为你要编译三次GCC,然后把第三次构建和第二次构建比较。这个的要点是检查第二次和第三次构建是否相同,这个可以显示你第一次构建的GCC时候是正确的。
跳过bootstarp是可能的,但是我们不推荐那样做,因为这样有可能会增加奇怪的错误,而且这些错误后边不容易诊断出来。刚刚接触LFS分散的用户在很多论坛里发贴子想要知道为什么GCC要话那么长时间来构建并且问这样是否正常。确实是这样,但是现在足够的耐心,将来出现的问题就会更少。
在对应的主题中,对于搭建过程来说是经常出现的,在你已经决定要花更长时间而不是你短暂的记忆可以记住的那么短的时间来完成你的安装。确认你没有什么忘记做的事,否则稍后就会出现错误,你不得不返回去来修复你的错误。
核心API 总管(hernel API headers)
通常出现的错误是误以为kernel API headers包含在你的软件包里。这个不是问题,你需要提取内核源码包(通常是linux-2.6.x.tar.bz2的格式)然后根据电子书中的步骤移动提取路径。
Shell的古怪举动
在你开始你的LFS搭建之前,了解Bsah的精妙之处是很重要的。你会创建系统链接、写多行命令(这意味你看见了,你需要跟着按回车)。你可以在电子书的格式上发现这个问题。在整个电子书多行的命令中的每一行不会包含 > (尽管你会在终端中看见)。然后,如果你在电子书里看见了 > ,确定你敲命令的时候也输入这个字符。我们可能没有察觉这个意外而这样写:
gcc -dumpspecs | sed ‘[email protected]^/lib/[email protected]/tools&@g‘ > `dirname $(gcc -print-libgcc-file-name)`/specs
这样就会出现奇异的错误状态,文件不存在。第二行应该是这样:
> > `dirname $(gcc -print-libgcc-file-name)`/specs
大量时间和奉献,你可以搭建出像Nutyx一样有用的版本。
不要排版(typos)
如果你使用主流的发行版本作为你的主系统,我们衷心地推荐在shell中使用拷贝和粘贴命令。这主要是因为这样不会出现拼写错误,而拼写错误可能会在后边的过程中引发新的错误(这个问题通常只能使用完全重新构建的方法来解决)。对于那些一定要手动输入或者是使用live CD的人,一定要在你执行命令之前反复检查,反复检查你使用了类型正确的括弧。手动输入在开始的时候会有意义,但是最终你会遭遇这头特殊的野兽命令(beast):
GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include && find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf ‘{}‘ ; && rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` && unset GCC_INCLUDEDIR
我们试着一次性输入全部这些内容,偶然使用了单独的括号,这会使所有抹杀掉所有我们已经做对的事情!你可以通过拷贝和粘贴或者在你看见&&时单独地输入每一行。
别掉以轻心
在GCC第二次通过的时候,配置会变得很简单而且可以通过同样的步骤来安装一系列软件包:
./configure --prefix=/tools make make install
然而,这个不是一直都有效,通过工作环境和LFS的补丁你会跟快的命中(hit)软件包,使它们正确的工作。基于这个原因,你必须一有时间就频繁地查阅电子书,这样才能避免奇怪的行为和之后有可能出现的错误。
转移到root
你应该以用户 ‘lfs‘ 来登录系统,但是一旦你执行命令的时候你就应该贴换到root。你可以通过按住Alt和右箭头键(你可以使用有箭头键按钮回到 lfs 用户)。在这个步骤中一定要按电子书中说的做备份。所有的这些可能导致的是在一个错误的路径中执行了一个糟糕的rm命令,这会使你几个小时的辛苦劳动付之东流。你可以通过下面的命令创建一个存档(因此挽救了一些空间):
tar -cvf --file=$LFS/tools/lfs_build.tar $LFS/tools
然后拷贝压缩包到外部存储介质或者是你能轻松恢复系统的地方。即使你没有使用存档备份,将来你也可以使用它迅速地搭建另外的LFS系统。
搭建你梦想的发行版本
Linux From Scratch伴随着电子书,打开超越Linux from Scrach搭建一个可扩展的、自定义的,标准的基于LFS的系统的无限可能的窗户。LFS论述了软件包管理也论述了怎样搭建桌面环境和一般的软件包。
想要看Linux from Scratch到底能做多少,那么你看看Nutyx吧(www.nutyx.org)。这是法语的网站,到现在为止还没有使用英语的选项,但是这个发行版本已经有了全面的桌面和应用程序套装,非常好用。
LFS关键的事是你可以完全掌握哪些补丁和更新可以被应用。所有的都是从源代码编译来的,所以它像闪电一样快。你总是可以选择是否升级内核,哪些软件可以,哪些软件不可以在你的系统上运行。这可能会话费一些时间来完成这种发行版本搭建天堂,之后还学要去维护它,但是结果是值得的。
或者是Gentoo的方式
如果你不能获得有足够自定义潜力的发行版本,那么看一看Gentoo是值得的。和Arch Linux类似,Gentoo支持滚动升级,但是不像Arch,Gentoo给你选用Linux还是BSD作为核心的选择。同时它也包含了300个开发者维护的10,000个软件包的服务,这些软件包通过Gentoo社区要求的,Linux世界中最高级的软件包管理系统来分发(叫做Portage)。
Gentoo从源代码编译所有的软件包,旨在获得稳定的系统,然而Arch Linux安装二进制包旨在成为自由软件开发的尖端。你使用哪个版本是由你的目的和你想控制多少而决定的,但是如果你不能在Arch 和Linux From Scratch中做出选择的话,Gentoo值得你一试。
Gentoo是同样喜欢LFS和Arch Linux的人的一个更好的选择。