LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 13424|回复: 32

[毁灭系列] jhalfs HOWTO

[复制链接]
发表于 2006-5-31 01:12:00 | 显示全部楼层 |阅读模式
前言:
jhalfs 是新一代的 ALFS script,用以取代 nALFS profile 作为自动建立系统的自动脚本,遗陷的是 LFS 开发团队至今仍没有详尽的 Documentation 来介绍 jhalfs 的使用方法,令 jhalfs 未能被广范使用,在下按照 LFS-6.2pre4 LiveCD 上的 README 及自行探索後,发现原来 jhalfs 的确比 nALFS 优胜,不单目录架构更完整,而且更可延伸到 BLFS,CLFS 及 HLFS 中使用,因此急不及待撰写本文,希望各位能对 jhalfs 更加了解及广范使用。

准备工作:
1. 最好拥有良好的网络,系统会载入最新的 SVN BOOK 内各章节对应的 xml 文件来产生所需的 Makefile,缺少的包及补丁可以自动下载,否则便要自己先下载回来
2. 先准备好编译内核所需的 .config 文件

由於 LFS-6.2pre4 LiveCD 已有 jhalfs 及 较新的 Book 及 软件包,因此我打算用没有 jhalfs 的系统来说明,以下部骤均以 LFS-6.2pre3 LiveCD 来解说,旧版的 LiveCD 或现成系统应该也不难对应。

正式开始:
1. 取得 jhalfs (如用 LFS-6.2pre4 LiveCD,可跳过这一步)
LFS-6.2pre3 LiveCD 提供了 nALFS profile,没有 jhalfs profile,按 LFS 网页提示,可用以下命令取得 jhalfs

svn co svn://svn.linuxfromscratch.org/ALFS/jhalfs/trunk jhalfs-trunk

完结後,在当前目录(假设是 ~)下的多了一个 jhalfs-trunk 目录,当中就是 jhalfs 的 profile 了

2. 设定 profile
2.1 编辑 ~/jhalfs-trunk/common/config,按自己需要修改(基本都有说明的):
BUILDDIR=/mnt/lfs
...
GETPKG=1
...
SERVER=http://ftp.osuosl.org (取一个较快的 mirror)
...
OPTIMIZE=1
...
TEST=0 (我习惯全程不 TEST 的)
STRIP=1
PAGE=A4
...
存档

2.2 编辑 ~/jhalfs-trunk/optimize/opt_config,按自己需要修改(若对优化设置不熟识,请勿使用):
...
DEF_OPT_MODE=O3pipe_march (也可自行定义一个 O2pipe 来用)
...

另外, ~/jhalfs-trunk/optimize/opt_override 是针对某些包(如 binutils, gcc, glibc 等)来作特定的 CFLAGS 设置,基本上不用改动

2.3 编辑 ~/jhalfs-trunk/optimize/opt_config.d/O3pipe_march
可修改所有 -march 及加入 -fomit-frame-pointer

3. 准备编译
在 jhalfs-trunk 目录下有几个 symlink 来击活 master.sh 此脚本,分别是 lfs,blfs,clfs 及 hlfs,故名思义了。master.sh 本身不能单独启用,必需由该命令来决定要建立的系统。

现在我要做 LFS,当然就是执行 ./lfs 了,在 jhalfs-trunk 目录下执行

#export SRC_ARCHIVE=/lfs-sources && ./lfs

其间,系统会要求你核对编译设置及优化条件,接着系统会先行下载最新的 SVN BOOK 内各章节对应的 xml 文件来产生所需的 Makefile,(将会存放在 /mnt/lfs/jhalfs 内),系统会检查 /lfs-sources 内有没有所需的包,缺少的包及补丁自动从先前指定的 mirror下载。

4. 开始编译
#cd /mnt/lfs/jhalfs
#time make

一直等它完成。。。

(测试系统配置是 Sempron 3000+,1.5GB RAM,980M Swap,不编译内核,版本 LFS-SVN-20060528,共需时 164m20s)

後记:
1. 我用的是 jhalfs svn 版,现时默认只会 build svn development branch,据 LFS 网页描述,要做 stable branch LFS-6.1.1 的话要用 jhalfs-0.2 版才行,0.2 版在配置上有少许不同,是更改 jhalfs.conf 文件
2. ALFS 的对像是对 LFS 有经验的玩家,对初次接独 LFS 的新手,请勿使用
3. 我还未试过将 jhalfs 用於 BLFS/CLFS/HLFS,无法作出说明,对 jhalfs 的测试也未必足够深入,大家若然有其他发现,敬请反馈,谢谢!
(今天为止,jhalfs 暂时不能用於 BLFS,jhalfs 仍在改进中)

PS:先前 Sir 里有位兄弟做了一个半自动的 LFS Build System,对比之下觉得 jhalfs 更能得心应手,在下无条件下全力推荐 jhalfs;)

Change log:
1.0 May31,06 Initial release
1.1 May31,06 更正後记 stable branch 说明
1.2 Oct9,06 补充适用的 jhalfs 版本

[color="Blue"]Remark:
本 Howto 只适用於 jhalfs-1.0 或当期时的 svn 版,亦适用於 LiveCD-6.2。现在的 svn 版经过大幅改良,从 mailing list 得知,将会以 jhalfs-2.0 推出,配置方法跟本文很不相同,读者要注意了
 楼主| 发表于 2006-5-31 09:17:36 | 显示全部楼层
