oginstaller/builder.sh

181 lines
5.1 KiB
Bash

#!/usr/bin/bash
set -x
set -e
PASSWD_FILE=/home/narenas/passwd
DIR=/tmp/ubuntu_scratch
CHROOT_DIR=$DIR/chroot
UBUNTU_CHROOT_DIR=$DIR/ubuntu_chroot
DIST=noble
VARIANT=minbase
CLEAN=${CLEAN:-1}
CLEAN_CHROOT=${CLEAN_CHROOT:-1}
OUTPUT_DIR=/media/sf_Downloads/
IMAGE_DIR=$DIR/image
DEBOOT_STRAP_URL=http://mirror.raiolanetworks.com/ubuntu/
function umount_in_chroot() {
local CHROOT=$2
local PART=$1
if grep $CHROOT$PART /etc/mtab;
then
echo "Unmounting $PART in chroot $CHROOT"
chroot $CHROOT umount $PART
return $?
fi
echo "Mount point $PART not found"
return 0
}
function deploy_script_in_chroot() {
local CHROOT=$1
local SCRIPT=$2
local DESTDIR=$3
mkdir -p $CHROOT/$DESTDIR
cp $SCRIPT $CHROOT/$DESTDIR
chmod +x $CHROOT/$DESTDIR/$SCRIPT
}
function deploy_installer() {
mkdir -p $CHROOT_DIR/usr/local/bin
cp openGnsys-installer.sh $CHROOT_DIR/usr/local/bin
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 $CHROOT_DIR$i
umount $UBUNTU_CHROOT_DIR$i
done
if [ $CLEAN_CHROOT -eq 1 ];
then
rm -rf $CHROOT_DIR
rm -rf $UBUNTU_CHROOT_DIR
fi
rm -rf $DIR/image
rm -f $OUTPUT_DIR/ubuntu-from-scratch.iso
fi
mkdir -p $IMAGE_DIR
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
debootstrap --arch=amd64 --variant=$VARIANT $DIST $CHROOT_DIR $DEBOOT_STRAP_URL
fi
mkdir -p $CHROOT_DIR/etc/calamares/modules/
cp calamares/settings.conf $CHROOT_DIR/etc/calamares/
cp calamares/modules/*.conf $CHROOT_DIR/etc/calamares/modules/
mkdir -p $CHROOT_DIR/usr/share/opengnsys/images
cp art/* $CHROOT_DIR/usr/share/opengnsys/images/
deploy_script_in_chroot $CHROOT_DIR openGnsys-installer.sh /usr/local/bin/
# # Create mount points
mount --bind /dev/ $CHROOT_DIR/dev
mount --bind /run/ $CHROOT_DIR/run
# Execute chroot_setup.sh
chroot $CHROOT_DIR /chroot_setup.sh
cp conf/pcmanfm.conf $CHROOT_DIR/etc/xdg/pcmanfm/default/pcmanfm.conf
# Clean up the environment
umount $CHROOT_DIR/dev
umount $CHROOT_DIR/run
# Compress the chroot deploy
mkdir -p $IMAGE_DIR
mv $CHROOT_DIR/image $DIR/
# Create squashfs imagesudo
mksquashfs $CHROOT_DIR $IMAGE_DIR/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 $(du -sx --block-size=1 $CHROOT_DIR | cut -f1) | tee $IMAGE_DIR/casper/filesystem.size
# Deboot strap real Ubuntu image
debootstrap --arch=amd64 --variant=minbase noble $UBUNTU_CHROOT_DIR $DEBOOT_STRAP_URL
cp setup_chroot_ubuntu.sh $UBUNTU_CHROOT_DIR
in_chroot $UBUNTU_CHROOT_DIR chmod +x /setup_chroot_ubuntu.sh
cp buildlib.sh $UBUNTU_CHROOT_DIR
deploy_script_in_chroot $UBUNTU_CHROOT_DIR component-installer.sh /opengnsys-installer/
cp pat.txt $UBUNTU_CHROOT_DIR/opengnsys-installer/
# Setup the chroot for ubuntu
mount --bind /dev/ $UBUNTU_CHROOT_DIR/dev
mount --bind /run/ $UBUNTU_CHROOT_DIR/run
chroot $UBUNTU_CHROOT_DIR /setup_chroot_ubuntu.sh
# Clean up the environment
umount $UBUNTU_CHROOT_DIR/dev
umount $UBUNTU_CHROOT_DIR/run
# Compress the ububtu chroot
mksquashfs $UBUNTU_CHROOT_DIR $IMAGE_DIR/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_DIR && \
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 -