LFS linux的安装过程.docx

上传人:b****6 文档编号:8465365 上传时间:2023-01-31 格式:DOCX 页数:42 大小:211.46KB
下载 相关 举报
LFS linux的安装过程.docx_第1页
第1页 / 共42页
LFS linux的安装过程.docx_第2页
第2页 / 共42页
LFS linux的安装过程.docx_第3页
第3页 / 共42页
LFS linux的安装过程.docx_第4页
第4页 / 共42页
LFS linux的安装过程.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

LFS linux的安装过程.docx

《LFS linux的安装过程.docx》由会员分享,可在线阅读,更多相关《LFS linux的安装过程.docx(42页珍藏版)》请在冰豆网上搜索。

LFS linux的安装过程.docx

LFSlinux的安装过程

LFSlinux的安装过程

作者:

Joken 时间:

2009-03-27

最近,比较有时间,学了lfslinux,感觉瞒不错,可以让你更清晰的了解linux的内部文件架构,值得,不过需要花费大量的时间去编译大量的工具。

^_^

 

当做完之后,会有很大的成就感!

也有一种失落感!

^_^

 

首先介绍一下lfslinux:

LFSlinux全称为LinuxFromScratch,重点是LinuxFromScratch这个项目以及使用LFS系统带来的好处。

用户可以控制系统的所有特征,包括目录布局、脚本设置和安全设置等等。

最终的系统将从源代码直接编译生成,用户可以指定在哪里安装、为什么安装以及怎样安装每一个程序。

可以完全按照自己的需求定制他们的Linux系统,而且使用户对他们的系统有更多的控制权。

 

安装过程:

 

这里先介绍以下两个LiveCD下的重要目录

/usr/share/LFS-BOOK-6.3-HTML目录存放的就是LFS手册了

/lfs-sources里面存放的就是建造LFS所需要的源码包,不需要到处下软件了。

磁盘分区:

输入命令:

代码:

cfdisk/dev/hda

将出现分区界面

这里可以按照你自己的需要的分区,这里我按照设置一个根分区和一个交换分区为例,交换分区占用512M,其余的全部分给根分区。

磁盘分区  作用

/dev/hda1   swap

/dev/hda2 作为目标系统根目录

保存退出后进行磁盘分区的格式化

代码:

mkswap/dev/hda1mkfs.xfs/dev/hda2

相关知识点:

  磁盘格式化一定要在磁盘分区未进行加载前进行。

  mkswap是用于将磁盘分区格式化为交换分区的命令。

  这里我将/dev/hda2格式化了为Xfs格式,如果你喜欢其它格式的文件系统,你可以使用相应的命令来格式化。

如果你的内存不太大,想在编译期间就使用上交换分区的话,可使用下面的命令激活交换分区

swapon/dev/hda1

相关知识点:

  swapon用于激活交换分区

  swapoff用于将激活的交换分区停用

  可以通过free命令来查看当前的内存使用情况

创建LFS的“创作基地”

代码:

exportLFS=/mnt/lfsmkdir-pv$LFS

相关知识点:

  exportLFS=/mnt/lfs这条命令的作用是为了后面引用“创作基地”的绝对路径方便而设置LFS这样的环境变量。

加载/dev/hda2到“创作基地”

代码:

mount/dev/hda2$LFS

创建必要的目录并设置属性

创建源代码编译用目录

代码:

mkdir-v$LFS/sourceschmod-va+wt$LFS/sources

相关知识点:

  chmoda+wt是将目录或文件的属性设置为1777,这样任何人都可以对其进行读写。

创建工具链目录

代码:

mkdir-v$LFS/toolsln-sv$LFS/tools/

注意:

  ln-sv$LFS/tools执行后应该会输出

    `/tools'->`/mnt/lfs/tools'

  表示正确。

相关知识点:

  上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用

创建lfs用户

代码:

groupaddlfsuseradd-s/bin/bash-glfs-m-k/dev/nulllfs

设置lfs密码,设置为空就行了,也就是输入密码的时候直接回车就成。

代码:

passwdlfs

将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录

代码:

chown-vlfs$LFS/toolschown-vlfs$LFS/sources

登陆到lfs用户

代码:

su-lfs

这时候你会发现命令行提示符已经由#改为了$

