#!/bin/bash # we depend on a properly build rootfs if [ "$EUID" -ne 0 ] then echo "Please run as root" exit fi if [ ! -d rootfs\ overrides/core/node_modules ] then echo "please run npmi.sh" exit 1 fi CHIBRAX_MOUNT_POINT="/tmp/core" EFI_MOUNT_POINT="/tmp/efi" rm -f disk.img while umount -R rootfs/proc do echo "" done #create a 8Gb iso dd if=/dev/zero of=disk.img bs=1024k seek=$((1000 * 8)) count=0 HEADER_SIZE=2048 EFI_SIZE=512 EFI_SECTOR_LIMIT=997376 ROOT_SECTOR_LIMIT=15382528 SECTOR_SIZE=512 HEADER_OFFSET=$(($HEADER_SIZE * $SECTOR_SIZE)) ROOT_OFFSET=$(( ($EFI_SECTOR_LIMIT + $HEADER_SIZE ) * $SECTOR_SIZE )) #creating a msdos image for mbr boot parted disk.img mklabel gpt echo "parted disk.img mkpart ext4 0% ${EFI_SIZE}M" parted disk.img mkpart efi 0% ${EFI_SIZE}MB parted disk.img mkpart root ${EFI_SIZE}MB 100% ##EFI #parted disk.img name 1 root START_SECTOR=$(file disk.img | cut -d',' -f 8 | cut -d' ' -f3) echo "Start sector :" $START_SECTOR losetup --offset $HEADER_OFFSET -f disk.img EFI_LOOP=$(losetup -a | grep -v deleted | grep disk.img | grep $HEADER_OFFSET | cut -d':' -f 1) mkfs.fat -F 32 ${EFI_LOOP} echo "EFI LOOP: $EFI_LOOP" mkdir -p $EFI_MOUNT_POINT mount ${EFI_LOOP} $EFI_MOUNT_POINT echo $ROOT_SECTOR_LIMIT losetup --offset $ROOT_OFFSET -f disk.img --sizelimit $(($ROOT_SECTOR_LIMIT * 512)) ROOT_LOOP=$(losetup -a | grep -v deleted | grep disk.img | grep $ROOT_OFFSET | grep -v $EFI_LOOP | cut -d':' -f 1) mkfs.ext4 ${ROOT_LOOP} echo "ROOT LOOP: $ROOT_LOOP" mkdir $CHIBRAX_MOUNT_POINT -p mount ${ROOT_LOOP} $CHIBRAX_MOUNT_POINT echo "coping rootfs" cp rootfs/* $CHIBRAX_MOUNT_POINT -r echo "done" cp kernel/src/arch/x86/boot/bzImage $EFI_MOUNT_POINT/bzImage.efi umount $CHIBRAX_MOUNT_POINT umount $EFI_MOUNT_POINT losetup -d $EFI_LOOP losetup -d $ROOT_LOOP #built by root but used by any, usefull to run the vm without root privileges chmod 757 disk.img