To Do:

要注意,完成 jhalfs build 并不等於完成了 LFS 基本系统,内核尚未编译,而且还有重要部骤未做:
  1. To be able to boot your new system you need to follow the next steps:
  2. - Enter to the chroot using the command found in the section
  3.    - Entering the Chroot Environment - except if building CLFS with METHOO=boot.

  4. - Set a password for the root user

  5. - Edit /etc/fstab, /etc/hosts, /etc/sysconfig/clock, /etc/sysconfig/console,
  6.   /etc/sysconfig/network, /etc/sysconfig//network-devices/ifconfig.eth0/ipv4
  7.   and any other configuration file required to suit your needs.

  8. - Set-up the boot loader.  See the relevant book section.

  9. - Unmount the filesystems.

  10. If you are an experienced LFS user, several of those steps can be skipped or done in
  11. a different way.  But then, that is something that you already know and there is no
  12. need to discuss it here.

  13. Have a nice day :-)
复制代码

当然,这些东西都是家常菜而矣。

附注:

jhalfs 是可以配合 PACO 打包系统一起使用的,详见 README.PACO 文件

疑问:

用 nALFS 的时候,由於有文字界面,可以自由选取哪些包交由脚本来自动制作的,暂时未知在
jhalfs 下如何实现?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-31 10:04:17 | 显示全部楼层
刚看了一下 jhalfs 目录下的 lfs-command,发觉每个 chapter 的命令都是齐备的,可能是我测试时没有及时配置好而矣

不好意思。。。:p
回复 支持 反对

使用道具 举报

发表于 2006-6-5 19:50:33 | 显示全部楼层
试了下LFS-6.2pre4 LiveCD带的jhalfs,发现有些小问题

export LANG=en_US; export SRC_ARCHIVE=/jhalfs/src ; ./lfs -B SVN -D /jhalfs -G -M -O 1 -T 0

执行到binutils pass1的时候就挂掉了,仔细查看了脚本,好象试解压缩包那儿出了问题;

有没有其他人测试成功过?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-5 19:59:02 | 显示全部楼层
SRC_ARCHIVE 是存放源码的位置,LFS 的 LiveCD 自带的包都放在 /lfs-sources 里,若然系统找不到需要的包便会从指定的 mirror 下载,你的 /jhalfs/src 内有什麽内容?
回复 支持 反对

使用道具 举报

发表于 2006-6-6 10:47:13 | 显示全部楼层
有几个问题:
1、按照楼主说的步骤,进行了make后,是不是程序自动就logout到主系统下了?
2、屏幕上提示说要重新chroot,是不是运行以下命令:
         chroot /mnt/lfs /usr/bin/env -i \
         HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
         PATH=/bin:/usr/bin:/sbin:/usr/sbin \
         /bin/bash --login
        mount -nvt tmpfs none /dev
        /sbin/udevstart
        mkdir -v /dev/pts
        mkdir -v /dev/shm
        mount -vt devpts -o gid=4,mode=620 none /dev/pts
        mount -vt tmpfs none /dev/shm
        cd /sources
        export LFS=/sources
不知是不是这样的?但是好象没有/sbin/udevstart这个文件,只有/sbin/udevd之类的文件。哪里错了?
3、屏幕上说要编辑/etc/sysconfig/clock,/etc/sysconfig/network等等文件,是用cat命令吗?那可不可以在主系统下打开另一个终端,直接vi /mnt/lfs/etc/sysconfig/network呢?
会造成错误吗?
4、先前安装的Linux-Libc-Headers是2.6.11.2的,那我直接在www.kernel.org下最新的2.6.16.20版本的核心,能否正常编译?
另外说一句,我是新手,很多地方问的问题可能大家会觉得很简单,请不要见怪!:sorry
回复 支持 反对

使用道具 举报

发表于 2006-6-6 11:09:53 | 显示全部楼层
不建议新手使用自动工具,因为很多东西都是要熟悉 LFS 后才容易使用的。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-6 12:47:33 | 显示全部楼层
是的,新手适宜按照 LFS 手册按步就班,一步一步的做,不要"未学行、先学走"。日後掌握了 LFS 的过程而又要作新系统时再用未迟。
回复 支持 反对

使用道具 举报

发表于 2006-6-12 00:06:32 | 显示全部楼层
Post by d00m3d
SRC_ARCHIVE 是存放源码的位置,LFS 的 LiveCD 自带的包都放在 /lfs-sources 里,若然系统找不到需要的包便会从指定的 mirror 下载,你的 /jhalfs/src 内有什麽内容?


搞定了,是LANG环境变量引起的,export LANG=C,可以顺利编译。

我SRC_ARCHIVE是个空目录,看下载的过程是每个包都下载到这个目录,然后复制到/jhalfs/sources目录去.

我玩LFS也差不多两年了,跟着升级有点累了,所有就找偷懒的方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-12 18:56:21 | 显示全部楼层
Post by sysit
我SRC_ARCHIVE是个空目录,看下载的过程是每个包都下载到这个目录,然后复制到/jhalfs/sources目录去.
SRC_ARCHIVE 不是个目录,也是一个环境变量用来定义存放源码的位置,亦可透过 config 文件来定义
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表