Chris Marusich writes: > ludo@gnu.org (Ludovic Courtès) writes: > >>> There appear to be (at least) two problem that prevent this naive >>> solution from working, which might point us in the right direction: >>> >>> First, the GRUB menu is trying to find a file system with label >>> "gnu-disk-image" (via "search --label --set gnu-disk-image"), which >>> won't work because there is no file system with that label in the >>> resulting image. >> >> So it seems that the crux of the problem is that ISO9660 lacks file >> system labels, which breaks the whole thing, right? > > Yes, probably. It seems we can set a "volume id", but not a label like > in EXT file systems. For example, see here: > > https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/cd-dvd/iso-image.nix I discovered that grub-mkrescue also lets you pass through options to xorriso. So, you can set the volume ID as follows: --8<---------------cut here---------------start------------->8--- $ sudo grub-mkrescue -V gnu-disk-image -v -o /tmp/test-img.iso /mnt/disk-image-partition-1 ... grub-mkrescue: info: enabling BIOS support .... grub-mkrescue: info: grub-mkimage --directory '/gnu/store/2hxz9cpipsbf2hkiz5aq70k73wjj0fw1-grub-2.02rc1/lib/grub/i386-pc' --prefix '/boot/grub' --output '/tmp/grub.zilpbK/boot/grub/i386-pc/eltorito.img' --format 'i386-pc-eltorito' --compression 'auto' --config '/tmp/grub.N4OuA5' 'biosdisk' 'iso9660' ... grub-mkrescue: info: executing xorriso -as mkisofs -graft-points --modification-date=2017042404413800 -b boot/grub/i386-pc/eltorito.img -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info --grub2-mbr /gnu/store/2hxz9cpipsbf2hkiz5aq70k73wjj0fw1-grub-2.02rc1/lib/grub/i386-pc/boot_hybrid.img --protective-msdos-label -o /tmp/test-img.iso -r /tmp/grub.zilpbK --sort-weight 0 / --sort-weight 1 /boot -V gnu-disk-image /mnt/disk-image-partition-1. ... xorriso : WARNING : -volid text does not comply to ISO 9660 / ECMA 119 rules ... Writing to 'stdio:/tmp/test-img.iso' completed successfully. --8<---------------cut here---------------end--------------->8--- Looks like setting the volume ID worked (despite the warning above): --8<---------------cut here---------------start------------->8--- $ sudo blkid /tmp/test-img.iso /tmp/test-img.iso: UUID="2017-04-24-04-41-38-00" LABEL="gnu-disk-image" TYPE="iso9660" PTTYPE="dos" --8<---------------cut here---------------end--------------->8--- >>> Second, the init process from the initrd (I think that's what it's >>> called?) is trying to look for a file system with label >>> "gnu-disk-image", which it never finds. It just sits there waiting to >>> find it, and it never shows up, so it freaks out. Possible solution: >>> modify the behavior of our initrd's init process. I'm not sure how to >>> customize the init process here, but there must be a way. We'll >>> probably also need the kernel module that enables reading of iso9660 >>> file systems, if it wasn't present already. >> >> So we could try detecting the root partition by a mechanism other than >> partition labels/UUIDs, but I don’t know which mechanism. Ideas? How >> do people address this? > > Volume ID seems like the right thing to try first. What do we need to > change to support this, I wonder? I'm not familiar with the initrd > stuff but would be willing to poke around in there and experiment. I > just don't really know where to begin. Unfortunately, even after setting the volume ID, booting as follows does not work. The init process still doesn't find the partition with the label "gnu-disk-image": --8<---------------cut here---------------start------------->8--- $ sudo qemu-system-x86_64 -machine type=pc-i440fx-2.5,accel=kvm -boot order=dc,menu=on -m size=4G -k en-us -name guixsd -cdrom /tmp/test-img.iso /tmp/test --8<---------------cut here---------------end--------------->8--- Judging by the contents of gnu/build/file-systems.scm, we don't have any support for ISO-9669 file systems. Perhaps if we add support here, the machinery to find the partition labeled "gnu-disk-image" will work. What do you think? > By the way, do you think it's possible to build an ISO image from a > manifest of files? I'm still curious to hear your answer regarding this. It isn't clear to me whether we need to generate a disk image first, just to create the ISO-9669 image. It seems redundant. I'm just playing around with the disk image because it's an easy way to get at all the files. If we can put all the files in a single place without creating a disk image, then we can probably invoke xorriso or grub-mkrescue directly on them. -- Chris