荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: windmoon.bbs@bbs.zju.edu.cn (风神月影), 信区: Linux
标  题: 自己搞LFS的一些心得
发信站: 浙江大学海纳百川 (Thu May 15 11:31:43 2003)
转信站: SZU!news.tiaozhan.com!news.happynet.org!ZJUBBS

这个阶段工作的主要参考是《Linux From Scratch》这份文档,下面是这份文档中讲
的思路,也是我工作的步骤。我对每一步解释一下。

1. 两个特殊符号:$LFS,SUBs:

$LFS开始是用命令export LFS=/mnt/lfs定义的,后来在用户的.bash_profile中用LFS
=/mnt/lfs来定义的,因为《LFS》中所有软件编译中都用到-prefix=$LFS/static/确
定静态系统的安装位置。

SUBs是用来衡量时间的,编译Bash时用的时间为1SUBs,这样,编译每一个软件的时
候,你就可以预料所用的时间了。

2. 划出一个空的分区,建立一个新的用户:

划出新的分区是用来存储两个系统的,中间平台(一个静态的编译平台)和目标系统
(LFS)。这个空间最小是1G,建议在2G以上,这样就不必编译完一个软件就删除源
码了。

在创建中间平台的时候要注意不要用root账号来工作,万一敲错一个命令,你装的原
来的系统就不行了。但是要保证新开的账号能访问新画出的空间中的所有资源。

3. 格式化分区,创建目录:

用ext2分区格式,格式化新的分区,挂载到/mnt/lfs目录下面。创建目录/mnt/lfs/
static和/mnt/lfs/static/src,这两个目录分别是中间平台的根目录和中间平台的
源代码目录。中间平台的所有内容都将放在目录/mnt/lfs/static中。我的分区结构
如下图:

4. 编译静态开发平台:

把Bash-2.05a、Binutils-2.13、Bzip2-1.0.2Diffutils-2.8.1、Fileutils-4.1、Find
utils
-4.1、Gawk-3.1.1、GCC-3.2、Grep-2.5、Gzip-1.2.4a、Make-3.80、Patch-2.5.4、
Sed-4.0、Sh-utils-2.0、Tar-1.13、Texinfo-4.2、Textutils-2.1、Util-linux-2
.11w这些软件的源代码复制到/mnt/lfs/static/src/目录中,用自己原来系统上的Gcc
进行编译。

为什么没有Glibc?因为所有的软件在编译的时候都是静态编译的。

为什么要这么多软件,不是只要Gcc吗?因为我们configure配置脚本中用到了这些软
件。在《LFS》中每个软件的后面会有Installation Dependencies,这里就列出了编
译,安装这个软件所要用到了其他工具。

configure过程中一般会用到下列选项:

--enable-static-link告诉编译器,这个程序用静态连接。
--prefix=$LFS/static告诉安装脚本,这个程序的安装位置。
LDFLAGS=-all-static设置Gcc的环境变量,让其静态连接。
make CC="gcc -static -s"设置Gcc的环境变量,让其静态连接。
--disable-nls:我不是很懂,大概是禁止编译器以国际标准编译(原文:This option
 disables internationalization (also known as i18n). We don't need this for
 our static programs and nls often causes problems when you're linking
statically
.)

编译过程按照《LFS》上面讲的一步一步走,一般没有什么问题,当在下一步(chroot
以后)出现自己编译的东西不能用时,多数情况是这里静态编译出的问题,解决办法
是按照说明重新静态编译,安装一次(哪个软件不行,重装哪个),也可以看源码中
的README或INSTALL说明文档,自己选择编译时候的参数。

5. 用上一步得到的静态编译平台制作目标系统(LFS)

