renamed to releng_<title>
This commit is contained in:
212
releng/releng_isojigdo
Executable file
212
releng/releng_isojigdo
Executable file
@ -0,0 +1,212 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
START_DIR_DONT_CHANGE=`pwd`
|
||||
SELF=$(basename "$0")
|
||||
# required config items
|
||||
RELENG_XORRISO=""
|
||||
RELENG_DIR=""
|
||||
RELENG_IMG=""
|
||||
# optional config items
|
||||
RELENG_ISOLINUX_BIN=""
|
||||
RELENG_BOOT_CAT=""
|
||||
CONFFILE=$HOME/.libburnia-releng/releng_build_isojigdo.conf
|
||||
GEN_DATA_DIR=releng_generated_data/${SELF}
|
||||
KEEP=0
|
||||
RES=""
|
||||
|
||||
print_help() {
|
||||
cat << HLP
|
||||
Usage:
|
||||
${SELF} -help
|
||||
|
||||
# using a config file ${CONFFILE}
|
||||
${SELF} -rc [-keep]
|
||||
|
||||
# without using a config file
|
||||
${SELF} xorriso_cmd IN_dir OUT_image [IN_isolinux] [OUT_bootcat] [-keep]
|
||||
|
||||
# cleanup test generated data directory and exit
|
||||
${SELF} -cleanup
|
||||
HLP
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
# cleanup
|
||||
if [ "${1}" == "-cleanup" ]; then
|
||||
cd "${START_DIR_DONT_CHANGE}" || exit 80
|
||||
if [ -d "${GEN_DATA_DIR}" ]; then
|
||||
rm -rf ${GEN_DATA_DIR}
|
||||
printf "${SELF}: removed %s\n" ${GEN_DATA_DIR}
|
||||
else
|
||||
printf "${SELF}: ${GEN_DATA_DIR} does not exist.\n"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# help
|
||||
if [ ! "${1}" ]; then print_help && exit 10; fi
|
||||
# config file
|
||||
if [ "${1}" == "-rc" ]; then
|
||||
if [ -e ${CONFFILE} ]; then
|
||||
. ${CONFFILE}
|
||||
printf "${SELF}: Using config file %s\n" ${CONFFILE}
|
||||
else
|
||||
echo -e "\n${SELF}: Config file ${CONFFILE} not found.\n" && exit 20
|
||||
fi
|
||||
if [ "${2}" == "-keep" ]; then KEEP=1; fi
|
||||
# command line args
|
||||
elif [ "${3}" ]; then
|
||||
RELENG_XORRISO="${1}"
|
||||
RELENG_DIR="${2}"
|
||||
RELENG_IMG="${3}"
|
||||
if [ "${4}" ]; then
|
||||
RELENG_ISOLINUX_BIN="${4}"
|
||||
if [ "${5}" ]; then RELENG_BOOT_CAT="${5}"; fi
|
||||
if [ "${4}" == "-keep" -o "${5}" == "-keep" -o "${6}" == "-keep" ]; then KEEP=1; fi
|
||||
fi
|
||||
# the rest
|
||||
else
|
||||
print_help && exit 30
|
||||
fi
|
||||
|
||||
# data dir
|
||||
if [ -d "${GEN_DATA_DIR}" ]; then
|
||||
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
|
||||
printf "\n${SELF}: use '${SELF} -cleanup' to remove.\n"
|
||||
exit 2
|
||||
else
|
||||
mkdir "${GEN_DATA_DIR}"
|
||||
fi
|
||||
|
||||
if [ "${RELENG_XORRISO}" == "" -o "${RELENG_DIR}" == "" -o "${RELENG_IMG}" == "" ]; then
|
||||
echo -e "\n${SELF}: xorriso_cmd IN_dir and OUT_image are required\n"
|
||||
exit 40
|
||||
fi
|
||||
|
||||
if [ ! -x "${RELENG_XORRISO}" ]; then
|
||||
printf "${SELF}: Not found or not an executable: $RELENG_XORRISO\n"
|
||||
exit 50
|
||||
fi
|
||||
|
||||
# all must be set at this point
|
||||
printf "${SELF}: Config items:"
|
||||
printf "\n\txorriso_cmd=${RELENG_XORRISO}\n\tIN_dir=${RELENG_DIR}\n\tOUT_image=${RELENG_IMG}.iso"
|
||||
printf "\n\tIN_isolinux=${RELENG_ISOLINUX_BIN}\n\tOUT_bootcat=${RELENG_BOOT_CAT}\n"
|
||||
RES="${RELENG_IMG}.iso ${RELENG_IMG}.new ${RELENG_IMG}.md5 ${RELENG_IMG}.jigdo ${RELENG_IMG}.template"
|
||||
|
||||
# xorriso version details, incl. underlying libraries
|
||||
"${RELENG_XORRISO}" -version
|
||||
if ! "${RELENG_XORRISO}" -version | grep libjte >/dev/null 2>&1; then
|
||||
printf "\n${SELF}: JTE not supported with this xorriso build. Install jigit and rebuild."
|
||||
printf "\n${SELF}: See http://www.einval.com/~steve/software/JTE/\n"
|
||||
exit 51
|
||||
fi
|
||||
|
||||
# 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 "${SELF}: Creating MD5 list in hex format..."
|
||||
jigdo-gen-md5-list ${RELENG_DIR} > ${GEN_DATA_DIR}/${RELENG_IMG}.md5
|
||||
printf "Done.\n"
|
||||
else
|
||||
printf "\n${SELF}: Not found: jigdo-gen-md5-list. Install jigit."
|
||||
printf "\n${SELF}: See http://www.einval.com/~steve/software/JTE/\n"
|
||||
exit 60
|
||||
fi
|
||||
|
||||
# build the command - general section
|
||||
CMD="${RELENG_XORRISO} \
|
||||
-as mkisofs \
|
||||
-quiet \
|
||||
-o ${GEN_DATA_DIR}/${RELENG_IMG}.iso \
|
||||
-R \
|
||||
-V ISOJIGDO \
|
||||
-partition_offset 16 \
|
||||
-J -joliet-long \
|
||||
"
|
||||
|
||||
# boot section TODO
|
||||
#if [ "${RELENG_ISOLINUX_BIN}" -a "${RELENG_BOOT_CAT}" ]; then
|
||||
#CMD+=\
|
||||
# -b ${RELENG_ISOLINUX_BIN} \ # NOTE: boot/isolinux/isolinux.bin
|
||||
# -c ${RELENG_BOOT_CAT} \ # NOTE: boot/boot.cat
|
||||
# -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 \ # TODO: create one unconditionally?
|
||||
#fi
|
||||
|
||||
# jigdo section
|
||||
CMD+="\
|
||||
-jigdo-template-compress gzip \
|
||||
-checksum_algorithm_iso md5,sha1,sha256,sha512 \
|
||||
-checksum_algorithm_template md5,sha1,sha256,sha512 \
|
||||
-jigdo-jigdo ${GEN_DATA_DIR}/${RELENG_IMG}.jigdo \
|
||||
-jigdo-template ${GEN_DATA_DIR}/${RELENG_IMG}.template \
|
||||
-jigdo-map Debian=${RELENG_DIR} \
|
||||
-md5-list ${GEN_DATA_DIR}/${RELENG_IMG}.md5 \
|
||||
-jigdo-min-file-size 1024 \
|
||||
"
|
||||
|
||||
CMD+="${RELENG_DIR}"
|
||||
|
||||
# run it
|
||||
echo -e "${SELF}: Creating ISO and jigdo representations:\n$CMD\n"
|
||||
${CMD}
|
||||
|
||||
# create another one from jigdo files
|
||||
if which jigit-mkimage >/dev/null 2>&1; then
|
||||
printf "${SELF}: Creating new ISO from jigdo files..."
|
||||
jigit-mkimage \
|
||||
-t ${GEN_DATA_DIR}/${RELENG_IMG}.template \
|
||||
-j ${GEN_DATA_DIR}/${RELENG_IMG}.jigdo \
|
||||
-m Debian=${RELENG_DIR} \
|
||||
-o ${GEN_DATA_DIR}/${RELENG_IMG}.new
|
||||
printf "Done.\n"
|
||||
else
|
||||
printf "\n${SELF}: Not found: jigit-mkimage. Install jigit."
|
||||
printf "\n${SELF}: See http://www.einval.com/~steve/software/JTE/\n"
|
||||
exit 70
|
||||
fi
|
||||
|
||||
# trap the exit code of diff and let the Universe explode
|
||||
diff ${GEN_DATA_DIR}/${RELENG_IMG}.iso ${GEN_DATA_DIR}/${RELENG_IMG}.new
|
||||
DIFF_RET="$?"
|
||||
case ${DIFF_RET} in
|
||||
0)
|
||||
echo -e "${SELF}: diff ${GEN_DATA_DIR}/${RELENG_IMG}.iso ${GEN_DATA_DIR}/${RELENG_IMG}.new matched.\n"
|
||||
;;
|
||||
*)
|
||||
echo -e "${SELF}: FAIL: diff returned code: $DIFF_RET\n"
|
||||
;;
|
||||
esac
|
||||
|
||||
# sort out the cruft
|
||||
if [ ${KEEP} -eq 0 ]; then
|
||||
# safety net, just in case -> we want to be in the starting
|
||||
# directory before removing whatever self-generated stuff
|
||||
cd "${START_DIR_DONT_CHANGE}" || exit 80
|
||||
rm -rf ${GEN_DATA_DIR}
|
||||
printf "${SELF}: removed %s\n" ${GEN_DATA_DIR}
|
||||
else
|
||||
printf "${SELF}: leaving %s\n" ${GEN_DATA_DIR}
|
||||
fi
|
||||
|
||||
# last hints
|
||||
printf "\n${SELF}: HINT: manual checks remained to be done:\n"
|
||||
printf " * ${RELENG_IMG}.img boots from USB stick and/or optical media.\n"
|
||||
printf " * appended FAT partition is mountable.\n"
|
||||
printf " * xorriso -indev ${RELENG_IMG}.iso -pvd_info\n"
|
||||
printf " * fdisk -lu ${RELENG_IMG}.iso\n"
|
||||
|
||||
exit 0
|
Reference in New Issue
Block a user