#!/bin/bash # we depend on a properly build rootfs if [ "$EUID" -ne 0 ] then echo "Please run as root" exit fi CHIBRAX_MOUNT_POINT="/tmp/chibraxMountPoint" rm -f disk.img #create a 8Gb iso dd if=/dev/zero of=disk.img bs=1024k seek=$((1000 * 8)) count=0 #creating a msdos image for mbr boot parted disk.img mklabel msdos parted disk.img mkpart primary ext4 0% 100% START_SECTOR=$(file disk.img | cut -d',' -f 8 | cut -d' ' -f3) echo "Start sector :" $START_SECTOR OFFSET=$((512*$START_SECTOR)) echo $OFFSET > diskoffset losetup --offset $OFFSET -f disk.img LOOP=$(losetup -a | grep -v deleted | cut -d':' -f 1) losetup -f disk.img LOOP_ROOT=$(losetup -a | grep -v deleted | grep -v ${LOOP} | cut -d':' -f 1) mkdir $CHIBRAX_MOUNT_POINT -p mkfs.ext4 ${LOOP} mount ${LOOP} $CHIBRAX_MOUNT_POINT echo "rebuilding C++ hooks" ./clibs.sh echo "done" echo "coping rootfs" cp rootfs/* $CHIBRAX_MOUNT_POINT -r echo "done" echo "installing grub" mount --rbind /dev /mnt/mychroot/dev mount --make-rslave /mnt/mychroot/dev mount -t proc /proc /mnt/mychroot/proc mount --rbind /sys /mnt/mychroot/sys mount --make-rslave /mnt/mychroot/sys mount --rbind /tmp /mnt/mychroot/tmp chroot $CHIBRAX_MOUNT_POINT grub-install --target=i386-pc ${LOOP_ROOT} --modules=part_msdos chroot $CHIBRAX_MOUNT_POINT grub-mkconfig -o /boot/grub/grub.cfg umount /mnt/mychroot/dev umount /mnt/mychroot/proc umount /mnt/mychroot/sys umount /mnt/mychroot/tmp PARTUUID=$(lsblk $LOOP --fs | awk '{print $4}' | grep -v LABEL) echo "menuentry 'Chibrax OS' {" >> $CHIBRAX_MOUNT_POINT/boot/grub/grub.cfg echo " set root='hd0,msdos1'" >> $CHIBRAX_MOUNT_POINT/boot/grub/grub.cfg echo " linux /boot/vmlinuz rootfstype=ext4 root=/dev/sda1 rw quiet" >> $CHIBRAX_MOUNT_POINT/boot/grub/grub.cfg echo "}" >> $CHIBRAX_MOUNT_POINT/boot/grub/grub.cfg umount $CHIBRAX_MOUNT_POINT losetup -d $LOOP_ROOT losetup -d $LOOP #built by root but used by any, usefull to run the vm without root privileges chmod 757 disk.img