1.新手就该按部就班
每个章节一个一个来,不要正在编译这一章然后去看下一章。本脑残一连编译很多个包时,脑袋就不太灵光了,当程序包编译需要很长时间时,想利用这段时间看看下一章的内容,结果等编译完了,直接就从下一章的中间接着做了……然后是无数的错误,出错是好事,万一碰巧通过了,而指令不是和手册上一致,这就后面的编译埋下隐患,之后再出错就不好排查了。最糟的情况就是从头再来……
2.打扫卫生要干净
当出现问题时,一个通用的解决办法时重新编译。重来是新手碰到问题的万灵药,因为新手不知道问题的原因在哪里。编译执行make出错后,通常运行以下两条命令清理:
make clean
make distclean
执行完这两条后,为了更加干净,就要删除源码包,重新解压。虽然费时费资源,但很彻底。
在第六章编译lfs阶段,有好多包是第五章准备阶段用到过的,当时手册推荐再源码包外新建xxxxx-build目录编译,事后连同源码目录一并删除之,但我以为编译是在新建的build目录进行的,所以后面有的包只删除了build目录,而保留了源码目录。事实证明这是个错误,前一次的编译对源码包其实是有影响的,即使是在源码目录外编制。有的不太关键的包没出问题,但那些比较和其他包联系较大的,就会出现很难排查的错误。我有好几个包都出现了找不到动态库的问题,没找到原因,只好自己添加链接,将缺失的库从/bin/lib或/usr/bin/lib链接到/toos/lib,临时解决。
所以新手们请严格按照手册说明的编制进程进行:
-
把所有的源代码和补丁放在 chroot 环境以内的一个目录,比如/mnt/lfs/sources/。不要把源代码放在/mnt/lfs/tools/中。
-
变更至源代码目录。
-
对于每个程序包:
-
使用 tar 程序,提取要编制的程序包。在第五章中,确保作为 lfs 用户提取程序包。
-
变更至提取程序包时创建的目录。
-
按本书中的指令编制程序包。
-
变更回源代码目录。
-
除非另外说明,删除提取出的源代码目录和任何在编制进程中创建的<package>-build目录(重要!)
-
下面是转载的,出处
书在前面的部分可以说是LFS的中译版本。如何搭建Linux其实就是利用现有的Linux系统和gcc编译器,编译得到一个不再依赖原有系统的 Linux。这依赖其实最主要的就是Glibc了。其实整个过程对我来说,在两次编译gcc的过程是最美妙的,其他的就是源码安装软件而已。
所以我就说说我对如何得到全新gcc这个过程理解。
glibc是个独立依赖的库,它只和内核提供的接口有关,不再依赖其他文件。gcc在编译软件时,可以只使用glibc完成编译过程。所以要实现整个新系 统的独立,只要用新gcc使用新的glibc。这个过程的实现是先用旧的glibc和gcc(记为glibc1、 gcc1),gcc1+glibc1=gcc2,gcc2+glibc1=glibc2,glibc2+gcc2=gcc3,gcc3+glibc2=最 终环境所需要的独立编译环境。(这个过程是否正确我不确定,待我细学后继续……)
在编译那个过程后其实就是自己装软件,最后编译内核,配置相应文件,grub,启动新系统……
我觉得要折腾就折腾前面那部分,然后看看最后的配置文件,比如rc.conf、udev等等的就可以了。全部做下来耗时,没什么意义。除非自己作精简系统。
做完这个之后,其实和安装Gentoo有点像……
讲讲我看到的一些技巧吧(给新手看的……):
- 多核电脑make的时候,可以make -jN(注:N=CPU核心数目×2+1)1,速度一般要会快很多。
- 自己编译软件时,可以把目标设成~/.bin/local/***;但是不要把对应的可执行文件目录export到PATH;而是把~/.bin/bin添加进PATH,然后把所有可执行文件链接到~/.bin/bin里面。这和最原始的包管理有点像(书说的)。
书的后半部分除了交叉编译和hurd内核和前面的有点相似外,其他的两个部分是LiveCD和USB Live OS的制作。
对于那两个Live系统的制作是很值得一看的,里面见了很多启动的细节,跟在前面编译完目标系统之后。其实在编译目标系统时,基本没什么意思。后面我觉得 更有用。后半部分主要讲了initrd和initramfs的两种辅助系统的启动方式,对于想大致了解下系统是怎么启动的(跳过引导的细节),还是很有帮 助的。至少它让你懂得如何问真正关于系统启动的问题了。以后你应该不会直接问“电脑是怎么启动的?”,而是“系统启动内核后是怎么样启动外围设备的?”。 这就是好书的作用了,它要么使你完全懂得你想要的所有细节,要么使你学会如何正确有效地提问、搜索。
在后面部分,也捡到了一些小技巧,还是供新手参考的:
-
如何在一个分区上面同时有两个挂载点?如把home和opt挂到一个分区
答案是Aufs。
- 把经常用的文件,读写非常非常密集的文件放到tempfs上,即先mount -t tmpfs tmpfs /mnt;cp
- 用镜像文件保存自己的home常用配置。
- mount -t tmpfs tempfs /mnt
- dd of=/mnt/home.img if=/dev/zero -bs=10M -count=10
- mke2fs -t ext3 /mnt/home.img
- mount -o loop /mnt/home.img /somewhere
- cp ~/* /somewhere/
这样就可以在其他电脑上快速挂载自己的配置,也不用拷贝很多文件了。只要把那个镜像带着就行。