46ff4359f9
Just add them to the xorrisofs command, the order of the arguments is interleaved and trying to assemble it from variables just makes it more confusing.
139 lines
4.8 KiB
Cheetah
139 lines
4.8 KiB
Cheetah
<%page args="kernels, runtime_img, runtime_base, basearch, inroot, outroot, product, isolabel"/>
|
|
<%
|
|
configdir="tmp/config_files/x86"
|
|
SYSLINUXDIR="usr/share/syslinux"
|
|
PXEBOOTDIR="images/pxeboot"
|
|
STAGE2IMG="images/install.img"
|
|
GRUB2DIR="boot/grub2"
|
|
BOOTDIR="isolinux"
|
|
KERNELDIR=PXEBOOTDIR
|
|
LORAXDIR="usr/share/lorax/"
|
|
|
|
## Don't allow spaces or escape characters in the iso label
|
|
def valid_label(ch):
|
|
return ch.isalnum() or ch == '_'
|
|
|
|
isolabel = ''.join(ch if valid_label(ch) else '-' for ch in isolabel)
|
|
|
|
import os
|
|
from os.path import basename
|
|
from pylorax.sysutils import joinpaths
|
|
|
|
# Test the runtime_img, if it is > 4GiB we need to set -iso-level to 3
|
|
if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3:
|
|
isoargs = "-iso-level 3"
|
|
else:
|
|
isoargs = ""
|
|
%>
|
|
|
|
mkdir images
|
|
install ${runtime_img} ${STAGE2IMG}
|
|
treeinfo stage2 mainimage images/${runtime_base}
|
|
|
|
## BIOS setup
|
|
<%
|
|
biosgraft = "boot=${outroot}/boot"
|
|
biosgraft += " ${GRUB2DIR}/i386-pc=${inroot}/usr/lib/grub/i386-pc"
|
|
biosgraft += " images/eltorito.img=${outroot}/images/eltorito.img"
|
|
%>
|
|
treeinfo images-${basearch} eltorito.img images/eltorito.img
|
|
|
|
## install kernels
|
|
mkdir ${KERNELDIR}
|
|
%for kernel in kernels:
|
|
%if kernel.flavor:
|
|
## i386 PAE
|
|
installkernel images-xen ${kernel.path} ${KERNELDIR}/vmlinuz-${kernel.flavor}
|
|
installinitrd images-xen ${kernel.initrd.path} ${KERNELDIR}/initrd-${kernel.flavor}.img
|
|
%else:
|
|
## normal i386, x86_64
|
|
installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz
|
|
installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
|
|
%endif
|
|
%endfor
|
|
|
|
%if basearch == 'x86_64':
|
|
treeinfo images-xen kernel ${KERNELDIR}/vmlinuz
|
|
treeinfo images-xen initrd ${KERNELDIR}/initrd.img
|
|
%endif
|
|
|
|
## configure grub2 config file
|
|
mkdir ${GRUB2DIR}
|
|
install ${configdir}/grub2-bios.cfg ${GRUB2DIR}/grub.cfg
|
|
replace @VERSION@ ${product.version} ${GRUB2DIR}/grub.cfg
|
|
replace @PRODUCT@ '${product.name}' ${GRUB2DIR}/grub.cfg
|
|
replace @KERNELPATH@ /${KERNELDIR}/vmlinuz ${GRUB2DIR}/grub.cfg
|
|
replace @INITRDPATH@ /${KERNELDIR}/initrd.img ${GRUB2DIR}/grub.cfg
|
|
replace @ROOT@ 'inst.stage2=hd:LABEL=${isolabel|udev}' ${GRUB2DIR}/grub.cfg
|
|
|
|
|
|
## WHeeeeeeee, EFI.
|
|
<% efiarch32=None; efiarch64=None %>
|
|
%if exists("boot/efi/EFI/*/gcdia32.efi"):
|
|
<% efiarch32 = 'IA32' %>
|
|
%endif
|
|
%if exists("boot/efi/EFI/*/gcdx64.efi"):
|
|
<% efiarch64 = 'X64' %>
|
|
%endif
|
|
%if (efiarch32 or efiarch64) and basearch != 'i386':
|
|
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel"/>
|
|
%endif
|
|
|
|
# Create optional product.img and updates.img
|
|
<% filegraft=""; images=["product", "updates"]; compressargs=""; %>
|
|
%if basearch == 'i386':
|
|
# Limit the amount of memory xz uses on i386
|
|
<% compressargs="--xz -9 --memlimit-compress=3700MiB" %>
|
|
%endif
|
|
%for img in images:
|
|
%if exists("%s/%s/" % (LORAXDIR, img)):
|
|
installimg ${compressargs} ${LORAXDIR}/${img}/ images/${img}.img
|
|
treeinfo images-${basearch} ${img}.img images/${img}.img
|
|
<% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
|
%endif
|
|
%endfor
|
|
|
|
# Inherit iso-graft/ if it exists from external templates
|
|
<%
|
|
import os
|
|
if os.path.exists(workdir + "/iso-graft"):
|
|
filegraft += " " + workdir + "/iso-graft"
|
|
%>
|
|
|
|
# Add the license files
|
|
%for f in glob("/usr/share/licenses/*-release/*"):
|
|
install ${f} ${f|basename}
|
|
<% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %>
|
|
%endfor
|
|
|
|
+## Make images/eltoritio.img
|
|
runcmd grub2-mkimage -O i386-pc-eltorito -d ${inroot}/usr/lib/grub/i386-pc \
|
|
-o ${outroot}/images/eltorito.img \
|
|
-p /${GRUB2DIR} \
|
|
iso9660 biosdisk
|
|
treeinfo images-${basearch} eltorito.img images/eltorito.img
|
|
|
|
## make boot.iso
|
|
runcmd xorrisofs ${isoargs} -o ${outroot}/images/boot.iso \
|
|
-R -J -V '${isolabel}' \
|
|
--grub2-mbr ${inroot}/usr/lib/grub/i386-pc/boot_hybrid.img \
|
|
-partition_offset 16 \
|
|
-appended_part_as_gpt \
|
|
-append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B ${outroot}/images/efiboot.img \
|
|
-iso_mbr_part_type EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 \
|
|
-c boot.cat --boot-catalog-hide \
|
|
-b images/eltorito.img \
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
|
|
-eltorito-alt-boot \
|
|
-e '--interval:appended_partition_2:all::' -no-emul-boot \
|
|
-graft-points \
|
|
.discinfo=${outroot}/.discinfo \
|
|
${STAGE2IMG}=${outroot}/${STAGE2IMG} \
|
|
${KERNELDIR}=${outroot}/${KERNELDIR} \
|
|
${filegraft} \
|
|
${GRUB2DIR}=${outroot}/${GRUB2DIR} \
|
|
${GRUB2DIR}/i386-pc=${inroot}/usr/lib/grub/i386-pc \
|
|
images/eltorito.img=${outroot}/images/eltorito.img \
|
|
EFI/BOOT=${outroot}/EFI/BOOT
|
|
treeinfo images-${basearch} boot.iso images/boot.iso
|