+ -
当前位置:首页 → 问答吧 → [毁灭系列] jhalfs HOWTO

[毁灭系列] jhalfs HOWTO

时间:2006-05-31

来源:互联网

前言:
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 版本

Remark:
本 Howto 只适用於 jhalfs-1.0 或当期时的 svn 版,亦适用於 LiveCD-6.2。现在的 svn 版经过大幅改良,从 mailing list 得知,将会以 jhalfs-2.0 推出,配置方法跟本文很不相同,读者要注意了

作者: d00m3d   发布时间: 2006-05-31

To Do:

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

- Set a password for the root user

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

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

- Unmount the filesystems.

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

Have a nice day :-)
当然,这些东西都是家常菜而矣。

附注:

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

疑问:

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

作者: d00m3d   发布时间: 2006-05-31

刚看了一下 jhalfs 目录下的 lfs-command,发觉每个 chapter 的命令都是齐备的,可能是我测试时没有及时配置好而矣

不好意思。。。

作者: d00m3d   发布时间: 2006-05-31

试了下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的时候就挂掉了,仔细查看了脚本,好象试解压缩包那儿出了问题;

有没有其他人测试成功过?

作者: sysit   发布时间: 2006-06-05

SRC_ARCHIVE 是存放源码的位置,LFS 的 LiveCD 自带的包都放在 /lfs-sources 里,若然系统找不到需要的包便会从指定的 mirror 下载,你的 /jhalfs/src 内有什麽内容?

作者: d00m3d   发布时间: 2006-06-05

有几个问题:
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的,那我直接在http://www.kernel.org下最新的2.6.16.20版本的核心,能否正常编译?
另外说一句,我是新手,很多地方问的问题可能大家会觉得很简单,请不要见怪!

作者: zjracyx   发布时间: 2006-06-06

不建议新手使用自动工具,因为很多东西都是要熟悉 LFS 后才容易使用的。。

作者: 晨想   发布时间: 2006-06-06

是的,新手适宜按照 LFS 手册按步就班,一步一步的做,不要"未学行、先学走"。日後掌握了 LFS 的过程而又要作新系统时再用未迟。

作者: d00m3d   发布时间: 2006-06-06

引用:
作者: d00m3d
SRC_ARCHIVE 是存放源码的位置,LFS 的 LiveCD 自带的包都放在 /lfs-sources 里,若然系统找不到需要的包便会从指定的 mirror 下载,你的 /jhalfs/src 内有什麽内容?
搞定了,是LANG环境变量引起的,export LANG=C,可以顺利编译。

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

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

作者: sysit   发布时间: 2006-06-12

引用:
作者: sysit
我SRC_ARCHIVE是个空目录,看下载的过程是每个包都下载到这个目录,然后复制到/jhalfs/sources目录去.
SRC_ARCHIVE 不是个目录,也是一个环境变量用来定义存放源码的位置,亦可透过 config 文件来定义

作者: d00m3d   发布时间: 2006-06-12

那个,2个不是同一个作者来的。
d00m3d兄 弄混了吧:)。。

作者: 晨想   发布时间: 2006-06-13

最近太累了,频频犯错,要找个机会休息才行。。。

作者: d00m3d   发布时间: 2006-06-13

今天用LFS-6.1.1的LiveCD试了一下(准确的说应该是现在还在试ing),发现有些地方是需要自己修改的,比如主机名,IP之类的设置,还有Grub的安装位置,好在这些位置都有EDITME字样,用grep很容易查出来(我说的都是在LFS-6.1.1,jhalfs-0.2的情况下,正好硬盘上有6.1.1的LiveCD,就试试了试,还是在vmware下,用的真实的硬盘编译的,完成之后应该是可以直接在真实的机器上用的吧-_-U)

我上当了,光看到commands下面有对应的命令,但是实际上一些需要自己改动的地方对应的命令没有执行,内核也没编译,Grub也没安装,还得手动的来...-_-U,干脆就直接用jhalfs提供的脚本得了

作者: LanEast   发布时间: 2006-06-15

今天(网页上是昨天时差问题) jhalfs-1.0 正式版出炉了
http://www.linuxfromscratch.org/livecd/news.html

开发团队仍在改进 BLFS 的支援中,已正式支援 LFS/CLFS/HLFS 各个 SVN 版及某些测试版
http://wiki.linuxfromscratch.org/alf...SupportedBooks

下了 1.0 的 tarball 回来,文档内仍未交待如何像 nALFS 那样自由选取哪些包交由脚本来自动制作,仍未知在 jhalfs 下能否实现?

作者: d00m3d   发布时间: 2006-07-24

我在完成 jhalfs build 后,按照提示,用下面命令 chroot
chroot "$LFS" /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login

然后准备给root设置一个密码,结果不行,出现下面问题:

root:/# passwd root
正在为 root 修改密码
请输入新密码(最少 5 最多 127 个字符)
请混合使用大小写字母和数字。
错误的密码:太短。
警告:脆弱的密码(重新输入以强制使用它)。
密码未更改。
root:/#


根本就没有提示我输入新密码!怎么回时?
怎么办?

作者: bird00126   发布时间: 2006-08-07

这个问题似乎跟 jhalfs 无关

不知你的 root 密码是何时设置的,但要改 root 密码方法多的是,既然你能成功 chroot,难度不能改 /etc/passwd 的内容?

