LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 06-10-03, 08:00 第 1 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

标题: 成功将livecd安装在硬盘上


使用的是lfslivecd-x86-6.1.1-4.iso,应该只要是镜像里面含有.root.sqfs这个文件的都可以。
只支持.root.sqfs放在hda1,文件系统必须ntfs,因为我编译的内核里面只增加了ntfs嵌入进内核。
我使用ntldr载入grldr,menu.lst这样编写:
title LFS Live CD
kernel (hd0,0)/linux
initrd (hd0,0)/initramfs_data.cpio.gz

需要linux内核文件和initramfs_data.cpio.gz的请在这里下载:
http://sandro.yang.googlepages.com/copyleft.htm
或者直接用gast:guestk登录gmail(http://mail.google.com/a/sandro.3322.org)自取。

.root.sqfs文件可以从下载官方的lfslivecd-x86-6.1.1-(x).iso(x=1, 2, 3, 4)中提取,也可以从我制作的四合一启动光盘中提取:
iso文件692M
http://www.box.net/public/ucenhngdsq
ed2k://|file|MutiBoot.iso|725604352|A8D89BAEEE39F684FA8AB2F11DEEA0AF|/







__________________
http://sandro.go.3322.org

此帖于 06-11-11 09:59 被 Sandr0 编辑.
  Sandr0 当前离线   回复时引用此帖
旧 06-10-03, 08:06 第 2 帖
d00m3d
 
d00m3d 的头像
 
 
资深版主  
  注册日期: Nov 2004
  帖子: 14,315
  精华: 10
 

恳请 Sandr0 兄把心得跟大家一起分享,谢谢!







__________________
nO ^^4+73R wH1<h d!5+R0z j00 42E U$1N9 7r% LpHZ 4+ l3457 oN(&
  d00m3d 当前离线   回复时引用此帖
旧 06-10-03, 08:16 第 3 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

所有编译工作都是在LFS LiveCD中完成的,呵呵
其实我也是新手,有很多地方也不清楚,反正就读源代码,边改边试,现在算是成功了吧
下面的帖子马上写下我分析的详细步骤。
  Sandr0 当前离线   回复时引用此帖
旧 06-10-03, 08:18 第 4 帖
d00m3d
 
d00m3d 的头像
 
 
资深版主  
  注册日期: Nov 2004
  帖子: 14,315
  精华: 10
 

期待中。。。
  d00m3d 当前离线   回复时引用此帖
旧 06-10-03, 08:54 第 5 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

http://wiki.linuxfromscratch.org/liv...ranches/6.1.1/查看所有代码。

1. 分析initramfs/init.c,发现函数mountlfscd()是问题的起因。
2. 大刀阔斧,直接删除init.c里面检查CD核对CD的部分,也就是从/* Try to open CD drive to see if we can use it */到/* Try to mount the cd drive*/之前(169到223行)的部分。
3. 第17行,加上一个"/dev/hda1", 这里我还删去了所有的我自己没有的设备,这样速度会快一些,这也是我说只支持hda1的原因。
4. 看init.h,这里面将32行中的iso9660改成ntfs,这也是我说的只支持ntfs的原因。
5. 看Makefile中的编译方法,用这个命令编译:gcc init.c -o init -static -Os -s -Wall
6. 准备好initramfs_data.cpio.gz的目录,比如tmp,在里面建立dev,bin,.tmpfs,.union四个目录,然后将/dev里面的loop0, null, console和hda1四个设备文件复制到tmp/dev里,将编译好的init复制到tmp里。
7. 看Makefile里面建立initramfs_data.cpio.gz的方法,进入到tmp目录,用这个命令建立:find . | cpio -o -H newc | gzip -9 > ../initramfs_data.cpio.gz

由于livecd里面的内核将除了iso9660之外的所有文件系统都编译成模块,所以要重新编译内核。下面是编译内核的分析(只需要增加ntfs):
8. 首先在运行 uname -a知道livecd内核版本是2.6.11.12
9. 分析packages/linux里面的Makefile,发现需要给内核源代码做三个patch:squashfs2.2-patch,reiser4-for-2.6.11-5.patch和unionfs-1.0.14
10. 其中只有unionfs-1.0.14的复杂一点,要先在packages/unionfs中用它提供的unionfs-1.0.14-fix_builtin-1.patch和unionfs-1.0.14-fixes-1.patch两个patch对unionfs-1.0.14做patch,然后再用unionfs-1.0.14中的patch-kernel.sh脚本对内核源代码做patch
11. 三个patch做好之后基本大功告成,将packages/linux中的config文件复制到内核源代码目录中并改名为.config
12. 看packages/linux中的Makefile知道如何编译内核:
make menuconfig (在文件系统里面将ntfs选成嵌入内核)
make
make modules_install
cp arch/i386/boot/bzImage linux

全部完成。

请多多指教。

此帖于 06-10-03 09:21 被 Sandr0 编辑.
  Sandr0 当前离线   回复时引用此帖
旧 06-10-03, 09:27 第 6 帖
linyuzong
 
 
 
注册会员  
  注册日期: Oct 2003
  帖子: 51
  精华: 0
 

这下我的A230(没光驱、只支持USB软驱)有福了;感到ing......
谢谢!!!
  linyuzong 当前离线   回复时引用此帖
旧 06-10-03, 09:36 第 7 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

呵呵,我也是深知没有光驱的痛苦啊。我的光驱被我做diablo的镜像,一张烂盘,读了一个通宵,还是没搞定,然后就读不了盘了,后来我擦了一下激光头,又可以勉强读了,可是LiveCD只能读一半,有时可以有时不行,而且进不了x,郁闷啊。上面的东西都是在别人的电脑上编译的。

在硬盘上运行还有一个好处就是速度快很多,呵呵
  Sandr0 当前离线   回复时引用此帖
旧 06-10-04, 10:27 第 8 帖
d00m3d
 
d00m3d 的头像
 
 
资深版主  
  注册日期: Nov 2004
  帖子: 14,315
  精华: 10
 

感谢 Sandr0 的分享,相信有很多人可以受惠了,精华鼓励之!

Sandr0 兄似乎对 C 很精通,上次从那个内核的 init/do_mounts.c 得到不少启动,要向 Sandr0 兄学习学习。
  d00m3d 当前离线   回复时引用此帖
旧 06-10-04, 19:42 第 9 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

版主过奖了,我只不过是看得懂一点点C代码而已,乱改改也许还行,真要我写,肯定不行啦。还要多向大家学习!
  Sandr0 当前离线   回复时引用此帖
旧 06-10-30, 06:10 第 10 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

我又研究了一下,现在6.2的CD也可以安装到硬盘上了。
6.2系列的livecd和6.1变动很大,有很多新功能,最新的6.2-3中的xorg是最新发布的7.1,还有中文支持方面,现在locale里面可以选简体中文繁体中文GBK,BIG5,UNICODE,还有scim中文输入法,网络工具也很全,还有gaim聊天呢,可能唯一缺的就是多媒体了,我现在就是在硬盘上的livecd系统下发的帖,呵呵。
6.2的光盘做法也变了,不用6.1的squashfs了,是采用基于iso9660和linux内核的透明压缩来做的。这样安装到硬盘的方式也要相应改变。
6.2光盘里面的root.ext2镜像里面还包含200多M的lfs-sources,如果去掉这个,光盘文件大小可以压缩到272M。
如果不要删除任何东西,做起来相对简单,只需要重新编译一下init,并重新打包initramfs.cpio.gz就可以了。6.2的内核中编译了ext文件系统,所以如果将iso文件放在ext格式的分区中,就也不需要重新编译内核。init.c中还是先删掉检查光盘标签的那部分,然后在加载光盘那段前面加两行(以我安装在/dev/hda8上为例):
代码:
mount("/dev/hda8", "/hda8", "ext3", 0, 0); losetup("/dev/loop2", "/hda8/lfslivecd-x86-6.2-3.iso", O_RDONLY);
然后将加载光盘那行的curdevice改成"/dev/loop2"。
如果要删掉lfs-sources,想压缩空间,就相对复杂一点,除了要做上面的工作,还要解压root.ext2来做相应的删减。可以参照
http://wiki.linuxfromscratch.org/liv...o.txt?rev=1744
上面的步骤。
如果需要的话,我可以把我删除掉lfs-sources的root.iso(272M)做成bt种子发布。

此帖于 06-10-30 06:35 被 Sandr0 编辑.
  Sandr0 当前离线   回复时引用此帖
旧 06-10-31, 20:48 第 11 帖
d00m3d
 
d00m3d 的头像
 
 
资深版主  
  注册日期: Nov 2004
  帖子: 14,315
  精华: 10
 

谢谢分享。

Alexander E. Patrakov 的那篇 Howto 已被收纳成为 Hints 了

http://www.linuxfromscratch.org/hint...ring-howto.txt

曾经有段时间想去把它译成中文,可惜。。。太忙了
  d00m3d 当前离线   回复时引用此帖
旧 06-11-01, 01:29 第 12 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

原来Hints里面有啊,我一般都是直接看它wiki上的源码的。
可能想要自己重制CD的人也不是很多,而且可能也都看得懂吧,需要翻译成中文么?呵呵
  Sandr0 当前离线   回复时引用此帖
旧 06-12-24, 01:17 第 13 帖
diyself
 
 
 
注册会员  
  注册日期: Nov 2004
  帖子: 563
  精华: 0
 

标题: 疑问


不是将livecd安装在硬盘上而是将livecd"安装在硬盘上"吧?

和将linux系统安装到硬盘不同吧?这里说的是通过读取硬盘上的iso镜像文件来运行lfs吧? 不知道能不能保存文件?
真的是安装到硬盘吗?
不解.....要是有真正意义上的安装到硬盘就好了,一个不错的开发环境哦
请指教。。。
  diyself 当前离线   回复时引用此帖
旧 06-12-24, 07:55 第 14 帖
Sandr0
 
Sandr0 的头像
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 68
  精华: 1
 

对,其实只是将iso文件复制到硬盘上运行,重启的话系统设置将不能保存,但是可以用休眠的方式保存设置(理论上,没有测试)。
真的要像其他发行版一样硬盘安装,可以将iso镜像里的文件系统复制到硬盘上运行,除了占用空间大,其他也不错,不过应该还是没有一般发行版好。
  Sandr0 当前离线   回复时引用此帖
旧 06-12-24, 12:01 第 15 帖
d00m3d
 
d00m3d 的头像
 
 
资深版主  
  注册日期: Nov 2004
  帖子: 14,315
  精华: 10
 

引用:
作者: diyself
不是将livecd安装在硬盘上而是将livecd"安装在硬盘上"吧?

和将linux系统安装到硬盘不同吧?这里说的是通过读取硬盘上的iso镜像文件来运行lfs吧? 不知道能不能保存文件?
真的是安装到硬盘吗?
不解.....要是有真正意义上的安装到硬盘就好了,一个不错的开发环境哦
请指教。。。
这种方式一般称之为 PMI 方式,Poor Man's Installation 是也,目的是将 LiveCD 的压缩文件动态解压,如同 LiveCD 运作时候的操作,在无光驱的情况下最管用
  d00m3d 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 21:39


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org