# Woobuntu woobuntu_build.sh hacking# 说明:# 有时候因为一些需求,我们需要定制一些系统,包括Ubuntu系统,于是# 我们自然需要知道如何去解包一个Ubuntu镜像,如何合成一个Ubuntu镜像。# 当然这也有助于后续对Linux整套系统的定制。## 2016-4-27 深圳 南山平山村 曾剑锋# ## 参考文档:# 1. linux 下如何制作 iso 格式的启动镜像# https://www.v2ex.com/t/252789# 2. Ubuntu下制作iso文件的简单方法# http://www.xuebuyuan.com/1292033.html# 3. Mount ISO Read/Write# http://www.linuxquestions.org/questions/linux-software-2/mount-iso-read-write-329688/# 4. Woobuntu# https://github.com/woolabs/Woobuntu#!/bin/bash#Author : woolabs team #Maintainer : lxj616@wooyunchroot_args="-c"# 帮助信息show_help() {echo " __ __ _ _ ";echo "/ / /\ \ \___ ___ | |__ _ _ _ __ | |_ _ _ ";echo "\ \/ \/ / _ \ / _ \| '_ \| | | | '_ \| __| | | |";echo " \ /\ / (_) | (_) | |_) | |_| | | | | |_| |_| |";echo " \/ \/ \___/ \___/|_.__/ \__,_|_| |_|\__|\__,_|";echo " ";echo "Usage:"echo "-f The ubuntu base image you wanna use for woobuntu build"echo "-o The output woobuntu image"echo "-x Xubuntu optimization for zh_CN & pre-configuration"echo "-g gnome-ubuntu optimization for zh_CN & pre-configuration"echo "-u Ubuntu original optimization for zh_CN & pre-configuration"echo "-N Pre-install NVIDIA driver (Use with causion)"echo "-V Pre-install Virtualbox-guest additions (Use with causion)"echo ""echo "Example:"echo ""echo "./woobuntu_build.sh -f xubuntu-15.10-desktop-amd64.iso -o woobuntu-current-amd64.iso -x"}# 参数为0的时候显示帮助信息if [ $# = 0 ]then show_help exit 0fi# 解析命令行参数while getopts "h?f:o:xguNV" opt; do case "$opt" in h|\?) show_help exit 0 ;; f) input_iso=$OPTARG ;; o) output_iso=$OPTARG ;; x) chroot_args="$chroot_args -x" ;; g) chroot_args="$chroot_args -g" ;; u) chroot_args="$chroot_args -u" ;; N) chroot_args="$chroot_args -N" ;; V) chroot_args="$chroot_args -V" ;; esacdoneecho "You need following packages to continue:squashfs-tools dchroot"#Depends on dchroot to create iso# 依赖root权限生成iso文件sudo apt-get install squashfs-tools dchroot mkisofs -y#Create temp folder to mount origin iso# 创建temp文件夹用于挂载源iso文件mkdir /tmp/livecd#Mount origin iso to temp folder to extract squashfs file# 挂载源iso文件到/tmp/livecd目录sudo mount -o loop $input_iso /tmp/livecd#Create temp folder to store iso image files# 创建temp目录来存放iso镜像文件mkdir -p livecd/cd#Don't copy squashfs file as we will repack this file later# --exclude: 指定不需要拷贝的文件;# /casper/filesystem.squashfs文件使用后面合成的文件,所以这里可以忽略拷贝rsync --exclude=/casper/filesystem.squashfs -a /tmp/livecd/ livecd/cd#Create temp folder to mount squashfs file & copy everything out for modification# 创建temp文件夹,用于挂载squashfs文件,并且拷贝出所有的内容用于修改mkdir livecd/squashfs livecd/custom#Need to load before use# 在使用squashfs工具之前,需要加载一下sudo modprobe squashfs#Mount the squash file# 挂载squash文件系统sudo mount -t squashfs -o loop /tmp/livecd/casper/filesystem.squashfs livecd/squashfs/#Copy everything out for modification(squashfs file itself is read-only)# 将squash文件系统内的文件全部拷贝出来,主要是由于squashfs是一个只读文件系统sudo cp -a livecd/squashfs/* livecd/custom#Enable network related configuration inside chroot env# 使能网络功能,因为后续要使用网络更新程序sudo cp /etc/resolv.conf /etc/hosts livecd/custom/etc/#Copy wooyun-firefox user-profile into chroot env# 拷贝wooyun-firefox user-profile到chroot目录,供后续使用sudo cp -r .mozilla livecd/custom/root#Drop the chroot install script inside# 拷贝woobuntu_chroot_build.sh文件到chroot目录sudo cp woobuntu_chroot_build.sh livecd/custom/root#Execute the install script inside chroot env# 执行chroot相关的脚本sudo chroot livecd/custom /bin/bash -x /root/woobuntu_chroot_build.sh $chroot_args#Everything should be done except re-check the mount pointssudo umount -lf livecd/custom/procsudo umount -lf livecd/custom/sys#Renew the manifestchmod +w livecd/cd/casper/filesystem.manifest#chmod +w livecd/cd/preseed/xubuntu.seed#cat > livecd/cd/preseed/xubuntu.seed <livecd/cd/casper/filesystem.manifestsudo cp livecd/cd/casper/filesystem.manifest livecd/cd/casper/filesystem.manifest-desktop#Repack the squashfs file# 重新打包squashfs文件系统sudo mksquashfs livecd/custom livecd/cd/casper/filesystem.squashfs#Re-create the md5 file# 重新计算md5文件sudo rm livecd/cd/md5sum.txtsudo bash -c 'cd livecd/cd && find . -type f -exec md5sum {} +' > livecd/cd/md5sum.txt#Repack iso file# 重新生成iso文件cd livecd/cdsudo mkisofs -r -V "Woobuntu-Live" -b isolinux/isolinux.bin -c isolinux/boot.cat -cache-inodes -J -l -no-emul-boot -boot-load-size 4 -boot-info-table -o output.iso .mv output.iso ../../ cd ../../mv output.iso $output_iso#Umount and clean# 卸载相关内容sudo umount livecd/squashfs/sudo umount /tmp/livecd#sudo rm -fr livecd/echo "build finished"