作者: d00m3d   发布时间: 2006-08-08

用 nALFS 的时候可以选取哪些包交由脚本来编译,但是在jhalfs下怎么实现?

作者: echo   发布时间: 2006-10-08

现在的 jhalfs-1.0 不能实现,据了解,大幅改良及快将推出的 jhalfs-2.0,不单可以实现,而且好像还有图型介面,拭目以待。

作者: d00m3d   发布时间: 2006-10-10

难道LFS+jhalfs=Gentoo第二了?

作者: youbest   发布时间: 2006-10-10

不会,jhalfs 是利用 xml 版的 Book 来定义依赖及软件的编译顺序,在 LFS 之下仍没有 portage 此类成熟的包管理系统(希望 Olive 能做到 )

作者: d00m3d   发布时间: 2006-10-10

毁灭进行中。。。

作者: augustusqing   发布时间: 2006-11-06

原来还有这个版本。
不过个人认为,这样的成就感会少一些。
可自我改动的部分也少一些。
还是喜欢原汁的LFS。
(仅发表个人看法)

作者: 飞龙在天   发布时间: 2006-11-06

在此發表本人使用jhalfs 1.0在LFS x86 LiveCD 6.2-3上編譯的過程
編譯版本是6.2

1.創建partition並掛載於/mnt/lfs

2.設定jhalfs文件(下面相對目錄是基於~/jhalfs-1.0目錄下)
修改common/config
代码:
BUILDDIR=/mnt/lfs
TEST=0
STRIP=1
PAGE=A4
修改LFS/config
代码:
GETKERNEL=1
BOOK=/usr/share/LFS-BOOK-6.2-XML
3.設定環境變數並安裝
代码:
export SRC_ARCHIVE=/lfs-sources && ./lfs -G -M
4.漫長的安裝....

5.設定LFS機器環境與文檔
(1)重mount dev(很重要,關係到後面grub能不能找到device)
代码:
mount --bind /dev /mnt/lfs/dev
(2)進入chroot環境
(3)設定root password
(4)設定下面文件符合自己需求

/etc/sysconfig/clock
/etc/sysconfig/network
/etc/sysconfig/network-devices/ipconfig.eth0/ipv4
/etc/resolv.conf
/etc/hosts
/etc/fstab

6.安裝kernel

7.安裝grub
這裡要記得把/usr/lib/grub/下面相對的stage1_5檔案copy到/boot/grub再繼續

8.退出chroot環境並umount磁碟
代码:
logout
umount /mnt/lfs/dev
umonut /mnt/lfs
9.完成

作者: keima   发布时间: 2006-11-16

难得有兄弟作出补充!多谢了!

作者: d00m3d   发布时间: 2006-11-16

早点看到这位兄弟的补充多好啊
我昨天碰到的问题是,漫长的编译后,进入chroot里,发现/sbin下面没有udevstart程序,查看udev-0.96比lfs6.1中的udev-0.56安装的程序变化较大,找到并执行/etc/rc.d/init.d/udev start,/dev下面仍没有设备结点什么的,自然不能grub了
把其他文件编辑好,退出chroot,直接在livecd环境里安装grub,/boot/grub里就只有stage1,stage2,其他stage1_5懒得拷,也成功启动了

作者: augustusqing   发布时间: 2006-11-17

不错,不错,用了2小时29分就编译完了。
5-9步骤却花了30多分钟。

作者: 飞龙在天   发布时间: 2006-11-23

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

我用配置是:CPU AMD Sempron(tm) Processor 2800+ 256M内存-8M显存,512M Swap 不编内核。按照 keima的补充步骤 约149m(手工计时)

时间相差挺大的。(机器是清华同方品牌机)

作者: 飞龙在天   发布时间: 2006-11-23

确实使用自动脚本没有成就感,不过提高生产力,呵呵

作者: trublemaker   发布时间: 2007-10-22

我用来做LFS系统的机器太老了,手工编译要两个星期,用脚本要两天。。

作者: netdigger   发布时间: 2007-10-22

引用:
作者: netdigger
我用来做LFS系统的机器太老了,手工编译要两个星期,用脚本要两天。。
我有一台机器,2.6内核,精简过配置的,编译出来大小是1.2m左右,用了126分钟,不知道用这台机器编LFS需要多久~

作者: shooter   发布时间: 2007-10-22

2009年1月2日下午19:56,呵呵,经过48次失败后,搞出来一个,这个生产率高。Compaq 2210b的T7500 2.19G在VM Workstation6.0 Xdows绿化版内大约花了三个小时自动jhalfs完,也是后面部分后又按豹哥大作拷贝而成。在恢复到第几步上耗费了长时间。最后遇到一个问题:跟手工Make一样,中文都显示为小方块,在 Make kernel过程中注意看了: drive /video /console /fonts _Utf 8.h并没有被 Make 进去,还有哪位 D X遇到这个中文显示问题了吗?

作者: newren.me   发布时间: 2009-01-03

毁灭大哥,能不能出一个jhalfs2.3.1 可以用来做clfs的HOWTO,拜托啦?

作者: haday   发布时间: 2009-02-02

好像比较旧拉 不过可以参考一下。。。。。。。。

作者: cainiao55   发布时间: 2009-02-04