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  $?

Reply via email to