LFS相关 LFS 是Linux From Scratch的简称,LFS 存在的一个重要原因是可以帮助人们学习 linux 系统内部是如何工作的。构建一个 LFS 系统会帮助演示是什么使 linux 运转,各种组件如何在一起互相依赖的工作。最好的事情之一通过这种学习可以获得完全根据自己的需求定制 linux 系统的能力。 LFS 的一个关键的好处是它让用户对于系统有更多的控制,而不是依赖于他人的 linux 实现。在 LFS 的世界里,你自己坐在司机的位置,掌控系统的每一个细节,比如目录布局和启动脚本配置等等。你也能掌控在哪里、为何、以及怎样安装每一个程序。有关 LFS相关的资料可以去这个链接中查找.[url]http://www.linuxfromscratch.org/[/url] 。 本文的环境为VM5.5搭建,其中分配给虚拟机的内存为256M,硬盘大小为8G,当然,真正完成后系统的大小不到600M,但是在编译时至少需要3G的空间。为了方便使用,其中的软件包可以去LFS项目中下载现成的ISO包,地址为 [url]http://kerrek.linuxfromscratch.org/pub/lfs-livecd/[/url] lfslivecd-x86-6.3-r2130.iso,当然,如果想使用更新的软件,请去相应的网站下载。这里的用的是lfslivecd-x86-6.3-r2130.iso。 由于制作的过程比较长,可能会持续好几天,如果是通过VM来做的话,可以利用它的暂停功能来保护现场,使用时间启动现场继续制作过程。 注意:这里出现的指令都是必须要输入的指令,不同于以前的文章风格。一:初始化制作环境。 在使用VM时有一个麻烦的地方,它不能从物理机器保存的文件中通过复制粘贴命令的方式来进行安装制作,而LFS有很多的编译指令或其它命令都大同小 异,本着方便至上的原因,所以开启它的网络功能,然后通过远程连接工具(Putty,SshClient)来进行指令操作。 使用光盘启动,没什么好说的,到了设置系统时间和地区时如下图所示:
1:完成后会启动到用户模式,输入下列指令用开启网络功能并设置管理员密码。注意:在设置VM虚拟机时在有关网卡的设定中请使用"桥接"模式,否则可能获取不到IP,而且局域网中还要满足可以通过DHCP的方式来获取IP。
12 | [root~] # /etc/rc.d/init.d/sshd start [root~] # passwd root |
2:通过SshClient连入主机,对硬盘执行分区操作 这里可以按照你自己的需要的分区,这里我按照设置一个根分区和一个交换分区为例,交换分区占用512M,其余的全部分给根分区,/dev/hda1为交换分区;/dev/hda2作为目标系统根目录。
1 | cfdisk /dev/hda |
保存退出后进行磁盘分区的格式化
12 | mkswap /dev/hda1 mkfs.ext3 /dev/hda2 |
3:创建相应的文件和路径。 在这里要说明的是两个LiveCD下的重要目录/usr/share/LFS-BOOK-6.3-HTML目录存放的就是LFS手册;/lfs- sources里面存放的就是建造LFS所需要的源码包,不需要到处下软件了。 具体指令的作用可以参考相关文档,这里就不做详细说明了。所创建的符号链接使得将要编译的工具链总是位于 /tools 目录下,这意味着编译器、汇编器和连接器在编译目标目录为/tools时总可以使用。
1234567 | export LFS= /mnt/lfs mkdir -pv $LFS mount /dev/hda2 $LFS mkdir - v $LFS /sources chmod - v a+wt $LFS /sources chmod - v a+wt $LFS /sources ln -sv /mnt/lfs/tools/ / |
以 root 用户登录的时候,犯一个错误就足以损坏甚至摧毁系统,因此,本章我们推荐使用一个无特权的用户来编译和安装软件包。您可以使用您自己的用户名,不过为了建 立一个干净的工作环境,建议您新建一个名为 lfs 的组,并在其中添加一个名为 lfs 的用户,我们将在安装过程中使用这个用户。
123456 | groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs passwd lfs chown - v lfs /mnt/lfs/tools/ chown - v lfs /mnt/lfs/sources/ su - lfs |
作 为 lfs 用户登录的时候,初始 shell 通常是一个登陆shell(login shell),它会首先读取宿主系统的 /etc/profile 文件(可能包含一些设置和环境变量),然后继续读取 .bash_profile 文件来完成登录初始化。.bash_profile 文件中的 exec env -i.../bin/bash 命令用完全空的环境来取代当前的环境(除了继承 HOME, TERM, PS1 变量外)。这样能保证我们的编译环境不会被宿主系统中不必要的或者有潜在危险的环境变量所影响,从而确保获得一个干净的工作环境。
1234567891011121314 | cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1= '\u:\w\$ ' /bin/bash EOF cat > ~/.bashrc << "EOF" set +h umask 022 LFS= /mnt/lfs LC_ALL=POSIX PATH= /tools/bin : /bin : /usr/bin export LFS LC_ALL PATH EOF source ~/.bash_profile export cd /mnt/lfs/sources/ |
二:构建临时编译环境。 这里的总体目标是提供一个临时环境,您可以 chroot 到这个环境,在里面构建一个干净、没有问题的目标 LFS 系统。为了尽量的与宿主系统分开,我们创建了一个自包含、自依赖的工具链。 1:Binutils第一遍 大家可以注意到后面所有的解包命令均使用tar xvf来完成,而不管文件的压缩方式是bz2还是gz,这是因为较新的tar程序都具有自动识别后缀名并自动调用相应的解压缩工具的能力,所以可以不需 要指定压缩方式因LFS的LiveCD中提供的tar版本比较新,后面制作的tar版本也比较新,因此支持自动识别的能力,同时为了使文章的解压命令
看起来比较统一方便维护(同样对于想制作成脚本的朋友也会比较方便)因此后面统一使用tar xvf来解压。
12345678910111213 | tar xvf /lfs-sources/binutils-2 .17. tar .bz2 cd binutils-2.17/ mkdir - v .. /binutils-build cd .. /binutils-build/ CC= "gcc -B/usr/bin/" .. /binutils-2 .17 /configure --prefix= /tools --disable-nls --disable-werror make make install make -C ld clean make -C ld LIB_PATH= /tools/lib/ cp - v ld /ld-new /tools/bin cd .. rm -rf binutils-build/ rm -rf binutils-2.17/ |
2:GCC第一遍
1234567891011 | tar xvf /lfs-sources/gcc-4 .1.2. tar .bz2 mkdir - v gcc-build cd gcc-build/ CC= "gcc -B/usr/bin/" .. /gcc-4 .1.2 /configure --prefix= /tools \ --with- local -prefix= /tools --disable-nls -- enable -shared -- enable -languages=c make bootstrap make install ln -sv gcc /tools/bin/cc cd .. rm -rf gcc-build/ rm -rf gcc-4.1.2/ |
3:Linux-2.6.22.5 API Headers
12345678 | tar xvf /lfs-sources/linux-2 .6.22.5. tar .bz2 cd linux-2.6.22.5/ make mrproper make headers_check make INSTALL_HDR_PATH=dest headers_install cp -rv dest /include/ * /tools/include cd .. rm -rf linux-2.6.22.5 |
4:Glibc
1234567891011121314 | tar xvf /lfs-sources/glibc-2 .5.1. tar .bz2 cd glibc-2.5.1 mkdir - v .. /glibc-build cd .. /glibc-build/ .. /glibc-2 .5.1 /configure --prefix= /tools --disable-profile \ -- enable -add-ons -- enable -kernel=2.6.0 --with-binutils= /tools/bin \ --without-gd --with-headers= /tools/include --without-selinux make mkdir - v /tools/etc touch /tools/etc/ld .so.conf make install cd .. rm -rf glibc-build/ rm -rf glibc-2.5.1/ |
5:调整并测试工具链
12345678910 | mv - v /tools/bin/ {ld,ld-old} mv - v /tools/ $(gcc -dumpmachine) /bin/ {ld,ld-old} mv - v /tools/bin/ {ld-new,ld} ln -sv /tools/bin/ld /tools/ $(gcc -dumpmachine) /bin/ld gcc -dumpspecs | sed 's@^/lib/ld-linux.so.2@/tools&@g ' > \ ` dirname $(gcc -print-libgcc- file -name)` /specs 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 |
现在,需要停下来确认新工具链的基本功能(编译和连接)是否按预期工作,运行下面的命令做一个简单的合理性检查:
12345 | echo 'main(){}' >dummy.c cc dummy.c readelf -l a.out | grep 'tools' [Requesting program interpreter: /tools/lib/ld-linux .so.2] #有这个提示才表示成功 rm -rf a.out dummy.c |
6:TCL
12345678910111213141516171819202122232425 | tar xvf /lfs-sources/tcl8 .4.15-src. tar .gz cd tcl8.4.15 /unix/ . /configure --prefix= /tools make make install make install -private-headers ln -sv tclsh8.4 /tools/bin/tclsh cd /mnt/lfs/sources/ tar xvf /lfs-sources/expect-5 .43.0. tar .gz cd expect-5.43/ patch -Np1 -i /lfs-sources/expect-5 .43.0-spawn-1.patch cp configure{,.bak} sed 's:/usr/local/bin:/bin:' configure.bak > configure . /configure --prefix= /tools --with-tcl= /tools/lib --with-tclinclude= /tools/include --with-x=no make make SCRIPTS= "" install cd $LFS /sources tar xvf /lfs-sources/dejagnu-1 .4.4. tar .gz cd dejagnu-1.4.4 . /configure --prefix= /tools make install cd .. rm -rf tcl8.4.15 rm -rf expect-5.43 rm -rf dejagnu-1.4.4 |
7:GCC第二遍
1234567891011121314151617 | tar xvf /lfs-sources/gcc-4 .1.2. tar .bz2 cd gcc-4.1.2 cp - v gcc /Makefile . in {,.orig} sed 's@\./fixinc\.sh@-ctrue@' gcc /Makefile . in .orig > gcc /Makefile . in cp - v gcc /Makefile . in {,.tmp} sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc /Makefile . in .tmp > gcc /Makefile . in patch -Np1 -i /lfs-sources/gcc-4 .1.2-specs-1.patch mkdir - v .. /gcc-build cd .. /gcc-build .. /gcc-4 .1.2 /configure --prefix= /tools --with- local -prefix= /tools \ -- enable -clocale=gnu -- enable -shared -- enable -threads=posix \ -- enable -__cxa_atexit -- enable -languages=c,c++ --disable-libstdcxx-pch make make install cd .. rm -rf gcc-build rm -rf gcc-4.1.2 |
现在,需要停下来确认GCC的基本功能(编译和连接)是否按预期工作,运行下面的命令做一个简单的合理性检查:
12345 | echo 'main(){}' >dummy.c cc dummy.c readelf -l a.out | grep 'tools' [Requesting program interpreter: /tools/lib/ld-linux .so.2] #有这个提示才表示成功 rm -rf a.out dummy.c |
8:Binutils第二遍
123456789101112 | tar xvf /lfs-sources/binutils-2 .17. tar .bz2 mkdir - v binutils-build cd binutils-build .. /binutils-2 .17 /configure --prefix= /tools --disable-nls --with-lib-path= /tools/lib make make install make -C ld clean make -C ld LIB_PATH= /usr/lib : /lib cp - v ld /ld-new /tools/bin cd .. rm -rf binutils-build rm -rf binutils-2.17 |
9:Ncurses
1234567 | tar xvf /lfs-sources/ncurses-5 .6. tar .gz cd ncurses-5.6 . /configure --prefix= /tools --with-shared --without-debug --without-ada -- enable -overwrite make make install cd .. rm -rf ncurses-5.6 |
10:Bash
123456789 | tar xvf /lfs-sources/bash-3 .2. tar .gz cd bash -3.2 patch -Np1 -i /lfs-sources/bash-3 .2-fixes-5.patch . /configure --prefix= /tools --without- bash -malloc make make install ln -vs bash /tools/bin/sh cd .. rm -rf bash -3.2 |
11:Bzip
123456 | tar xvf /lfs-sources/bzip2-1 .0.4. tar .gz cd bzip2 -1.0.4 make make PREFIX= /tools install cd .. rm -rf bzip2 -1.0.4 |
12:Coreutils
12345678 | tar xvf /lfs-sources/coreutils-6 .9. tar .bz2 cd coreutils-6.9 . /configure --prefix= /tools make make install cp - v src /su /tools/bin/su-tools cd .. rm -rf coreutils-6.9 |
13:Diffutils
1234567 | tar xvf /lfs-sources/diffutils-2 .8.1. tar .gz cd diffutils-2.8.1 . /configure --prefix= /tools make make install cd .. rm -rf diffutils-2.8.1 |
14:Findutils
1234567 | tar xvf /lfs-sources/findutils-4 .2.31. tar .bz2 cd findutils-4.2.31 . /configure --prefix= /tools make make install cd .. rm -rf findutils-4.2.31 |
15:Gawk
1234567891011 | tar xvf /lfs-sources/gawk-3 .1.5. tar .bz2 cd gawk -3.1.5 . /configure --prefix= /tools cat >> config.h << "EOF" #define HAVE_LANGINFO_CODESET 1 #define HAVE_LC_MESSAGES 1 EOF make make install cd .. rm -rf gawk -3.1.5 |
16:Gettext
123456789 | tar xvf /lfs-sources/gettext-0 .16.1. tar .gz cd gettext-0.16.1 cd gettext-tools . /configure --prefix= /tools --disable-shared make -C gnulib-lib make -C src msgfmt cp - v src /msgfmt /tools/bin cd $LFS /sources rm -rf gettext-0.16.1 |
17:Grep
1234567 | tar xvf /lfs-sources/grep-2 .5.1a. tar .bz2 cd grep -2.5.1a . /configure --prefix= /tools --disable-perl-regexp make make install cd .. rm -rf grep -2.5.1a |
18:Gzip
1234567 | tar xvf /lfs-sources/gzip-1 .3.12. tar .gz cd gzip -1.3.12 . /configure --prefix= /tools make make install cd .. rm -rf gzip -1.3.12 |
19:Make
1234567 | tar xvf /lfs-sources/make-3 .81. tar .bz2 cd make -3.81 . /configure --prefix= /tools make make install cd .. rm -rf make -3.81 |
20:Patch
1234567 | tar xvf /lfs-sources/patch-2 .5.4. tar .gz cd patch-2.5.4 . /configure --prefix= /tools make make install cd .. rm -rf patch-2.5.4 |
21:Perl
12345678910 | tar xvf /lfs-sources/perl-5 .8.8. tar .bz2 cd perl-5.8.8 patch -Np1 -i /lfs-sources/perl-5 .8.8-libc-2.patch . /configure .gnu --prefix= /tools -Dstatic_ext= 'Data/Dumper Fcntl IO POSIX' make perl utilities cp - v perl pod /pod2man /tools/bin mkdir -pv /tools/lib/perl5/5 .8.8 cp -Rv lib/* /tools/lib/perl5/5 .8.8 cd .. rm -rf perl-5.8.8 |
22:Sed
1234567 | tar xvf /lfs-sources/sed-4 .1.5. tar .gz cd sed -4.1.5 . /configure --prefix= /tools make make install cd .. rm -rf sed -4.1.5 |
23:Tar
1234567 | tar xvf /lfs-sources/tar-1 .18. tar .bz2 cd tar -1.18 . /configure --prefix= /tools make make install cd .. rm -rf tar -1.18 |
24:Textinfo
1234567 | tar xvf /lfs-sources/texinfo-4 .9. tar .bz2 cd texinfo-4.9 . /configure --prefix= /tools make make install cd .. rm -rf texinfo-4.9 |
25:Util-linux
12345678910 | tar xvf /lfs-sources/util-linux-2 .12r. tar .bz2 cd util-linux-2.12r sed -i 's@/usr/include@/tools/include@g' configure . /configure make -C lib make -C mount mount umount make -C text-utils more cp - v mount /{,u} mount text-utils /more /tools/bin cd .. rm -rf util-linux-2.12r |
26:清理系统垃圾,去掉调试符号 这一步的步骤是可选的,但如果 LFS 分区实在很小则除外;了解哪些东西是不必要的、可以删除的也是有好处的。到目前为止已经安装的可执行程序和库文件包含大约 130 MB 不必要的调试符号,运行下面的命令删除这些符号:
1234 | strip --strip-debug /tools/lib/ * strip --strip-unneeded /tools/ {,s}bin/* rm -rf /tools/ {info, man } exit |
三:构建LFS系统 我们通过 chroot 命令进入一个临时的微型 Linux 系统,并作一些最后的准备,然后开始安装软件包。在这里软件包的安装顺序应当严格遵守,以确保没有一个程序会把 /tools 作为路径硬连接到代码中。同样不要并行编译包。并行编译可能会节省时间(特别是在双CPU的机器上),但也可能造成程序包含 /tools 硬连接路径,以致在 /tools 目录被删除之后,程序无法运行。 1:改变所有者;挂载虚拟内核文件系统;进入 Chroot 环境以及创建/dev设备
12345678910111213 | chown -R root:root $LFS /tools mkdir -pv $LFS/{dev,proc,sys} mknod -m 600 $LFS /dev/console c 5 1 mknod -m 666 $LFS /dev/null c 1 3 mount - v --bind /dev $LFS /dev mount -vt devpts devpts $LFS /dev/pts mount -vt tmpfs shm $LFS /dev/shm mount -vt proc proc $LFS /proc mount -vt sysfs sysfs $LFS /sys mkdir $LFS /cdrom mount /dev/cdrom $LFS /cdrom chroot "$LFS" /tools/bin/env -i HOME= /root TERM= "$TERM" PS1= '\u:\w\$ ' \ PATH= /bin : /usr/bin : /sbin : /usr/sbin : /tools/bin /tools/bin/bash --login +h |
2:创建目录树和必要的符号链接
12345678910111213141516171819 | mkdir -pv /{bin,boot,etc /opt ,home,lib,mnt,opt} mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp mkdir -pv /usr/ {, local /}{bin,include,lib,sbin,src} mkdir -pv /usr/ {, local /}share/{doc,info,locale, man } mkdir -pv /usr/ {, local /}share/{misc,terminfo,zoneinfo} mkdir -pv /usr/ {, local /}share /man/man {1..8} for dir in /usr /usr/local ; do ln -sv share/{ man ,doc,info} $ dir done mkdir -pv /var/ {lock,log,mail,run,spool} mkdir -pv /var/ {opt,cache,lib/{misc, locate }, local } ln -sv /tools/bin/ { bash , cat , echo , grep , pwd ,stty} /bin ln -sv /tools/bin/perl /usr/bin ln -sv /tools/lib/libgcc_s .so{,.1} /usr/lib ln -sv /tools/lib/libstdc ++.so{,.6} /usr/lib ln -sv bash /bin/sh touch /etc/mtab |
3:创建 passwd, group, log 文件
123456789101112131415161718192021222324252627282930 | cat > /etc/passwd << "EOF" root:x:0:0:root: /root : /bin/bash nobody:x:99:99:Unprivileged User: /dev/null : /bin/false EOF cat > /etc/group << "EOF" root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty :x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: mail:x:34: nogroup:x:99: EOF exec /tools/bin/bash --login +h touch /var/run/utmp /var/log/ {btmp,lastlog,wtmp} chgrp - v utmp /var/run/utmp /var/log/lastlog chmod - v 664 /var/run/utmp /var/log/lastlog cd /sources export LFS= /cdrom/lfs-sources |
4:Linux Header
123456789 | tar xvf $LFS /linux-2 .6.22.5. tar .bz2 cd linux-2.6.22.5 sed -i '/scsi/d' include /Kbuild make mrproper make headers_check make INSTALL_HDR_PATH=dest headers_install cp -rv dest /include/ * /usr/include cd .. rm -rf linux-2.6.22.5 |
5:Man-pages
12345 | tar xvf $LFS /man-pages-2 .63. tar .bz2 cd man -pages-2.63 make install cd .. rm -rf man -pages-2.63 |
6:Glibc
|
7:再次调整工具链 现在,最终的 C 库已经安装好了,我们需要再次调整工具链,让随后编译的那些工具都连接到这个库上。基本上,就是把前面"调整工具链"那里做的调整给取消掉。前面的工具链 使用的库是从宿主系统的 /{,usr/}lib 转向新安装的 /tools/lib 目录。同样的,现在工具链使用的库将从临时的 /tools/lib 转向 LFS 系统最终的 /{,usr/}lib 目录。
1234567 | mv - v /tools/bin/ {ld,ld-old} mv - v /tools/ $(gcc -dumpmachine) /bin/ {ld,ld-old} mv - v /tools/bin/ {ld-new,ld} ln -sv /tools/bin/ld /tools/ $(gcc -dumpmachine) /bin/ld gcc -dumpspecs | sed -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \ -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' -e '/\*cpp:/{n;s@$@ -isystem/usr/include@}' > \ ` dirname $(gcc --print-libgcc- file -name)` /specs |
现在,需要停下来确认新工具链的基本功能(编译和连接)是否按预期工作,运行下面的命令做一个简单的合理性检查:
12345 | echo 'main(){}' >dummy.c cc dummy.c readelf -l a.out | grep 'tools' [Requesting program interpreter: /tools/lib/ld-linux .so.2] #有这个提示才表示成功 rm -rf a.out dummy.c |
8:Binutils
12345678910 | tar xvf $LFS /binutils-2 .17. tar .bz2 mkdir binutils-build cd binutils-build .. /binutils-2 .17 /configure --prefix= /usr -- enable -shared make tooldir= /usr make tooldir= /usr install cp - v .. /binutils-2 .17 /include/libiberty .h /usr/include cd .. rm -rf binutils-build rm -rf binutils-2.17 |
9:GCC
12345678910111213141516171819 | tar xvf $LFS /gcc-4 .1.2. tar .bz2 cd gcc-4.1.2 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty /Makefile . in sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc /Makefile . in sed -i 's@\./fixinc\.sh@-ctrue@' gcc /Makefile . in sed -i 's/@have_mktemp_command@/yes/' gcc /gccbug . in mkdir - v .. /gcc-build cd .. /gcc-build .. /gcc-4 .1.2 /configure --prefix= /usr --libexecdir= /usr/lib -- enable -shared \ -- enable -threads=posix -- enable -__cxa_atexit -- enable -clocale=gnu \ -- enable -languages=c,c++ make make -k check make install ln -sv .. /usr/bin/cpp /lib ln -sv gcc /usr/bin/cc cd .. rm -rf gcc-build rm -rf gcc-3.4.3 |
这里也最好是测试一下GCC,其方法和前面的测试方法一致。 10:Berkeley DB
12345678910 | tar xvf $LFS /db-4 .5.20. tar .gz cd db-4.5.20 patch -Np1 -i $LFS /db-4 .5.20-fixes-1.patch cd build_unix .. /dist/configure --prefix= /usr -- enable -compat185 -- enable -cxx make make docdir= /usr/share/doc/db-4 .5.20 install chown -Rv root:root /usr/share/doc/db-4 .5.20 cd /sources rm -rf db-4.5.20 |
11:Sed
12345678 | tar xvf $LFS /sed-4 .1.5. tar .gz cd sed -4.1.5 . /configure --prefix= /usr --bindir= /bin -- enable -html make make check make install cd .. rm -rf sed -4.1.5 |
12:E2fsprogs
123456789101112 | tar xvf $LFS /e2fsprogs-1 .40.2. tar .gz cd e2fsprogs-1.40.2 sed -i -e 's@/bin/rm@/tools&@' lib /blkid/test_probe . in mkdir - v build cd build .. /configure --prefix= /usr --with-root-prefix= "" -- enable -elf-shlibs make make check make install make install -libs cd ../.. rm -rf e2fsprogs-1.40.2 |
13:Coreutils
1234567891011121314151617181920 | tar xvf $LFS /coreutils-6 .9. tar .bz2 cd coreutils-6.9 patch -Np1 -i $LFS /coreutils-6 .9- uname -1.patch patch -Np1 -i $LFS /coreutils-6 .9-suppress_uptime_kill_su-1.patch patch -Np1 -i $LFS /coreutils-6 .9-i18n-1.patch chmod +x tests /sort/sort-mb-tests . /configure --prefix= /usr make make NON_ROOT_USERNAME=nobody check-root echo "dummy:x:1000:nobody" >> /etc/group su -tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check" sed -i '/dummy/d' /etc/group make install mv - v /usr/bin/ { cat , chgrp , chmod , chown , cp , date , dd , df , echo } /bin mv - v /usr/bin/ { false , hostname , ln , ls , mkdir , mknod , mv , pwd ,readlink, rm } /bin mv - v /usr/bin/ { rmdir ,stty, sync , true , uname } /bin mv - v /usr/bin/chroot /usr/sbin mv - v /usr/bin/ { head , sleep , nice } /bin cd .. rm -rf coreutils-6.9 |
14:Iana-etc
123456 | tar xvf $LFS /iana-etc-2 .20. tar .bz2 cd iana-etc-2.20 make make install cd .. rm -rf iana-etc-2.20 |
15:M4
12345678 | tar xvf $LFS /m4-1 .4.10. tar .bz2 cd m4-1.4.10 . /configure --prefix= /usr make make check make install cd .. rm -rf m4-1.4.10 |
16:Bison
123456789 | tar xvf $LFS /bison-2 .3. tar .bz2 cd bison-2.3 . /configure --prefix= /usr echo '#define YYENABLE_NLS 1' >> config.h make make check make install cd .. rm -rf bison-2.3 |
17:Ncurses
12345678910111213141516171819 | tar xvf $LFS /ncurses-5 .6. tar .gz cd ncurses-5.6 patch -Np1 -i $LFS /ncurses-5 .6-coverity_fixes-1.patch . /configure --prefix= /usr --with-shared --without-debug -- enable -widec make make install chmod - v 644 /usr/lib/libncurses ++w.a mv - v /usr/lib/libncursesw .so.5* /lib ln -sfv ../.. /lib/libncursesw .so.5 /usr/lib/libncursesw .so for lib in curses ncurses form panel menu ; do rm -vf /usr/lib/lib ${lib}.so ; \ echo "INPUT(-l${lib}w)" > /usr/lib/lib ${lib}.so ; ln -sfv lib${lib}w.a /usr/lib/lib ${lib}.a ; done ln -sfv libncurses++w.a /usr/lib/libncurses ++.a rm -vf /usr/lib/libcursesw .so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw .so ln -sfv libncurses.so /usr/lib/libcurses .so ln -sfv libncursesw.a /usr/lib/libcursesw .a ln -sfv libncurses.a /usr/lib/libcurses .a cd .. rm -rf ncurses-5.6 |
18:Procps
123456 | tar xvf $LFS /procps-3 .2.7. tar .gz cd procps-3.2.7 make make install cd .. rm -rf procps-3.2.7 |
19:Libtool
12345678 | tar xvf $LFS /libtool-1 .5.24. tar .gz cd libtool-1.5.24 . /configure --prefix= /usr make make check make install cd .. rm -rf libtool-1.5.24 |
20:Perl
12345678910 | tar xvf $LFS /perl-5 .8.8. tar .bz2 cd perl-5.8.8 echo "127.0.0.1 localhost $(hostname)" > /etc/hosts . /configure .gnu --prefix= /usr -Dman1dir= /usr/share/man/man1 \ -Dman3dir= /usr/share/man/man3 -Dpager= "/usr/bin/less -isR" make make test make install cd .. rm -rf perl-5.8.8 |
21:Readline
1234567891011121314 | tar xvf $LFS /readline-5 .2. tar .gz cd readline-5.2 sed -i '/MV.*old/d' Makefile. in sed -i '/{OLDSUFF}/c:' support /shlib-install patch -Np1 -i $LFS /readline-5 .2-fixes-3.patch . /configure --prefix= /usr --libdir= /lib make SHLIB_XLDFLAGS=-lncurses make install mv - v /lib/lib {readline, history }.a /usr/lib rm - v /lib/lib {readline, history }.so ln -sfv ../.. /lib/libreadline .so.5 /usr/lib/libreadline .so ln -sfv ../.. /lib/libhistory .so.5 /usr/lib/libhistory .so cd .. rm -rf readline-5.2 |
22:Zlib
12345678910111213141516 | tar xvf $LFS /zlib-1 .2.3. tar .gz cd zlib-1.2.3 . /configure --prefix= /usr --shared --libdir= /lib make make check make install rm - v /lib/libz .so ln -sfv ../.. /lib/libz .so.1.2.3 /usr/lib/libz .so make clean . /configure --prefix= /usr make make check make install chmod - v 644 /usr/lib/libz .a cd .. rm -rf zlib-1.2.3 |
23:Autoconf
12345678 | tar xvf $LFS /autoconf-2 .61. tar .bz2 cd autoconf-2.61 . /configure --prefix= /usr make make check make install cd .. rm -rf autoconf-2.61 |
24:Automake
12345678 | tar xvf $LFS /automake-1 .10. tar .bz2 cd automake-1.10 . /configure --prefix= /usr make make check make install cd .. rm -rf automake-1.10 |
25:Bash
123456789101112131415 | tar xvf $LFS /bash-3 .2. tar .gz cd bash -3.2 tar -xvf $LFS /bash-doc-3 .2. tar .gz && sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.2|" Makefile. in patch -Np1 -i $LFS /bash-3 .2-fixes-5.patch . /configure --prefix= /usr --bindir= /bin --without- bash -malloc --with-installed-readline make sed -i 's/LANG/LC_ALL/' tests /intl .tests sed -i 's@tests@& </dev/tty@' tests /run-test chown -Rv nobody ./ su -tools nobody -s /bin/bash -c "make tests" make install cd .. rm -rf bash -3.2 exec /bin/bash --login +h |
26:Bzip
123456789101112131415 | tar xvf $LFS /bzip2-1 .0.4. tar .gz cd bzip2 -1.0.4 patch -Np1 -i $LFS /bzip2-1 .0.4-install_docs-1.patch make -f Makefile-libbz2_so make clean make make PREFIX= /usr install cp - v bzip2 -shared /bin/bzip2 cp -av libbz2.so* /lib ln -sv ../.. /lib/libbz2 .so.1.0 /usr/lib/libbz2 .so rm - v /usr/bin/ {bunzip2,bzcat, bzip2 } ln -sv bzip2 /bin/bunzip2 ln -sv bzip2 /bin/bzcat cd .. rm -rf bzip2 -1.0.4 |
27:Diffutils
123456789 | tar xvf $LFS /diffutils-2 .8.1. tar .gz cd diffutils-2.8.1 patch -Np1 -i $LFS /diffutils-2 .8.1-i18n-1.patch touch man /diff .1 . /configure --prefix= /usr make make install cd .. rm -rf diffutils-2.8.1 |
28:File
1234567 | tar xvf $LFS /file-4 .21. tar .gz cd file -4.21 . /configure --prefix= /usr make make install cd .. rm -rf file -4.21 |
29:Findutils
12345678910 | tar xvf $LFS /findutils-4 .2.31. tar .gz cd findutils-4.2.31 . /configure --prefix= /usr --libexecdir= /usr/lib/findutils --localstatedir= /var/lib/locate make make check make install mv - v /usr/bin/find /bin sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb cd .. rm -rf findutils-4.2.31 |
30:Flex
12345678910111213141516 | tar xvf $LFS /flex-2 .5.33. tar .bz2 cd flex-2.5.33 . /configure --prefix= /usr make make check make install ln -sv libfl.a /usr/lib/libl .a cat > /usr/bin/lex << "EOF" #!/bin/sh # Begin /usr/bin/lex exec /usr/bin/flex -l "$@" # End /usr/bin/lex EOF chmod - v 755 /usr/bin/lex cd .. rm -rf flex-2.5.33 |
31:Grub
1234567891011 | tar xvf $LFS /grub-0 .97. tar .gz cd grub-0.97 patch -Np1 -i $LFS /grub-0 .97-disk_geometry-1.patch . /configure --prefix= /usr make make check make install mkdir - v /boot/grub cp - v /usr/lib/grub/i386-pc/stage {1,2} /boot/grub cd .. rm -rf grub-0.97 |
32:Gawk
12345678910111213 | tar xvf $LFS /gawk-3 .1.5. tar .bz2 cd gawk -3.1.5 patch -Np1 -i $LFS /gawk-3 .1.5-segfault_fix-1.patch . /configure --prefix= /usr --libexecdir= /usr/lib cat >> config.h << "EOF" #define HAVE_LANGINFO_CODESET 1 #define HAVE_LC_MESSAGES 1 EOF make make check make install cd .. rm -rf gawk -3.1.5 |
33:Gettext
12345678 | tar xvf $LFS /gettext-0 .16.1. tar .gz cd gettext-0.16.1 . /configure --prefix= /usr make make check make install cd .. rm -rf gettext-0.16.1 |
34:Grep
12345678910 | tar xvf $LFS /grep-2 .5.1a. tar .bz2 cd grep -2.5.1a patch -Np1 -i $LFS /grep-2 .5.1a-redhat_fixes-2.patch chmod +x tests /fmbtest .sh . /configure --prefix= /usr --bindir= /bin make make check make install cd .. rm -rf grep -2.5.1a |
35:Groff
123456789101112 | tar xvf $LFS /groff-1 .18.1.4. tar .gz cd groff-1.18.1.4 patch -Np1 -i $LFS /groff-1 .18.1.4-debian_fixes-1.patch sed -i -e 's/2010/002D/' -e 's/2212/002D/' \ -e 's/2018/0060/' -e 's/2019/0027/' font /devutf8/R .proto PAGE=A4 . /configure --prefix= /usr -- enable -multibyte make make install ln -sv eqn /usr/bin/geqn ln -sv tbl /usr/bin/gtbl cd .. rm -rf groff-1.18.1.4 |
36:Gzip
12345678910 | tar xvf $LFS /gzip-1 .3.12. tar .gz cd gzip -1.3.12 . /configure --prefix= /usr --bindir= /bin make make check make install mv - v /bin/ {gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin mv - v /bin/ {zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin cd .. rm -rf gzip -1.3.12 |
37:Inetutils
12345678910 | tar xvf $LFS /inetutils-1 .5. tar .gz cd inetutils-1.5 patch -Np1 -i $LFS /inetutils-1 .5-no_server_man_pages-2.patch . /configure --prefix= /usr --libexecdir= /usr/sbin --sysconfdir= /etc --localstatedir= /var \ --disable- ifconfig --disable-logger --disable-syslogd --disable-whois --disable-servers make make install mv - v /usr/bin/ping /bin cd .. rm -rf inetutils-1.5 |
38:Iproute
12345678 | tar xvf $LFS /iproute2-2 .6.20-070313. tar .gz cd iproute-2.6.20-070313 sed -i -e '/tc-bfifo.8/d' -e '/tc-pfifo.8/s/pbfifo/bfifo/' Makefile make SBINDIR= /sbin make SBINDIR= /sbin install mv - v /sbin/arpd /usr/sbin cd .. rm -rf iproute-2.6.20-070313 |
39:Kbd
12345678910 | tar xvf $LFS /kbd-1 .12. tar .bz2 cd kbd-1.12 patch -Np1 -i $LFS /kbd-1 .12-backspace-1.patch patch -Np1 -i $LFS /kbd-1 .12-gcc4_fixes-1.patch . /configure --datadir= /lib/kbd make make install mv - v /usr/bin/ {kbd_mode,openvt,setfont} /bin cd .. rm -rf kbd-1.12 |
40:Less
1234567 | tar xvf $LFS /less-406 . tar .gz cd less -406 . /configure --prefix= /usr --sysconfdir= /etc make make install cd .. rm -rf less -406 |
41:Make
12345678 | tar xvf $LFS /make-3 .81. tar .bz2 cd make -3.81 . /configure --prefix= /usr make make check make install cd .. rm -rf make -3.81 |
42:Man-db
123456789101112131415161718192021222324252627282930313233 | tar xvf $LFS /man-db-2 .4.4. tar .gz cd man -db-2.4.4 mv man /de {_DE.88591,} mv man /es {_ES.88591,} mv man /it {_IT.88591,} sed -i 's,\*_\*,??,' man /Makefile . in sed -i -e '\%\t/usr/man%d' -e '\%\t/usr/local/man%d' src /man_db .conf. in cat >> include /manconfig .h. in << "EOF" #define WEB_BROWSER "exec /usr/bin/lynx" #define COL "/usr/bin/col" #define VGRIND "/usr/bin/vgrind" #define GRAP "/usr/bin/grap" EOF patch -Np1 -i $LFS /man-db-2 .4.4-fixes-1.patch . /configure --prefix= /usr -- enable -mb-groff --disable-setuid make make install cat >> convert-mans << "EOF" #!/bin/sh -e FROM= "$1" TO= "$2" shift ; shift while [ $ # -gt 0 ] do FILE= "$1" shift iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv mv .tmp.iconv "$FILE" done EOF install -m755 convert-mans /usr/bin cd .. rm -rf man -db-2.4.4 |
43:Mktemp
123456789 | tar xvf $LFS /mktemp-1 .5. tar .gz cd mktemp-1.5 patch -Np1 -i $LFS /mktemp-1 .5-add_tempfile-3.patch . /configure --prefix= /usr --with-libc make make install make install -tempfile cd .. rm -rf mktemp-1.5 |
44:Module-init-tools
1234567891011 | tar xvf $LFS /module-init-tools-3 .2.2. tar .bz2 cd module-init-tools-3.2.2 patch -Np1 -i $LFS /module-init-tools-3 .2.2-modprobe-1.patch . /configure make check make distclean . /configure --prefix=/ -- enable -zlib make make INSTALL= install install cd .. rm -rf module-init-tools-3.2.2 |
45:Patch
1234567 | tar xvf $LFS /patch-2 .5.4. tar .gz cd patch-2.5.4 . /configure --prefix= /usr make make install cd .. rm -rf patch-2.5.4 |
46:Psmisc
123456789 | tar xvf $LFS /psmisc-22 .5. tar .gz cd psmisc-22.5 . /configure --prefix= /usr -- exec -prefix= "" make make install mv - v /bin/pstree * /usr/bin ln -sv killall /bin/pidof cd .. rm -rf psmisc-22.5 |
47:Shadow
123456789101112131415161718192021 | tar xvf $LFS /shadow-4 .0.18.1. tar .bz2 cd shadow-4.0.18.1 patch -Np1 -i $LFS /shadow-4 .0.18.1-useradd_fix-2.patch . /configure --libdir= /lib --sysconfdir= /etc -- enable -shared --without-selinux sed -i 's/groups$(EXEEXT) //' src /Makefile find man -name Makefile - exec sed -i 's/groups\.1 / /' {} \; sed -i -e 's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAByes@' \ -e 's@/var/spool/mail@/var/mail@' etc /login .defs make make install mv - v /usr/bin/passwd /bin mv - v /lib/libshadow .*a /usr/lib rm - v /lib/libshadow .so ln -sfv ../.. /lib/libshadow .so.0 /usr/lib/libshadow .so pwconv grpconv useradd -D -b /home sed -i 's/yes/no/' /etc/default/useradd passwd root cd .. rm -rf shadow-4.0.18.1 |
48:Sysklogd
12345678910111213141516171819 | tar xvf $LFS /sysklogd-1 .4.1. tar .gz cd sysklogd-1.4.1 patch -Np1 -i $LFS /sysklogd-1 .4.1-fixes-2.patch patch -Np1 -i $LFS /sysklogd-1 .4.1-8bit-1.patch make make install cat > /etc/syslog .conf << "EOF" # Begin /etc/syslog.conf auth,authpriv.* - /var/log/auth .log *.*;auth,authpriv.none - /var/log/sys .log daemon.* - /var/log/daemon .log kern.* - /var/log/kern .log mail.* - /var/log/mail .log user.* - /var/log/user .log *.emerg * # End /etc/syslog.conf EOF cd .. rm -rf sysklogd-1.4.1 |
49:Sysvinit
12345678910111213141516171819202122232425262728 | tar xvf $LFS /sysvinit-2 .86. tar .gz cd sysvinit-2.86 sed -i 's@Sending processes@& configured via/etc/inittab@g' src /init .c make -C src make -C src install cat > /etc/inittab << "EOF" # Begin /etc/inittab id :3:initdefault: si::sysinit: /etc/rc .d /init .d /rc sysinit l0:0:wait: /etc/rc .d /init .d /rc 0 l1:S1:wait: /etc/rc .d /init .d /rc 1 l2:2:wait: /etc/rc .d /init .d /rc 2 l3:3:wait: /etc/rc .d /init .d /rc 3 l4:4:wait: /etc/rc .d /init .d /rc 4 l5:5:wait: /etc/rc .d /init .d /rc 5 l6:6:wait: /etc/rc .d /init .d /rc 6 ca:12345:ctrlaltdel: /sbin/shutdown -t1 -a -r now su :S016:once: /sbin/sulogin 1:2345:respawn: /sbin/agetty tty1 9600 2:2345:respawn: /sbin/agetty tty2 9600 3:2345:respawn: /sbin/agetty tty3 9600 4:2345:respawn: /sbin/agetty tty4 9600 5:2345:respawn: /sbin/agetty tty5 9600 6:2345:respawn: /sbin/agetty tty6 9600 # End /etc/inittab EOF cd .. rm -rf sysvinit-2.86 |
50:Tar
12345678 | tar xvf $LFS /tar-1 .18. tar .bz2 cd tar -1.18 . /configure --prefix= /usr --bindir= /bin --libexecdir= /usr/sbin make make check make install cd .. rm -rf tar -1.18 |
51:Textinfo
12345678910111213141516 | tar xvf $LFS /texinfo-4 .9. tar .bz2 cd texinfo-4.9 patch -Np1 -i $LFS /texinfo-4 .9-multibyte-1.patch patch -Np1 -i $LFS /texinfo-4 .9-tempfile_fix-1.patch . /configure --prefix= /usr make make check make install make TEXMF= /usr/share/texmf install -tex cd /usr/share/info rm dir for f in * do install -info $f dir 2> /dev/null done cd /sources rm -rf texinfo-4.9 |
52:Udev
12345678910111213141516171819202122 | tar xvf $LFS /udev-113 . tar .bz2 cd udev-113 tar -xvf $LFS /udev-config-6 .3. tar .bz2 install -dv /lib/ {firmware,udev /devices/ {pts,shm}} mknod -m0666 /lib/udev/devices/null c 1 3 ln -sv /proc/self/fd /lib/udev/devices/fd ln -sv /proc/self/fd/0 /lib/udev/devices/stdin ln -sv /proc/self/fd/1 /lib/udev/devices/stdout ln -sv /proc/self/fd/2 /lib/udev/devices/stderr ln -sv /proc/kcore /lib/udev/devices/core make EXTRAS= "`echo extras/*/`" make test make DESTDIR=/ EXTRAS= "`echo extras/*/`" install cp - v etc /udev/rules .d/[0-9]* /etc/udev/rules .d/ cd udev-config-6.3 make install make install -doc make install -extra-doc cd .. install -m644 - v docs /writing_udev_rules/index .html /usr/share/doc/udev-113/index .html cd .. rm -rf udev-113 |
53:Util-linux
1234567891011 | tar xvf $LFS /util-linux-2 .12r. tar .bz2 cd util-linux-2.12r sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' -i $( grep -rl '/etc/adjtime' .) mkdir -pv /var/lib/hwclock patch -Np1 -i $LFS /util-linux-2 .12r-cramfs-1.patch patch -Np1 -i $LFS /util-linux-2 .12r-lseek-1.patch . /configure make HAVE_KILL= yes HAVE_SLN= yes make HAVE_KILL= yes HAVE_SLN= yes install cd .. rm -rf util-linux-2.12r |
54:Vim
123456789101112131415161718192021222324252627 | tar xvf $LFS /vim-7 .1. tar .bz2 tar xvf $LFS /vim-7 .1-lang. tar .gz cd vim71 patch -Np1 -i $LFS /vim-7 .1-fixes-1.patch patch -Np1 -i $LFS /vim-7 .1-mandir-1.patch echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src /feature .h . /configure --prefix= /usr -- enable -multibyte make make test make install ln -sv vim /usr/bin/vi for L in "" fr it pl ru; do ln -sv vim.1 /usr/share/man/ $L /man1/vi .1 done ln -sv .. /vim/vim71/doc /usr/share/doc/vim-7 .1 cat > /etc/vimrc << "EOF" " Begin /etc/vimrc set nocompatible set backspace=2 syntax on if (&term == "iterm" ) || (&term == "putty" ) set background=dark endif " End /etc/vimrc EOF cd .. rm -rf vim71 |
55:再次清理系统
123456789 | logout chroot $LFS /tools/bin/env -i HOME= /root TERM=$TERM PS1= '\u:\w\$ ' \ PATH= /bin : /usr/bin : /sbin : /usr/sbin /tools/bin/bash --login /tools/bin/find /{,usr/}{bin,lib,sbin} - type f - exec /tools/bin/strip --strip-debug '{}' ';' logout chroot "$LFS" /usr/bin/env -i HOME= /root TERM= "$TERM" PS1= '\u:\w\$ ' \ PATH= /bin : /usr/bin : /sbin : /usr/sbin /bin/bash --login cd /sources export LFS= /cdrom/lfs-sources/ |
56:Lfs-bootscripts
12345 | tar xvf $LFS /lfs-bootscripts-6 .3. tar .bz2 cd lfs-bootscripts-6.3 make install cd .. rm -rf lfs-bootscripts-6.3 |
57:创建相应的脚本和设备文件 其中的主机名称和网络相关的设置请根据实际的情况进行设置。不然,可能会导致网络服务使用不正常。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | cat > /etc/sysconfig/clock << "EOF" # Begin /etc/sysconfig/clock UTC=1 # End /etc/sysconfig/clock EOF cat > /etc/inputrc << "EOF" set horizontal-scroll-mode Off set meta-flag On set input-meta On set convert-meta Off set output-meta On set bell-style none "\eOd" : backward-word "\eOc" : forward-word "\e[1~" : beginning-of-line "\e[4~" : end-of-line "\e[5~" : beginning-of- history "\e[6~" : end-of- history "\e[3~" : delete-char "\e[2~" : quoted-insert "\eOH" : beginning-of-line "\eOF" : end-of-line "\e[H" : beginning-of-line "\e[F" : end-of-line EOF cat > /etc/profile << "EOF" # Begin /etc/profile export LANG=zh_CN.UTF-8 export INPUTRC= /etc/inputrc alias ls = "ls --color" export PS1= '\u:\w\$ ' # End /etc/profile EOF echo "HOSTNAME=mylinux" > /etc/sysconfig/network cat > /etc/hosts << "EOF" # Begin /etc/hosts (no network card version) 127.0.0.1 mylinux localhost # End /etc/hosts (no network card version) EOF cd /etc/sysconfig/network-devices && mkdir - v ifconfig .eth0 && cat > ifconfig .eth0 /ipv4 << "EOF" ONBOOT= yes SERVICE=ipv4-static IP=192.168.44.42 GATEWAY=192.168.44.2 PREFIX=24 BROADCAST=192.168.44.255 EOF cat > /etc/resolv .conf << "EOF" # Begin /etc/resolv.conf nameserver 192.168.42.21 nameserver 192.168.42.6 # End /etc/resolv.conf EOF cat > /etc/fstab << "EOF" # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/hda2 / ext3 defaults 1 1 /dev/hda1 swap swap pri=1 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 devpts /dev/pts devpts gid=4,mode=620 0 0 shm /dev/shm tmpfs defaults 0 0 # End /etc/fstab EOF |
58:编译内核 如果在建立虚拟机的时候是选择的BusLogic的SCSI磁盘,那么应该在Device Drivers->SCSI device support->SCSI lowleveldrivers下加入BusLogic SCSI support的支持,可以采用编译到内核来避免未用initrd脚本来加载模块而导致启动失败;如果想支持网络则应该在Device Drivers->Networking support->Ethernet (10 or 100Mbit)加入AMD PCnet32 PCI support
的支持,可以采用编译到内核也可以编译成模块的方式。
123456789101112 | cd /sources tar xvf $LFS /linux-2 .6.22.5. tar .bz2 cd linux-2.6.22.5 make mrproper make menuconfig make make modules_install cp - v arch /i386/boot/bzImage /boot/lfskernel-2 .6.22.5 cp - v System.map /boot/System .map-2.6.22.5 cp - v .config /boot/config-2 .6.22.5 install -d /usr/share/doc/linux-2 .6.22.5 cp -r Documentation/* /usr/share/doc/linux-2 .6.22.5 |
59:配置启动文件
1234567891011121314151617181920 | grub root (hd0,1) setup (hd0) quit cat > /boot/grub/menu .lst << "EOF" # Begin /boot/grub/menu.lst # By default boot the first menu entry. default 0 # Allow 30 seconds before booting the default. timeout 30 # Use prettier colors. color green /black light-green /black # The first entry is for LFS. title Clean of Linux root (hd0,1) kernel /boot/lfskernel-2 .6.22.5 root= /dev/hda2 EOF mkdir - v /etc/grub ln -sv /boot/grub/menu .lst /etc/grub logout |
四:测试 至此,自定义的Linux已可以启动使用了,如果你想加入其它的功能就自己定制使用吧,是不是觉得不是很难呢,当然,要完全的消化理解是要一定时间的,慢慢来吧,一切都会因努力而更加美好,不是吗?
本文出自 “虚拟的现实” 博客,请务必保留此出处http://waringid.blog.51cto.com/65148/67355