#!/bin/bash IMAGE=$1 IPXEDIR=/srv/ipxe ISODIR=/srv/iso MOUNTSDIR=/srv/mounts IMAGEDIR=${IPXEDIR}/${IMAGE} # error if image directory doesn't exists [ ! -d "${IMAGEDIR}" ] && exit 1 # error if boot file not readable inside image directory [ ! -r "${IMAGEDIR}/boot" ] && exit 2 # if no iso_checksum file, we need no iso, so we exit succesfully [ ! -f "${IMAGEDIR}/iso_checksum" ] && exit 0 ISO_FILENAME=$(cat "${IMAGEDIR}/iso_checksum" | awk '{print $2;}') # error if no filename inside iso_checksum if [ "a$ISO_FILENAME" = "a" ] ; then exit 3 fi # checksum already checked and file exists, we're good if [ -e "${ISODIR}/${ISO_FILENAME}.checksum_ok" ] ; then if [ -r "${ISODIR}/${ISO_FILENAME}" ] ; then exit 0 fi fi # checksum_ok file exists, but no iso... clear the stale file if [ -e "${ISODIR}/${ISO_FILENAME}.checksum_ok" ] ; then if [ ! -e "${ISODIR}/${ISO_FILENAME}" ] ; then rm "${ISODIR}/${ISO_FILENAME}.checksum_ok" fi fi # here we don't have a checksum_ok # we have an iso, let's check it cd "${ISODIR}" if [ -e "${ISODIR}/${ISO_FILENAME}" ] ; then sha256sum --quiet -c ${IMAGEDIR}/iso_checksum && touch "${ISODIR}/${ISO_FILENAME}.checksum_ok" fi # error if no iso url specified if [ ! -r "${IMAGEDIR}/iso_url" ] ; then exit 4 fi ISO_URL=$(cat "${IMAGEDIR}/iso_url") # the previous iso check wasn't ok, maybe an incomplete download, let's resume it # error if download unsuccessful if [ ! -e "${ISODIR}/${ISO_FILENAME}.checksum_ok" ] ; then wget -c -O "${ISODIR}/${ISO_FILENAME}" "${ISO_URL}" || exit 5 # we have a complete iso now, let's check it if [ -e "${ISODIR}/${ISO_FILENAME}" ] ; then sha256sum --quiet -c ${IMAGEDIR}/iso_checksum && touch "${ISODIR}/${ISO_FILENAME}.checksum_ok" || rm "${ISODIR}/${ISO_FILENAME}" # we remove the broken iso if the checksum doesn't match fi fi # errore if download succesfull but checksum mismatch if [ ! -e "${ISODIR}/${ISO_FILENAME}.checksum_ok" ] ; then exit 6 fi # create mount directory if doesn't exists if [ ! -d "${MOUNTSDIR}/${ISO_FILENAME}" ] ; then mkdir -p "${MOUNTSDIR}/${ISO_FILENAME}" || exit 7 fi # if iso already mounted, we're good mountpoint -q "${MOUNTSDIR}/${ISO_FILENAME}" && exit 0 # otherwise, mount the iso mount "${ISODIR}/${ISO_FILENAME}" "${MOUNTSDIR}/${ISO_FILENAME}" || exit 8