准备环境
注:更简便的方法请参考此文:定制 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/
来源:oschina
链接:https://my.oschina.net/u/1408707/blog/228964