|
|
第 1 帖 | |
|
|
标题: [原创]源代码搭建应用(二)——建立自己的Linux LiveCD系统 源代码搭建应用(二)——建立自己的Linux LiveCD系统 更新日志作者:孙海勇 2008年2月12日:本文发布。 前言: 也许有很多朋友想将自己制作的Linux系统应用到自己的实际工作生活中,但往往因为各种原因不能在你操作的机器上安装你要的系统,所以现在出现了各种不同的LiveCD来解决各种应用方面的需求,可能有朋友对这种LiveCD的制作非常感兴趣,我结合我自己的认识和实际的应用经验总结了一套手工制作LiveCD的方法,希望对想制作LiveCD或者对这方面感兴趣的朋友有所帮助。 制作LiveCD的方法有很多,我这里只介绍我实际制作LiveCD的方法,与通常制作LiveCD的软件有所不一样,不过效果类似,希望能起到抛砖引玉的效果,如果有什么建议或想法也欢迎一起探讨,共同提高水平。 更新,文章中难免出现一些错误或者笔误,也有可能加入新内容,因此难免会进行修正或增删一些内容,如果本文被转载可以在www.linuxsir.org的LFS版中或者在本人的Blog中查看最新版本。 linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=322970 我的Blog:http://youbest.cublog.cn 如须转载请注明作者为孙海勇(冲天飞豹),并提供转载出处。 LiveCD原理分析 启动过程 1)计算机启动光盘上的引导程序,这部分我采用grub来完成,当然还可以使用如lilo,如果是其它非x86架构的机器也可以用其它适合的引导程序。 2)引导程序装入光盘上的Linux内核,并同时装入一个RAM disk,本文中采用grub的功能来完成,RAM disk使用的是initrd的方式,当然也可以采用其它Linux支持的方式,不过可能启动脚本需要进行一定的修改。 3)内核启动后转入到initrd中linuxrc,由linuxrc来完成各种初始化的操作。 4)linuxrc必须是一个可执行文件,这里我们采用的是bash的脚本来完成,本文中的linuxrc主要是完成各种必须的文件加载、设备的识别及内核模块的加载,建立和准备好用户操作根目录环境 5)linuxrc运行结束后会进入根系统的/sbin/init继续执行,该程序将利用/etc/inittab文件来完成系统的启动过程 6)启动完成,进入用户操作模式。 需要注意的地方 1)RAM disk的大小必须小于Linux中对RAM disk设置的大小,如果超过了必须重新配置内核并重新编译。 2)RAM disk所使用的文件系统必须是Linux内核内制支持的,在编译内核的时候不能把该文件系统编译成模块。 3)LiveCD在启动中或者启动后会需要创建或者写入一些文件,所以这部分文件就需要存放在可以写入的文件系统中,这里我采用tmpfs的方式来存放这些需要变动的文件,经过分析本文所制作的LiveCD需要修改的目录包括/etc、/home、/root、/var,对于/etc则将其打包并在系统启动中的适当时机解压缩到一个可以写入的空间中,而对于/home、/root、/var本文采用了动态生成生成的方式,当然这个没有必须的方法,这个需要随具体情况来变化,也都可以采用类似/etc的处理方式。 准备工作: 请按照LFS手册也可以参考我写的《第二版 手把手教你如何建立自己的Linux系统(LFS速成手册)》创建好一个基本的Linux系统,本文的内容将基于一个标准的LFS-6.3系统来完成全部工作。 编译安装必要的工具: 1、squashfs的内核补丁 本文创建的系统利用的是squashfs方式压缩文件系统,所以必须让内核支持squashfs 1)下载squashfs-3.3,并解压缩,在其目录中有linux kernel的补丁,找到你需要的内核补丁,因为LFS-6.3使用的是Linux-2.6.22.5这个版本,因此在内核的源代码目录中使用 patch -Np1 -i <path>/squashfs-3.3/kernel-patch/linux-2.6.22/squashfs-patch 2)重新配置内核,添加如下选项 File systems -> Miscellaneous filesystems -> SquashFS 3.3 ![]() 3)重新编译安装内核,使其支持squashfs 2、安装squashfs-tools 内核支持squashfs后,还需要有专门的工具来创建squasfs文件,该工具包含在squashfs软件包中,进入squashfs-tools make install -m 755 unsquashfs mksquashfs /usr/bin 现在系统已经可以创建并识别squashfs文件系统了。 3、安装cdrtools-2.01 安装这个包是为了使用其包含的命令mkisofs,这个是建立光盘镜像的工具。编译该包可以参考BLFS手册中该软件包部分。 patch -Np1 -i ../cdrtools-2.01-mkisofs_iconv-1.patch patch -Np1 -i ../cdrtools-2.01-ascii-2.patch make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root install && install -v -m755 -d /usr/share/doc/cdrtools-2.01 && install -v -m644 README* ABOUT doc/*.ps \ /usr/share/doc/cdrtools-2.01 好,到目前为止,系统已经具备了创建LiveCD的必要环境,下面就开始讲解创建一个简单的LiveCD的制作步骤。 准备工作目录: 代码:
LiveCD可以通过initrd来加载需要的设备驱动,因此建议将不是开始运行就需要的功能都制作成模块形式,这样可以减少内核的体积,同时也可以增加系统的灵活性。 内核必须功能(这些功能必须包含在内核本身,不能以模块的形式出现) Automatic kernel module loading支持: 这样可以方便今后加载模块。 RAM disk support: initrd是采用RAM disk的方式使用的,因此内核必须支持该功能 同时,这里设定RAM disk的大小的时候为了方便今后可能的扩展,如果在使用的机器上内存不是很紧张的话建议调整的大一些,我在这里把起调整为10M大小 ![]() ext2支持: 因为initrd.img本身是一个ext2的文件系统,所以要想使用initrd就必须让内核能够识别出ext2文件系统。 内核必须的功能,但可以使用模块的形式出现 loop支持: squashfs需要loop的支持才能正常使用,因此必须包含此功能。 squashfs支持: 这里制作LiveCD的方法中,压缩的文件系统采用squashfs,所以内核也必须包含此功能。 非必须功能: 如网卡、声卡、磁盘驱动等,这些并不是一定需要的,可以根据你的LiveCD的功能来进行取舍,如你需要制作一个应急修复盘,那么磁盘驱动方面就比较重要了,而声卡什么的则不是必须的了;而如果你是要制作一个桌面的LiveCD,那么声卡什么的则非常必要了。 编译内核,将内核文件放入/opt/iso/boot目录中,将模块放入/opt/iso/modules中。 制作LiveCD主系统: LiveCD主系统用于提供各种软件,整个系统为了减少存放体积,一般使用压缩的文件系统,这里我使用squashfs来制作。 本文使用LFS-6.3的标准系统来制作LiveCD系统,如果你想制作的系统包含更多功能可能需要增加自己的软件后再制作压缩文件系统。 代码:
现在在根目录建立好了一个SYSTEM文件,该文件就是一个经过squashfs压缩过的文件系统,将该文件放入“制作基地”中。 代码:
制作initrd.img: initrd.img的主要目的是为了在不同的机器环境下只加载适用于该机器的一些内核模块,如果将所有的内核模块都加入到内核文件本身中,那么内核本身将会变的非常臃肿,且占用需要不必占用的资源,因此一般的LiveCD都将大量的驱动编译为模块形式,在必要的时候才将其加载到内存中,这个时候initrd的作用就比较明显,initrd一般可以用来检测系统的硬件来适当的加载各种驱动模块。 下面我们就制作一个简单的initrd的实现。 1)建立initrd 代码:
代码:
initrd其实是一个最小化的Linux系统,但又必须包含一些检查硬件设备的功能。 1)一个shell,这里我就直接用bash了,如果你觉得大也可以使用其它的shell,比如csh,或者busybox中包含的shell。 代码:
代码:
代码:
代码:
代码:
代码:
5)常用的一些命令。 4)编写linuxrc文件 initrd是从linuxrc文件开始运行的(这个是由内核决定的),那么我们所有的工作就从这个文件开始了 首先是一些特定的文件系统,后面的许多程序需要这些文件系统的支持 代码:
现在根据linuxrc用到的命令复制到initrd中 代码:
代码:
创建一些必要的文件 代码:
代码:
代码:
建立etc.tar.bz2文件 代码:
代码:
创建grub及启动选择 代码:
代码:
生成iso文件 代码:
好了,现在在/opt目录下将出现一个mylivecd.iso文件,将这个文件刻录到光盘上,就可以用来引导一台x86的机器了。 注意: 如果需要刻录光盘,建议您先用虚拟机来测试一下这个iso文件是否工作正常,避免不必要的浪费。:-) 将这个自己制作的LiveCD光盘插入光驱,很快系统就会完成整个LiveCD的引导过程进入Login状态。 本文到现在为止只是完成了一个LiveCD的基本功能,用户可以根据自己的需求增加各种功能,这些都可以在主系统的后续引导过程中增加。 (转载请保持文章的完整性,请注明作者和出处) 作者:孙海勇(冲天飞豹) Email:youbest@sina.com 2008年2月12日 以上就是整个LiveCD的制作过程,引导完成后的样子如下: ![]() 更新日志: 2008年2月12日:本文发布。
__________________
我的第一本图书出版了! http://blogold.chinaunix.net/u/13265/showart.php?id=2409099 青橄榄在入口的时候是苦的,过了一会你就可以长久的品味那淡淡而又清爽的甜味。 青橄榄 http://youbest.cublog.cn 青橄榄计划的第一步总算迈出来了,等待它的是万里长征. 做技术要有做技术的原则,决不拿技术做侵权的事情,更不能用来做违法的事情。工作丢了可以再找一个,原则丢了就找不回来了。 此帖于 08-02-13 00:59 被 youbest 编辑. |
|
|
|
|
|
|
|
第 2 帖 | |
|
|
Very Good!
__________________
如果您对使用OSS进行信息技术教育感兴趣,请来www.ictedu.net.cn 聊聊。 |
|
|
|
|
|
|
|
第 3 帖 | |
|
|
顺便请问JH7两个问题:
1 2F盒子什么时候能拿到? 2 盒子可以支持光盘启动吗? |
|
|
|
|
|
|
|
第 4 帖 | |
|
|
研究中,也才知道 SquashFS 已加到内核里了。。。
据我所知,官方的 LFS LiveCD 并非采用 SquashFS 来压缩的
__________________
nO ^^4+73R wH1<h d!5+R0z j00 42E U$1N9 7r% LpHZ 4+ l3457 oN(& |
|
|
|
|
|
|
|
第 5 帖 | |
|
|
这个是我前年做olive的安装光盘时候研究出来的方法。
|
|
|
|
|
|
|
|
第 6 帖 | |
|
|
可有构思加入 aufs 或等同功能的支持否?
|
|
|
|
|
|
|
|
第 7 帖 | |
|
|
可以啊,可以慢慢完善成一个通用的LiveCD,我原来实际制作的olive安装光盘的功能比这个要多一些,这个只是一个基本的功能。
|
|
|
|
|
|
|
|
第 8 帖 | |
|
|
豹老师的文章真的是十分的漂亮啊!
我就喜欢漂亮的。
__________________
CLFS : All Packages http://cross-lfs.org/files/wget/svn/all.list openSUSE-Factory KDE4 2.6.31-rc9-7-desktop x86_64 |
|
|
|
|
|
|
|
第 9 帖 | |
|
|
老大又出好东西了,学学
|
|
|
|
|
|
|
|
第 10 帖 | |
|
|
看完了,想问个问题,LFS的livecd启动时的启动画面是怎么做的啊
|
|
|
|
|
|
|
|
第 11 帖 | |
|
|
哪个启动画面?
|
|
|
|
|
|
|
|
第 12 帖 | |
|
|
就是蓝色背景,有LFS几个字母的那个图
|
|
|
|
|
|
|
|
第 13 帖 | |
|
|
grub ?
|
|
|
|
|
|
|
|
第 14 帖 | |
|
|
etc目录哪去了,在哪步加载呢
|
|
|
|
|
|
|
|
第 15 帖 | ||
|
|
引用:
# 解压缩一些必要的目录和文件 tar xf /cdrom/etc.tar.bz2 -C / |
||
|
|
|
||