1.环境
虚拟机:vmware-6.5
liveCD: lfslivecd-x86-6.3-r2160.iso
2.安装
参考:http://blogold.chinaunix.net/u/13265/showart.php?id=477122
选择File->New->Virtual Machine...启动向导
选择Custom,并选择New-Workstation 5然后在选择Guest operating system里选择Linux,在
Version里选择Other Linux 2.6.x kernel
存放目录、处理器数量和内存大小根据实际情况,建议内存不得小于128M,最好256M以上
LFS-6.3采用了GCC4.1.2,如果使用128M编译GCC4.x.x话就需要使用swap了,但如果配置了256M
就可以在没有swap的情况下完成编译,所以条件允许的情况下使用256M。
Network connection里选择Use network address translation(NAT)
SCSI Adpters选择默认的LSI Logic就可以了
注意点:
这里选择的磁盘类型对于最后编译内核使用选项是有影响的,我在本文的第一版中使用BusLogic
来建立系统,因此这里选择使用LSI Logic来用,如果使用BusLogic的话可以参考本文第一版中的内核
编译选项来代替后面的内核选项部分。
选择Create a new virtual disk
在Virtual Disk Type这步比较重要,你可以选择IDE也可以选择SCSI,但这里的选择直接影响到
最后编译内核时的选项。这里以选择IDE为例子。
相关知识点:
如果选择了IDE,则内核的默认设置就可以支持,但如果选择了SCSI,就必须在内核中加入对SCSI
Adpters的支持,因为前面选择了LSI Logic,所以内核中就必须加入对LSI Logic的支持,否则将无
法启动。
不过这里我建议选择使用IDE,一方面方便驱动,另外LFS-6.3所使用的内核对于VMWare中模拟的
LSI SCSI设备驱动有问题,无法正确识别出LSI的SCSI磁盘,用该LiveCD启动后可能无法识别出硬盘来。
对于磁盘大小,使用4G足够编译LFS了,但如果你打算编译更多的BLFS,这里可以考虑适当的增加
一些大小,如果磁盘空间比较富裕就用默认的8G好了。
完成向导后在虚拟机的界面里选择Edit virtual machine settings,将CD-ROM改为Use ISO image,
然后选择LiveCD的ISO文件,如果你已经刻录好了光盘,将光盘放入光驱就行了。
点Start this virtual machine开是虚拟机
由于虚拟盘上没有任何信息,因此将自动从LiveCD中启动,在启动过程中会出现选择时区等信息,
你可以按照实际情况选择,也可以按照默认选择,简单点就是等待一会系统会自动进行选择。这里我选
择时区为Asia/Shanghai,选择本地语言为Chinese (Simplified, UTF-8),其它的都按默认选择了。
3.格式化
安装时,我选择IDE,并分了3个主分区hda1(1000M, 给swap), hda2(6000M, 制作LFS), hda3(1500M, 备用)。
# mkswap /dev/hda1
# mkfs.ext3 /dev/hda2
# mkfs.ext3 /dev/hda3
4.putty连接,方便复制、粘贴
配置网络
# net-setup 选择eth0, DHCP方式
启动sshd服务
# /etc/rc.d/init.d/sshd restart
查看IP
# ifconfig
设置秘密, 以便从远程登陆
# passwd
从宿主机上启动putty, 连接。
5.可以启用交换分区
# swapon /dev/hda1
// 暂停命令是:swapoff /dev/hda1
6.初始环境的设置
LFS环境变量
root [ ~ ]# export LFS=/mnt/lfs
创建目录
root [ ~ ]# mkdir -pv $LFS
mkdir: 已创建目录 “/mnt/lfs”
挂载hda2分区
root [ ~ ]# mount /dev/hda2 $LFS
创建源码目录,用于编译
root [ ~ ]# mkdir -v $LFS/sources
mkdir: 已创建目录 “/mnt/lfs/sources”
改变目录权限
root [ ~ ]# chmod -v a+wt $LFS/sources
“/mnt/lfs/sources” 的权限模式已更改为 1777 (rwxrwxrwt)
创建工具链目录
root [ ~ ]# mkdir -v $LFS/tools
mkdir: 已创建目录 “/mnt/lfs/tools”
创建符号连接
root [ ~ ]# ln -sv $LFS/tools /
“/tools” -> “/mnt/lfs/tools”
上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了
在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链
的正常使用。
添加 lfs 用户
root [ ~ ]# groupadd lfs
root [ ~ ]# useradd -s /bin/bash -g lfs -m -k /dev/null lfs
修改lfs用户密码,设置为空就行了,也就是输入密码的时候直接回车就成。
# passwd lfs
注意:直接在虚拟机界面中设置,不要在putty中设置
将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录
root [ ~ ]# chown -v lfs $LFS/tools
“/mnt/lfs/tools” 的所有者已更改为 lfs
root [ ~ ]# chown -v lfs $LFS/sources
“/mnt/lfs/sources” 的所有者已更改为 lfs
登陆到 lfs 用户
root [ ~ ]# su - lfs
lfs [ ~ ]$ r // 这时候你会发现命令行提示符已经由#改为了$
相关知识点:
其实如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要
防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种
意外的发生而用lfs用户来建立工具链
7.建立 lfs 用户的环境
建立 .bash_profile 文件
lfs [ ~ ]$ cat > ~/.bash_profile << "EOF"
> exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
> EOF
建立 .bashrc 文件
lfs [ ~ ]$ cat > ~/.bashrc << "EOF"
> set +h
> umask 022
> LFS=/mnt/lfs
> LC_ALL=POSIX
> PATH=/tools/bin:/bin:/usr/bin
> export LFS LC_ALL PATH
> EOF
查看
lfs [ ~ ]$ ls -a
. .. .bash_profile .bashrc
启用
lfs [ ~ ]$ source .bash_profile
lfs:~$ // 可以看到,提示符发生变化了。
这里利用了bash的环境变量的设置文件将lfs的环境设置为符合编译工具链要求的最少的环境参数
这里面最重要的就是PATH这个参数,目的是为了能够利用工具链里面的工具制作工具链:首先查找
/tools/bin下是否有需要的命令,如果没有再到/bin和/usr/bin下找,然后用/bin或/usr/bin下面的
命令来帮助生成需要的命令并放在/tools/bin下,这样此消彼涨,最终可完成一个自给自足的工具链。
8.中间重启虚拟机时,如何恢复到最后关机时的状态
到此为止就可以开始工具链的制作了,不过制作LFS是一个漫长而浩大的工程,所以要一直开机直
到完成有时候比较困难,特别是在机器速度比较慢的情况下,能够重新启动到最后工作的状态是很重要
的。在不同的阶段重新启动并恢复状态的步骤不完全相同,所以本文会在不同的阶段讨论重新启动恢复
到工作状态的方法和步骤。
从第一章--第五章结束,恢复到最后状态需要执行如下步骤:
1.重新启动计算机,并从LiveCD启动
相关知识点:在VMWare中因为磁盘已经有了信息了,所以会从磁盘启动,需要在启动虚拟机中
的机器时按F2进入虚拟机的虚拟BIOS,然后在BOOT中设置第一启动为CD-ROM,保存退出即可。
2.LiveCD启动过程同第一次启动选择一样。
3.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/hda2 $LFS
4.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/hda1
5.建立工具链的链接
ln -sv $LFS/tools /
6.创建lfs用户
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
su - lfs
7.建立lfs用户的环境
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF
source ~/.bash_profile
8.检查一下
export命令查看输出,应该是
declare -x HOME="/home/lfs"
declare -x LC_ALL="POSIX"
declare -x LFS="/mnt/lfs"
declare -x OLDPWD
declare -x PATH="/tools/bin:/bin:/usr/bin"
declare -x PS1="\\u:\\w\\\$ "
declare -x PWD="/home/lfs"
declare -x SHLVL="1"
declare -x TERM="linux"
9.进入编译目录
cd $LFS/sources
基本上就恢复工作状态了。