相关知识点:

  其实如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链

建立lfs用户的环境

代码:

cat>~/.bash_profile<<"EOF"execenv-iHOME=$HOMETERM=$TERMPS1='\u:

\w\$'/bin/bashEOFcat>~/.bashrc<<"EOF"set+humask022LFS=/mnt/lfsLC_ALL=POSIXPATH=/tools/bin:

/bin:

/usr/binexportLFSLC_ALLPATHEOFsource~/.bash_profile

  这里利用了bash的环境变量的设置文件将lfs的环境设置为符合编译工具链要求的最少的环境参数

  这里面最重要的就是PATH这个参数,目的是为了能够利用工具链里面的工具制作工具链:

首先查找/tools/bin下是否有需要的命令,如果没有再到/bin和/usr/bin下找,然后用/bin或/usr/bin下面的命令来帮助生成需要的命令并放在/tools/bin下,这样此消彼涨,最终可完成一个自给自足的工具链。

  到此为止就可以开始工具链的制作了,不过制作LFS是一个漫长而浩大的工程,所以要一直开机直到完成有时候比较困难,特别是在机器速度比较慢的情况下,能够重新启动到最后工作的状态是很重要的。

在不同的阶段重新启动并恢复状态的步骤不完全相同,所以本文会在不同的阶段讨论重新启动恢复到工作状态的方法和步骤。

  从现在开始一直到第五章结束,也就是完成Stripping中间的步骤中如果重新启动的恢复步骤:

  1.重新启动计算机,并从LiveCD启动

  相关知识点:

在VMWare中因为磁盘已经有了信息了,所以会从磁盘启动,需要在启动虚拟机中的机器时按F2进入虚拟机的虚拟BIOS,然后在BOOT中设置第一启动为CD-ROM,保存退出即可。

  2.LiveCD启动过程同第一次启动选择一样。

  3.加载分区

  exportLFS=/mnt/lfs

  mkdir-pv$LFS

  mount/dev/hda2$LFS

  4.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)

  swapon/dev/hda1

  5.建立工具链的链接

  ln-sv$LFS/tools/

  6.创建lfs用户

  groupaddlfs

  useradd-s/bin/bash-glfs-m-k/dev/nulllfs

  passwdlfs

  chown-vlfs$LFS/tools

  chown-vlfs$LFS/sources

  su-lfs

  7.建立lfs用户的环境

  cat>~/.bash_profile<<"EOF"

  execenv-iHOME=$HOMETERM=$TERMPS1='\u:

\w\$'/bin/bash

  EOF

  cat>~/.bashrc<<"EOF"

  set+h

  umask022

  LFS=/mnt/lfs

  LC_ALL=POSIX

  PATH=/tools/bin:

/bin:

/usr/bin

  exportLFSLC_ALLPATH

  EOF

  source~/.bash_profile

  8.检查一下

  export命令查看输出,应该是

  declare-xHOME="/home/lfs"

  declare-xLC_ALL="POSIX"

  declare-xLFS="/mnt/lfs"

  declare-xOLDPWD

  declare-xPATH="/tools/bin:

/bin:

/usr/bin"

  declare-xPS1="\\u:

\\w\\\$"

  declare-xPWD="/home/lfs"

  declare-xSHLVL="1"

  declare-xTERM="linux"

  9.进入编译目录

  cd$LFS/sources

  基本上就恢复工作状态了。

开始工具链的制作

进入LFS包编译目录

代码:

cd$LFS/sources

Binutils-2.17-Pass1

代码:

tarxvf/lfs-sources/binutils-2.17.tar.bz2cdbinutils-2.17

相关知识点:

  大家可以注意到后面所有的解包命令均使用tarxvf来完成,而不管文件的压缩方式是bz2还是gz,这是因为较新的tar程序都具有自动识别后缀名并自动调用相应的解压缩工具的能力,所以可以不需要指定压缩方式,但对于早期的tar命令则可能不具备这个功能因此需要你根据包的压缩方式来指定,如bz2使用j,gz使用z,对应上面的binutils则是tarxvjf/lfs-sources/binutils-2.17.tar.bz2

  因LFS的LiveCD中提供的tar版本比较新,后面制作的tar版本也比较新,因此支持自动识别的能力,同时为了使文章的解压命令看起来比较统一方便维护(同样对于想制作成脚本的朋友也会比较方便)因此后面统一使用tarxvf来解压。

  接着我们需要建立一个目录,因为binutils建议使用一个空目录来编译,所以

