# 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 : [email protected] chroot_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 0 fi # 解析命令行参数 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" ;; esac done echo "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 points sudo umount -lf livecd/custom/proc sudo umount -lf livecd/custom/sys #Renew the manifest chmod +w livecd/cd/casper/filesystem.manifest #chmod +w livecd/cd/preseed/xubuntu.seed #cat > livecd/cd/preseed/xubuntu.seed <<EOF #d-i debian-installer/locale string zh_CN #d-i mirror/http/mirror select CN.archive.ubuntu.com #d-i clock-setup/utc boolean false #d-i time/zone string Asia/Shanghai #d-i clock-setup/ntp boolean true #tasksel tasksel/first multiselect xubuntu-desktop #d-i pkgsel/update-policy select none #d-i finish-install/reboot_in_progress note #EOF sudo chroot livecd/custom dpkg-query -W --showformat=‘${Package} ${Version}\n‘ > livecd/cd/casper/filesystem.manifest sudo 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.txt sudo bash -c ‘cd livecd/cd && find . -type f -exec md5sum {} +‘ > livecd/cd/md5sum.txt #Repack iso file # 重新生成iso文件 cd livecd/cd sudo 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"
时间: 2024-10-09 20:30:56