2

I'm trying to create a customized package of CentOS 7, which could be placed in an internal hard drive of a non-virtualized server, and booted to RAM using a bootloader (e.g. grub) in a UEFI environment.

The emphasis is to create a single package (e.g. ISO, initramfs or something) which could be booted from a hard drive to RAM, so that every boot would guarantee that a predefined OS would be loaded. This means that no modified settings or files would be saved (persistent), other than log files, which would be redirected to a hard drive. The amount of RAM is not going to be an issue.

The Requirements: 1) OS is Rhel/Fedora/CentOS 2) OS is not installed on a hard drive, is loaded to RAM (e.g. tmpfs) 3) OS is booted from a single file/package at boot

What I have tried thus far: Using a VMware virtual machine, I have created a minimal custom Live ISO image of CentOS 7, using a kickstart script to define the settings and contents of the image, and used livecd-creator to create the actual Live ISO.

I've also downloaded a official CentOS-7-x86_64-LiveKDE-1810 ISO for testing to see if I could get a CentOS based live ISO to boot from a hard drive in the first place.

Both of these ISOs work if mounted and booted from a CD/DVD Drive on a VMware virtual machine as well as in a typical server hardware.

The errors I run into: Having tried different types of grub menuentries with different kernel parameters, I haven't managed to get either one of these ISOs to boot from an internal hard drive. I don't know if the problem is in the ISO files, the kernel parameters in the grub menuentries or in both.

Examples of menuentries I have tried, and the URLs from which I found them:

http://man7.org/linux/man-pages/man7/dracut.cmdline.7.html

#iso-scan/filename
#Using iso-scan/filename with a Fedora/Red Hat/CentOS Live iso should
#just work by copying the original kernel cmdline parameters

menuentry 'Custom Centos7 {
 insmod iso9660
 insmod loopback               
 set isolabel='live_ks-x86-201902131038'
 set isofile='livecd-live_ks-201902131038.iso'
 loopback loop (hd0,gpt3)/images/$isofile
 linuxefi (loop)/isolinux/vmlinuz0 boot=isolinux iso-scan/filename=$isofile root=live:LABEL=$isolabel rd.live.image 
 initrdefi (loop)/isolinux/initrd0.img
}

The above menuentry leads to a situation where the boot displays the following message:"dracut-initqueue[409]: /sbin/iso-scan: line 37: rmdir: command not found. I'm not sure what this means..

If I try the above with the LiveKDE ISO, e.g. changing the following:

set isolabel='CentOS-7-x86_64-LiveKDE-1810' set isofile='CentOS-7-x86_64-LiveKDE-1810.iso'

I get an error: "dracut-initqueue[749]: mount: you must specify the filesystem type". This persists even if I specify the filesystem type with rootfstype, e.g.:

linuxefi (loop)/isolinux/vmlinuz0 boot=isolinux iso-scan/filename=$isofile root=live:LABEL=$isolabel rd.live.image rootfstype=auto

I've also tried the different entries from here: https://gist.github.com/Pysis868/27203177bdef15fbb70c

menuentry "CentOS 7 test" {
set isolabel='live_ks-x86-201902131038'
set isofile="/images/livecd-live_ks-201902131038.iso"
loopback loop (hd0,gpt3)$isofile
linuxefi (loop)/isolinux/vmlinuz0 noeject inst.stage2=hd:LABEL=UNJEB:$isolabel
initrdefi (loop)/isolinux/initrd0.img  

Also tried the above with: linuxefi (loop)/isolinux/vmlinuz0 noeject inst.stage2=hd:LABEL=UNJEB:/$isofile

but both of these end in the following failed statement: "Failed to Switch Root: Specified switch root path /sysroot does not seem to be an OS tree, os-release file is missing". I'm not sure to which this refers to, so not sure where to check for the os-release file.

I have read that it's common to have the wrong label, so I have checked that the label of the ISO is correct by using losetup and blkid, e.g.:

sudo losetup loop8 /boot/images/livecd-live_ks-201902131038.iso
sudo blkid /dev/loop8

Other posts I've checked:

How do I boot from ISO file stored on hard disk?

https://www.centos.org/forums/viewtopic.php?t=55412

The Question: The problem is that I'm not sure if the problem is with the ISOs, the kernel parameters or both. Does somebody have working kernel parameters for a CentOS 7 Live ISO, which I could test and replicate? Or is there something I could check or modify in my initrd0.img file?

I also noticed that livecd-creator uses isolinux as a bootloader for the ISO, so it came to mind to try a different bootloader, e.g. syslinux, but I haven't got around to testing it.

Or would I be better of trying to achieve the goal with some other method e.g. adding all the necessary packages to initramfs and using that, or trying to boot a squashfs or something?

Rui F Ribeiro
  • 55,929
  • 26
  • 146
  • 227
Ziba
  • 21
  • 4

0 Answers0