Customizing the ISO Image#

The IGX software release is distributed as a bootable ISO image. This ISO image can be written to a USB flash drive and contains the complete IGX software stack, including the IGX OS installer.

Developers can use the ISO image to install the IGX OS on the internal NVMe SSD and build applications on top of the IGX OS. However, in some cases, developers may want to customize the ISO image to add their own software or configure the system for their own use cases. For example, developers may want to add their own kernel modules, drivers, or applications to the ISO image, so that the installer can install the customized software during the installation process.

This page provides instructions on how to customize the ISO image.

Prerequisites#

To customize the ISO image, you will need a host PC with Ubuntu OS.

Note

We have verified the process on Ubuntu 24.04.3 LTS.

Steps#

  1. Install the required tools if not already installed:

    sudo apt-get update
    sudo apt-get install -y xorriso
    
  2. Download the ISO image from the IGX Download Center.

  3. Extract the ISO image to a working directory.

    mkdir -p ~/iso-work
    cd ~/iso-work
    xorriso -osirrox on -indev <path-to-iso-file> -extract / ./iso-extract
    
  4. Modify the ISO image.

    IGX BaseOS ISO is created based on the ISO from Canonical. The modifications are saved in casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs. We make modifications to this file to customize the installer for our own use cases.

    In the following example, we modify the installer to skip installing the capsule update package (nvidia-igx-bootloader).

    mkdir tmp
    cp iso-extract/casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs tmp/
    
    # Extract the squashfs file.
    sudo unsquashfs -f -d tmp/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia tmp/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs
    
    # Remove nvidia-igx-bootloader from the sidecar_igx-thor-pkgs file.
    sudo vim tmp/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia/ai/sidecar_igx-thor-pkgs
    
    # We can modify the sidecar_igx-thor-ai.yaml file update installer behavior, e.g., install some extra packages.
    # sudo vim tmp/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia/ai/sidecar_igx-thor-ai.yaml
    
    # Repackage the squashfs file.
    sudo mksquashfs tmp/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia tmp/new.squashfs
    cp tmp/new.squashfs iso-extract/casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs
    
    # Get the new checksum of the modified squashfs file.
    md5sum iso-extract/casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs
    
    # Update the checksum in the md5sum.txt file with the new checksum got from the previous step.
    sudo vim iso-extract/md5sum.txt
    
  5. Repackage the ISO image.

    Create the new ISO image using xorriso:

    cd ~/iso-work
    
    # Extract the cd-boot-images-arm64 package.
    dpkg-deb -x ./iso-extract/pool/main/c/cd-boot-images-arm64/cd-boot-images-arm64*.deb ./deb-extract/
    
    # Create the new ISO image (igx-t7000-custom-v1.0.iso) using xorriso.
    xorriso -as mkisofs \
      -iso-level 3 \
      -allow-lowercase \
      -volid "IGX_T7000_CUSTOM_ISO-v1.0" \
      -J \
      -joliet-long \
      -l \
      -c boot/boot.cat \
      -partition_offset 16 \
      -append_partition 2 0xef ./deb-extract/usr/share/cd-boot-images-arm64/images/boot/grub/efi.img \
      -e --interval:appended_partition_2:all:: \
      -no-emul-boot \
      -partition_cyl_align all \
      -output ./igx-t7000-custom-v1.0.iso \
      ./iso-extract
    
  6. Verify the new ISO image.

    Test that the ISO image is bootable and contains your modifications:

    # Check ISO contents
    file igx-t7000-custom-v1.0.iso
    
    # Optionally, mount and verify
    mkdir test-mount
    sudo mount -o loop igx-t7000-custom-v1.0.iso test-mount
    ls test-mount
    sudo umount test-mount
    
  7. Write the new ISO image to a USB flash drive and install the IGX OS on an IGX Thor unit.

    We can verify that the installer does not install the capsule update package (nvidia-igx-bootloader) by checking the UEFI does not show the progress bar for the capsule update during the installation process.