首页 > 开发 > 综合 > 正文

Linux From Scratch 的一些心得

2024-07-21 02:36:51
字体:
来源:转载
供稿:网友

  摘要
  相信大家肯定听说过LFS(linux From Scratch)大家有没有自己搞过呢?我花了一个多星期的课余时间,在我的Celeron 366上搞了起来,这个是我工作完成后的一些心得,大家可以做个参考
  这个阶段工作的主要参考是《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、Findutils-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、Diffutils-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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表