guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GuixSD bootable ISO-9669 image (was: Re: GuixSD on servers [Fwd: [rtrack


From: Chris Marusich
Subject: GuixSD bootable ISO-9669 image (was: Re: GuixSD on servers [Fwd: [rtracker.1984.is #131647] A question about VServer system specific requirements])
Date: Sun, 23 Apr 2017 22:11:04 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Chris Marusich <address@hidden> writes:

> address@hidden (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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]