LFS 学习日记(第2~4章:简介、分区、源码、环境设置等)

2010年06月02日 星期三

宿主机: E7400 双核64位Intel CPU,物理内存4G,华硕主板上安装的 Vmware Server 2.02 上的 UBUNTU 10.04 32位桌面版本,虚拟机 512M 内存,两个8G SCSI 硬盘。用 ssh 连接 Ubuntu 10.04 虚拟机操作系统进行 LFS 编译。为了节约资源,虚拟机没有开启图形界面。可以在 /boot/grub/grub.cfg 中将内核参数中的 "splash quiet" 替换为 "text" 禁止图形界面启动。

http://www.linuxfromscratch.org/lfs/view/6.6/prologue/hostreqs.html
vii. Host System Requirements
据: Also note that many distributions will place software headers into separate packages, often in the form of “<package-name>-devel” or “<package-name>-dev”. Be sure to install those if your distribution provides them.
因为需要软件头部文件,所以安装相应软件的开发包(如有的话),经 apt-cache search 软件包名 | grep dev 等方法 ,找到也许需要安装下列软件dev包:
binutils: binutils-dev
bzip2: lib64bz2-dev liblzma-dev libbz2-dev libbz2-ocaml-dev
gzip: lib64z1-dev zlib1g-dev libbz2-ocaml-dev libghc6-binary-dev libghc6-zlib-dev libzip-ocaml-dev
Linux Kernel: linux-headers-generic
perl: libperl-dev
tar: libarchive-dev

2010年06月03日 星期四
http://www.linuxfromscratch.org/lfs/view/6.6/chapter02/creatingpartition.html

基本的 LFS 需要 1.3G空间。再加2~3G对于一般将 LFS 作为主要操作系统的人来说可以满足。大部分是编译过程中需要的临时空间;
交换分区可用宿主系统上的。

LFS 的分区指导:
/ 根分区10G;
交换分区 2倍物理内存,磁盘不足时不大小2G;
/boot (强烈建议)100M;
/home (强烈建议)不定;
/usr 通常用于瘦客户端或无盘工作站,5G;
/opt 在 BLFS 中安装大型软件包最有用,5~10G;
/tmp 通常用于瘦客户端,不超过2G;
/usr/src 保存 BLFS 源码非常有用,也可以用于编译 BLFS 包,30~50G。

我首先是学习目的,那么一切从简,就用那个单独的 8GB Vmware SCSI 硬盘作为一个编译LFS的分区。然后可以考虑继续在上面编译 BLFS。交换分区就用宿主系统的。

translation: /usr/src – This partition is very useful for providing a location to store BLFS source files and share them across LFS builds.(参考的中文译文译者认为是保存LFS源码,我认为就是本意的BLFS 源码,因为LFS源码不多,没有必要用几十个G的空间来保存源码)

http://www.linuxfromscratch.org/lfs/view/6.6/chapter02/creatingfilesystem.html
debugfs -R feature /dev/<xxx> 打印当前状态的文件系统的特性集合,-R 执行命令
经上述命令检测,Ubuntu 10.04 的 mke2fs 命令创建的 ext3 文件系统符合 LFS 要求。

完全按照 LFS book 的步骤创建分区、挂载 /mnt/lfs 目录,创建源码目录( http://www.linuxfromscratch.org/lfs/view/6.6/chapter03/introduction.html )等,下载源码及补丁,其中内核是用的linux-2.6.32.15.tar.bz2。另外,建立至少两个ssh连接,一个用 sudo -s 变成 root 用户,用于执行必须 root 用户才能完成的操作;另一个普通用户,只要不是非要 root 用户进行的工作都由这个普通用户完成(如下载等)。

下面进入需要特别小心的第4章( http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/chapter04.html ),设置工作环境等。

按照第四章前面的要求创建 $LFS/tools 目录,创建 lfs 用户,改变 $LFS/tools、/LFS/sources 的拥有者为lfs。su - lfs 登录为 lfs 用户,进入第4章第4节工作环境设置( http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/settingenvironment.html )。

http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/settingenvironment.html
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash #question: 在 Ubuntu 10.04 中,/etc/profile 执行了 . /etc/bash.bashrc ,而 /etc/bash.bashrc 中重新设置了 PS1 值,在执行上面的 /bin/bash 命令中,是否相当了执行一个非登录shell,这样,在系统依次设置 /etc/profile(其中调用了/etc/bash.bashrc)、~/.bash_profile、/etc/bash.bashrc(第二次调用),所以,PS1 的值又被设置回了 /etc/bash.bashrc 中设置的值。这就相当于上述设置 PS1 的值失去了作用。是否有必要在非登录shell中设置 PS1 或其它的环境变量值呢? ( 在 LFS 邮件列表上发了邮件讨论这个问题: Can't set $PS1 properly under Ubuntu 10.04 host http://linuxfromscratch.org/pipermail/lfs-support/2010-June/038814.html , the issue of environment value $PS1 set under Ubuntu 10.04 http://linuxfromscratch.org/pipermail/lfs-dev/2010-June/063885.html )

2010年06月04日 星期五

4.5. About SBUs http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/aboutsbus.html
这节提到多处理器或多核处理器的环境可以设置环境变量 set MAKEFLAGS='-j 2' 或直接调用 make -j2 加快编译过程,如果碰到问题时,可以回到单处理器的模式诊断问题。也就是说,在我的多核处理器 E7400 的虚拟机中,正常情况下可以这样做加速编译过程。

translation: Analyzing the output of the build process will also be more difficult because the lines of different processes will be interleaved. (因为不同进程的编译输出行将相互交错,所以分析编译过程的输出也将更加困难。)

4.6. About the Test Suites http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/abouttestsuites.html
此节提到最关键的工具链包:GCC, Binutils, and Glibc 最需要认真测试;
然后说第5章临时工具链的编译因为受宿主机影响太大而导致测试不准,所以不建议一般用户测试第5章的包。测试者和开发者可以用。所以,为了学习目的,第5章的测试我可以进行,但不作为是否编译成功的标准。