libisoburn/releng/releng_isojigdo

279 lines
7.2 KiB
Plaintext
Raw Normal View History

#!/bin/bash
2011-06-22 13:33:10 +00:00
set -e
2011-06-23 16:25:15 +00:00
START_DIR_DONT_CHANGE=`pwd`
2011-06-27 18:06:29 +00:00
SELF=$(basename "$0")
# required config items
CONFFILE=$HOME/.libburnia-releng/${SELF}.conf
GEN_DATA_DIR=releng_generated_data/${SELF}
TMP_DATA_DIR=releng_generated_data
2011-07-03 14:25:08 +00:00
IMG_EXTRACT_DIR=${GEN_DATA_DIR}/${SELF}_extracted_tree
# to be set by the config file
RELENG_XORRISO=""
RELENG_DIR="${IMG_EXTRACT_DIR}"
2011-07-03 08:23:49 +00:00
RELENG_ISOLINUX_BIN="isolinux/isolinux.bin"
RELENG_BOOT_CAT="isolinux/boot.cat"
RELENG_IMG=cimage
KEEP=0
RES=""
REMOTE_URL="http://cdimage.debian.org/cdimage/daily-builds/daily/current/i386/iso-cd"
REMOTE_IMG="debian-testing-i386-businesscard.iso"
print_help() {
cat << HLP
Usage:
2011-06-27 18:06:29 +00:00
${SELF} -help
2011-06-27 14:50:50 +00:00
# using a config file ${CONFFILE}
2011-06-27 18:06:29 +00:00
${SELF} -rc [-keep]
2011-06-27 14:50:50 +00:00
2011-07-03 15:07:36 +00:00
# without using a config file
${SELF} /path/to/xorriso
2011-06-27 14:50:50 +00:00
# cleanup test generated data directory and exit
2011-06-27 18:06:29 +00:00
${SELF} -cleanup
HLP
}
2011-07-03 14:25:08 +00:00
cleanup() {
# 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 15
chmod +w -R ${GEN_DATA_DIR}
rm -rf ${GEN_DATA_DIR}
printf "${SELF}: Removed %s\n" ${GEN_DATA_DIR}
}
#####################################################################
2011-06-27 14:50:50 +00:00
# cleanup
if [ "${1}" == "-cleanup" ]; then
if [ -d "${GEN_DATA_DIR}" ]; then
2011-07-03 14:25:08 +00:00
cleanup
2011-06-27 14:50:50 +00:00
else
2011-06-27 18:06:29 +00:00
printf "${SELF}: ${GEN_DATA_DIR} does not exist.\n"
2011-06-27 14:50:50 +00:00
fi
exit 0
fi
2011-06-27 14:50:50 +00:00
# help
2011-07-03 15:07:36 +00:00
if [ ! "${1}" ]; then
print_help && exit 3
# config file
2011-07-03 15:07:36 +00:00
elif [ "${1}" == "-rc" -a "${2}" == "-keep" ]; then
KEEP=1
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 4
fi
elif [ "${1}" == "-rc" -a ! "${2}" ]; then
KEEP=0
if [ -e ${CONFFILE} ]; then
. ${CONFFILE}
2011-06-27 18:06:29 +00:00
printf "${SELF}: Using config file %s\n" ${CONFFILE}
else
2011-07-02 18:55:09 +00:00
echo -e "\n${SELF}: Config file ${CONFFILE} not found.\n" && exit 4
fi
2011-07-03 15:07:36 +00:00
# cmdline option
elif [ -x "${1}" ]; then
RELENG_XORRISO="${1}"
# the rest
else
2011-07-02 18:55:09 +00:00
print_help && exit 5
fi
2011-07-03 15:07:36 +00:00
#
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 6
fi
if [ ! -x "${RELENG_XORRISO}" ]; then
printf "${SELF}: $RELENG_XORRISO not found or not an executable.\n"
exit 7
fi
2011-06-27 14:50:50 +00:00
# data dir
if [ -d "${GEN_DATA_DIR}" ]; then
2011-06-27 18:06:29 +00:00
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -cleanup' to remove.\n"
2011-07-03 15:07:36 +00:00
exit 8
2011-06-27 14:50:50 +00:00
else
mkdir "${GEN_DATA_DIR}"
fi
2011-07-02 18:55:09 +00:00
# all must be set at this point
2011-06-27 18:06:29 +00:00
printf "${SELF}: Config items:"
2011-06-28 16:20:31 +00:00
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
2011-06-28 16:20:31 +00:00
"${RELENG_XORRISO}" -version
if ! "${RELENG_XORRISO}" -version | grep libjte >/dev/null 2>&1; then
2011-06-27 18:06:29 +00:00
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"
2011-07-03 09:04:09 +00:00
exit 9
fi
2011-06-24 12:53:07 +00:00
# remove cruft from previous runs
# rm -f ${RES}
2011-06-22 13:33:10 +00:00
# grab remote ISO image, to decompose
if [ ! -f "${TMP_DATA_DIR}"/"${REMOTE_IMG}" ]; then
printf "\n${SELF}: Downloading ${REMOTE_URL}/${REMOTE_IMG}\n"
wget --no-check-certificate -T20 -t3 -O \
"${TMP_DATA_DIR}"/"${REMOTE_IMG}" "${REMOTE_URL}"/"${REMOTE_IMG}"
WGET_RET="$?"
case ${WGET_RET} in
0)
echo -e "\n${SELF}: Downloading successfully completed.\n"
;;
*)
echo -e "\n${SELF}: FAIL: wget returned code: $WGET_RET\n"
exit 10
;;
esac
else
2011-07-03 10:11:23 +00:00
printf "\n${SELF}: Found ISO image: ${TMP_DATA_DIR}/${REMOTE_IMG}\n"
fi
# check for extraction directory existence
2011-07-03 09:04:09 +00:00
if [ -d "${IMG_EXTRACT_DIR}" ]; then
printf "\n${SELF}: Found ${IMG_EXTRACT_DIR}. Please cleanup.\n"
exit 11
else
mkdir "${IMG_EXTRACT_DIR}"
fi
2011-07-03 09:04:09 +00:00
# extract image content
2011-07-03 10:11:23 +00:00
CMD_EXTRACT="${RELENG_XORRISO} -indev ${TMP_DATA_DIR}/${REMOTE_IMG} \
-osirrox on:auto_chmod_on \
2011-07-03 10:11:23 +00:00
-extract / ${IMG_EXTRACT_DIR} \
"
echo -e "${SELF}: Extracting ISO image:\n${CMD_EXTRACT}\n"
set +e
${CMD_EXTRACT}
set -e
2011-06-22 20:32:09 +00:00
# grab an MBR
ISOHYBRID_MBR="${GEN_DATA_DIR}/isohybrid.mbr"
dd if="${TMP_DATA_DIR}/${REMOTE_IMG}" bs=1K count=32 of="${ISOHYBRID_MBR}"
2011-06-22 20:32:09 +00:00
# create FAT partition
APPEND_PART="${GEN_DATA_DIR}/fatpart.fat"
/sbin/mkfs.msdos -n Bla -C "${APPEND_PART}" 8192
# GENERAL section
2011-06-28 16:20:31 +00:00
CMD="${RELENG_XORRISO} \
-as mkisofs \
-quiet \
2011-06-28 16:20:31 +00:00
-o ${GEN_DATA_DIR}/${RELENG_IMG}.iso \
-R \
-V ISOJIGDO \
-partition_offset 16 \
-J -joliet-long \
"
2011-06-25 16:11:43 +00:00
# BOOT section
if [ -f "${IMG_EXTRACT_DIR}"/"${RELENG_ISOLINUX_BIN}" -a -f "${ISOHYBRID_MBR}" -a -f "${APPEND_PART}" ]; then
CMD+="\
-b ${RELENG_ISOLINUX_BIN} \
-c ${RELENG_BOOT_CAT} \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-isohybrid-mbr ${ISOHYBRID_MBR} \
-partition_offset 16 \
-append_partition 2 0x01 ${APPEND_PART} \
"
2011-07-03 07:52:17 +00:00
else
printf "\n${SELF}: FAIL to compose the boot section.\n"
2011-07-03 09:04:09 +00:00
exit 12
fi
# JIGDO section
JIGDO_JIGDO=${GEN_DATA_DIR}/${RELENG_IMG}.jigdo
JIGDO_TEMPLATE=${GEN_DATA_DIR}/${RELENG_IMG}.template
JIGDO_MAP_RHV=`realpath ${RELENG_DIR}`
JIGDO_MAP="Debian=${JIGDO_MAP_RHV}"
# create jigdo MD5 list in base64 format
JIGDO_GEN_MD5=${GEN_DATA_DIR}/${RELENG_IMG}.md5
if which jigdo-gen-md5-list >/dev/null 2>&1; then
2011-07-03 09:29:16 +00:00
printf "${SELF}: Creating MD5 list in hex format in ${JIGDO_GEN_MD5}..."
jigdo-gen-md5-list ${RELENG_DIR} > ${JIGDO_GEN_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"
2011-07-03 09:04:09 +00:00
exit 13
fi
CMD+="\
-jigdo-template-compress gzip \
-checksum_algorithm_iso md5,sha1,sha256,sha512 \
-checksum_algorithm_template md5,sha1,sha256,sha512 \
-jigdo-jigdo ${JIGDO_JIGDO} \
-jigdo-template ${JIGDO_TEMPLATE} \
-jigdo-map ${JIGDO_MAP} \
-md5-list ${JIGDO_GEN_MD5} \
-jigdo-min-file-size 1024 \
"
2011-06-28 16:20:31 +00:00
CMD+="${RELENG_DIR}"
# Run the whole compound command
2011-06-27 18:06:29 +00:00
echo -e "${SELF}: Creating ISO and jigdo representations:\n$CMD\n"
${CMD}
2011-06-22 13:33:10 +00:00
# Create another imange this time from jigdo files
2011-06-23 16:49:42 +00:00
if which jigit-mkimage >/dev/null 2>&1; then
2011-06-27 18:06:29 +00:00
printf "${SELF}: Creating new ISO from jigdo files..."
2011-06-23 16:49:42 +00:00
jigit-mkimage \
-t ${JIGDO_TEMPLATE} \
-j ${JIGDO_JIGDO} \
-m ${JIGDO_MAP} \
2011-06-28 16:20:31 +00:00
-o ${GEN_DATA_DIR}/${RELENG_IMG}.new
2011-06-23 16:49:42 +00:00
printf "Done.\n"
else
2011-06-27 18:06:29 +00:00
printf "\n${SELF}: Not found: jigit-mkimage. Install jigit."
printf "\n${SELF}: See http://www.einval.com/~steve/software/JTE/\n"
2011-07-03 09:04:09 +00:00
exit 14
2011-06-23 16:49:42 +00:00
fi
# trap the exit code of diff and let the Universe explode
2011-06-28 16:20:31 +00:00
diff ${GEN_DATA_DIR}/${RELENG_IMG}.iso ${GEN_DATA_DIR}/${RELENG_IMG}.new
DIFF_RET="$?"
case ${DIFF_RET} in
0)
2011-06-28 16:20:31 +00:00
echo -e "${SELF}: diff ${GEN_DATA_DIR}/${RELENG_IMG}.iso ${GEN_DATA_DIR}/${RELENG_IMG}.new matched.\n"
;;
*)
2011-06-27 18:06:29 +00:00
echo -e "${SELF}: FAIL: diff returned code: $DIFF_RET\n"
;;
esac
2011-06-22 13:33:10 +00:00
# sort out the cruft
2011-06-27 14:31:39 +00:00
if [ ${KEEP} -eq 0 ]; then
2011-07-03 14:25:08 +00:00
cleanup
else
2011-07-03 09:29:16 +00:00
printf "${SELF}: Leaving %s\n" ${GEN_DATA_DIR}
fi
2011-06-23 11:14:41 +00:00
# last hints
2011-06-27 18:06:29 +00:00
printf "\n${SELF}: HINT: manual checks remained to be done:\n"
2011-06-28 16:20:31 +00:00
printf " * ${RELENG_IMG}.img boots from USB stick and/or optical media.\n"
printf " * appended FAT partition is mountable.\n"
2011-06-28 16:20:31 +00:00
printf " * xorriso -indev ${RELENG_IMG}.iso -pvd_info\n"
printf " * fdisk -lu ${RELENG_IMG}.iso\n"
2011-06-23 11:14:41 +00:00
exit 0