首页 > 技术文章 > 修改initrd实现BackTrack 4 Pre Final从硬盘ISO文件启动

修改initrd实现BackTrack 4 Pre Final从硬盘ISO文件启动

2009年8月26日 发表评论 811 views 阅读评论

引导部分修改
引导部分和之前的BT4 BETA一样
C盘boot.ini中添加以下部分:

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

c:grldr="BackTrack 4 Pre Release"


复制grub4dos-0.4.4-2009-06-20.zip中的grldr到C盘根目录下
新建c盘根目录下menu.lst,主要内容来自BT4自带的menu.lst,添加了参数casperroot用于标识查找的路径(e.g. casperroot=BT4 即在磁盘根目录的BT4文件夹下查找ISO等文件,其中的BOOT=suddy boot=suddy则是修改的启动脚本为(initrd.gz解开后)/scripts/suddy, /script/casper为原先默认脚本)
内容如下:

# By default, boot the first entry.

default 0

# Boot automatically after 30 secs.

timeout 30

splashimage=(hd0,4)/BT4/boot/grub/bt4.xpm.gz

title Start BackTrack FrameBuffer (1024x768)

kernel (hd0,4)/BT4/boot/vmlinuz BOOT=suddy boot=suddy casperroot=BT4 nopersistent rw quiet vga=0x317

initrd (hd0,4)/BT4/boot/initrd.gz

title Memory Test

kernel (hd0,4)/BT4/boot/memtest86+.bin

title Boot the First Hard Disk

root (hd0)

chainloader +1

title Start Windows

rootnoverify (hd0,0)

makeactive

chainloader +1

title Shutdown the Computer

halt

title Reboot the Computer

reboot

initrd.gz修改
解压initrd.gz
gunzip initrd.gz

mkdir src

cd src

cpio -iF ../initrd
修改启动脚本src/script/casper
我是直接复制一份原来的casper重命名为suddy,增加对kernel 参数casperroot的识别
如果分区的casperroot指向目录下有liveCD的ISO 则优先选择加载ISO,否则,则查找是否有casper目录,有的话查找filesystem.squashfs进行加载。
如果ISO同目录下有文件名为*.fs的文件(这里用的是Backtrack.fs(ext3)),则使用其作为系统修改的保存地址。
如果ISO同目录下有文件名为*.swap (这里用的是Backtrack.swap(swap)),则用它作为系统的swap分区。
这里面比较郁闷的就是ntfs分区的加载,开始的时候使用默认的mount -t ntfs 进行加载,无论如何都不能mount成可写的,原因没有找到,后来尝试ntfs-3g进行加载,才终于rw的mount上。悲剧啊。
e.g.
mount -t ntfs-3g -o rw,noatime "${devname}" $mountpoint || continue
还有一点就是chroot, liveCD的启动本质上是先在一个目录下配置好linux的运行文件,然后chroot过去,改造中由于这个就碰到了问题。
Backtrack.fs开始的时候是mount在/rwfs下的,liveCD的目录却是/root. 这样在脚本chroot到 /root目录下作为新系统的根目录的时候,mount节点的记录还是在原来的地址,也就是在新的根的上一层目录的rwfs下,这样,在新系统中就无法访问到/rwfs.
解决办法也很简单,使用mount -o move移动到chroot目标目录下级目录即可
e.g.

# move the stofs ; no head in busybox-initramfs

if [ "${storefs_fstype}" != "" ]; then

mkdir -p "${rootmnt}/rwfs"

mount -o move "/storefs" "${rootmnt}/rwfs"

fi

这样在使用 chroot 后就处于能访问的范围。就不影响使用了(路径的变化在使用chroot后系统会自动识别)
详细修改如下:
diff -uprBN casper suddy

相关文章

分类: 技术文章 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.