#!/bin/bash set -eE function clean() { echo "==== CLEAN ====" sudo umount "$WORKDIR/squashfs" || : sudo umount /tmp/livecd || : } trap clean ERR SPATH=$(cd $(dirname $0) && pwd) if [ -z $1 ]; then echo "Usage: prepare.sh " exit 1 fi full_iso=$1 iso_wo_ext=${full_iso##*/} iso_wo_ext=${iso_wo_ext%.iso} WORKDIR="$SPATH/$iso_wo_ext" echo "==== Prepare CD ====" mkdir /tmp/livecd || : fuseiso "$1" /tmp/livecd mkdir -p "$WORKDIR" # rsync --exclude=/casper/filesystem.squashfs -a /tmp/livecd/ "$WORKDIR/cd" mkdir "$WORKDIR/squashfs" squashfuse /tmp/livecd/casper/filesystem.squashfs "$WORKDIR/squashfs/" echo "==== Copy squashfs contents to $WORKDIR/squashfs/squashfs-root ====" nprocs=$(($(nproc)-1)) # leave 1 proc for use unsquashfs -p$nprocs -no-xattrs /tmp/livecd/casper/filesystem.squashfs # network access cp /etc/resolv.conf /etc/hosts "$WORKDIR/squashfs/squashfs-root/etc/" # mount proc, sys, opens a shell (for changes), and clean everything after echo "==== CHROOT ====" cat "$SPATH/tasks.sh" | chroot "$WORKDIR/squashfs/squashfs-root" /bin/bash echo "==== Copy custom background ====" sudo cp background/sele_ring_lis67.jpg "$WORKDIR/squashfs/squashfs-root/usr/share/backgrounds/linuxmint/sele_ring_lis67.jpg" echo "==== Copy Firefox settings ====" sudo cp "$SPATH/firefox/distribution.ini" "$WORKDIR/squashfs/squashfs-root/usr/lib/firefox/distribution/distribution.ini" sudo cp "$SPATH/firefox/distribution.ini" "$WORKDIR/squashfs/squashfs-root/usr/share/ubuntu-system-adjustments/firefox/distribution.ini" sudo cp "$SPATH/firefox/vendor-firefox.js" "$WORKDIR/squashfs/squashfs-root/usr/lib/firefox/browser/defaults/preferences/vendor-firefox.js" sudo cp "$SPATH/firefox/vendor-firefox.js" "$WORKDIR/squashfs/squashfs-root/usr/share/ubuntu-system-adjustments/firefox/firefox.js" echo "==== Disable Yahoo, enable Startpage on Firefox ====" cd "$SPATH/firefox" sudo zip "$WORKDIR/squashfs/squashfs-root/usr/lib/firefox/browser/omni.ja" defaults/settings/main/search-config.json cd - echo "==== Install extensions ====" sudo cp "$SPATH/firefox/extensions/"* "$WORKDIR/squashfs/squashfs-root/usr/lib/firefox/distribution/extensions/" echo "==== Mod ISOLINUX (BIOS) AND GRUB (EFI) ====" if [[ -d isolinux ]]; then # isolinux chmod -R +w "$WORKDIR/cd/isolinux" cp isolinux/* "$WORKDIR/cd/isolinux/" fi if [[ -d grub ]]; then # grub chmod -R +w "$WORKDIR/cd/boot/grub" cp grub/* "$WORKDIR/cd/boot/grub/" fi # setup iso echo "==== Setup ISO ====" chmod +w "$WORKDIR/cd/casper/filesystem.manifest" sudo chroot "$WORKDIR/squashfs/squashfs-root" dpkg-query -W --showformat='${Package} ${Version}\n' > "$WORKDIR/cd/casper/filesystem.manifest" sudo cp "$WORKDIR/cd/casper/filesystem.manifest" "$WORKDIR/cd/casper/filesystem.manifest-desktop" sudo mksquashfs "$WORKDIR/squashfs/squashfs-root" "$WORKDIR/cd/casper/filesystem.squashfs" sudo rm "$WORKDIR/cd/MD5SUMS" sudo chmod +w "$WORKDIR/cd" sudo bash -c 'cd '"$WORKDIR"'/cd && find . -type f -exec md5sum {} +' > "$WORKDIR"/cd/MD5SUMS # create iso echo "==== Create ISO ====" cd "$WORKDIR/cd" # create a DVD-burnable ISO with BIOS (isolinux) and EFI (grub) support sudo mkisofs -U -A "$iso_wo_ext-LIS67" -V "$iso_wo_ext-LIS67" -volset "$iso_wo_ext-LIS67" -J -joliet-long -r -v -T -o "$WORKDIR/$iso_wo_ext-lis67.iso" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot . # convert iso to a bootable USB drive iso sudo isohybrid --uefi "$WORKDIR/$iso_wo_ext-lis67.iso" # umount & clean echo "==== Clean ====" sudo umount "$WORKDIR/squashfs" sudo umount /tmp/livecd sudo chown -R $USER: "$WORKDIR" echo "Final ISO: $WORKDIR/$iso_wo_ext-lis67.iso" echo "Done"