定制 Kali Linux Live ISO

家住魔仙堡 提交于 2019-12-01 08:43:41

准备环境

注:更简便的方法请参考此文:定制 Kali Linux Live USB 的另一种方法

Kali Linux 自带了许多实用工具,将 ISO 刻录到U盘上做成的 Live USB 可以用在许多场合,比如无盘系统、公共电脑或者别人的电脑等。重启之后 Live 系统上的改动不会保存,并且 Live 磁盘空间比较小,不能临时装备过大的软件。所以定制自己的 Live 系统就很有必要了。本文讲述的是基于原有的 Live 文件系统定制,准备环境如下:

	Kali Linux 镜像:kali-linux-1.0.6-i386.iso
	U盘一只:大于4G,并格式化为 ext4 文件系统
	制作环境:Kali Linux 

定制

定制的基本思路就是解压原 ISO 镜像的 filesystem.squashfs,chroot 进去修改,将修改后的文件系统压缩,然后写入U盘。

首先,挂载 ISO:

	mkdir -p /mnt/kaliiso
	mount -o loop kali-linux-1.0.6-i386.iso /mnt/kaliiso

找到 filesystem.squashfs,解压(apt-get install squashfs-tools安装 unsquashfs):

	unsquashfs /mnt/kaliiso/live/filesystem.squashfs /mnt/kalifs

在这里我将文件系统解压到了 /mnt/kalifs,接着执行:

	BASE=/mnt/kalifs
	mount -o bind /dev $BASE/dev
	mount none -t proc proc/
	mount none -t sysfs sys/
	mount none -t devpts dev/pts/
	cp -rf /etc/resolv.conf $BASE/etc/resolv.conf
	chroot $BASE

之后,就可以出于自己的喜好修改 Live 系统了。

修改完毕之后,不要退出 chroot,执行:

	apt-get clean
	rm -rf /tmp/*
	echo "" > /etc/resolv.conf
	rm -rf /root/.bash_history

清理垃圾。根据你的操作,可能还需要清理 /root 目录下的一些文件。

接着 Ctrl-D 退出 chroot,umount 之前挂载的文件夹:

	umount -lf $BASE/proc
	umount -lf $BASE/sys
	umount -lf $BASE/dev/pts #最好先 umount 这个
	umount -lf $BASE/dev

开始制作 squashfs 文件:

	mksquashfs $BASE filesystem.squashfs -e boot

写入U盘

制作镜像

要制作可启动U盘有两种方法,一种是解压这里的 kali-linux-1.0.6-i386.iso, 将 filesystem.squashfs 替换成自己制作好的这个版本,使用 genisoimage(apt-get install genisoimage) 制作成 ISO 镜像,然后 dd 写入 U盘。

首先新建一个目录,

	mkdir -p /mnt/newiso

然后将 /mnt/kaliiso 下除了 filesystem.squashfs 所有文件复制到这里,将自己制作的文件系统复制到 /mnt/newiso/live 接着:

	cd /mnt/newiso
	genisoimage -rational-rock -volid "KaliLive" -cache-inodes -joliet -full-iso9660-filenames -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -output kali-linux.iso /mnt/newiso

这时做好的 kali-linux.iso 的 mbr 没有引导代码,执行:

	dd if=/usr/lib/syslinux/mbr.bin of=kali-linux.iso bs=440 count=1

把现在的 ISO 写入 U盘,假设所在设备是 /dev/sdX,执行:

	dd if=kali-linux.iso of=/dev/sdX

即可。

syslinux 引导

另一种稍微简便的方法是不制作 ISO 镜像,将 /mnt/newiso/ 的所有内容复制到U盘的分区里面(当然 /mnt/newiso/live/filesystem.squashfs 是你定制的那个版本),然后用 syslinux 引导。

将U盘的一个分区挂载到 /mnt/usb,将它格式化成 ext4 文件系统(也可以是 fat,不过我没有尝试过):

	cp -rf /mnt/newiso/* /mnt/usb
	cd /mnt/usb
	mv isolinux syslinux
	mv syslinux/isolinux.bin syslinux/syslinux.bin
	mv syslinux/isolinux.cfg syslinux/syslinux.cfg

然后安装 syslinux 到 U盘上,这里由于使用的是 ext4 文件系统,要用 extlinux 安装。假设挂载到 /mnt/usb 的是 /dev/sdX1:

	extlinux -i /mnt/usb

这会在 /mnt/usb 下生成 ldlinux.sys 文件。

最后写入 syslinux 的 mbr:

	dd if=/usr/lib/extlinux/mbr.bin of=/dev/sdX bs=440 count=1

###使用 syslinux 6.02

Debian 自带 syslinux 的版本是 4.05,目前最新版是 6.02。就我碰到的情况,4.05 版不支持一些新式的键盘。要使用最新版首先到 https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.02.tar.xz下载源码包并执行:

	tar xvf syslinux-6.02.tar.xz
	cd syslinux-6.02
	apt-get install uuid-dev
	make bios	#这里仅编译 bios 版本
	make install

个人经验是,6.02 和 4.05 在寻找配置文件有差别,4.05 会寻找安装目录下的 syslinux.cfg 和 syslinux/syslinux.cfg,而 6.02 只寻找安装目录下的了。所以安装的话要这样:

	extlinux -i /mnt/usb/syslinux

然后更新 syslinux.bin 和 mbr.bin,并将所有 c32 文件复制过去(并不知道具体需要哪些,但在这个版本下缺少某些可能会无法引导):

	cp -rf /usr/share/syslinux/isolinux.bin /mnt/usb/syslinux/syslinux.bin
	cp -rf /usr/share/syslinux/*.c32 /mnt/usb/syslinux/
	dd if=/usr/share/syslinux/mbr.bin of=/dev/sdX count=1 bs=440

用 syslinux 引导相当灵活,省去了制作 ISO 的麻烦。并且如果U盘有多个分区的话,不会像用 dd 那样会格式化分区。实际上对其他分发版的 Live ISO 引导也可以用这种方法,个人强烈推荐。

参考

http://willhaley.com/blog/create-a-custom-debian-live-environment/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!