LFS63 实录.docx
- 文档编号:23827831
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:80
- 大小:38.84KB
LFS63 实录.docx
《LFS63 实录.docx》由会员分享,可在线阅读,更多相关《LFS63 实录.docx(80页珍藏版)》请在冰豆网上搜索。
LFS63实录
几点说明:
1.本文档参考了金步国在LinuxSir上的文档和金步国先生对LFS英文文档的翻译。
2.本文档只是一个stepbystep,在LFS时,强烈建议本文档与LFS6.3英文文档同时打开以便对照查看,LFS英文文档是本文档的基础,而且上边许多原因和细节很有学习价值,在此为了简略一一略去,但并不代表没有意义,相反每一步背后的原因才是学习的关键。
3.LFS对于初学Linux的人是毒药酒,但是对于老鸟又过于简单(BLFS、CLFS或许才有实用价值),而我恰恰是介于两者中间的学习者,所以极为欢迎技术交流和拍砖:
warmbupt@,MSN:
eudaemon@livemail.tw
4.文档前边的X.X是对应英文文档的小节号,后来觉得麻烦而且没有必要就省去了。
5.建议在此基础上进行BLFS,甚至进而打造自己带有图形界面的Livecd。
Warmbupt
EmbeddedIPPBXTechnologyUndergraduateInnovationInstitution(EIUTI)
BeijingUniversityofPostsandTelecommunications
++++++++++++++++++++++++以下为正文+++++++++++++++++++++++++++
版本:
LFS-Book-6.3,使用官方的lfslivecd-x86-6.3-r2145
安装环境为:
VMWare-6.02build
虚拟机内存:
512M
虚拟机硬盘:
IDE8GB,上边已经有了一个WindowsServer2003使用了全部硬盘
(为了模仿真实情况,否则使用空虚拟机也太理想化了)
虚拟机网卡:
Host-only
虚拟机CD-ROM:
lfslivecd-x86-6.3-r2145.iso
CPU:
p-M1.6G
没有USB、串口以及声卡设备
===============================================
2.2.先准备分区:
利用分区软件ParagonPartitionManager服务器版分出一个5.5G的自由分区和
一个400MB-500MB的交换分区(注意在实际中,若你本来有Linux则可直接使
用它的Swap分区)
重启时更改下启动顺序,CDROM在硬盘前。
开机:
在boot处直接回车。
时区(Localtime):
Asia/Shanghai,然后Localtime
区域(Local):
C(默认)[因为没有中文]
键盘布局(Keyboard):
us
#cfdisk
选择Freespace那个
选择primary建立主分区
将NTFS的Boot标记去掉,然后将新建Linux分区标记为Bootable
然后按Write后键入yes写入即可。
Quit
===============================================
2.3在分区表上分区:
在hda2(这个是新建分区,要看清楚~hda3是交换分区)上建立ext3文件系统
#mke2fs–jv/dev/hda2
选择默认的记录大小即可。
创建交换分区:
mkswap/dev/hda3
===============================================
2.4挂载新的hda2分区
切换到根目录,并指定LFS环境变量(纯属为了方便操作)
#cd/
#mkdir–pv/mnt/lfs
#exportLFS=/mnt/lfs
#mount–v–text3/dev/hda2$LFS
激活交换分区:
/sbin/swapon–v/dev/hda3
===============================================
3.1复制所有将要用到的源代码和补丁,并将sources目录设置为可写和sticky模
式
#mkdir–v$LFS/sources
#chmod-va+wt$LFS/sources
#mkdir/mnt/cdrom
#mount–v/dev/cdrom/mnt/cdrom
#cp/mnt/cdrom/lfs-sources/*$LFS/sources
#umount/dev/cdrom
===============================================
4.2创建$LFS/tools目录[存放临时工具链]
#mkdir-v$LFS/tools
在宿主系统创建$LFS/tools目录的软连接(符号链接)tools,
注意:
是链接到宿主系统的根目录!
#ln-sv$LFS/tools/
===============================================
4.3添加LFS组和用户
#groupaddlfs
#useradd-s/bin/bash-glfs-m-k/dev/nulllfs
修改其密码:
#passwdlfs
密码为linuxtest(自己设的)
并且修改root密码
#passwdroot
密码为admin(自己设的)
修改$LFS/tools和$LFS/sources目录所有权
#chown–vlfs$LFS/tools
#chown–vlfs$LFS/sources
切换到lfs用户#su-lfs
===============================================
4.4设置bash工作环境
1.建立文件.bash_profile)
#cat>~/.bash_profile<<"EOF"
>execenv-iHOME=$HOMETERM=$TERMPS1='\u:
\w\$'/bin/bash
>EOF
设置bash工作环境2(建立文件.bashrc)
#cat>~/.bashrc<<"EOF"
>set+h
>umask022
>LFS=/mnt/lfs
>LC_ALL=POSIX
>PATH=/tools/bin:
/bin:
/usr/bin
>exportLFSLC_ALLPATH
>EOF
运行.bash_profile文件,以使刚刚配置的环境生效
$source~/.bash_profile
=============================
Chapter5.3.构建临时编译环境[仅包含必要的工具,用于最终的LFS系统]
----------------------------------------------------------
构建这个小系统分两步进行:
第一步是构建一个新的不依赖于宿主系统的工具链(编译器、汇编器、连接器、
库文件以及一些有用的软件)
第二个步骤是利用这个工具链去构建其它基本的工具
本章中编译的文件将安装在$LFS/tools目录下,
这些软件包编译出来是起临时作用的,我们不希望这些软件和即将建立的LFS
系统混杂在一起。
安装完每个软件包之后,删除其源文件和编译目录,除非另有特别的指令。
$cd$LFS/sources
=============================
Binutils-2.17-Pass1
-----------------------
解包
$tarxvjf$LFS/sources/binutils-2.17.tar.bz2
解包后的文件所在目录:
$LFS/sources/binutils-2.17
但是我们要用一个另外的目录来编译它,而不是在源码目录中:
$mkdir$LFS/sources/binutils-build
$cdbinutils-build
配置编译脚本
CC="gcc-B/usr/bin/"../binutils-2.17/configure--prefix=/tools--disable-nls
--disable-werror
编译和安装(并且计算SBU的时间值)
$time{make&&makeinstall;}
(P.S:
我的机器是
Real3m45.631s
User1m35.300s
Sys2m0.026s
)
为后面"锁定"glibc准备连接器脚本
$make-Cldclean
$make-CldLIB_PATH=/tools/lib
现在不能删除Binutils的编译目录和源码目录,我们在本章后面部份还要用到它
们,所以请别动它们。
------------------------------------
GCC-4.1.2-Pass1
------------------------------------
$cd$LFS/sources/
解包
$tarxvjfgcc-4.1.2.tar.bz2
解包后的文件所在目录:
$LFS/sources/gcc-pass1/gcc-4.1.2
但是我们要用一个另外的目录来编译它,而不是在源码目录中:
$mkdir-vgcc-build
$cdgcc-build
配置编译脚本
$CC="gcc-B/usr/bin/"../gcc-4.1.2/configure--prefix=/tools\
--with-local-prefix=/tools--disable-nls--enable-shared\
--enable-languages=c
编译
$time{makebootstrap;}
(P.S:
我的机器是
Real33m56.326s
User28m35.945s
Sys4m42.788s
)(手册中的9.2SBU=34m36s差不多~~,很可信的~,你要是双核什么的我就不
知道了~)
安装
$makeinstall
创建/tools/bin/cc的符号链接(软链接),因为许多程序和脚本试图运行cc而不是
gcc
$ln-sgcc/tools/bin/cc
------------------------------------
Linux-2.6.22.5APIHeaders
------------------------------------
$cd$LFS/sources/
解包
$tarxvjflinux-2.6.22.5.tar.bz2
$cdlinux-2.6.22.5
安装步骤为
makemrproper
makeheaders_check
makeINSTALL_HDR_PATH=destheaders_install
cp-rvdest/include/*/tools/include
------------------------------------
Glibc-2.5.1
------------------------------------
$cd$LFS/sources/
解包
解包后的文件所在目录:
$tarxvjf$LFS/sources/glibc-2.5.1.tar.bz2
我们要用一个另外的目录来编译它,而不是在源码目录中:
$mkdirglibc-build
$cdglibc-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
运行测试套件(出错不要紧)
$makecheck
安装,前两个命令用于修正缺少/tools/etc/ld.so.conf文件的警告
$mkdir/tools/etc
$touch/tools/etc/ld.so.conf
$makeinstall
------------------------------------
调整/测试工具连
------------------------------------
现在临时的C库已经安装好了,我们需要让本章随后编译的那些工具都连接到
这个库上。
为了实现这一目标,我们需要调整连接器脚本和编译器的specs文件。
新建连接。
#mv-v/tools/$(gcc–dumpmachine)/bin/{ld,ld-old}
#ln-sv/tools/bin/ld/tools/$(gcc–dumpmachine)/bin/ld
修正GCCspecs文件,使它指向新的动态连接器
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}/*-maxdepth0-xtyped-execrm-rvf'{}'\;&&
rm-vf`grep-l"DONOTEDITTHISFILE"${GCC_INCLUDEDIR}/*`&&
unsetGCC_INCLUDEDIR
现在来检查一下新工具链的基本功能(编译和连接)是否正常:
$cd~
$echo'main(){}'>dummy.c
$ccdummy.c
$readelf-la.out|grep':
/tools'
如果一切正常,应该不会出错,而且最后一个命令的结果是:
[Requestingprograminterpreter:
/tools/lib/ld-linux.so.2]
尤其要注意tools/lib应该是我们的动态连接器的前缀。
如果你没看到上面的结果,那么就有大问题了。
在改正之前,不要继续,因为没
什么意义。
大多数情况下,出错都是因为上面的specs文件没改对。
在确定一切正常后,删除测试文件:
$rm–vdummy.ca.out
----------------------------
Tcl-8.4.15
----------------------------
这个软件包和接下来安装的两个软件包(Expect和DejaGNU)是为了给运行GCC
和Binutils的测试程序提供支持。
即使没有运行本章中测试程序(不是必需的),运行Chapter6中的测试程序也需要
这些软件包。
$cd$LFS/sources/
解包
$tarxvzftcl-8.4.15-src.tar.bz2
配置
$cdtcl8.4.15/unix
$./configure--prefix=/tools
编译、测试并安装
$make
$TZ=UTCmaketest.(时间还是蛮久的,即使出错也没有什么大碍)
$makeinstall
安装TCL的头文件:
$makeinstall-private-headers
为tclsh创建一个必须的符号链接:
$ln-svtclsh8.4/tools/bin/tclsh
[注意]暂时不要删除tcl8.4.9的源码目录,下一个软件包需要里面的头文件。
------------------------------
Expect-5.43.0
------------------------------
$cd$LFS/sources/
解包
$tarxvzfexpect-5.43.0.tar.bz2
切换目录,打补丁
$cdexpect-5.43
$patch-Np1-i../expect-5.43.0-spawn-1.patch
配置,首先强迫配置程序使用/bin/stty以保证工具链最后的测试正确
$cpconfigure{,.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
$maketest
$makeSCRIPTS=""install
------------------------------
DejaGNU-1.4.4
------------------------------
$cd$LFS/sources/
解包
$tarxvzfdejagnu-1.4.4.tar.bz2
配置
$cddejagnu-1.4.4
$./configure--prefix=/tools
编译并安装
$makeinstall
测试:
$makecheck.
------------------------------
GCC-4.1.2-Pass2
------------------------------
$cd$LFS/sources/
运行GCC和Binutils的测试套件,先测试主系统中PTY是否设置正常:
$expect-c"spawnls"
正确的回答应当是“spawnls”
如果如果你得到“Thesystemhasnomoreptys.Askyoursystemadministratorto
createmore.”
说明主系统的PTY没设置好。
这种情况下,运行GCC和Binutils的测试套件就
没什么意义了。
为了防止fixinclude脚本污染编译环境,执行下列命令:
$cp-vgcc-4.1.2/Makefile.in{,.orig}
$sed's@\./fixinc\.sh@-ctrue@'gcc-4.1.2/Makefile.in.orig>gcc-4.1.2/Makefile.in
调整编译选项,
$cp-vgcc-4.1.2/Makefile.in{,.tmp}
$sed's/^XCFLAGS=$/&-fomit-frame-pointer/'gcc-4.1.2/Makefile.in.tmp\
>gcc-4.1.2/Makefile.in
切换目录,打补丁[这两个补丁非常重要]
$cdgcc-4.1.2/
$patch-Np1-i../gcc-4.1.2-specs-1.patch
我们要用一个另外的目录来编译它,而不是在源码目录中:
$mkdir-v../gcc-build2
$cd../gcc-build2
编译前配置
../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
测试[-k参数是让测试套件即使遇到错误也继续运行,直到完成]
$make-kcheck
查看测试结果[GCC的测试套件非常详细,基本上是肯定会出错的,这个过程相当
漫长]
安装
$makeinstall
再执行一次合理性检查
$cd..
$echo'main(){}'>dummy.c
$ccdummy.c
$readelf-la.out|grep':
/tools'
如果一切正常,应该不会出错,而且最后一个命令的结果是:
[Requestingprograminterpreter:
/tools/lib/ld-linux.so.2]
尤其要注意tools/lib应该是我们的动态连接器的前缀。
如果你没看到上面的结果,那么就有大问题了。
在改正之前,不要继续,因为没
什么意义。
在确定一切正常后,删除测试文件:
$rmdummy.ca.out
---------------------------------------
Binutils-2.15.94.0.2.2-Pass2
---------------------------------------
$cd$LFS/sources/
$mkdirbinutils-build2
$cdbinutils-build2
编译前配置
$../binutils-2.17/configure--prefix=/tools\
--disable-nls--with-lib-path=/tools/lib
编译和安装
$make
$makecheck
$makeinstall
为下一章的“再调整”阶段配置连接器
$make-Cldclean
$make-CldLIB_PATH=/usr/lib:
/lib
$cp-vld/ld-new/tools/bin
请不要删除Binutils的源码和编译目录,保持这些目录的现状,下一章还需要用
到。
---------------------------------------
Ncurses-5.6
---------------------------------------
$cd$LFS/sources
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LFS63 实录