144 lines
3.1 KiB
Bash
Executable File
144 lines
3.1 KiB
Bash
Executable File
#!/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
|
|
|
|
# last hints
|
|
printf "$0: Checks remained to be done:\n"
|
|
printf " * resulting ISO image ${IMG} boots USB stick and/or Optical media.\n"
|
|
printf " * appended FAT partition is mountable.\n"
|
|
printf " * fdisk -lu ${IMG}\n"
|
|
|
|
}
|
|
|
|
#
|
|
main
|