在制作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 's@^/lib/ld-linux.so.2@/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的人的一个更好的选择。

高手从零开始的全定制发行版-Linux from Scratch的更多相关文章

  1. 发行版Linux和麒麟操作系统下netperf 网络性能测试

    Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输.Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求 ...

  2. CentOS和Redhat发行版linux内核版本的对应关系

    由于Redhat和CentOS的发行版本现在众多,所以我们应该知道CentOS和Redhat及linux内核之间版本的对应关系对维护系统还是很有帮助的.对应的列表如下: Redhat 9.0————— ...

  3. Linux发行版大全

    基于Debian  Adamantix:基于Debian,特别关注安全.  Amber Linux:基于Debian,针对拉脱维亚用户作了一些定制.  ASLinux Desktop:西班牙语,基于D ...

  4. 2016年如何选择 Linux 发行版

    不管是在企业级应用还是在消费者领域,2015 对于 Linux 来说都是极其重要的一年.作为一个从 2005 年就开始使用 Linux 的老用户,我有幸见证了 Linux 过去这 10 年里的重大发展 ...

  5. 最佳 Linux 发行版汇总

    Linux入门UbuntuUbuntu是一款基于Debian发行版,以Unity作为默认桌面环境的Linux操作系统.他是世界上最流行的发行版之一,每次发行,它都有提升.最新发行版为桌面.移动及其桌面 ...

  6. Linux发行版

    Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...

  7. 常见Linux发行版有哪些?

    Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...

  8. linux主要的发行版及其区别和联系

    1. 主要发行版 linux主要发行版有3类: (1).Debian (2).Slackware (3).Redhat (1)Debian Ubuntu 针对桌面和服务器 knopix 以安全著称 ( ...

  9. 常见Linux的发行版有哪些?并描述不同发行版之间的联系与区别。

    一.按系列罗列linux的发行版,并描述不同发行版之间的联系和区别 Linux发行版=Linux内核+商业软件 linux的发行版: RedHat.Fedora.suse.红旗.debian.Ubun ...

随机推荐

  1. 图论-单源最短路-SPFA算法

    有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...

  2. Python——拼接字符串

    Python中可以对字符串进行拼接: 1. 使用字符串拼接运算符: + >>> "Hello" + "World" 'HelloWorld' ...

  3. 去掉a标签的虚线框,避免出现奇怪的选中区域

    a{blr:expression(this.onFocus=this.blur())}/*去掉a标签的虚线框,避免出现奇怪的选中区域*/

  4. C++智能指针: auto_ptr, shared_ptr, unique_ptr, weak_ptr

    本文参考C++智能指针简单剖析 内存泄露 我们知道一个对象(变量)的生命周期结束的时候, 会自动释放掉其占用的内存(例如局部变量在包含它的第一个括号结束的时候自动释放掉内存) int main () ...

  5. scala中常用特殊符号

    参考资料: scala中常用但其他语言不常见的符号含义 Scala学习六:Scala中的特殊字符 =>(匿名函数) 参考文档:scala => 用法 匿名函数 => 匿名函数,在Sp ...

  6. 转载--MyBaits中的#和$的区别

    面试被问到了,百度了下,原文地址:mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111, ...

  7. 在k8s 1.7.0上启用dashboard的注意事项

    因为自k8s 1.6之后,有基于角色的安全性. 所以很多网上以前的教程就不能使用了. 结合以下三个文档,暂时实现了dashboard界面的推出. http://blog.csdn.net/jinzil ...

  8. Django学生管理系统添加学生时,报错Not Found: /POST

    最近在学习Django,跟着视频写了一个学生系统,主要是增删改查操作,界面丑的一匹 1.url.py from django.contrib import admin from django.urls ...

  9. SocketCluster

    官网地址:https://socketcluster.io/ SocketCluster的组成部分,即运行一个SocketCluster服务器,它在服务器生成的进程 1.主进程(Server.js)一 ...

  10. 鬼题Ghost [manacher]

    本题目来自five20的周末考试题. Description 给定一个 0/1 序列,求其中满足 " ⺉ " 性质的子串个数. " ⺉ " 性质解释: &quo ...