搜索

Google
 

星期四, 三月 08, 2007

how to hack gentoo livecd

下午花了半个多小时hack了一把gentoo livecd 2006.1,给一个项目裁减好的linux系统制作安装光盘,省了不少时间,gentoo的livecd里关键的就两个文件:image.squashfs和isolinux/gentoo.igz,前者基本上就是一个完整的gentoo base system,后者是一个initramfs,临时的根文件系统,用于加载光盘并让前者正确地接管系统,下面开始说正题吧。。。

1、挂载光盘文件mount -o loop /data/soft/livecd/livecd.iso /mnt/cdrom,/mnt/cdrom下现在就是livecd光盘的完整内容。另外建立一个目录/mnt/mycd把光盘里的文件全部复制过来用于制作光盘。

2、挂载image.squashfs:mount -o loop /mnt/cdrom/image.squashfs /mnt/gentoo(需要你的内核支持squashfs文件系统),全部复制到另一个目录进行hack吧,复制的时候记得加上-pr参数。这个是重头戏,进去好好研究研究,放手去修改配置添加东西吧,你甚至可以把你的开发环境、portage等等全搞进去。搞好了直接mksquashfs * /mnt/mycd/image.squashfs就可以了,不过在mksquashfs之前你得把原文件删掉。

3、复制isolinux/gentoo.igz到你另外一个目录,mv gentoo.igz gentoo.gz && gunzip gentoo.gz,然后正确地解压gentoo文件,得到一个简单的临时用根文件系统,下面这个脚本可以很方便地进行解压,用下面的脚本./unigz.sh gentoo就生成了gentoo.dir目录,执行脚本之前确认一下你的系统里有没有安装File-Slurp包:

#!/usr/bin/perl -w
#

use strict;

use File::Slurp qw(slurp);

my $ifile = slurp($ARGV[0], binmode=> ':raw');
my $newfile;
my $i=1;
my @newfiles = split(/TRAILER!!!/,$ifile);
`mkdir $ARGV[0].dir`;

foreach $newfile (@newfiles)
{
open F, "> ./$ARGV[0].dir/$i";
print F $newfile;
print F "TRAILER!!!\0";
close F;
`cd $ARGV[0].dir; cpio -i -H newc < $i; rm $i; cd ..`;
$i++;
}

进入gentoo.dir目录主要看看init和etc下两个脚本文件initrd.defaults和initrd.scripts,加上自己想要执行的东西即可,当然如果你想大刀阔斧地hack也可以,完了之后在gentoo.dir目录下执行find . -print | cpio --quiet -o -H newc | gzip -9 > ../gentoo.igz。

4、一切就绪之后制作iso文件:
cd /mnt/mycd
mkisofs -v -R -J -P "cd" -p "cd" -V "xxx_installer" -A "xxx-install-cd" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o /data/download/etc.iso .

没有评论: