CSDN博客

img RobinsonNie

nALFS配置相关笔记(位于工作站上的实验)--nalfs.note

发表于2008/9/28 8:10:00  575人阅读

+-----------------------------------------------------------------------------+
|                         第一部分 文档说明                                    |
+-----------------------------------------------------------------------------+
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&gt;/dev/null</param>
      <param>2&gt;/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 参考文档
##########

0 0

相关博文

我的热门文章

img
取 消
img