注:更簡便的方法請參考此文:定製 Kali Linux Live USB 的另外一種方法node
Kali Linux 自帶了許多實用工具,將 ISO 刻錄到U盤上作成的 Live USB 能夠用在許多場合,好比無盤系統、公共電腦或者別人的電腦等。重啓以後 Live 系統上的改動不會保存,而且 Live 磁盤空間比較小,不能臨時裝備過大的軟件。因此定製本身的 Live 系統就頗有必要了。本文講述的是基於原有的 Live 文件系統定製,準備環境以下:linux
Kali Linux 鏡像:kali-linux-1.0.6-i386.iso U盤一隻:大於4G,並格式化爲 ext4 文件系統 製做環境:Kali Linux
定製的基本思路就是解壓原 ISO 鏡像的 filesystem.squashfs,chroot 進去修改,將修改後的文件系統壓縮,而後寫入U盤。ios
首先,掛載 ISO:bash
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,接着執行:oop
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 系統了。ui
修改完畢以後,不要退出 chroot,執行:.net
apt-get clean rm -rf /tmp/* echo "" > /etc/resolv.conf rm -rf /root/.bash_history
清理垃圾。根據你的操做,可能還須要清理 /root 目錄下的一些文件。code
接着 Ctrl-D
退出 chroot,umount 以前掛載的文件夾:blog
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盤有兩種方法,一種是解壓這裏的 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
便可。
另外一種稍微簡便的方法是不製做 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/