#!/usr/bin/bash set -x set -e PASSWD_FILE=/home/narenas/passwd DIR=$(pwd) CHROOT_DIR=$DIR/chroot DIST=noble VARIANT=minbase CLEAN=${CLEAN:-1} CLEAN_CHROOT=${CLEAN_CHROOT:-1} OUTPUT_DIR=/media/sf_Downloads/ UBUNTU_CHROOT_DIR=$DIR/ubuntu_chroot DEBOOT_STRAP_URL=http://mirror.raiolanetworks.com/ubuntu/ export PASSWD_FILE ## FUNCIONES function exec_as_sudo () { cat $PASSWD_FILE | sudo -S $@ } function exec_as_sudo_in_chroot () { local CHROOT=$1 shift exec_as_sudo chroot $CHROOT $@ } function umount_in_chroot() { local CHROOT=$2 local PART=$1 if grep $CHROOT$PART /etc/mtab; then echo "Unmounting $PART in chroot $CHROOT" exec_as_sudo_in_chroot $CHROOT umount $PART return $? fi echo "Mount point $PART not found" return 0 } function umount_in_host() { local PART=$1 if findmnt -M $PART then echo "Unmounting $PART" exec_as_sudo umount $PART return $? fi echo "Mount point $PART not found" return 0 } function deploy_installer() { exec_as_sudo mkdir -p $CHROOT_DIR/usr/local/bin exec_as_sudo cp openGnsys-installer.sh $CHROOT_DIR/usr/local/bin exec_as_sudo chmod +x $CHROOT_DIR/usr/local/bin/openGnsys-installer.sh } if [ -d $CHROOT_DIR ] && [ $CLEAN -eq 1 ]; then SYS_MOUNT_POINT_CHROOT="/proc /sys /dev/pts /dev" SYS_MOUNT_POINT="/dev /run" for i in $SYS_MOUNT_POINT_CHROOT; do umount_in_chroot $i $CHROOT_DIR umount_in_chroot $i $UBUNTU_CHROOT_DIR done for i in $SYS_MOUNT_POINT; do umount_in_host $CHROOT_DIR$i umount_in_host $UBUNTU_CHROOT_DIR$i done if [ $CLEAN_CHROOT -eq 1 ]; then exec_as_sudo rm -rf $CHROOT_DIR exec_as_sudo rm -rf $UBUNTU_CHROOT_DIR fi exec_as_sudo rm -rf image exec_as_sudo rm -f $OUTPUT_DIR/ubuntu-from-scratch.iso fi mkdir -p $CHROOT_DIR # # Copio el script chroot_setup.sh al directorio chroot cp chroot_setup.sh $CHROOT_DIR cp buildlib.sh $CHROOT_DIR cp root_passwd $CHROOT_DIR chmod +x $CHROOT_DIR/chroot_setup.sh # # Deploy boot strap if [ $CLEAN_CHROOT -eq 1 ]; then exec_as_sudo debootstrap --arch=amd64 --variant=$VARIANT $DIST $CHROOT_DIR $DEBOOT_STRAP_URL fi exec_as_sudo mkdir -p $CHROOT_DIR/etc/calamares/ exec_as_sudo cp -r calamares/* $CHROOT_DIR/etc/calamares/ deploy_installer # # Create mount points exec_as_sudo mount --bind /dev/ $CHROOT_DIR/dev exec_as_sudo mount --bind /run/ $CHROOT_DIR/run # Execute chroot_setup.sh exec_as_sudo_in_chroot $CHROOT_DIR /chroot_setup.sh # Clean up the environment umount_in_host $CHROOT_DIR/dev umount_in_host $CHROOT_DIR/run # Compress the chroot exec_as_sudo mv chroot/image . # Create squashfs imagesudo exec_as_sudo mksquashfs $CHROOT_DIR image/casper/filesystem.squashfs \ -noappend -no-duplicates -no-recovery \ -wildcards \ -comp xz -b 1M -Xdict-size 100% \ -e "var/cache/apt/archives/*" -e "root/*" -e "root/.*" -e "tmp/*" -e "tmp/.*" -e "swapfile" printf $(exec_as_sudo du -sx --block-size=1 chroot | cut -f1) | sudo tee image/casper/filesystem.size # Deboot strap real Ubuntu image exec_as_sudo debootstrap --arch=amd64 --variant=minbase noble $UBUNTU_CHROOT_DIR $DEBOOT_STRAP_URL exec_as_sudo cp setup_chroot_ubuntu.sh $UBUNTU_CHROOT_DIR exec_as_sudo_in_chroot $UBUNTU_CHROOT_DIR chmod +x /setup_chroot_ubuntu.sh exec_as_sudo cp buildlib.sh $UBUNTU_CHROOT_DIR # Setup the chroot for ubuntu exec_as_sudo mount --bind /dev/ $UBUNTU_CHROOT_DIR/dev exec_as_sudo mount --bind /run/ $UBUNTU_CHROOT_DIR/run exec_as_sudo_in_chroot $UBUNTU_CHROOT_DIR /setup_chroot_ubuntu.sh # Clean up the environment umount_in_host $UBUNTU_CHROOT_DIR/dev umount_in_host $UBUNTU_CHROOT_DIR/run # Compress the ububtu chroot exec_as_sudo mksquashfs $UBUNTU_CHROOT_DIR image/casper/filesystem.ubuntu.sqfs \ -noappend -no-duplicates -no-recovery \ -wildcards \ -comp xz -b 1M -Xdict-size 100% \ -e "var/cache/apt/archives/*" -e "root/*" -e "root/.*" -e "tmp/*" -e "tmp/.*" -e "swapfile" # Create ISO image cd image && \ exec_as_sudo xorriso \ -as mkisofs \ -iso-level 3 \ -full-iso9660-filenames \ -J -joliet-long \ -volid "Ubuntu_scratch" \ -output $OUTPUT_DIR/ubuntu-from-scratch.iso \ -eltorito-boot isolinux/bios.img \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ --eltorito-catalog boot.catalog \ --grub2-boot-info \ --grub2-mbr ../chroot/usr/lib/grub/i386-pc/boot_hybrid.img \ -partition_offset 16 \ --mbr-force-bootable \ -eltorito-alt-boot \ -no-emul-boot \ -e isolinux/efiboot.img \ -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b isolinux/efiboot.img \ -appended_part_as_gpt \ -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \ -m "isolinux/efiboot.img" \ -m "isolinux/bios.img" \ -e '--interval:appended_partition_2:::' \ -exclude isolinux \ -graft-points \ "/EFI/boot/bootx64.efi=isolinux/bootx64.efi" \ "/EFI/boot/mmx64.efi=isolinux/mmx64.efi" \ "/EFI/boot/grubx64.efi=isolinux/grubx64.efi" \ "/EFI/ubuntu/grub.cfg=isolinux/grub.cfg" \ "/isolinux/bios.img=isolinux/bios.img" \ "/isolinux/efiboot.img=isolinux/efiboot.img" \ "." cd ..