+-----------------------------------------------------------------------------+
| 第一部分 文档说明 |
+-----------------------------------------------------------------------------+
1 作用
##########
基于nalfs.note笔记之上.
nALFS配置相关笔记(位于CD可引导Linux)
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 实验环境
##########
说明: VMware Workstation 5.5.1 build-19175
IDE(0:0) 5GB
2 CDBOOT上执行nALFS前的准备
###########################
2.1 创建相应硬盘和cdrom设备文件
===============================
注意: 由于CDBOOT引导的我们构建的根文件系统当中采用了devfs, 而并没有相应的
/dev/hda /dev/hda1 /dev/hd2这样的设备文件. 需要我们自己创建这样的设备
文件. 可以通过# cat /proc/partitions当中的内容获得系统当中已存设备及
其主从设备号, 进而# mknod 来创建.
另外, cdrom的设备也需要用mknod单独创建.
# mknod /dev/cdrom b 22 0
2.2 对硬盘进行分区及格式化
并完成对光盘/硬盘的挂载
===========================
[root@hellokitty ~]# /var/bin/fdisk /dev/hda
/proc/partitions中内容有效,而fdisk -l有时会失效.(有设备也不显示)
将/dev/hda分成对个区: /dev/hda1(id: 83) root partition 2GB
/dev/hda2(id: 82) swap partition 512MB
[root@hellokitty ~]# /var/bin/mkfs.ext2 /dev/hda1
[root@hellokitty ~]# mkswap /dev/hda2
[root@hellokitty ~]# mount /dev/hda1 /mnt/lfs
[root@hellokitty ~]# mount /dev/cdrom /mnt/cdrom
2.3
===
已存BUG说明: CDBOOT系统当中使用mkfs.ext2(无论是Busybox还是我从宿主系统上拷贝的)
当分区大于3G时,均不能正常格式化,出错信息:
Couldn't write 8 blocks in inode table starting at 524290
3 配置profile-LFS-6.1.1
#######################
3.1
===
[nie@hellokitty LFS-6.1.1]$ vi config/general.ent
以下仅对修改项目或者重要项目进行说明:
<!ENTITY LFS "/mnt/lfs"> 指明目标根文件系统挂载点
挂载设备到/mnt/lfs需要我们手动来完成.然后先能执行
nALFS
<!ENTITY orig_packages_dir "/mnt/cdrom/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 "linux"> 与终端的$TERM应一致.
在文本终端当中echo $TERM为: linux
<!-- grub settings (these need to be in grub's notation) -->
<!ENTITY grub-root "hd0,0"> 指明grub的root分区
<!ENTITY grub-install-location "hd0">
3.2
===
[nie@hellokitty LFS-6.1.1]$ vi config/profile.ent
<!ENTITY lfs-profile '/var/bin/LFS-6.1.1'>
<!ENTITY skeleton 'skeleton'>
lfs_profile指明LFS配置文件位置, 其在CDBOOT根文件系统位于/var/bin/LFS-6.1.1.
必须正确指明路径位置,否则拷贝配置文件时将出错.
3.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
3.4
===
[nie@hellokitty skeleton]$ vi boot/grub/menu.lst
kernel /boot/lfskernel-[linux-version] root=/dev/hda1
这是传给kernel的命令行参数, 故使用/dev/hda1, 与grub的表示方法不同.
[nie@hellokitty skeleton]$ cd etc
[nie@hellokitty etc]$ vi fstab
/dev/hda1 / ext3 defaults 1 1
/dev/hda2 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/hda1与/dev/hda2两个分区要明确出来.
3.5
===
以非交互式执行
# nALFS -i LFS.xml
3.6
===
修改chapter05/addinguser.xml文件如下: 将如下创建LFS用户的使用注释掉.
<!--
<execute command="groupadd -f lfs" />
<execute command="id -u &lfs-user; &real-amp;> /dev/null || useradd -s /bin/bash -g lfs -m -k /dev/null &lfs-user;" />
<execute command="echo &lfs-user;:&lfs-password; | chpasswd" />
-->
因为在构建CDBOOT的根文件系统的/etc/passwd /etc/shadow /etc/group文件当中已经
包括了lfs用户的创建. username : lfs passwd : lfs
3.7
===
修改nALFS的XML配置文件: 使其在cha5仅仅是完成将已经做好的gnu工作链进行解压.
然后在cha6直接chroot到临时工作环境(gnu 工作链)来进行剩下的安装.
3.7.1
-----
修改LFS.xml文件, 使其在cha5仅有
<xi:include href="chapter05/gnutoolchain.xml" />
3.7.2
-----
# vi chapter05/creatingtoolsdir.xml
加入 <source>"i686-pc-linux-gnu.tar.bz2"</source>
3.7.3
-----
# vi chapter05/gnutoolchain.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE alfs SYSTEM "../DTD/ALFS.dtd"
[
<!ENTITY % general_entities SYSTEM "../config/general.ent">
<!ENTITY % package_entities SYSTEM "../config/package.ent">
%general_entities;
%package_entities;
]>
<alfs>
<package name="i686-pc-linux-gnu" version="">
<stage name="Unpacking">
<unpack>
<digest>81371a8d58c07bb30aa625d1f153f46c</digest>
<archive>&packages_dir;/i686-pc-linux-gnu.tar.bz2</archive>
<destination>/tools</destination>
</unpack>
</stage>
</package>
</alfs>
3.7.4
-----
# vi chapter06/kernfs.xml
<mkdir base="&LFS;">
<option>parents</option>
<name>proc</name>
<name>sys</name>
<name>dev</name> <!-- 需要创建dev目录 -->
<name>dev/shm</name> <!-- -->
<name>dev/pts</name> <!-- -->
</mkdir>
<execute command="mount">
<param>-f</param>
<param>-t tmpfs</param>
<param>tmpfs</param>
<param>&LFS;/dev</param>
</execute>
<mkdir base="&LFS;"> <!-- 加上这个段落原因是/dev被挂载为tmpfs了,原先创建的shm/pts均隐藏-->
<option>parents</option>
<name>dev/shm</name>
<name>dev/pts</name>
</mkdir>
4 关于nALFS安装
###############
4.1
===
[nie@hellokitty nALFS-1.2.6]$ ./configure --prefix=/home/nie/dev_home/graduation_paper/cdboot/rootfs/my_rootfs-withoutX/usr
然后修改config.h文件, 改正库路径.(nALFS使用了dlopen)
[nie@hellokitty nALFS-1.2.6]$ vi config.h
#define HANDLERS_DIRECTORY "/usr/lib/nALFS"
这步修改非常重要,否则在CDBOOT上将导致nALFS无法打开其正常的库,
进而无法分析XML文件.
[nie@hellokitty nALFS-1.2.6]$ make
[nie@hellokitty nALFS-1.2.6]$ make install
--prefix指明安装到CDBOOT根文件系统的usr目录当中
5 参考文档
##########
| 第一部分 文档说明 |
+-----------------------------------------------------------------------------+
1 作用
##########
基于nalfs.note笔记之上.
nALFS配置相关笔记(位于CD可引导Linux)
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 实验环境
##########
说明: VMware Workstation 5.5.1 build-19175
IDE(0:0) 5GB
2 CDBOOT上执行nALFS前的准备
###########################
2.1 创建相应硬盘和cdrom设备文件
===============================
注意: 由于CDBOOT引导的我们构建的根文件系统当中采用了devfs, 而并没有相应的
/dev/hda /dev/hda1 /dev/hd2这样的设备文件. 需要我们自己创建这样的设备
文件. 可以通过# cat /proc/partitions当中的内容获得系统当中已存设备及
其主从设备号, 进而# mknod 来创建.
另外, cdrom的设备也需要用mknod单独创建.
# mknod /dev/cdrom b 22 0
2.2 对硬盘进行分区及格式化
并完成对光盘/硬盘的挂载
===========================
[root@hellokitty ~]# /var/bin/fdisk /dev/hda
/proc/partitions中内容有效,而fdisk -l有时会失效.(有设备也不显示)
将/dev/hda分成对个区: /dev/hda1(id: 83) root partition 2GB
/dev/hda2(id: 82) swap partition 512MB
[root@hellokitty ~]# /var/bin/mkfs.ext2 /dev/hda1
[root@hellokitty ~]# mkswap /dev/hda2
[root@hellokitty ~]# mount /dev/hda1 /mnt/lfs
[root@hellokitty ~]# mount /dev/cdrom /mnt/cdrom
2.3
===
已存BUG说明: CDBOOT系统当中使用mkfs.ext2(无论是Busybox还是我从宿主系统上拷贝的)
当分区大于3G时,均不能正常格式化,出错信息:
Couldn't write 8 blocks in inode table starting at 524290
3 配置profile-LFS-6.1.1
#######################
3.1
===
[nie@hellokitty LFS-6.1.1]$ vi config/general.ent
以下仅对修改项目或者重要项目进行说明:
<!ENTITY LFS "/mnt/lfs"> 指明目标根文件系统挂载点
挂载设备到/mnt/lfs需要我们手动来完成.然后先能执行
nALFS
<!ENTITY orig_packages_dir "/mnt/cdrom/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 "linux"> 与终端的$TERM应一致.
在文本终端当中echo $TERM为: linux
<!-- grub settings (these need to be in grub's notation) -->
<!ENTITY grub-root "hd0,0"> 指明grub的root分区
<!ENTITY grub-install-location "hd0">
3.2
===
[nie@hellokitty LFS-6.1.1]$ vi config/profile.ent
<!ENTITY lfs-profile '/var/bin/LFS-6.1.1'>
<!ENTITY skeleton 'skeleton'>
lfs_profile指明LFS配置文件位置, 其在CDBOOT根文件系统位于/var/bin/LFS-6.1.1.
必须正确指明路径位置,否则拷贝配置文件时将出错.
3.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
3.4
===
[nie@hellokitty skeleton]$ vi boot/grub/menu.lst
kernel /boot/lfskernel-[linux-version] root=/dev/hda1
这是传给kernel的命令行参数, 故使用/dev/hda1, 与grub的表示方法不同.
[nie@hellokitty skeleton]$ cd etc
[nie@hellokitty etc]$ vi fstab
/dev/hda1 / ext3 defaults 1 1
/dev/hda2 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/hda1与/dev/hda2两个分区要明确出来.
3.5
===
以非交互式执行
# nALFS -i LFS.xml
3.6
===
修改chapter05/addinguser.xml文件如下: 将如下创建LFS用户的使用注释掉.
<!--
<execute command="groupadd -f lfs" />
<execute command="id -u &lfs-user; &real-amp;> /dev/null || useradd -s /bin/bash -g lfs -m -k /dev/null &lfs-user;" />
<execute command="echo &lfs-user;:&lfs-password; | chpasswd" />
-->
因为在构建CDBOOT的根文件系统的/etc/passwd /etc/shadow /etc/group文件当中已经
包括了lfs用户的创建. username : lfs passwd : lfs
3.7
===
修改nALFS的XML配置文件: 使其在cha5仅仅是完成将已经做好的gnu工作链进行解压.
然后在cha6直接chroot到临时工作环境(gnu 工作链)来进行剩下的安装.
3.7.1
-----
修改LFS.xml文件, 使其在cha5仅有
<xi:include href="chapter05/gnutoolchain.xml" />
3.7.2
-----
# vi chapter05/creatingtoolsdir.xml
加入 <source>"i686-pc-linux-gnu.tar.bz2"</source>
3.7.3
-----
# vi chapter05/gnutoolchain.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE alfs SYSTEM "../DTD/ALFS.dtd"
[
<!ENTITY % general_entities SYSTEM "../config/general.ent">
<!ENTITY % package_entities SYSTEM "../config/package.ent">
%general_entities;
%package_entities;
]>
<alfs>
<package name="i686-pc-linux-gnu" version="">
<stage name="Unpacking">
<unpack>
<digest>81371a8d58c07bb30aa625d1f153f46c</digest>
<archive>&packages_dir;/i686-pc-linux-gnu.tar.bz2</archive>
<destination>/tools</destination>
</unpack>
</stage>
</package>
</alfs>
3.7.4
-----
# vi chapter06/kernfs.xml
<mkdir base="&LFS;">
<option>parents</option>
<name>proc</name>
<name>sys</name>
<name>dev</name> <!-- 需要创建dev目录 -->
<name>dev/shm</name> <!-- -->
<name>dev/pts</name> <!-- -->
</mkdir>
<execute command="mount">
<param>-f</param>
<param>-t tmpfs</param>
<param>tmpfs</param>
<param>&LFS;/dev</param>
</execute>
<mkdir base="&LFS;"> <!-- 加上这个段落原因是/dev被挂载为tmpfs了,原先创建的shm/pts均隐藏-->
<option>parents</option>
<name>dev/shm</name>
<name>dev/pts</name>
</mkdir>
4 关于nALFS安装
###############
4.1
===
[nie@hellokitty nALFS-1.2.6]$ ./configure --prefix=/home/nie/dev_home/graduation_paper/cdboot/rootfs/my_rootfs-withoutX/usr
然后修改config.h文件, 改正库路径.(nALFS使用了dlopen)
[nie@hellokitty nALFS-1.2.6]$ vi config.h
#define HANDLERS_DIRECTORY "/usr/lib/nALFS"
这步修改非常重要,否则在CDBOOT上将导致nALFS无法打开其正常的库,
进而无法分析XML文件.
[nie@hellokitty nALFS-1.2.6]$ make
[nie@hellokitty nALFS-1.2.6]$ make install
--prefix指明安装到CDBOOT根文件系统的usr目录当中
5 参考文档
##########