Last active
November 15, 2022 10:07
-
-
Save vitalfadeev/fa16ad4f7fda7dc3ad2e49d027580bda to your computer and use it in GitHub Desktop.
Create disk image with GRUB2 installd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Create disk image with GRUB2 installd | |
| # Requires: grub-install rm mkdir dd parted kpartx mkfs.vfat mkfs.ext2 cp mount umount chown | |
| # Source tree: | |
| # img/ | |
| # ext2 fat16 fat32 | |
| FS=ext2 | |
| # | |
| DISK_FILE=disk.img | |
| DISK_SIZE=20 | |
| BUILD_FOLDER=.build | |
| IMAGE_FOLDER=img | |
| DISK_MOUNT_POINT=$(BUILD_FOLDER)/tmp/p1 | |
| DEVICE_MAP_FILE=$(BUILD_FOLDER)/tmp/device.map | |
| IMAGE_BOOT_FOLDER=$(DISK_MOUNT_POINT)/boot | |
| # sudo kpartx -l disk.img | cut -d : -f 1 | |
| LOOPPART=loop0p1 | |
| LOOPDEV=/dev/loop0 | |
| # | |
| LOGNAME=$(shell who am i | awk '{print $$1}') | |
| LOGGROUP=$(shell groups $(LOGNAME) | awk '{print $$3}') | |
| # | |
| ifeq ($(FS),ext2) | |
| GRUB_FS_MODULE=ext2 | |
| else | |
| GRUB_FS_MODULE=fat | |
| endif | |
| all: \ | |
| check_sudo \ | |
| create_build_folder \ | |
| create_image \ | |
| create_fs_$(FS) \ | |
| mount_image \ | |
| copy_files \ | |
| install_grub \ | |
| umount_image \ | |
| free_loop_device \ | |
| set_permissions \ | |
| clear_build_folder | |
| check_sudo: | |
| ifneq ($(shell id -u), 0) | |
| echo "Usage: sudo make" ; exit 1 | |
| endif | |
| create_build_folder: | |
| rm -rf $(BUILD_FOLDER) | |
| mkdir $(BUILD_FOLDER) | |
| remode_build_folder: | |
| rm -rf $(BUILD_FOLDER) | |
| create_image: | |
| dd if=/dev/zero of=$(DISK_FILE) count=$(DISK_SIZE) bs=1048576 | |
| create_fs_ext2: | |
| parted --script $(DISK_FILE) mklabel msdos mkpart p ext2 1 $(DISK_SIZE) set 1 boot on | |
| kpartx -a $(DISK_FILE) | |
| sleep 1 | |
| mkfs.ext2 /dev/mapper/$(LOOPPART) | |
| create_fs_fat32: | |
| parted --script ${DISK_FILE} mklabel msdos mkpart p fat32 1 $(DISK_SIZE) set 1 boot on | |
| kpartx -a ${DISK_FILE} | |
| sleep 1 | |
| mkfs.vfat -F32 /dev/mapper/$(LOOPPART) | |
| create_fs_fat16: | |
| parted --script $(DISK_FILE) mklabel msdos mkpart p fat16 1 $(DISK_SIZE) set 1 boot on | |
| kpartx -a $(DISK_FILE) | |
| sleep 1 | |
| mkfs.vfat -F16 /dev/mapper/$(LOOPPART) | |
| mount_image: | |
| mkdir -p $(DISK_MOUNT_POINT) | |
| mount /dev/mapper/$(LOOPPART) $(DISK_MOUNT_POINT) | |
| copy_files: | |
| cp -r $(IMAGE_FOLDER)/* $(DISK_MOUNT_POINT) | |
| install_grub: | |
| echo "(hd0) $(LOOPDEV)" > $(DEVICE_MAP_FILE) | |
| grub-install \ | |
| --no-floppy \ | |
| --grub-mkdevicemap=$(DEVICE_MAP_FILE) \ | |
| --modules="biosdisk part_msdos $(GRUB_FS_MODULE) configfile normal multiboot" \ | |
| --root-directory=$(DISK_MOUNT_POINT) \ | |
| --boot-directory=$(IMAGE_BOOT_FOLDER) \ | |
| $(LOOPDEV) | |
| umount_image: | |
| umount $(DISK_MOUNT_POINT) | |
| free_loop_device: | |
| kpartx -d $(DISK_FILE) | |
| set_permissions: | |
| chown -R $(LOGNAME):$(LOGGROUP) $(BUILD_FOLDER) | |
| chown $(LOGNAME):$(LOGGROUP) $(DISK_FILE) | |
| clear_build_folder: | |
| rm -rf $(BUILD_FOLDER)/* |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment