Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162860
  • 博文数量: 32
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 415
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-07 14:39
个人简介

微信hillpigt

文章分类
文章存档

2011年(1)

2010年(9)

2009年(8)

2008年(14)

我的朋友

分类: LINUX

2008-10-15 21:53:13

本文主要基于孙海勇 源代码搭建应用(二)——建立自己的Linux LiveCD系统 然后写了个脚本,这样大家就很容易的做出自己的LiveCD,而尽量减少错误。脚本见附件。所以使用本文时应参照孙海勇这篇文章。

准备工作:
  1. 已经制作好的LFS 6.3。我以前有两篇文章可以减轻工作量,自动化或半自动化生成lfs6.3,大概需要3个小时左右。LFS6.3半自动化脚本 以及LFS6.3自动化脚本-之ALFS(jhalfs-2.3.1)
  2. (可选,不过推荐,只会耗费21分钟左右)LFS6.3完成后继续安装openssh和samba client。主要目的是为了可以在windows里面用客户端SecureCRT来连接wmware中的lfs 6.3直接copy&paste了。安装samba客户端主要用来方便与windows共享文件。见我的另一篇文章:LFS6.3完成后继续安装openssh和samba client
  3. 01.sh,见附件
  4. squashfs-3.3。下载地址
  5. Cdrtools-2.01和2个补丁。参照: 下载地址:  
