commit: 4f9b89c7e7e0de6f3a0dbc5cc45f7bd862cbe80c Author: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org> AuthorDate: Fri Sep 27 23:03:39 2024 +0000 Commit: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org> CommitDate: Fri Sep 27 23:03:39 2024 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=4f9b89c7
Copy create-iso to create-qcow2 Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org> targets/support/create-qcow2.sh | 206 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/targets/support/create-qcow2.sh b/targets/support/create-qcow2.sh new file mode 100755 index 00000000..aa597a59 --- /dev/null +++ b/targets/support/create-qcow2.sh @@ -0,0 +1,206 @@ +#!/bin/bash + +source ${clst_shdir}/support/functions.sh + +## START RUNSCRIPT + +# Check for our CD ISO creation tools +case ${clst_hostarch} in + alpha) + cdmaker="xorriso" + cdmakerpkg="dev-libs/libisoburn" + ;; + mips) + cdmaker="sgibootcd" + cdmakerpkg="sys-boot/sgibootcd" + ;; + ppc*|powerpc*|sparc*) + cdmaker="grub-mkrescue" + cdmakerpkg="dev-libs/libisoburn and sys-boot/grub:2" + ;; + amd64|arm64|ia64|x86|i?86) + cdmaker="grub-mkrescue" + # grub-mkrescue requires: + # xorriso from libisoburn + # mkisofs from cdrtools + # mformat from mtools + cdmakerpkg="sys-fs/mtools, dev-libs/libisoburn, sys-boot/grub:2, and app-cdr/cdrtools" + ;; + *) + cdmaker="mkisofs" + cdmakerpkg="app-cdr/cdrtools" + ;; +esac + +[ ! -f /usr/bin/${cdmaker} ] \ + && echo && echo && die \ + "!!! /usr/bin/${cdmaker} is not found. Have you merged ${cdmakerpkg}?" \ + && echo && echo + +# If not volume ID is set, make up a sensible default +if [ -z "${clst_iso_volume_id}" ] +then + case ${clst_livecd_type} in + gentoo-*) + case ${clst_hostarch} in + alpha) + clst_iso_volume_id="Gentoo Linux - Alpha" + ;; + amd64) + clst_iso_volume_id="Gentoo Linux - AMD64" + ;; + arm) + clst_iso_volume_id="Gentoo Linux - ARM" + ;; + arm64) + clst_iso_volume_id="Gentoo Linux - ARM64" + ;; + hppa) + clst_iso_volume_id="Gentoo Linux - HPPA" + ;; + ia64) + clst_iso_volume_id="Gentoo Linux - IA64" + ;; + m68k) + clst_iso_volume_id="Gentoo Linux - M68K" + ;; + mips) + clst_iso_volume_id="Gentoo Linux - MIPS" + ;; + ppc*|powerpc*) + clst_iso_volume_id="Gentoo Linux - PowerPC" + ;; + s390) + clst_iso_volume_id="Gentoo Linux - S390" + ;; + sh) + clst_iso_volume_id="Gentoo Linux - SH" + ;; + sparc*) + clst_iso_volume_id="Gentoo Linux - SPARC" + ;; + x86) + clst_iso_volume_id="Gentoo Linux - x86" + ;; + *) + clst_iso_volume_id="Catalyst LiveCD" + ;; + esac + esac +fi + +if [ "${#clst_iso_volume_id}" -gt 32 ]; then + old_clst_iso_volume_id=${clst_iso_volume_id} + clst_iso_volume_id="${clst_iso_volume_id:0:32}" + echo "ISO Volume label is too long, truncating to 32 characters" 1>&2 + echo "old: '${old_clst_iso_volume_id}'" 1>&2 + echo "new: '${clst_iso_volume_id}'" 1>&2 +fi + +# Generate list of checksums that genkernel can use to verify the contents of +# the ISO +isoroot_checksum() { + [ -z "${clst_livecd_verify}" ] && return + + echo ">> Creating checksums for all files included in the ISO" + + pushd "${clst_target_path}" + find -type f -exec b2sum {} + > /tmp/isoroot_b2sums + popd + + mv /tmp/isoroot_b2sums "${clst_target_path}"/ +} + +run_mkisofs() { + isoroot_checksum + + echo "Running \"mkisofs ${@}\"" + mkisofs "${@}" || die "Cannot make ISO image" +} + +# Here we actually create the ISO images for each architecture +case ${clst_hostarch} in + alpha) + isoroot_checksum + + echo ">> xorriso -as genisofs -alpha-boot boot/bootlx -R -l -J -V \"${clst_iso_volume_id}\" -o \"${1}\" \"${clst_target_path}\"" + xorriso -as genisofs -alpha-boot boot/bootlx -R -l -J -V "${clst_iso_volume_id}" -o "${1}" "${clst_target_path}" || die "Cannot make ISO image" + ;; + arm) + ;; + hppa) + echo ">> Running mkisofs to create iso image...." + run_mkisofs -R -l -J -V "${clst_iso_volume_id}" -o "${1}" "${clst_target_path}"/ + pushd "${clst_target_path}/" + palo -f boot/palo.conf -C "${1}" + popd + ;; + mips) + if [[ ${clst_fstype} != squashfs ]]; then + die "SGI LiveCD(s) only support the 'squashfs' fstype!" + fi + + # $clst_target_path/[kernels|arcload] already exists, create loopback and sgibootcd + [ ! -d "${clst_target_path}/loopback" ] && mkdir "${clst_target_path}/loopback" + [ ! -d "${clst_target_path}/sgibootcd" ] && mkdir "${clst_target_path}/sgibootcd" + + # Setup variables + [ -f "${clst_target_path}/livecd" ] && rm -f "${clst_target_path}/livecd" + img="${clst_target_path}/loopback/image.squashfs" + knl="${clst_target_path}/kernels" + arc="${clst_target_path}/arcload" + cfg="${clst_target_path}/sgibootcd/sgibootcd.cfg" + echo "" > "${cfg}" + + # If the image file exists in $clst_target_path, move it to the loopback dir + [ -e "${clst_target_path}/image.squashfs" ] \ + && mv -f "${clst_target_path}/image.squashfs" "${clst_target_path}/loopback" + + # An sgibootcd config is essentially a collection of commandline params + # stored in a text file. We could pass these on the command line, but it's + # far easier to generate a config file and pass it to sgibootcd versus using a + # ton of commandline params. + # + # f= indicates files to go into DVH (disk volume header) in an SGI disklabel + # format: f=</path/to/file>@<DVH name> + # p0= the first partition holds the LiveCD rootfs image + # format: p0=</path/to/image> + # p8= the eighth partition is the DVH partition + # p10= the tenth partition is the disk volume partition + # format: p8= is always "#dvh" and p10= is always "#volume" + + # Add the kernels to the sgibootcd config + for x in ${clst_boot_kernel}; do + echo -e "f=${knl}/${x}@${x}" >> ${cfg} + done + + # Next, the bootloader binaries and config + echo -e "f=${arc}/sash64@sash64" >> ${cfg} + echo -e "f=${arc}/sashARCS@sashARCS" >> ${cfg} + echo -e "f=${arc}/arc...@arc.cf" >> ${cfg} + + # Next, the Loopback Image + echo -e "p0=${img}" >> ${cfg} + + # Finally, the required SGI Partitions (dvh, volume) + echo -e "p8=#dvh" >> ${cfg} + echo -e "p10=#volume" >> ${cfg} + + # All done; feed the config to sgibootcd and end up with an image + # c= the config file + # o= output image (burnable to CD; readable by fdisk) + /usr/bin/sgibootcd c=${cfg} o=${clst_iso} + ;; + amd64|arm64|ia64|ppc*|powerpc*|sparc*|x86|i?86) + isoroot_checksum + + extra_opts=("-joliet" "-iso-level" "3") + case ${clst_hostarch} in + sparc*) extra_opts+=("--sparc-boot") ;; + esac + + echo ">> Running grub-mkrescue to create iso image...." + grub-mkrescue --mbr-force-bootable -volid "${clst_iso_volume_id}" "${extra_opts[@]}" -o "${1}" "${clst_target_path}" + ;; +esac +exit $?