LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: good02xaut

LFS6.1硬盘安装完全征服

[复制链接]
发表于 2006-2-21 18:23:44 | 显示全部楼层
Post by good02xaut
...不知道如何查看initramfs_data_cpio的内容,有没有办法看看呢?

$ zcat /path/to/initramfs_data_cpio.gz | cpio -t
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 19:57:21 | 显示全部楼层

执行环境?

Post by Phaedo
$ zcat /path/to/initramfs_data_cpio.gz | cpio -t

你这个可以在RH9下吗?
怎么感觉后面那个cpio -t好像是2.6内核支持的啊

:ask
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 20:26:05 | 显示全部楼层

总结一下,硬盘安装如何征服

前面的讨论,很多朋友看了,可能觉得还是太含糊。我现在总结一下,不过没有真正做过,有待验证的都是。

目的:就是在不刻录liveCD到光盘的情况下,硬盘上建立liveCD的环境。从而可以安装LFS。
liveCD环境分析:使用2.6的内核,root文件系统用的是squashfs格式。/root里面包含了合适版本的gcc和glibc等一系列用于安装LFS的软件。

要求:主机上已经有一个安装好的host-linux,GRUB引导。

[color="Red"]情况1:host-linux版本是2.6的,且支持squashfs文件系统。这是最简单了。
mount -o loop lfslivecd-x86-6.2-pre3.iso /mnt/cdrom
mount -o loop /mnt/cdrom/.root.sqfs    /mnt/sqfs
chroot /mnt/sqfs
通过切换root,建立了liveCD的环境。
与真正的liveCD区别:用的kernel和真正的liveCD配置不一样。

[color="red"]情况2:host-linux版本是2.4或2.6的,但不支持squashfs文件系统
通过升级内核到2.6,并打上squashfs文件系统patch。回到情况1。

[color="red"]情况3:host-linux不论,不支持squashfs文件系统。要求安装后的liveCD环境与真正的liveCD不能有任何区别!为了实现这点,可以参考情况1和情况2,然后去弥补那点区别。
如果要没有任何区别,必须使用livecd.iso上的/boot/isolinux/linux这个内核映象文件,任何后来编译出来的伪内核都很难做到一模一样!使用这个linux内核却无法加载ext分区的root,突破口只能靠重建initramfs_data_cpio完成对内核功能的扩充。
如果修改了initramfs_data_cpio,建立的liveCD环境是不是一模一样呢?答案至少是99%的。initramfs_data_cpio是个临时的root,在使用CD建立的liveCD环境,最后也是要把initramfs卸载调的。

情况3是开帖的初衷,尽可能的用现有的资源,做到于目标相似。即使不用现有的资源,也要尽可能与目标接近(以为在改变initramfs_data_cpio时,可能会要求内核到2.6,前面有论)。

通过这个过程,我觉得任何linux的发行版本都可以从硬盘安装的。只要[color="red"]有一个安装好的host-linux,GRUB引导,不是嘛:ask
回复 支持 反对

使用道具 举报

发表于 2006-2-21 20:35:48 | 显示全部楼层
Post by good02xaut
1。这个过程,你的主机系统是什么?kernel是多少?rootfilesystem从哪里来的?
2。为什么要重新编译内核呢?内核没有把对ext2的支持编译进去,可是提供了模块啊。

在这个过程中,你仅仅把root.sqfs拷贝出来了,/boot/isolinux/下面的linuxz和initrramfs_data_cpio怎么没有看到使用呢?



1、 实际上我是用LiveCD启动后再进行的这些操作! 但不影响,因为编译内核时我使用 chroot 切换进了从 .root.sqfs 拷贝出来的新环境。
2、 最主要是因为LiveCD的默认内核将Ext2,Ext3,reiserfs等编译为内核模块,而我选择的根文件系统为Ext3。如果不将Ext3编译进内核就不能启动(不能使用LiveCD的initrramfs_data_cpio,因为它依赖于CD),另外得注意,我是将原LiveCD的 .config 文件作为新内核树配置文件后再加入Ext3支持。

自己编译内核,那它预编译的内核当然不用(因为不支持我们的根文件系统),initrramfs_data_cpio 由于依赖于CD也不能用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 21:41:48 | 显示全部楼层

Post by lvjinhua
1、 实际上我是用LiveCD启动后再进行的这些操作! 但不影响,因为编译内核时我使用 chroot 切换进了从 .root.sqfs 拷贝出来的新环境。
2、 最主要是因为LiveCD的默认内核将Ext2,Ext3,reiserfs等编译为内核模块,而我选择的根文件系统为Ext3。如果不将Ext3编译进内核就不能启动(不能使用LiveCD的initrramfs_data_cpio,因为它依赖于CD),另外得注意,我是将原LiveCD的 .config 文件作为新内核树配置文件后再加入Ext3支持。

自己编译内核,那它预编译的内核当然不用(因为不支持我们的根文件系统),initrramfs_data_cpio 由于依赖于CD也不能用。


1.编译内核时,chroot,看到了。可是谁能保证那个内核实在.root.sqfs 环境中建立的啊?说不定是用gcc-4.0.2编译出来的呢!呵呵。开个玩笑。
2.你用liveCD的config文件,非常赞同。关于那个initramfs_data_cpio依赖于CD具体怎么讲啊?我觉得是里面的init有问题,而不是文件系统的问题。请详释一下:)
如果按照我前面说的,就用liveCD的内核,构建一个initramfs_data_cpio的关键是什么?光盘依赖还是里面的init呢?
回复 支持 反对

