zoukankan      html  css  js  c++  java
  • Woobuntu woobuntu_build.sh hacking

    #               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@wooyun
    
    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}
    ' > 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"
  • 相关阅读:
    EPUB书籍阅读器插件分享
    网页端压缩解压缩插件JSZIP库的使用
    让编辑器支持word的复制黏贴,支持截屏的黏贴
    MYSQL GTID position
    Google SRE
    MySQL大小写敏感
    SpringMVC model 多余字段 忽略
    To B Vs To C
    滴滴 CTO 架构师 业务 技术 战役 时间 赛跑 超前 设计
    Spring Boot 集成Swagger
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5439396.html
Copyright © 2011-2022 走看看