linux对zyx目录进行压缩,[原创]源代码搭建应用(二)——建立自己的Linux LiveCD系统...

/squashfs-3.3/kernel-patch/linux-2.6.22/squashfs-patch

2)重新配置内核,添加如下选项

File systems -> Miscellaneous filesystems -> SquashFS 3.3

13265_080212234318.png

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的制作步骤。

准备工作目录:

代码:mkdir -pv /opt/iso/{boot,modules}

cd /opt/iso编译制作LiveCD专用的内核:

LiveCD可以通过initrd来加载需要的设备驱动,因此建议将不是开始运行就需要的功能都制作成模块形式,这样可以减少内核的体积,同时也可以增加系统的灵活性。

内核必须功能(这些功能必须包含在内核本身,不能以模块的形式出现)

Automatic kernel module loading支持:

这样可以方便今后加载模块。

RAM disk support:

initrd是采用RAM disk的方式使用的,因此内核必须支持该功能

同时,这里设定RAM disk的大小的时候为了方便今后可能的扩展,如果在使用的机器上内存不是很紧张的话建议调整的大一些,我在这里把起调整为10M大小

13265_080212234333.png

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系统,如果你想制作的系统包含更多功能可能需要增加自己的软件后再制作压缩文件系统。

代码:cd /

mksquashfs bin lib sbin usr SYSTEM

现在在根目录建立好了一个SYSTEM文件,该文件就是一个经过squashfs压缩过的文件系统,将该文件放入“制作基地”中。

代码:mv /SYSTEM /opt/iso

制作initrd.img:

initrd.img的主要目的是为了在不同的机器环境下只加载适用于该机器的一些内核模块,如果将所有的内核模块都加入到内核文件本身中,那么内核本身将会变的非常臃肿,且占用需要不必占用的资源,因此一般的LiveCD都将大量的驱动编译为模块形式,在必要的时候才将其加载到内存中,这个时候initrd的作用就比较明显,initrd一般可以用来检测系统的硬件来适当的加载各种驱动模块。

下面我们就制作一个简单的initrd的实现。

1)建立initrd

代码:cd /opt/iso/boot

mkdir initrd

dd if=/dev/zero of=initrd.img bs=1M count=8

mkfs.ext2 initrd.img

mount -o loop initrd.img initrd  2)创建initrd下的目录

代码:export INITRD=/opt/iso/boot/initrd

cd ${INITRD}

mkdir bin boot dev etc lib proc sbin sys  3)确定initrd需要的东西

initrd其实是一个最小化的Linux系统,但又必须包含一些检查硬件设备的功能。

1)一个shell,这里我就直接用bash了,如果你觉得大也可以使用其它的shell,比如csh,或者busybox中包含的shell。

代码:cp -a /bin/bash ${INITRD}/bin    2)linux kernel模块组,该模块组应该与引导用的内核相匹配,这里直接使用之前为LiveCD专门编译的内核生成的模块。

代码:mv /opt/iso/modules ${INITRD}/lib    3)Udev,这里我就直接使用udev来进行硬件的检查,并自动加载必要的内核模块了。

代码:cp -a /lib/udev ${INITRD}/lib

代码:cp -a /lib/firmware ${INITRD}/lib

代码:cp -a /dev/{console,null} ${INITRD}/dev

代码:cp -a /etc/udev ${INITRD}/etc    4)modprobe,udev需要使用该命令工具来加载内核。

5)常用的一些命令。

4)编写linuxrc文件

initrd是从linuxrc文件开始运行的(这个是由内核决定的),那么我们所有的工作就从这个文件开始了

首先是一些特定的文件系统,后面的许多程序需要这些文件系统的支持

代码:cat > ${INITRD}/linuxrc << "EOF"

#!/bin/bash

mount -t proc proc /proc

mount -t sysfs sysfs /sys

# 如果你将loop模块化,那么需要加入

/sbin/modprobe loop

# 建立/dev设备目录,并使用udev来创建各种设备文件

mount -n -t tmpfs -o mode=0755 udev /dev