把以上5个文件放入 windows共享目录中,如share  
启动系统
lfs里启动ssh,这样就可以windows里面的SecureCRT可以登入了
/usr/sbin/sshd
试一下挂载windows里面的共享目录:
mount -t smbfs -o username=***,password=*** //192.168.187.1/share /mylfsshell/
cp /mylfsshell/*.* /sources

下面总耗时:40分钟左右。

下面开工:
编译安装必要的工具:(和孙海勇文一样,此处照搬,只是更详细的写了些命令)
1、squashfs的内核补丁
   
本文创建的系统利用的是squashfs方式压缩文件系统,所以必须让内核支持squashfs
  1)下载squashfs-3.3,并解压缩,在其目录中有linux kernel的补丁,找到你需要的内核补丁,因为LFS-6.3使用的是Linux-2.6.22.5这个版本,因此在内核的源代码目录中使用
      tar xvf squashfs3.3.tgz
      tar xvf linux-2.6.22.5.tar.bz2
      cd linux-2.6.22.5
      patch -Np1 -i /sources/squashfs-3.3/kernel-patches/linux-2.6.22/squashfs-patch
2)重新配置内核,添加如下选项
     File systems -> Miscellaneous filesystems -> SquashFS 3.3

  3)重新编译安装内核,使其支持squashfs
2、安装squashfs-tools
  内核支持squashfs后,还需要有专门的工具来创建squasfs文件,该工具包含在squashfs软件包中,进入squashfs-tools
       cd squashfs3.3/squashfs-tools/
    make
    install -m 755 unsquashfs mksquashfs /usr/bin
现在系统已经可以创建并识别squashfs文件系统了。
3、安装cdrtools-2.01
  安装这个包是为了使用其包含的命令mkisofs,这个是建立光盘镜像的工具。编译该包可以参考BLFS手册中该软件包部分。
       tar xvf cdrtools-2.01.tar.bz2
       cd cdrtools-2.01
    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专用的内核:
  LiveCD可以通过initrd来加载需要的设备驱动,因此建议将不是开始运行就需要的功能都制作成模块形式,这样可以减少内核的体积,同时也可以增加系统的灵活性。
  内核必须功能(这些功能必须包含在内核本身,不能以模块的形式出现)
      
    Automatic kernel module loading支持:
(Loadable module support-> Automatic kernel module loading选为includes)
      这样可以方便今后加载模块。
    RAM disk support:
(Device Drivers->Block devices->RAM disk support选为includes )
      initrd是采用RAM disk的方式使用的,因此内核必须支持该功能
      同时,这里设定RAM disk的大小的时候为了方便今后可能的扩展,如果在使用的机器上内存不是很紧张的话建议调整的大一些,我在这里把起调整为10M大小

    ext2支持:
(File systems->Second extended fs support 选为includes )
      因为initrd.img本身是一个ext2的文件系统,所以要想使用initrd就必须让内核能够识别出ext2文件系统。
  内核必须的功能,但可以使用模块的形式出现
    loop支持:
(Device Drivers->Block devices->Loopback device support ,我这里选为*,即includes)
      squashfs需要loop的支持才能正常使用,因此必须包含此功能。
    squashfs支持:
(File systems->Miscellaneous filesystems->  SquashFS 3.3 - Squashed file system support,我这里选为M )
      这里制作LiveCD的方法中,压缩的文件系统采用squashfs,所以内核也必须包含此功能。
  非必须功能:
    如网卡、声卡、磁盘驱动等,这些并不是一定需要的,可以根据你的LiveCD的功能来进行取舍,如你需要制作一个应急修复盘,那么磁盘驱动方面就比较重要了,而声卡什么的则不是必须的了;而如果你是要制作一个桌面的LiveCD,那么声卡什么的则非常必要了。
  编译内核,
  
make make modules_install cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.22.5 cp -v System.map /boot/System.map-2.6.22.5 cp -v .config /boot/config-2.6.22.5 install -d /usr/share/doc/linux-2.6.22.5 cp -r Documentation/* /usr/share/doc/linux-2.6.22.5
将内核文件放入/opt/iso/boot目录中,将模块放入/opt/iso/modules中。(这里我在shell脚本里面是采用如下两条命令:
cp -v arch/i386/boot/bzImage /opt/iso/boot/kernel

cp -r /lib/modules/2.6.22.5 /opt/iso/modules/,所以你不用输入)


好,下面shell开始发挥威力了.
mv /sources/01.sh ~
cd ~
./01.sh

然后大功告成了:
shell会在你的windows里的share目录中生成mylinux.iso文件,是不是很简单。

关于shell里面的主要说明:
1.在创建标签的时候一般会把自己的名字写上:
echo "创建LiveCD标签"
echo "SunPeng's LiveCD" > /opt/iso/LABEL
但是别忘了修改下面这条语句,一定要一致:
if grep -q "SunPeng's LiveCD" ${SYSTEM}/cdrom/LABEL ; then
2.loop设备我没有作为module,所以注释掉了这条语句:
#/sbin/modprobe loop
3.孙海勇原文中的语句
pivot_root ${SYSTEM} ${SYSTEM}/initrd
我的系统出现问题,改成下面的这条语句:
/sbin/pivot_root ${SYSTEM} ${SYSTEM}/initrd
4.孙海勇原文中的语句
cp -a /bin/{bash,bunzip,bzcat,bzip2,killall,chmod,cp,grep,mount,tar,ln,cat,mkdir} ${INITRD}/bin
我系统中没有bunzip,改成bunzip2,以及增加umount
cp -a /bin/{bash,bunzip2,bzcat,bzip2,killall,chmod,cp,grep,mount,umount,tar,ln,cat,mkdir} ${INITRD}/bin

------------------

文件: 01.zip
大小: 1KB
下载: 下载

------------------
另外,附上一些参考资料,对大家有用:
  1. http://blog.chinaunix.net/u/13265/showart.php?id=477664 源代码搭建应用(二)——建立自己的Linux LiveCD系统
  2. 想做个自己的 lfs distribution 吗
  3. LiveCD是这么产生的
  4. 精通initramfs构建step by step
  5. http://blog.linuxeden.com/?uid-86833-action-viewspace-itemid-3515 制作基于 grub 的 linux liveCD
  6. LFS-制作自己个性化的LiveCD

加我私人微信,交流技术。


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

chinaunix网友2009-07-25 13:31:59

对了,还有“/sources/squashfs-3.3/kernel-patches/linux-2.6.22“此处,我进行过和中不是“/sources/squashfs-3.3/kernel-patches/linux-2.6.22“而是“/sources/squashfs3.3/kernel-patches/linux-2.6.22“也就是说”squashfs3.3“是不是多了一横线!当然我只是说我在进行过程中是这样的!

chinaunix网友2009-07-25 13:26:39

“ patch -Np1 -i /sources/squashfs-3.3/kernel-patches/linux-2.6.22/squashfs-patch”不知道是不是有问题! 我在进行过程中,没有发现“/sources/squashfs-3.3/kernel-patches/linux-2.6.22/squashfs-patch”而是“/sources/squashfs-3.3/kernel-patches/linux-2.6.22/squashfs3.3-patch”也就是说,这里可能写掉了“3.3”。当然我的是这样的,不知道您的是不是这样!

hillpig2008-11-07 11:32:12

抱歉是我的失误,不应该注释掉,已改正。

chinaunix网友2008-11-05 19:28:36

为何要将mksquashfs bin lib sbin usr SYSTEM mv /SYSTEM /opt/iso注释 有何用意?