+-----------------------------------------------------------------------------+
| 第一部分 文档说明 |
+-----------------------------------------------------------------------------+
1 作用
##########
nALFS配置相关笔记(位于工作站上的实验)
2 版权
######
版权: 聂大鹏(dozec)
3.2 作者
========
3.2.1 作者1
-----------
姓名: 聂大鹏
email: dozec@mail.csdn.net
4 产生时间
##########
时间: 2007-2-9
5 版本
######
版本: 0.1 版
6 修订过程
##########
6.1 第0.1版
===========
+-----------------------------------------------------------------------------+
| 第二部分 文档正文 |
+-----------------------------------------------------------------------------+
1 实验环境
##########
工作站: RHEL4
Linux version 2.6.14.7
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3))
CPU: Pentium 1.7G
Memory: 256MB
装LFS根分区: /dev/hdd1 (hdd是一块4.3G硬盘)
swap分区: /dev/hdd2
/dev/hdd1 1 427 3429846 83 Linux
/dev/hdd2 428 524 779152+ 82 Linux swap
2 笔记
######
2.0 格式化/dev/hdd1与/dev/hdd2
==============================
nALFS不能帮我们完成分区及格式化, 需要我们自己手动完成.
并且需要我们自己挂载. (其实可以修改profileXML配置文件来达到执行fdisk分区
及格式化,挂载文件系统自动化)
[root@hellokitty mnt]# mkfs.ext2 /dev/hdd1
[root@hellokitty mnt]# mkswap /dev/hdd2
[root@hellokitty ~]# mount /dev/hdd1 /mnt/lfs
2.1 nALFS说明
=============
nALFS的安装详见安装包内README. 其是通过读取指定XML配置文件所描述的action sequence
来执行命令的. LFS-6.1.1目录(从profile-LFS-edition.tar.bz2)下包含有执行LFS6.1.1安装
的所有XML文件. 但仍需要有一些文件需要我们提前来配置, 2.2节将主要阐述哪些文件需要配置.
在下载profile, 使用的是profile-LFS-6.1.1.tar.bz2.好几个类似的.
2.2 配置profile-LFS-6.1.1
===========================
2.1.1 总体说明
------------
把profile-LFS-6.1.1.tar.bz2解压后生成LFS-6.1.1/目录.
该目录中主要有config/skeleton两个目录需要我们来配置.
2.1.2
-----
[nie@hellokitty LFS-6.1.1]$ vi config/general.ent
以下仅对修改项目或者重要项目进行说明:
<!ENTITY LFS "/mnt/lfs"> 指明目标根文件系统挂载点
挂载设备到/mnt/lfs需要我们手动来完成.然后先能执行
nALFS
<!ENTITY orig_packages_dir "/var/ftp/pub/lfs_source/">
软件包所在目录.
<!ENTITY localtime "/usr/share/zoneinfo/Asia/Shanghai">
时区设置
<!ENTITY lfs-user "lfs"> 创建系统时所使用的临时用户,如果不存在将会自动创建
<!ENTITY lfs-password "lfs"> 密码.
<!ENTITY password "root"> 设定目标LFS系统的root密码
<!ENTITY LFS-version "6.1">
<!ENTITY TERM "xterm"> 与终端的$TERM应一致.
在xwindow当中echo $TERM为 : xterm
在文本终端当中echo $TERM为: linux
***非常重要,配置不对将无法继续进行.
<!-- grub settings (these need to be in grub's notation) -->
<!ENTITY grub-root "hd0,0"> 指明grub的root分区
<!ENTITY grub-install-location "hd1">
指明grub安装位置
说明: grub的root分区指的就是存在有kernel/initrd的分区,它可能是根分区
也可能是/boot分区,也可能是其它.
grub对于分区是linux当中的分区号-1, <hd0, 0>指的就是相应盘上的第1个分区.
实验说明: 宿主系统位于/dev/hda上, 而LFS根文件系统装在/dev/hdd上.
当LFS装完之后,我会把/dev/hda取下,以使/dev/hdd能够引导系统至新装LFS.
此时由于只有一块硬盘,grub会把它映射为(hd0,0)==> hd0 : /dev/hdd
,0 : 第1个分区
总结: GRUB当中,对于<hd1,0>这种表示方法,分区肯定是照Linux当中分区表示-1.
但hd1不一定对应于/dev/hdb. 这是因为grub对于设备的表示依赖于设备映射.
如果系统当中有一块硬盘(/dev/hda in linux), 会映射为hd0.
如果系统当中有两块硬盘(/dev/hdd in linux), 第二块会映射为hd1.
另外,默认情况下grub是不会安装到你指定的位置的,需要修改chapter08/grub.xml
将注释的grub安装命令不注释从而执行就OK.
<!-- Uncomment the following if you wish to allow grub to install itself automatically.-->
<!-- If uncommenting remove the space between the two dashes (- -) in order for the
command to work properly -->
<execute command="grub --batch">
<prefix>echo -e "root (&grub-root;)/nsetup (&grub-install-location;)/nquit" | </prefix>
<param>1>/dev/null</param>
<param>2>/dev/null</param>
</execute>
2.1.3
-----
拷贝一个内核配置文件(make menuconfig生成的.config)到skeleton下
,并重命名为linux-kernel-config. 我已经有一个备份的了, 直接copy就OK.
nALFS最后会以此config作为内核的配置来编译生成内核.
[nie@hellokitty LFS-6.1-1]$ cd skeleton/
[nie@hellokitty skeleton]$ cp ~/dev_home/graduation_paper/linux-2.6.14.7-/bak/target/config linux-kernel-config
2.1.4
-----
[nie@hellokitty skeleton]$ vi boot/grub/menu.lst
kernel /boot/lfskernel-[linux-version] root=/dev/hdd1
这是传给kernel的命令行参数, 故使用/dev/hdd1, 与grub的表示方法不同.
[nie@hellokitty skeleton]$ cd etc
[nie@hellokitty etc]$ vi fstab
/dev/hdd1 / ext3 defaults 1 1
/dev/hdd2 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
/dev/hdd1与/dev/hdd2两个分区要明确出来.
[nie@hellokitty etc]$ vi hosts
仅留一行
127.0.0.1 localhost hellokitty #加入这个主机名
[nie@hellokitty etc]$ vi sysconfig/network
HOSTNAME=hellokitty
[nie@hellokitty etc]$ vi sysconfig/network-devices/ifconfig.eth0/ipv4
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.2
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.1
2.1.5 关于package.ent
---------------------
package.ent里面包含有LFS当中所用的所用软件包release和name. 有时候会和LiveCD
当中的source tar不一样, 修改一下. 下面仅是例子, 需要根据实际情况来进行修改.
[root@hellokitty config]# vi package.ent
<!ENTITY perl-version "5.8.7">
<!ENTITY udev-rules-version "4">
<!ENTITY vim-security-patch "vim-&vim-version;-security_fix-2.patch">
<!ENTITY zlib-version "1.2.3">
通常改了软件包edition后, 相应的digest通常是错的.
可以通过# md5sum packet 来获得相应的md5 digest, 然后去修改package.ent当中相应
软件包的md5 digest就可. 需要重新启动nALFS以使新的md5 digest让nALFS重新读取.
另外, 在package.ent里有的时候会缺少相应补丁的项, 例如: 当nALFS出下如下项后
│-: patch: **** read error : Is a directoryc-linuxthreads-2.3.4.tar.bz2. ││E: Patching failed. -i /tools/packages-6.1/nts): glibc-build
检查了cha6/glibc.xml里, 发现打了3个补丁:
glibc-2.3.4-rtld_search_dirs-1.patch
glibc-2.3.4-fix_test-1.patch
glibc-2.3.4-tls_assert-1.patch
但package.ent里却只有一个补丁项的说明, 从而导致copy到/tools下的也仅有这一个补丁
修改后的package.ent如下:
原有的补丁项:
<!ENTITY glibc-fix-testsuite-patch "glibc-&glibc-version;&glibc-cvs-tag;-fix_test-1.patch">
追加的补丁项:
<!ENTITY glibc-rtld-search-dirs-patch "glibc-&glibc-version;&glibc-cvs-tag;-rtld_search_dirs-1.patch">
<!ENTITY glibc-tls-assert-patch "glibc-&glibc-version;&glibc-cvs-tag;-tls_assert-1.patch">
|---------------------|
这个名字需要查看cha6/glibc.xml相就的项才能确定, 因为这里定义的值最后会被替换
到cha6/glibc.xml当中 , 所以要一致.
在第6章执行到BASH时,出现如下错误
E: Unknown archive (/tools/packages-6.1/).
E: Unpacking /tools/packages-6.1/ failed.
经检查和对照LFS-6.1.1文档发现: 文档当中一个建议性的可选的bash-doc包在profile当中的成为
了必须的选项, 把这个包从xml当中注释掉就可
# vi chapter05/bash.xml
<stage name="Unpacking">
<unpack>
<digest>&bash-md5;</digest>
<archive>&packages_dir;/&bash-package;</archive>
<destination>&build_dir;</destination>
</unpack>
<!-- HERE...
<unpack>
<digest>&bash-docs-md5;</digest>
<archive>&packages_dir;/&bash-docs-package;</archive>
<destination>&build_dir;/&bash-directory;</destination>
</unpack>
-->
</stage>
2.1.6
-----
Execute "./runit.sh {skeleton}" as root, providing the name of the
directory you created in step 3. Please note that if you have installed
nALFS into a location other than /usr/local/bin you will need to edit
runit.sh to point to your copy of nALFS.
[nie@hellokitty LFS-6.1-1]$ pwd
/home/nie/dev_home/graduation_paper/nALFS/LFS-6.1-1
[nie@hellokitty LFS-6.1-1]$ su -
Password:
__/etc/profile
__/etc/bashrc
[root@hellokitty ~]# cd /home/nie/dev_home/graduation_paper/nALFS/LFS-6.1-1
[root@hellokitty LFS-6.1-1]# ./runit.sh skeleton
2.1.7
-----
./runit.sh skeleton之后, 按s会可能出现的4个选项.
需要说明是: 我们使用的xml配置文件当中存在一个树型的关系
LFS.xml (树顶)
|
|-- 各章节的xml
|
|-- 各章节当中相应软件包或者命令的xml
当我们处于树顶LFS.xml时, 可以直接按n来向下执行.
m - Run only marked elements. You can mark elements by pressing
'Insert' or '*'. It doesn't matter whether they are already
successfully executed or not - all marked elements will run
again.
c - Run only the current element and its children. Elements marked
with '#' will be skipped.
n - Run current element, its children, and all the elements below
the current (on the same level/depth). Elements marked with
'#' will be skipped.
f - Force running of current element and its children. Elements
marked with '#' will also be executed.
另外当安装哪个包失败之后, 经过调试修改之后, 可以按m将树型中的已经执行过的项设置为#
代表已经执行成功. 然后重回LFS.xml树顶, 执行s, n. 便可以skip已经执行项, 而去执行新项.
2.1.8
------
下面的文件描述了创建tools目录,以及向其中的packages-6.1目录拷贝软件包.
chapter05/creatingtoolsdir.xml
问题出现在拷贝软件包的描述不完整, 有一些软件包/补丁并没有说明,从而导致没有
被copy到packages-6.1目录中.例如: libxml2 nALFS 需要我们手动向里添加.
2.1.9
-----
关于GURB的问题:
执行 # grub-install /dev/hdd 会出现如下错误:
'/dev/hdd does not have any corresponding BIOS drive.'
解决方法:
# grub-install --recheck /dev/hdd
# grub-install /dev/hdd
3 参考文档
##########
| 第一部分 文档说明 |
+-----------------------------------------------------------------------------+
1 作用
##########
nALFS配置相关笔记(位于工作站上的实验)
2 版权
######
版权: 聂大鹏(dozec)
3.2 作者
========
3.2.1 作者1
-----------
姓名: 聂大鹏
email: dozec@mail.csdn.net
4 产生时间
##########
时间: 2007-2-9
5 版本
######
版本: 0.1 版
6 修订过程
##########
6.1 第0.1版
===========
+-----------------------------------------------------------------------------+
| 第二部分 文档正文 |
+-----------------------------------------------------------------------------+
1 实验环境
##########
工作站: RHEL4
Linux version 2.6.14.7
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3))
CPU: Pentium 1.7G
Memory: 256MB
装LFS根分区: /dev/hdd1 (hdd是一块4.3G硬盘)
swap分区: /dev/hdd2
/dev/hdd1 1 427 3429846 83 Linux
/dev/hdd2 428 524 779152+ 82 Linux swap
2 笔记
######
2.0 格式化/dev/hdd1与/dev/hdd2
==============================
nALFS不能帮我们完成分区及格式化, 需要我们自己手动完成.
并且需要我们自己挂载. (其实可以修改profileXML配置文件来达到执行fdisk分区
及格式化,挂载文件系统自动化)
[root@hellokitty mnt]# mkfs.ext2 /dev/hdd1
[root@hellokitty mnt]# mkswap /dev/hdd2
[root@hellokitty ~]# mount /dev/hdd1 /mnt/lfs
2.1 nALFS说明
=============
nALFS的安装详见安装包内README. 其是通过读取指定XML配置文件所描述的action sequence
来执行命令的. LFS-6.1.1目录(从profile-LFS-edition.tar.bz2)下包含有执行LFS6.1.1安装
的所有XML文件. 但仍需要有一些文件需要我们提前来配置, 2.2节将主要阐述哪些文件需要配置.
在下载profile, 使用的是profile-LFS-6.1.1.tar.bz2.好几个类似的.
2.2 配置profile-LFS-6.1.1
===========================
2.1.1 总体说明
------------
把profile-LFS-6.1.1.tar.bz2解压后生成LFS-6.1.1/目录.
该目录中主要有config/skeleton两个目录需要我们来配置.
2.1.2
-----
[nie@hellokitty LFS-6.1.1]$ vi config/general.ent
以下仅对修改项目或者重要项目进行说明:
<!ENTITY LFS "/mnt/lfs"> 指明目标根文件系统挂载点
挂载设备到/mnt/lfs需要我们手动来完成.然后先能执行
nALFS
<!ENTITY orig_packages_dir "/var/ftp/pub/lfs_source/">
软件包所在目录.
<!ENTITY localtime "/usr/share/zoneinfo/Asia/Shanghai">
时区设置
<!ENTITY lfs-user "lfs"> 创建系统时所使用的临时用户,如果不存在将会自动创建
<!ENTITY lfs-password "lfs"> 密码.
<!ENTITY password "root"> 设定目标LFS系统的root密码
<!ENTITY LFS-version "6.1">
<!ENTITY TERM "xterm"> 与终端的$TERM应一致.
在xwindow当中echo $TERM为 : xterm
在文本终端当中echo $TERM为: linux
***非常重要,配置不对将无法继续进行.
<!-- grub settings (these need to be in grub's notation) -->
<!ENTITY grub-root "hd0,0"> 指明grub的root分区
<!ENTITY grub-install-location "hd1">
指明grub安装位置
说明: grub的root分区指的就是存在有kernel/initrd的分区,它可能是根分区
也可能是/boot分区,也可能是其它.
grub对于分区是linux当中的分区号-1, <hd0, 0>指的就是相应盘上的第1个分区.
实验说明: 宿主系统位于/dev/hda上, 而LFS根文件系统装在/dev/hdd上.
当LFS装完之后,我会把/dev/hda取下,以使/dev/hdd能够引导系统至新装LFS.
此时由于只有一块硬盘,grub会把它映射为(hd0,0)==> hd0 : /dev/hdd
,0 : 第1个分区
总结: GRUB当中,对于<hd1,0>这种表示方法,分区肯定是照Linux当中分区表示-1.
但hd1不一定对应于/dev/hdb. 这是因为grub对于设备的表示依赖于设备映射.
如果系统当中有一块硬盘(/dev/hda in linux), 会映射为hd0.
如果系统当中有两块硬盘(/dev/hdd in linux), 第二块会映射为hd1.
另外,默认情况下grub是不会安装到你指定的位置的,需要修改chapter08/grub.xml
将注释的grub安装命令不注释从而执行就OK.
<!-- Uncomment the following if you wish to allow grub to install itself automatically.-->
<!-- If uncommenting remove the space between the two dashes (- -) in order for the
command to work properly -->
<execute command="grub --batch">
<prefix>echo -e "root (&grub-root;)/nsetup (&grub-install-location;)/nquit" | </prefix>
<param>1>/dev/null</param>
<param>2>/dev/null</param>
</execute>
2.1.3
-----
拷贝一个内核配置文件(make menuconfig生成的.config)到skeleton下
,并重命名为linux-kernel-config. 我已经有一个备份的了, 直接copy就OK.
nALFS最后会以此config作为内核的配置来编译生成内核.
[nie@hellokitty LFS-6.1-1]$ cd skeleton/
[nie@hellokitty skeleton]$ cp ~/dev_home/graduation_paper/linux-2.6.14.7-/bak/target/config linux-kernel-config
2.1.4
-----
[nie@hellokitty skeleton]$ vi boot/grub/menu.lst
kernel /boot/lfskernel-[linux-version] root=/dev/hdd1
这是传给kernel的命令行参数, 故使用/dev/hdd1, 与grub的表示方法不同.
[nie@hellokitty skeleton]$ cd etc
[nie@hellokitty etc]$ vi fstab
/dev/hdd1 / ext3 defaults 1 1
/dev/hdd2 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
/dev/hdd1与/dev/hdd2两个分区要明确出来.
[nie@hellokitty etc]$ vi hosts
仅留一行
127.0.0.1 localhost hellokitty #加入这个主机名
[nie@hellokitty etc]$ vi sysconfig/network
HOSTNAME=hellokitty
[nie@hellokitty etc]$ vi sysconfig/network-devices/ifconfig.eth0/ipv4
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.2
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.1
2.1.5 关于package.ent
---------------------
package.ent里面包含有LFS当中所用的所用软件包release和name. 有时候会和LiveCD
当中的source tar不一样, 修改一下. 下面仅是例子, 需要根据实际情况来进行修改.
[root@hellokitty config]# vi package.ent
<!ENTITY perl-version "5.8.7">
<!ENTITY udev-rules-version "4">
<!ENTITY vim-security-patch "vim-&vim-version;-security_fix-2.patch">
<!ENTITY zlib-version "1.2.3">
通常改了软件包edition后, 相应的digest通常是错的.
可以通过# md5sum packet 来获得相应的md5 digest, 然后去修改package.ent当中相应
软件包的md5 digest就可. 需要重新启动nALFS以使新的md5 digest让nALFS重新读取.
另外, 在package.ent里有的时候会缺少相应补丁的项, 例如: 当nALFS出下如下项后
│-: patch: **** read error : Is a directoryc-linuxthreads-2.3.4.tar.bz2. ││E: Patching failed. -i /tools/packages-6.1/nts): glibc-build
检查了cha6/glibc.xml里, 发现打了3个补丁:
glibc-2.3.4-rtld_search_dirs-1.patch
glibc-2.3.4-fix_test-1.patch
glibc-2.3.4-tls_assert-1.patch
但package.ent里却只有一个补丁项的说明, 从而导致copy到/tools下的也仅有这一个补丁
修改后的package.ent如下:
原有的补丁项:
<!ENTITY glibc-fix-testsuite-patch "glibc-&glibc-version;&glibc-cvs-tag;-fix_test-1.patch">
追加的补丁项:
<!ENTITY glibc-rtld-search-dirs-patch "glibc-&glibc-version;&glibc-cvs-tag;-rtld_search_dirs-1.patch">
<!ENTITY glibc-tls-assert-patch "glibc-&glibc-version;&glibc-cvs-tag;-tls_assert-1.patch">
|---------------------|
这个名字需要查看cha6/glibc.xml相就的项才能确定, 因为这里定义的值最后会被替换
到cha6/glibc.xml当中 , 所以要一致.
在第6章执行到BASH时,出现如下错误
E: Unknown archive (/tools/packages-6.1/).
E: Unpacking /tools/packages-6.1/ failed.
经检查和对照LFS-6.1.1文档发现: 文档当中一个建议性的可选的bash-doc包在profile当中的成为
了必须的选项, 把这个包从xml当中注释掉就可
# vi chapter05/bash.xml
<stage name="Unpacking">
<unpack>
<digest>&bash-md5;</digest>
<archive>&packages_dir;/&bash-package;</archive>
<destination>&build_dir;</destination>
</unpack>
<!-- HERE...
<unpack>
<digest>&bash-docs-md5;</digest>
<archive>&packages_dir;/&bash-docs-package;</archive>
<destination>&build_dir;/&bash-directory;</destination>
</unpack>
-->
</stage>
2.1.6
-----
Execute "./runit.sh {skeleton}" as root, providing the name of the
directory you created in step 3. Please note that if you have installed
nALFS into a location other than /usr/local/bin you will need to edit
runit.sh to point to your copy of nALFS.
[nie@hellokitty LFS-6.1-1]$ pwd
/home/nie/dev_home/graduation_paper/nALFS/LFS-6.1-1
[nie@hellokitty LFS-6.1-1]$ su -
Password:
__/etc/profile
__/etc/bashrc
[root@hellokitty ~]# cd /home/nie/dev_home/graduation_paper/nALFS/LFS-6.1-1
[root@hellokitty LFS-6.1-1]# ./runit.sh skeleton
2.1.7
-----
./runit.sh skeleton之后, 按s会可能出现的4个选项.
需要说明是: 我们使用的xml配置文件当中存在一个树型的关系
LFS.xml (树顶)
|
|-- 各章节的xml
|
|-- 各章节当中相应软件包或者命令的xml
当我们处于树顶LFS.xml时, 可以直接按n来向下执行.
m - Run only marked elements. You can mark elements by pressing
'Insert' or '*'. It doesn't matter whether they are already
successfully executed or not - all marked elements will run
again.
c - Run only the current element and its children. Elements marked
with '#' will be skipped.
n - Run current element, its children, and all the elements below
the current (on the same level/depth). Elements marked with
'#' will be skipped.
f - Force running of current element and its children. Elements
marked with '#' will also be executed.
另外当安装哪个包失败之后, 经过调试修改之后, 可以按m将树型中的已经执行过的项设置为#
代表已经执行成功. 然后重回LFS.xml树顶, 执行s, n. 便可以skip已经执行项, 而去执行新项.
2.1.8
------
下面的文件描述了创建tools目录,以及向其中的packages-6.1目录拷贝软件包.
chapter05/creatingtoolsdir.xml
问题出现在拷贝软件包的描述不完整, 有一些软件包/补丁并没有说明,从而导致没有
被copy到packages-6.1目录中.例如: libxml2 nALFS 需要我们手动向里添加.
2.1.9
-----
关于GURB的问题:
执行 # grub-install /dev/hdd 会出现如下错误:
'/dev/hdd does not have any corresponding BIOS drive.'
解决方法:
# grub-install --recheck /dev/hdd
# grub-install /dev/hdd
3 参考文档
##########