手把手教你如何建立自己的Linux系统Word文档格式.docx
《手把手教你如何建立自己的Linux系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《手把手教你如何建立自己的Linux系统Word文档格式.docx(82页珍藏版)》请在冰点文库上搜索。
我的Blog:
如须转载请注明作者为孙海勇(冲天飞豹),并提供转载出处。
准备工作:
下载LiveCD的ISO文件(因为在制作本文时最新正式版只有6.3-r2145下载):
//ftp.osuosl.org/pub/lfs-livecd...-6.3-r2145.iso
刻录ISO文件到光盘上,如果你是用真实机器当然少不了这步,不过如果你用VMWare的话,就可以直接使用ISO文件了。
以VMWareWorkstation5.5为例(真实机器可跳过此部分)
选择File->
New->
VirtualMachine...启动向导
选择Custom,并选择New-Workstation5然后在选择Guestoperatingsystem里选择Linux,在Version里选择OtherLinux2.6.xkernel
存放目录、处理器数量和内存大小根据实际情况,建议内存不得小于128M,最好256M以上
相关知识点:
LFS-6.3采用了GCC4.1.2,如果使用128M编译GCC4.x.x话就需要使用swap了,但如果配置了256M就可以在没有swap的情况下完成编译,所以条件允许的情况下使用256M。
Networkconnection里选择Usenetworkaddresstranslation(NAT)
SCSIAdpters选择默认的LSILogic就可以了
注意点:
这里选择的磁盘类型对于最后编译内核使用选项是有影响的,我在本文的第一版中使用BusLogic来建立系统,因此这里选择使用LSILogic来用,如果使用BusLogic的话可以参考本文第一版中的内核编译选项来代替后面的内核选项部分。
选择Createanewvirtualdisk
在VirtualDiskType这步比较重要,你可以选择IDE也可以选择SCSI,但这里的选择直接影响到最后编译内核时的选项。
这里以选择IDE为例子。
如果选择了IDE,则内核的默认设置就可以支持,但如果选择了SCSI,就必须在内核中加入对SCSIAdpters的支持,因为前面选择了LSILogic,所以内核中就必须加入对LSILogic的支持,否则将无法启动,相关部分在最后的内核编译部分有说明。
不过这里我建议选择使用IDE,一方面方便驱动,另外似乎LFS-6.3-r2145尚不能支持LSILogic的SCSI磁盘,用该LiveCD启动后可能无法识别出硬盘来。
对于磁盘大小,使用4G足够编译LFS了,但如果你打算编译更多的BLFS,这里可以考虑适当的增加一些大小,如果磁盘空间比较富裕就用默认的8G好了。
完成向导后在虚拟机的界面里选择Editvirtualmachinesettings,将CD-ROM改为UseISOimage,然后选择LiveCD的ISO文件,如果你已经刻录好了光盘,将光盘放入光驱就行了。
点Startthisvirtualmachine开是虚拟机
由于虚拟盘上没有任何信息,因此将自动从LiveCD中启动,在启动过程中会出现选择时区等信息,你可以按照实际情况选择,也可以按照默认选择,简单点就是等待一会系统会自动进行选择。
这里我选择时区为Asia/Shanghai,选择本地语言为Chinese(Simplified,UTF-8),其它的都按默认选择了。
启动完成LiveCD后就开始建造自己的LFS的历程了。
这里先介绍以下两个LiveCD下的重要目录
/usr/share/LFS-BOOK-6.3-HTML目录存放的就是LFS手册了
/lfs-sources里面存放的就是建造LFS所需要的源码包,不需要到处下软件了。
磁盘分区:
输入命令:
cfdisk/dev/hda
将出现分区界面
这里可以按照你自己的需要的分区,这里我按照设置一个根分区和一个交换分区为例,交换分区占用512M,其余的全部分给根分区。
磁盘分区 作用
/dev/hda1 swap
/dev/hda2 作为目标系统根目录
保存退出后进行磁盘分区的格式化
mkswap/dev/hda1
mkfs.xfs/dev/hda2
磁盘格式化一定要在磁盘分区未进行加载前进行。
mkswap是用于将磁盘分区格式化为交换分区的命令。
这里我将/dev/hda2格式化了为Xfs格式,如果你喜欢其它格式的文件系统,你可以使用相应的命令来格式化。
注意:
这里要根据实际情况建立和设置分区,如果你不太清楚这个问题,请先不要开始,否则可能造成难以恢复的损失!
(这里只是根据VMWare里面的情况做的例子,在VMWare中相对安全些,建议初学者在虚拟机中开始。
)
如果你的内存不太大,想在编译期间就使用上交换分区的话,可使用下面的命令激活交换分区
swapon/dev/hda1
swapon用于激活交换分区
swapoff用于将激活的交换分区停用
可以通过free命令来查看当前的内存使用情况
创建LFS的“创作基地”
exportLFS=/mnt/lfs
mkdir-pv$LFS
exportLFS=/mnt/lfs这条命令的作用是为了后面引用“创作基地”的绝对路径方便而设置LFS这样的环境变量。
加载/dev/hda2到“创作基地”
mount/dev/hda2$LFS
创建必要的目录并设置属性
创建源代码编译用目录
mkdir-v$LFS/sources
chmod-va+wt$LFS/sources
chmoda+wt是将目录或文件的属性设置为1777,这样任何人都可以对其进行读写。
创建工具链目录
mkdir-v$LFS/tools
ln-sv$LFS/tools/
ln-sv$LFS/tools执行后应该会输出
`/tools'
->
`/mnt/lfs/tools'
表示正确。
上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用
创建lfs用户
groupaddlfs
useradd-s/bin/bash-glfs-m-k/dev/nulllfs
设置lfs密码,设置为空就行了,也就是输入密码的时候直接回车就成。
passwdlfs
将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录
chown-vlfs$LFS/tools
chown-vlfs$LFS/sources
登陆到lfs用户
su-lfs
这时候你会发现命令行提示符已经由#改为了$
其实如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链
建立lfs用户的环境
cat>
~/.bash_profile<
<
"
EOF"
execenv-iHOME=$HOMETERM=$TERMPS1='
\u:
\w\$'
/bin/bash
EOF
~/.bashrc<
set+h
umask022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:
/bin:
/usr/bin
exportLFSLC_ALLPATH
source~/.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
f
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='
EOF
set+h
umask022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/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.bz2
cdbinutils-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-build
cd../binutils-build
CC="
gcc-B/usr/bin/"
../binutils-2.17/configure--prefix=/tools--disable-nls--disable-werror
make
makeinstall
make-Cldclean
make-CldLIB_PATH=/tools/lib
cp-vld/ld-new/tools/bin
cd..
rm-rfbinutils-build
rm-rfbinutils-2.17
GCC-4.1.2-Pass1
tarxvf/lfs-sources/gcc-4.1.2.tar.bz2
mkdir-vgcc-build
cdgcc-build
../gcc-4.1.2/configure--prefix=/tools\
--with-local-prefix=/tools--disable-nls\
--enable-shared--enable-languages=c
makebootstrap
ln-vsgcc/tools/bin/cc
rm-rfgcc-build
rm-rfgcc-4.1.2
这里不要图省事而不删gcc-4.1.2,因为这样可能会给后面的编译产生一些意外的错误。
Linux-2.6.22.5APIHeaders
tarxvf/lfs-sources/linux-2.6.22.5.tar.bz2
cdlinux-2.6.22.5
makemrproper
makeheaders_check
makeINSTALL_HDR_PATH=destheaders_install
cp-rvdest/include/*/tools/include
rm-rflinux-2.6.22.5
Glibc-2.5.1
tarxvf/lfs-sources/glibc-2.5.1.tar.bz2
cdglibc-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
mkdir-v/tools/etc
touch/tools/etc/ld.so.conf
rm-rfglibc-build
rm-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/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}/*-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.gz
cdtcl8.4.15/unix
./configure--prefix=/tools
makeinstall-private-headers
ln-svtclsh8.4/tools/bin/tclsh
tarxvf/lfs-sources/expect-5.43.0.tar.gz
cdexpect-5.43
patch-Np1-i/lfs-sources/expect-5.43.0-spawn-1.patch
cpconfigure{,.bak}
sed'
s:
/usr/local/bin:
'
configure.bak>
configure
./configure--prefix=/tools--with-tcl=/tools/lib--with-tclinclude=/tools/include--with-x=no
makeSCRIPTS="
"
install
tarxvf/lfs-sources/dejagnu-1.4.4.tar.gz
cddejagnu-1.4.4
./configure--p