#!/bin/bash set -e # required XOR="" DIR="" IMG="" # optional ISOLINUX_BIN="" BOOT_CAT="" CONFFILE=$HOME/releng_build_isojigdo.conf CLEAN=0 print_help() { cat << HLP Usage: $0 -help # using a config file ${CONFFILE} $0 -rc [-clean] config file content: XOR=/path/to/xorriso DIR=/path/to/input_dir IMG=/path/to/out_image ISOLINUX_BIN=/path/to/isolinux.bin BOOT_CAT=/path/to/boot.cat # without using a config file $0 xorriso_cmd IN_dir OUT_image [IN_isolinux] [IN_bootcat] [-clean] HLP } # help if [ ! "${1}" -o "${1}" == "-help" ]; then print_help && exit 0; fi # config file if [ "${1}" == "-rc" ]; then if [ -e ${CONFFILE} ]; then . ${CONFFILE} else echo -e "$0: Config file ${CONFFILE} not found.\n" && exit 1 fi if [ "${2}" == "-clean" ]; then CLEAN=1; fi # command line args elif [ "${3}" ]; then XOR="${1}" DIR="${2}" IMG="${3}" if [ "{4}" ]; then ISOLINUX_BIN="${4}" if [ "{5}" ]; then BOOT_CAT="${5}"; fi if [ "${4}" == "-clean" -o "${5}" == "-clean" -o "${6}" == "-clean" ]; then CLEAN=1; fi fi # the rest else print_help && exit 0 fi RES="${IMG}.iso ${IMG}.new ${IMG}.md5 ${IMG}.jigdo ${IMG}.template" ############################################################ main() { # remove cruft from previous runs # rm -f ${RES} # grab an MBR # dd if=some.iso bs=1K count=32 of=somembr.sysarea # create FAT partition # /sbin/mkfs.msdos -n Bla -C fatpart.fat 8192 # create MD5 list in base64 format if which jigdo-gen-md5-list >/dev/null 2>&1; then printf "$0: Creating MD5 list in hex format..." jigdo-gen-md5-list ${DIR} > ${IMG}.md5 printf "Done.\n" else printf "$0: Not found: jigdo-gen-md5-list. Install jigit.\n" exit 1 fi # build the command - general section CMD="${XOR} \ -as mkisofs \ -o ${IMG}.iso \ -R \ -V ISOJIGDO \ -partition_offset 16 \ -J -joliet-long \ " # boot section TODO #if [ "${5}" -a "${6}" ]; then #CMD+=\ # -b boot/isolinux/isolinux.bin \ # $5 # -c boot/boot.cat \ # $6 # -no-emul-boot -boot-load-size 4 -boot-info-table \ # -isohybrid-mbr somembr.sysarea \ # TODO: figure out where to grab one # -partition_offset 16 \ # -append_partition 2 0x01 fatpart.fat \ #fi # jigdo section CMD+="\ -jigdo-template-compress gzip \ -checksum_algorithm_iso md5,sha1,sha256,sha512 \ -checksum_algorithm_template md5,sha1,sha256,sha512 \ -jigdo-jigdo ${IMG}.jigdo \ -jigdo-template ${IMG}.template \ -jigdo-map Debian=${DIR} \ -md5-list ${IMG}.md5 \ -jigdo-min-file-size 1024 \ " CMD+="${DIR}" # run it echo -e "$0: Creating ISO and jigdo representations:\n$CMD\n" ${CMD} # create another one from jigdo files jigit-mkimage \ -t ${IMG}.template \ -j ${IMG}.jigdo \ -m Debian=${DIR} \ -o ${IMG}.new # diff'em diff ${IMG}.iso ${IMG}.new # sort out the cruft if [ ${CLEAN} -eq 1 ]; then rm -f ${RES} printf "removed: %s\n" ${RES} else printf "left: %s\n" ${RES} fi } # main