cp --preserve=all --recursive --remove-destination /lib/udev/devices/* /dev

chmod 1777 /dev/shm

echo "" > /sys/kernel/uevent_helper

echo "Starting Udev..."

/sbin/udevd --daemon

mkdir -p /dev/.udev/queue

/sbin/udevtrigger

/sbin/udevsettle

# 创建用户使用环境

# 在/SYSTEM中准备目录结构

export SYSTEM=/SYSTEM

mkdir -p ${SYSTEM}

mount -t tmpfs tmpfs ${SYSTEM}

mkdir -p ${SYSTEM}/{system,cdrom,dev,proc,sys,tmp,mnt,initrd,home,root}

chmod 0777 ${SYSTEM}/tmp

chmod 0700 ${SYSTEM}/root

# 搜索LiveCD所在的设备

for i in /proc/ide/hd*

do

if test `cat $i/media` = "cdrom" ; then

mount -t iso9660 /dev/`basename $i` ${SYSTEM}/cdrom 2>/dev/null

if test $? = 0 ; then

if [ -f ${SYSTEM}/cdrom/LABEL ] ; then

if grep -q "Sunhaiyong's LiveCD" ${SYSTEM}/cdrom/LABEL ; then

break;

fi

fi

umount ${SYSTEM}/cdrom

fi

fi

done

# 加载squashfs压缩的主文件系统

mount -o loop -t squashfs ${SYSTEM}/cdrom/SYSTEM ${SYSTEM}/system

ln -s /system/bin ${SYSTEM}

ln -s /system/sbin ${SYSTEM}

ln -s /system/lib ${SYSTEM}

ln -s /system/usr ${SYSTEM}

# 将根目录从initrd转换到主系统

killall /sbin/udevd

echo 0x0100 > /proc/sys/kernel/real-root-dev

pivot_root ${SYSTEM} ${SYSTEM}/initrd

cd /

# 解压缩一些必要的目录和文件

tar xf /cdrom/etc.tar.bz2 -C /

#转移内核文件系统

mount --move /initrd/dev /dev

mount --move /initrd/proc /proc

mount --move /initrd/sys /sys

mkdir -p /var/{run,log,lock}

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}

chgrp utmp /var/run/utmp /var/log/lastlog

chmod 664 /var/run/utmp /var/log/lastlog

#结束

EOF

现在根据linuxrc用到的命令复制到initrd中

代码:cp -a /bin/{bash,bunzip,bzcat,bzip2,killall,chmod,cp,grep,mount,tar,ln,cat,mkdir} ${INITRD}/bin

cp -a /usr/bin/basename ${INITRD}/bin

cp -a /sbin/pivot_root ${INITRD}/sbin

cp -a /sbin/{udevd,udevsettle,udevtrigger,modprobe} ${INITRD}/sbin复制这些命令所需要的各种动态链接库,可通过ldd命令查看。

代码:cp -a /lib/ld-* ${INITRD}/lib/

cp -a /lib/libc-2.5.1.so ${INITRD}/lib/

cp -a /lib/libc.so.6 ${INITRD}/lib/

cp -a /lib/lib{dl,pthread,rt}-* ${INITRD}/lib/

cp -a /lib/lib{readline,history,ncursesw,dl,bz2,blkid,uuid,rt,pthread}.so* ${INITRD}/lib/

创建一些必要的文件

代码:touch ${INITRD}/etc/fstab创建LiveCD标签

代码:echo "Sunhaiyong's LiveCD" > /opt/iso/LABEL卸载initrd,并将其压缩

代码:cd /opt/iso/boot

umount initrd

gzip -9 initrd.img

建立etc.tar.bz2文件

代码:cd /opt/iso

cp -a /etc ./可以对etc目录进行特定的修改,然后打包压缩

代码:tar -cjf etc.tar.bz2 etc

rm -r etc

创建grub及启动选择

代码:cd /opt/iso

mkdir -p boot/grub

cp -a /usr/lib/grub/i386-pc/stage2_eltorito boot/grub创建menu.lst

代码:cd /opt/iso/boot/grub

cat > menu.lst << "EOF"

default 0

timeout 3

color green/black light-green/black

title MyLiveCD 1.0

root (cd)

kernel /boot/kernel

initrd /boot/initrd.img.gz

生成iso文件

代码:cd /opt

mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o mylivecd.iso iso

好了,现在在/opt目录下将出现一个mylivecd.iso文件,将这个文件刻录到光盘上,就可以用来引导一台x86的机器了。

注意:

如果需要刻录光盘,建议您先用虚拟机来测试一下这个iso文件是否工作正常,避免不必要的浪费。:-)

将这个自己制作的LiveCD光盘插入光驱,很快系统就会完成整个LiveCD的引导过程进入Login状态。

本文到现在为止只是完成了一个LiveCD的基本功能,用户可以根据自己的需求增加各种功能,这些都可以在主系统的后续引导过程中增加。

(转载请保持文章的完整性,请注明作者和出处)

作者:孙海勇(冲天飞豹)

Email:youbest@sina.com

2008年2月12日

以上就是整个LiveCD的制作过程,引导完成后的样子如下:

13265_080212234348.png

更新日志:2008年2月12日:本文发布。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值