Chinaunix首页 | 论坛 | 博客
  • 博客访问: 214635
  • 博文数量: 33
  • 博客积分: 256
  • 博客等级:
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-14 18:39
个人简介

前方的路,充满了艰辛。-

文章分类
文章存档

2014年(1)

2013年(27)

2012年(5)

分类: LINUX

2013-03-28 10:39:04

 
LFS LiveCD, 给我们提供一个很好的学习制作个性化Linux的平台。如果给LiveCD加入自己的一些特色的东西,就可以用来完成自己的工作。
 
下面我就来介绍一下基于LFS LiveCD, 如何制作自己个性化的LiveCD.
 
环境准备:
1.支持loop设备、CD-ROM和ISO9600文件系统的Linux.
2.分区拥有3GB空闲空间
3.LFS LiveCD version 6.2-x
 
步骤:
1.设置环境变量$WORK,使之指向工作目录路径,例如:
 

export WORK=/mnt/lfslivecd

2.LiveCD使用ISO9600文件系统,拥有以下文件:

boot/*

root.ext2

boot目录包含Linux kernel, initramfs映像和bootloader.root.ext2为根文件系统。

为了重新制作该CD,你需要安装以下软件包:

cdrtools-2.01

zisofs-tools-1.0.6

3.加载该CD:

mount /media/cdrom

4.查看root.ext2文件大小:

ls -l /media/cdrom/root.ext2

a) 如果该文件大小约为1.5GB,内核已经为你解压了该CD,在这种情况下,你可以copy该文件到你自己的硬盘中:

cp /media/cdrom/root.ext2 $WORK/root.ext2

b) 如果该文件只有500MB左右,你需要重新编译内核使之支持ZISOFS,或手动解压该文件:

mkzftree -u -F /media/cdrom/root.ext2 $WORK/root.ext2

不管以上哪种情况,你最终获得一个大小约1.5GB的文件$WORK/root.ext2.这可能能满足你的需要,也可能不能满足你的需要。如果你想,你可以使用resize2fs调整文件的大小(e2fsprogs version >= 1.39)。早期版本的e2fsprogs不能直接调整文件系统映像的大小。

6.使用loop设备完成文件系统映像的加载:

mkdir $WORK/root

mount -o loop $WORK/root.ext2 $WORK/root

7.为了保存尽可能多的零扇区,创建并固定加载一个临时目录是一个好主意:

mkdir $WORK/build $WORK/root/build

mount --bind $WORK/build $WORK/root/build

8.加载chroot所需要的目录:

mount -t proc proc $WORK/root/proc

mount -t sysfs sysfs $WORK/root/sys

mount -t devpts devpts $WORK/root/dev/pts

mount -t tmpfs tmpfs $WORK/root/dev/shm

注意:与LFS 书上不同的是,tmpfs没有加载到$WORK/root/dev.这是因为所有必须的设备节点已经创建为静态节点。

9.chroot 至该文件系统:

chroot $WORK/root

10.在该root文件系统,进入/build目录,并安装其他任何你想装的软件包。如果必要,修改其他的文件。

11.从以下网址下载initramfs压缩包:

解压该文件,并从Makefile中删除“include $(ROOT)/Scripts/functions".为你的CD生成一个initramfs映像:

make complie-stage2 VERSION="x86-6.2-custom"

(你可以用你自己的字符串替代"x86-6.2-custom").该步骤将在当前目录下生成initramfs_data.cpio.gz文件。如果该目录不是"/build",把该文件拷贝到/build:

cp initramfs_data.cpio.gz /build

12.离开chroot并清除加载

exit

umount $WORK/root/dev/shm

umount $WORK/root/dev/pts

umount $WORK/root/sys

umount $WORK/root/proc

umount $WORK/root/build

umount $WORK/root/build


13.清除bash的历史:

rm $WORK/root/root/.bash_history

当然你也可以清除其他的历史文件。
 
14.如果你误操作,创建并删除一些文件,这些文件之前占据的扇区不再是初始化时的数据。这些扇区已经没有用了,但是它们不能很好的被压缩。把它们初始为0:
 

dd if=/dev/zero of=$WORK/root/zeroes

这条命令将打印一条信息显示“磁盘空间已满”,这不是一个错误。接着,把该文件从文件系统中删除:

rm $WORK/root/zeroes

15.现在,可以卸载root.ext2 文件了

umount $WORK/root

sync

因为一些kernel的loop驱动存在bug,所以需要sync命令,否则将导致文件系统错误。

16.构建你的LiveCD目录结构

mkdir $WORK/iso

从LFS LiveCD中拷贝/boot目录

cp -r /media/cdrom/boot $WORK/iso

用你自己的initramfs映像替代原有的映像

cp $WORK/build/initramfs_data.cpio.gz $WORK/iso/boot/isolinux/iniramfs_data_cpio.gz

(“cpio"之前的下划线在前面的命令中不是一个typo).

17.压缩root.ext2文件:

mkzftree -F $WORK/root.ext2 $WORK/iso/root.ext2

18.创建CD ISO映像:

cd $WORK/iso ; mkisofs -z -R -l --allow-leading-dots -D -o \
        ../lfslivecd-x86-6.2-custom.iso -b \

boot/isolinux/isolinux.bin \
        -c boot/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
        -V "lfslivecd-x86-6.2-custom" ./

19.刻录并测试,祝开心!

参考文档

阅读(3862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~