代码:

mkdir-v../binutils-buildcd../binutils-buildCC="gcc-B/usr/bin/"../binutils-2.17/configure--prefix=/tools--disable-nls--disable-werrormakemakeinstallmake-Cldcleanmake-CldLIB_PATH=/tools/libcp-vld/ld-new/tools/bincd..rm-rfbinutils-buildrm-rfbinutils-2.17

GCC-4.1.2-Pass1

代码:

tarxvf/lfs-sources/gcc-4.1.2.tar.bz2mkdir-vgcc-buildcdgcc-buildCC="gcc-B/usr/bin/"../gcc-4.1.2/configure--prefix=/tools\--with-local-prefix=/tools--disable-nls\--enable-shared--enable-languages=cmakebootstrapmakeinstallln-vsgcc/tools/bin/cccd..rm-rfgcc-buildrm-rfgcc-4.1.2

注意:

这里不要图省事而不删gcc-4.1.2,因为这样可能会给后面的编译产生一些意外的错误。

Linux-2.6.22.5APIHeaders

代码:

tarxvf/lfs-sources/linux-2.6.22.5.tar.bz2cdlinux-2.6.22.5makemrpropermakeheaders_checkmakeINSTALL_HDR_PATH=destheaders_installcp-rvdest/include/*/tools/includecd..rm-rflinux-2.6.22.5

Glibc-2.5.1

代码:

tarxvf/lfs-sources/glibc-2.5.1.tar.bz2cdglibc-2.5.1mkdir-v../glibc-buildcd../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-selinuxmakemkdir-v/tools/etctouch/tools/etc/ld.so.confmakeinstallcd..rm-rfglibc-buildrm-rfglibc-2.5.1

相关知识点:

  这里的参数--enable-kernel=2.6.0,只是为了说明kernel的大版本,所以不需要根据实际的kernel版本来改,即使是用linux-2.6.15也一样只写2.6.0就可以了。

调整工具链

代码:

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/ldgcc-dumpspecs|sed's@^/lib/ld-linux.so.2@/tools&@g'>`dirname$(gcc-print-libgcc-file-name)`/specsGCC_INCLUDEDIR=`dirname$(gcc-print-libgcc-file-name)`/include&&find${GCC_INCLUDEDIR}/*-maxdepth0-xtyped-execrm-rvf'{}'\;&&rm-vf`grep-l"DONOTEDITTHISFILE"${GCC_INCLUDEDIR}/*`&&unsetGCC_INCLUDEDIR

相关知识点:

  工具链的调整方法有好几种,而且不同版本GCC的specs可能会有不同,但实际上都是把specs文件中的/lib/ld-linux.so.2替换成了/tools/lib/ld-linux.so.2,所以即使有些文章在调整工具链上的命令和LFS手册上的不一样也不用太奇怪,当然也可以直接用gcc-dumpspecs导出后手工直接编辑specs文件。

测试工具链的调整

echo'main(){}'>dummy.c

ccdummy.c

readelf-la.out|grep'tools'

如果输出大致如下

[Requestingprograminterpreter:

/tools/lib/ld-linux.so.2]

则表示调整成功,因为所有的库已经连接到了/tools/lib下。

rm-rfa.outdummy.c

测试工具安装

说明:

这部分将安装3个用于第六章各种源码包编译后的测试的工具,所以如果你不打算做makecheck之类的事情,那么这3个包可以不装。

Tcl-8.4.15Expect-5.43.0DejaGNU-1.4.4

代码:

tarxvf/lfs-sources/tcl8.4.15-src.tar.gzcdtcl8.4.15/unix./configure--prefix=/toolsmakemakeinstallmakeinstall-private-headersln-svtclsh8.4/tools/bin/tclshcd$LFS/sourcestarxvf/lfs-sources/expect-5.43.0.tar.gzcdexpect-5.43patch-Np1-i/lfs-sources/expect-5.43.0-spawn-1.patchcpconfigure{,.bak}sed's:

/usr/local/bin:

/bin:

'configure.bak>configure./configure--prefix=/tools--with-tcl=/tools/lib--with-tclinclude=/tools/include--with-x=nomakemakeSCRIPTS=""installcd$LFS/sourcestarxvf/lfs-sources/dejagnu-1.4.4.tar.gzcddejagnu-1.4.4./configure--prefix=/toolsmakeinstallcd..rm-rftcl8.4.15rm-rfexpect-5.43rm-rfdejagnu-1.4.4

GCC-4.1.2-Pass2

代码:

tarxvf/lfs-sources/gcc-4.1.2.tar.bz2cdgcc-4.1.2cp-vgcc/Makefile.in{,.orig}sed's@\./fixinc\.sh@-ctrue@'gcc/Makefile.in.orig>gcc/Makefile.incp-vgcc/Makefile.in{,.tmp}sed's/^XCFLAGS=$/&-fomit-frame-pointer/'gcc/Makefile.in.tmp\>gcc/Makefile.inpatch-Np1-i/lfs-sources/gcc-4.1.2-specs-1.patchmkdir-v../gcc-buildcd../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-pchmakemakeinstallcd..rm-rfgcc-buildrm-rfgcc-4.1.2

再次测试工具链的调整,以确保刚刚编译的gcc正确工作

echo'main(){}'>dummy.c

ccdummy.c

readelf-la.out|grep'tools'

如果输出大致如下

[Requestingprograminterpreter:

/tools/lib/ld-linux.so.2]

则表示调整成功,因为所有的库已经连接到了/tools/lib下。

rm-rfa.outdummy.c

Binutils-2.17-Pass2

代码:

tarxvf/lfs-sources/binutils-2.17.tar.bz2mkdir-vbinutils-buildcdbinutils-build../binutils-2.17/configure--prefix=/tools--disable-nls\--with-lib-path=/tools/libmakemakeinstallmake-Cldcleanmake-CldLIB_PATH=/usr/lib:

/libcp-vld/ld-new/tools/bincd..rm-rfbinutils-buildrm-rfbinutils-2.17

Ncurses-5.6

代码:

tarxvf/lfs-sources/ncurses-5.6.tar.gzcdncurses-5.6./configure--prefix=/tools--with-shared--without-debug--without-ada--enable-overwritemakemakeinstallcd..rm-rfncurses-5.6

Bash-3.2

代码:

tarxvf/lfs-sources/bash-3.2.tar.gzcdbash-3.2patch-Np1-i/lfs-sources/bash-3.2-fixes-5.patch./configure--prefix=/tools--without-bash-mallocmakemakeinstallln-vsbash/tools/bin/shcd..rm-rfbash-3.2

Bzip2-1.0.4

代码:

tarxvf/lfs-sources/bzip2-1.0.4.tar.gzcdbzip2-1.0.4makemakePREFIX=/toolsinstallcd..rm-rfbzip2-1.0.4

Coreutils-6.9

代码:

tarxvf/lfs-sources/coreutils-6.9.tar.bz2cdcoreutils-6.9./configure--prefix=/toolsmakemakeinstallcp-vsrc/su/tools/bin/su-toolscd..rm-rfcoreutils-6.9

Diffutils-2.8.1

代码:

tarxvf/lfs-sources/diffutils-2.8.1.tar.gzcddiffutils-2.8.1./configure--prefix=/toolsmakemakeinstallcd..rm-rfdiffutils-2.8.1

Findutils-4.2.31

代码:

tarxvf/lfs-sources/findutils-4.2.31.tar.gzcdfindutils-4.2.31./configure--prefix=/toolsmakemakeinstallcd..rm-rffindutils-4.2.31

Gawk-3.1.5

代码:

tarxvf/lfs-sources/gawk-3.1.5.tar.bz2cdgawk-3.1.5./configure--prefix=/toolscat>>config.h<<"EOF"#defineHAVE_LANGINFO_CODESET1#defineHAVE_LC_MESSAGES1EOFmakemakeinstallcd..rm-rfgawk-3.1.5

Gettext-0.16.1

代码:

tarxvf/lfs-sources/gettext-0.16.1.tar.gzcdgettext-0.16.1cdgettext-tools./configure--prefix=/tools--disable-sharedmake-Cgnulib-libmake-Csrcmsgfmtcp-vsrc/msgfmt/tools/bincd$

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1