LFS linux的安装过程Word文件下载.docx
《LFS linux的安装过程Word文件下载.docx》由会员分享,可在线阅读,更多相关《LFS linux的安装过程Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
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<
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>
execenv-iHOME=$HOMETERM=$TERMPS1='
/bin/bash
EOF
set+h
umask022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:
/usr/bin
exportLFSLC_ALLPATH
source~/.bash_profile
8.检查一下
export命令查看输出,应该是
declare-xHOME="
/home/lfs"
declare-xLC_ALL="
POSIX"
declare-xLFS="
/mnt/lfs"
declare-xOLDPWD
declare-xPATH="
/tools/bin:
/usr/bin"
declare-xPS1="
\\u:
\\w\\\$"
declare-xPWD="
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-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:
'
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正确工作
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<
#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$