用LiveCD制作Linux系统包括所有代码.docx
《用LiveCD制作Linux系统包括所有代码.docx》由会员分享,可在线阅读,更多相关《用LiveCD制作Linux系统包括所有代码.docx(59页珍藏版)》请在冰豆网上搜索。
用LiveCD制作Linux系统包括所有代码
LFS-6.3采用了GCC4.1.2,如果使用128M编译GCC4.x.x话就需要使用swap了,但如果配置了256M就可以在没有swap的情况下完成编译,所以条件允许的情况下使用256M。
这里选择的磁盘类型对于最后编译内核使用选项是有影响的,你可以选择IDE也可以选择SCSI,但这里的选择直接影响到最后编译内核时的选项。
如果选择了IDE,则内核的默认设置就可以支持,但如果选择了SCSI,就必须在内核中加入对SCSIAdpters的支持,因为前面选择了LSILogic,所以内核中就必须加入对LSILogic的支持,否则将无法启动,相关部分在最后的内核编译部分有说明。
建议选择使用IDE,一方面方便驱动,另外似乎LFS-6.3-r2145尚不能支持LSILogic的SCSI磁盘,用该LiveCD启动后可能无法识别出硬盘来。
对于磁盘大小,使用4G足够编译LFS了,但如果你打算编译更多的BLFS,这里可以考虑适当的增加一些大小,如果磁盘空间比较富裕就用默认的8G好了。
启动LiveCD(LFS-6.3-r2145)
完成向导后在虚拟机的界面里选择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
/dev/hda1 作为目标系统根目录
保存退出后进行磁盘分区的格式化
代码:
mkswap/dev/hda1
mkfs.xfs/dev/hda2
磁盘格式化一定要在磁盘分区未进行加载前进行。
mkswap是用于将磁盘分区格式化为交换分区的命令。
这里我将/dev/hda2格式化了为Xfs格式,如果你喜欢其它格式的文件系统,你可以使用相应的命令来格式化。
设置SSH
ipaddradd192.168.0.80/24brd192.168.0.255deveth0
iplinkseteth0up
/etc/rc.d/init.d/sshdstart
passwdroot
使用ssh登陆liveCD
Mkfs.ext2/dev/hda1
创建LFS的“创作基地”
代码:
exportLFS=/mnt/lfs
mkdir-pv$LFS
加载/dev/hda2到“创作基地”
代码:
mount/dev/hda1$LFS
创建必要的目录并设置属性
创建源代码编译用目录
代码:
mkdir-v$LFS/sources
chmod-va+wt$LFS/sources
chmoda+wt是将目录或文件的属性设置为1777,这样任何人都可以对其进行读写。
创建工具链目录
代码:
mkdir-v$LFS/tools
ln-sv$LFS/tools/
上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用。
注意:
ln-sv$LFS/tools执行后应该会输出
`/tools'->`/mnt/lfs/tools'
创建lfs用户
代码:
groupaddlfs
useradd-s/bin/bash-glfs-m-k/dev/nulllfs
passwdlfs
chown-vlfs$LFS/tools
chown-vlfs$LFS/sources
设置lfs密码,设置为空就行了,也就是输入密码的时候直接回车就成。
将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录
登陆到lfs用户
代码:
su-lfs
这时候你会发现命令行提示符已经由#改为了$
其实如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链
建立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
这里利用了bash的环境变量的设置文件将lfs的环境设置为符合编译工具链要求的最少的环境参数
这里面最重要的就是PATH这个参数,目的是为了能够利用工具链里面的工具制作工具链:
首先查找/tools/bin下是否有需要的命令,如果没有再到/bin和/usr/bin下找,然后用/bin或/usr/bin下面的命令来帮助生成需要的命令并放在/tools/bin下,这样此消彼涨,最终可完成一个自给自足的工具链。
到此为止就可以开始工具链的制作了,不过制作LFS是一个漫长而浩大的工程,所以要一直开机直到完成有时候比较困难,特别是在机器速度比较慢的情况下,能够重新启动到最后工作的状态是很重要的。
在不同的阶段重新启动并恢复状态的步骤不完全相同,所以本文会在不同的阶段讨论重新启动恢复到工作状态的方法和步骤。
从现在开始一直到第五章结束,也就是完成Stripping中间的步骤中如果重新启动的恢复步骤:
1.重新启动计算机,并从LiveCD启动
在VMWare中因为磁盘已经有了信息了,所以会从磁盘启动,需要在启动虚拟机中的机器时按F2进入虚拟机的虚拟BIOS,然后在BOOT中设置第一启动为CD-ROM,保存退出即可。
(或在启动虚拟机中的机器时按esc直接选择从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.bz2
cdbinutils-2.17
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
大家可以注意到后面所有的解包命令均使用tarxvf来完成,而不管文件的压缩方式是bz2还是gz,这是因为较新的tar程序都具有自动识别后缀名并自动调用相应的解压缩工具的能力,所以可以不需要指定压缩方式,但对于早期的tar命令则可能不具备这个功能因此需要你根据包的压缩方式来指定,如bz2使用j,gz使用z,对应上面的binutils则是tarxvjf/lfs-sources/binutils-2.17.tar.bz2。
因LFS的LiveCD中提供的tar版本比较新,后面制作的tar版本也比较新,因此支持自动识别的能力,同时为了使文章的解压命令看起来比较统一方便维护(同样对于想制作成脚本的朋友也会比较方便)因此后面统一使用tarxvf来解压。
编译binutils建议使用一个空目录
GCC-4.1.2-Pass1
代码:
tarxvf/lfs-sources/gcc-4.1.2.tar.bz2
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
makebootstrap
ma