CentOS – How to Create a Custom ISO Image

disk-imageisokickstart

I am trying to create a custom ISO image which would install the minimal required RPMS along with some custom written RPM of my app. and Also wants to perform some post install steps like configuring my App and VPN configuration etc.

I saw some of the links on google but they are pointing creating repo and ISO from mounted disk or ISO image.

Thanks
Ramesh

Best Answer

  1. Create a directory to mount your source.

    mkdir /tmp/bootiso
    
  2. Loop mount the source ISO you are modifying. (Download from Red Hat / CentOS.)

    mount -o loop /path/to/some.iso /tmp/bootiso
    
  3. Create a working directory for your customized media.

    mkdir /tmp/bootisoks
    
  4. Copy the source media to the working directory.

    cp -r /tmp/bootiso/* /tmp/bootisoks/
    
  5. Unmount the source ISO and remove the directory.

    umount /tmp/bootiso && rmdir /tmp/bootiso
    
  6. Change permissions on the working directory.

    chmod -R u+w /tmp/bootisoks
    
  7. Copy your Kickstart script which has been modified for the packages and %post to the working directory.

    cp /path/to/someks.cfg /tmp/bootisoks/isolinux/ks.cfg
    
  8. Copy any additional RPMs to the directory structure and update the metadata.

    cp /path/to/*.rpm /tmp/bootisoks/Packages/.
    cd /tmp/bootisoks/Packages && createrepo -dpo .. .
    
  9. Add kickstart to boot options.

    sed -i 's/append\ initrd\=initrd.img/append initrd=initrd.img\ ks\=cdrom:\/ks.cfg/' /tmp/bootisoks/isolinux/isolinux.cfg
    
  10. Create the new ISO file.

    cd /tmp/bootisoks && \ 
    mkisofs -o /tmp/boot.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "CentOS 7 x86_64" -R -J -v -T isolinux/. .
    
  11. (Optional) Use isohybrid if you want to dd the ISO file to a bootable USB key.

    isohybrid /tmp/boot.iso
    
  12. Add an MD5 checksum (to allow testing of media).

    implantisomd5 /tmp/boot.iso
    

If you need more help creating the Kickstart script, I suggest starting with the official Red Hat documentation.