scripts/make.iso.preseed.sh

110 lines
3.4 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Notes {{{
# Mount or extract
# At the end, mounting or extracting the iso use the same disk space, but
# mount require root permissions, so i choose to extract the iso.
# }}}
# Vars {{{
DEBIAN_VERSION_NAME="stretch"
DEBIAN_VERSION_NB="9.6.0"
DEBIAN_ISO_DVD_URL="https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-${DEBIAN_VERSION_NB}-amd64-DVD-1.iso"
DEBIAN_ISO_NETINST_URL="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-${DEBIAN_VERSION_NB}-amd64-netinst.iso"
DEBIAN_ISO_MINI_URL="http://ftp.nl.debian.org/debian/dists/${DEBIAN_VERSION_NAME}/main/installer-amd64/current/images/netboot/mini.iso"
TEMP_DIR_ISO=$(mktemp -d -t debian-iso-XXXXXX.tmp)
DEBIAN_DL_ISO_PATH="${TEMP_DIR_ISO}/debian.iso"
# }}}
#USE_DEBIAN_ISO="${DEBIAN_ISO_DVD_URL}"
USE_DEBIAN_ISO="${DEBIAN_ISO_NETINST_URL}"
#USE_DEBIAN_ISO="${DEBIAN_ISO_MINI_URL}"
# Pre-requisites {{{
if [ ! $(command -v 7z) ]; then
printf '%b\n' "ERROR: Please install '7z' bin:\\nsudo apt install p7zip-full"
exit 1
fi
if [ ! $(command -v gzip) ]; then
printf '%b\n' "ERROR: Please install 'gzip' bin:\\nsudo apt install gzip"
exit 1
fi
# }}}
# Test vars {{{
case $# in
1 )
PRESEED_FILE="${1}"
;;
2 )
PRESEED_FILE="${1}"
USER_TEMP_DIR="${2}"
## Check user temp dir argument
if [ ! -d "${USER_TEMP_DIR}" ]; then
printf '%b\n' "ERROR: The first argument should be the path to a directory."
exit 1
fi
TEMP_DIR_ISO=$(mktemp -d -t debian-iso-XXXXXX.tmp -p "${USER_TEMP_DIR}")
;;
* )
printf '%b\n' "Usage:"
printf '%b\n' "$(basename $0) PRESEED_FILE_PATH [TEMP_DIR]"
printf '%b\n' "-------"
printf '%b\n' "PRESEED_FILE_PATH: Required"
printf '%b\n' "Should be the absolut path to the preseed file you want to add to the ISO."
printf '%b\n' "-------"
printf '%b\n' "TEMP_DIR: Optionnal"
printf '%b\n' "If you want to store temporary files and final ISO in a specific directory."
printf '%b\n' "Note: This script require ISO size×2 (eg for DVD. 3.4GB×2)."
printf '%b\n' "Otherwise \$TMPDIR will be used."
;;
esac
## Check preseed argument
if [ ! -f "${PRESEED_FILE}" ]; then
printf '%b\n' "ERROR: The first argument should be the path to preseed file to add."
exit 1
fi
# }}}
# Download and extract ISO {{{
wget -q "${USE_DEBIAN_ISO}" -O "${DEBIAN_DL_ISO_PATH}"
command 7z x -o"${TEMP_DIR_ISO}" -- "${DEBIAN_DL_ISO_PATH}" > /dev/null
rm -rf -- "${DEBIAN_DL_ISO_PATH}"
# }}}
# Manage initrd.gz file {{{
## Exclude initrd.gz files from xen and gtk directories
INITRD_GZ_PATH=$(find "${TEMP_DIR_ISO}" -type f \( -path '*xen*' -o -path '*gtk*' \) -prune -o -name "initrd.gz" -print -quit)
## Uncompress initrd.gz
gunzip -- "${INITRD_GZ_PATH}" || exit 1
## Add preseed file to initrd
INITRD_PATH=$(find "${TEMP_DIR_ISO}" -type f \( -path '*xen*' -o -path '*gtk*' \) -prune -o -name "initrd" -print -quit)
echo "${PRESEED_FILE}" | cpio --quiet -H newc -o -A -F "${INITRD_PATH}"
## Recompress to initrd.gz
gzip -- "${INITRD_PATH}" || exit 1
## Fix permissions in install directory
chmod -w -R -- $(dirname -- "${INITRD_GZ_PATH}")
# }}}
# Generate new md5sum {{{
cd -- "${TEMP_DIR_ISO}" || exit 2
## Exclude some unwanted files
find . -follow -type f -not \( -name "md5sum.txt" -o -name 'mkisofs' -o -name 'Bootable_NoEmulation.img' -o -path '*isolinux*' \) -exec md5sum {} \; > ./md5sum.txt
cd - || exit 2
# }}}
# Generate new bootable iso {{{
# }}}
# If extract image
#rm -rf -- "${TEMP_DIR_ISO}
exit 0