首先是改变根目录,用chroot命令。这样,在当前控制台看来,原来的/mnt/lfs/就
成了现在的根目录,这个时候所有运行的软件都在/static/bin/下面(下面提到的“
/”没有特殊说明指原来系统上的“/mnt/static/”。所以chroot以后,至少要使环
境变量PATH=/static/bin/

改变“/”下所有文件和目录的组权限、拥有权限为0、0(指root),并在根目录下
创建必要的文件夹,注意有些文件夹创建以后要改变权限,因为做出来的LFS不是只
有root来使用。同时创建passwd、group文件,将来的LFS系统的组、用户信息就在这
两个文件里。

接下来就是创建必要的设备,这里有一个编好的脚本MAKEDEV,只要运行一下就行了
,常用到的设备都给建好了。如果发现自己机器上的某些设备这里没有考虑到,可以
自己用mknod命令来建。

最后就是安装下列软件:

Linux-2.4.19、Man-pages-1.53、Glibc-2.2.5、GCC-3.2、Zlib-1.1.4、Findutils
-4.1、Gawk-3.1.1、Ncurses-5.3、Vim-6.1、M4-1.4、Bison-1.75、Less-378、Groff
-1.18.1、Textutils-2.1、Sed-4.0、Flex-2.5.4a、Binutils-2.13、Fileutils-4.
1、Sh-utils-2.0、Gettext-0.11.5、Net-tools-1.60、Perl-5.8.0、Linux threads
-2.2.5 man pages、Texinfo-4.2、Autoconf-2.54、Automake-1.7.1、Bash-2.05a、
File-3.39、Libtool-1.4.2、Bin86-0.16.3、Bzip2-1.0.2、Ed-0.2、Kbd-1.08、Diffu
tils
-2.8.1、E2fsprogs-1.29、Grep-2.5、Gzip-1.2.4a、Man-1.5k、Lilo-22.2、Make-
3.80、Modutils-2.4.21、Netkit-base-0.17、Patch-2.5.4、Procinfo-18、Procps
-3.0.4、Psmisc-21.2、Shadow-4.0.3、Sysklogd-1.4.1、Sysvinit-2.84、Tar-1.13
、Util-linux-2.11w、LFS-Bootscripts-1.10

这些软件不是一定要装的,有些你不要的话,完全可以不装。但是上面提到的是很基
本的东西,最好是装上。同时,你如果想装其他自己想要装的软件完全可以现在装上
去,比如说KDE桌面系统。

这些软件在编译过程中都使用了动态连接,在这些软件安装以前安装了Glibc-2.2.5
,下面的软件都使用了这个库赖动态连接的。

软件安装完,要记住修改一些配置文件来配置这些软件的工作。

6. 创建或修改启动过程中用到的配置文件:

这里要修改的配置文件主要是:

/etc/sysconfig/clock、/etc/sysconfig/network、/etc/hosts、/etc/sysconfig/
network、/etc/sysconfig/network-devices/ifconfig.eth*

7. 让你的LFS启动起来:

首先创建/etc/fstab文件,系统启动时,这个文件告诉系统要挂载哪个文件系统,要
挂载哪个分区。

其次就是编译一个内核,编译内核没有什么特殊的,知道你要什么功能,你的机器上
有什么,就可以编译了。

我用的系统引导器是Grub(可能现在更多的Linux用户用的是这个引导器)要硬到你
的LFS有两种方法:

1) 把内核放到原来系统中的/boot/中,不用在新的分区上装引导器,配置一下menu
.lst就可以启动了。
2) 在新的分区上安装Grub,把内核放在LFS系统中的/boot/中,配置一下新安装的
Grub。

我用的是第一种方法。

8. 清理现场:

现在,我们的LFS已经能启动起来了,大功告成。/static/下面的内容已经没有什么
用了(要是以后还想再搞LFS可以放在那里)。删掉/static/里面的内容以后,大概
还有640MB(包括内核193MB)

详细列表如下:

bin 13400kb
dev 56kb
home 4kb
lost+found 16kb
opt 60kb
root 28kb
static 248644kb
usr 613000kb
->src 193284kb
->bin 40464kb
->include 16376kb
->lib 257328kb
->local 75656kb
->sbin 1588kb
->share 96424kb
->.....
boot 3284kb
sbin 8768kb



--
※ 来源:·浙江大学海纳百川站 bbs.zju.edu.cn·[FROM: windmoon]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店