使用道具 举报

发表于 2006-2-21 23:09:07 | 显示全部楼层
我觉得initramfs_data_cpio里的init是关键,我试过把isolinux那个目录放到reiserfs和vfat的分区,都可以启动。但问题是启动过程中老是找不到livecd。如果是gentoo的livecd,可以指定cdroot=/dev/hdaX就可以过关,但不知道lfs的livecd怎么搞。:ask
回复 支持 反对

使用道具 举报

发表于 2006-2-22 00:08:25 | 显示全部楼层
Post by good02xaut
前面的讨论,很多朋友看了,可能觉得还是太含糊。我现在总结一下,不过没有真正做过,有待验证的都是。

目的:就是在不刻录liveCD到光盘的情况下,硬盘上建立liveCD的环境。从而可以安装LFS。
liveCD环境分析:使用2.6的内核,root文件系统用的是squashfs格式。/root里面包含了合适版本的gcc和glibc等一系列用于安装LFS的软件。

[color="Blue"]要求:主机上已经有一个安装好的host-linux,GRUB引导。

[color="Red"]情况1:host-linux版本是2.6的,且支持squashfs文件系统。这是最简单了。
mount -o loop lfslivecd-x86-6.2-pre3.iso /mnt/cdrom
mount -o loop /mnt/cdrom/.root.sqfs    /mnt/sqfs
chroot /mnt/sqfs
通过切换root,建立了liveCD的环境。
与真正的liveCD区别:用的kernel和真正的liveCD配置不一样。

[color="red"]情况2:host-linux版本是2.4或2.6的,但不支持squashfs文件系统
通过升级内核到2.6,并打上squashfs文件系统patch。回到情况1。

[color="red"]情况3:host-linux不论,不支持squashfs文件系统。要求安装后的liveCD环境与真正的liveCD不能有任何区别!为了实现这点,可以参考情况1和情况2,然后去弥补那点区别。
如果要没有任何区别,必须使用livecd.iso上的/boot/isolinux/linux这个内核映象文件,任何后来编译出来的伪内核都很难做到一模一样!使用这个linux内核却无法加载ext分区的root,突破口只能靠重建initramfs_data_cpio完成对内核功能的扩充。
如果修改了initramfs_data_cpio,建立的liveCD环境是不是一模一样呢?答案至少是99%的。initramfs_data_cpio是个临时的root,在使用CD建立的liveCD环境,最后也是要把initramfs卸载调的。

情况3是开帖的初衷,尽可能的用现有的资源,做到于目标相似。即使不用现有的资源,也要尽可能与目标接近(以为在改变initramfs_data_cpio时,可能会要求内核到2.6,前面有论)。

通过这个过程,我觉得任何linux的发行版本都可以从硬盘安装的。只要[color="red"]有一个安装好的host-linux,GRUB引导,不是嘛:ask
LiveCD的其中一个主要作用是为没有host或者host未能满足建立LFS环境的机器提供一个良好的编译条件,可是现在却反过来要求一个host 系统去满足LiveCD,虽然作为技术探讨是无可厚非,而且的确发掘及探讨了不同的问题。

但话说回来,实际使用的话,好像变成本末倒置了。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-22 01:09:26 | 显示全部楼层
我觉得,如果能写一个通用的制作 initrd/initramfs 的脚本,也不错。

1。能灵活配置加载的模块名字以及顺序。当然,自动加载也可以,比如全部模块都加载一次就好了:)。
2。能灵活配置执行的命令。比如 initrd/initramfs 都干嘛。
3。指定一个 initrd/initramfs 的 fs。如 cramfs / ext2之类的。
4。根据以上的几点,每次都生成一个 initrd/initramfs 文件,方便快捷。

当然还有很多功能都可以实现,比如动态搜索cdrom 所在,搜索可启动分区并且允许选择最终的 root 分区等,都可以慢慢实现。把这些功能都做成模块,然后输出结果。

这样,我们就不单单解决一个问题,而是提供一个解决方案。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-22 09:45:38 | 显示全部楼层
to Phaedo:
[color="Red"]initramfs_data_cpio里的init是关键,没错。通过改写这个Init,内核可以启动。
而你在没有使用initramfs_data_cpio的情况下,内核可以启动,那么root.sqfs的文件系统中的Init也是关键。他也需要改写!那些启动错误就是这个Init输出的,具体的内容可以查看init.c文件的内容,LFS的网站上有。

liveCD是为了为没有host提供安装条件,但是他对文件系统的限制,使得无法从硬盘安装。
如果那个内核提供了对ext2文件系统的支持,这样不是更好嘛。光盘安装时用initramfs(最主要的是里面的Init),硬盘安装时用noinitrd,这不更符合LFS的精神嘛。

关于制作一个通用的initrd的脚本我觉得意义不大,个人建议内核启动时使用noinitrd。
回复 支持 反对

使用道具 举报

发表于 2006-2-22 12:53:36 | 显示全部楼层
noinitrd 的意思,是把数据都写到 /dev/initrd 里边去,我没理解什么意思,兄弟能否稍微解释一下?

至于 initrd 脚本,我是在考虑其他地方的用处,不单单是这里的这个硬盘安装的情况。:)。
回复 支持 反对

使用道具 举报

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

本版积分规则

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