123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #!/bin/bash
- set -e
- # SELF_DIR=$(dirname $(readlink -f $0))
- # . ${SELF_DIR}/params.sh
- # echo "ISO_FILE=$ISO_FILE, MOUNT_DIR=$MOUNT_DIR, TARGET_DIR=$TARGET_DIR, SQUASH_DIR=$SQUASH_DIR"
- ISO_FILE="my.iso"
- MOUNT_DIR="mount"
- TARGET_DIR="target"
- SQUASH_DIR="squashfs"
- DEB_FILE="my.deb"
- function usage() {
- echo -e "USAGE:\n\
- $(basename $0) --help # 使用帮助\n\
- $(basename $0) --iso file.iso # 挂载iso\n\
- $(basename $0) --umount # 卸载iso\n\
- $(basename $0) --unsquash # 解压squash\n\
- $(basename $0) --insdeb file.deb # 安装deb包\n\
- $(basename $0) --squash # 打包squash\n\
- $(basename $0) --mkiso # 打包iso\n\
- $(basename $0) --mkiso-skip # 打包iso,不重新计算 filesystem.size\n\
- $(basename $0) --mkiso-arm64 # 打包arm64 iso\n\
- $(basename $0) --mkiso-arm64-skip # 打包arm64 iso,不重新计算 filesystem.size"
- exit 1
- }
- # 判断是否为root用户
- if [ "$(id -u)" != "0" ]; then
- echo "please run as root" 1>&2
- exit 1
- fi
- # 判断参数个数
- if [ $# -eq 0 ]; then
- usage
- fi
- ARGS=$(getopt -a -o h -l help,iso:,umount,unsquash,insdeb:,squash,mkiso,mkiso-skip,mkiso-arm64,mkiso-arm64-skip -- "$@")
- eval set -- "${ARGS}"
- while true; do
- case "$1" in
- -h | --help)
- usage
- ;;
- --iso)
- ISO_FILE=$2
- # TARGET_DIR=$(basename ${2%.*})
- # echo "mount -> ${TARGET_DIR}"
- if ! mountpoint -q "${MOUNT_DIR}"; then
- if [ -f "${ISO_FILE}" ]; then
- [ -d "${MOUNT_DIR}" ] || mkdir "${MOUNT_DIR}"
- mount -o loop "${ISO_FILE}" "${MOUNT_DIR}"
- echo -e "\n---> rsync ${MOUNT_DIR} --> ${TARGET_DIR}"
- # rsync -av --progress --exclude=casper/filesystem.squashfs "${MOUNT_DIR}" "${TARGET_DIR}"
- rsync -a --exclude=casper/filesystem.squashfs "${MOUNT_DIR}/" "${TARGET_DIR}"
- else
- echo "${ISO_FILE} not exist!"
- fi
- else
- echo "alread mount"
- fi
- shift
- ;;
- --umount)
- for mpoint in $(df | grep '/dev/loop' | awk '{print $NF}'); do
- echo "umount $mpoint"
- umount $mpoint
- done
- shift
- ;;
- --unsquash)
- echo -e "\n---> 解压 filesystem.squashfs"
- unsquashfs -d "${SQUASH_DIR}" "${MOUNT_DIR}/casper/filesystem.squashfs"
- shift
- ;;
- --insdeb)
- DEB_FILE=$2
- if [ -d "${SQUASH_DIR}" ] && [ -f "${DEB_FILE}" ]; then
- cp "${DEB_FILE}" "${SQUASH_DIR}"
- PKG_NAME=$(dpkg-deb --info "${DEB_FILE}" | grep "Package:" | awk '{print $2}')
- echo -e "\n---> 卸载 ${PKG_NAME}"
- chroot "${SQUASH_DIR}" dpkg -r ${PKG_NAME}
- DEB_FILE_NAME=$(basename ${DEB_FILE})
- echo -e "\n---> 安装 ${DEB_FILE_NAME}"
- chroot "${SQUASH_DIR}" dpkg -i "${DEB_FILE_NAME}"
- rm "${SQUASH_DIR}/${DEB_FILE_NAME}"
- else
- echo "dir '${SQUASH_DIR}' or ${DEB_FILE} not exist!"
- fi
- shift
- ;;
- --squash)
- chroot "${SQUASH_DIR}" dpkg-query -W --showformat='${Package} ${Version}\n' >${TARGET_DIR}/casper/filesystem.manifest
- [ -f ${TARGET_DIR}/casper/filesystem.squashfs ] && rm ${TARGET_DIR}/casper/filesystem.squashfs
- echo -e "\n---> 打包 filesystem.squashfs"
- mksquashfs "${SQUASH_DIR}" ${TARGET_DIR}/casper/filesystem.squashfs
- shift
- ;;
- --mkiso)
- # timestamp=$(date '+%Y-%m-%d_%H-%M-%S')
- timestamp=$(date '+%Y-%m-%d')
- NEW_ISO_FILE="new-${timestamp}.iso"
- echo -e "\n---> 制作 ${NEW_ISO_FILE}"
- printf $(du -sx --block-size=1 ${SQUASH_DIR} | cut -f1) >${TARGET_DIR}/casper/filesystem.size
- cd ${TARGET_DIR}
- rm md5sum.txt
- find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt
- mkisofs -D -r -V "${NEW_ISO_FILE%.*}" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../"${NEW_ISO_FILE}" .
- cd ..
- # ln -sf "${NEW_ISO_FILE}" new.iso
- shift
- ;;
- --mkiso-skip)
- timestamp=$(date '+%Y-%m-%d')
- NEW_ISO_FILE="new-${timestamp}.iso"
- echo -e "\n---> 制作 ${NEW_ISO_FILE},不重新计算 filesystem.size"
- cd ${TARGET_DIR}
- rm md5sum.txt
- find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt
- mkisofs -D -r -V "${NEW_ISO_FILE%.*}" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../"${NEW_ISO_FILE}" .
- cd ..
- # ln -sf "${NEW_ISO_FILE}" new.iso
- shift
- ;;
- --mkiso-arm64)
- timestamp=$(date '+%Y-%m-%d')
- NEW_ISO_FILE="arm64-${timestamp}.iso"
- echo -e "\n---> 制作 ${NEW_ISO_FILE}"
- printf $(du -sx --block-size=1 ${SQUASH_DIR} | cut -f1) >${TARGET_DIR}/casper/filesystem.size
- cd ${TARGET_DIR}
- rm md5sum.txt
- find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt
- mkisofs -J -r -V "${NEW_ISO_FILE%.*}" -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -o ../"${NEW_ISO_FILE}" .
- # I: -input-charset not specified, using utf-8 (detected in locale settings)
- cd ..
- # ln -sf "${NEW_ISO_FILE}" new.iso
- shift
- ;;
- --mkiso-arm64-skip)
- timestamp=$(date '+%Y-%m-%d')
- NEW_ISO_FILE="arm64-${timestamp}.iso"
- echo -e "\n---> 制作 ${NEW_ISO_FILE},不重新计算 filesystem.size"
- cd ${TARGET_DIR}
- rm md5sum.txt
- find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt
- mkisofs -J -r -V "${NEW_ISO_FILE%.*}" -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -o ../"${NEW_ISO_FILE}" .
- # I: -input-charset not specified, using utf-8 (detected in locale settings)
- cd ..
- # ln -sf "${NEW_ISO_FILE}" new.iso
- shift
- ;;
- --)
- shift
- break
- ;;
- esac
- shift
- done
|