[Top][All Lists]

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

Re: Hosting a GuixSD server on commodity hosting platforms, a journey

From: Christopher Allan Webber
Subject: Re: Hosting a GuixSD server on commodity hosting platforms, a journey
Date: Fri, 02 Dec 2016 11:39:27 -0600
User-agent: mu4e 0.9.16; emacs 25.1.1

Chris Marusich writes:

> Hi Chris,
> Sounds like you've been having fun :-)

Yes, though I'd rather have things working than have fun right now ;)

> Christopher Allan Webber <address@hidden> writes:
>> Christopher Allan Webber writes:
>>> Relatedly!  User dvc in #guix on freenode suggests looking at
>>> which looks quite affordable and hey!  It has a
>>> "custom ISO" option.  If we can convert our USB boot stick thingy
>>> (presumably via xorriso) we could try generating a base server image
>>> from there.  I'd prefer to have a workflow where I go from handing off
>>> something made with "guix system vm-image" to some API, but maybe in the
>>> meanwhile Vultr would be a lower barrier to entry.
>> I decided to explore this a bit more today, figuring converting Guix's
>> USB image to .iso couldn't be that hard.  Well, turns out it's another
>> rabbit hole, and I didn't reach the end of this one yet either!
> You can say that again!  ISOs and bootable CDs are an area that is often
> complicated, apparently can be done in multiple ways, and is often
> misunderstood or glossed over in most Internet discussions.
>> Assume you've got the USB image handy (and uncompressed); then we want
>> to mount it via a loopback device, but we need to get the right offset
>> to find out what byte the root partition starts from.  Let's find out
>> where that is.
>>   # We need to find out how many bytes the offset is
>>   address@hidden:/tmp$ parted guixsd-usb-install-0.11.0.x86_64-linux 
>>   # This switches it to bytes output
>>   (parted) unit B
>>   (parted) print
>>   Model:  (file)
>>   Disk /tmp/guixsd-usb-install-0.11.0.x86_64-linux: 943718400B
>>   Sector size (logical/physical): 512B/512B
>>   Partition Table: msdos
>>   Disk Flags: 
>>   Number  Start     End         Size        Type     File system  Flags
>>    1      1048576B  934281727B  933233152B  primary  ext4         boot
>>   (parted) quit
>> Ok, so we can take that "start" number (be sure to strip the trailing
>> 'B'):
>>   $ sudo mount -o ro,loop,offset=1048576 
>> guixsd-usb-install-0.11.0.x86_64-linux /mnt/tmp
> FYI, you can also mount the file on a loopback device, like I did in my
> EC2 example.  If you use the -P option to losetup, it'll automatically
> create a device file for the partition, which you can then mount.  That
> way, there is no need to find/specify the offset.

Oh, that's useful... I didn't realize that :)

>> Now we can write it to the .iso image, packaging up all those files that
>> appear in the usb image:
>>   # flags: verbose, Rock Ridge filesystem info, output path, input directory
>>   $ sudo xorrisofs -v -R -o ./guixsd-usb-install-0.11.0.x86_64-linux.iso 
>> /mnt/tmp/
>>   GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.
>>   Drive current: -outdev 'stdio:./guixsd-usb-install-0.11.0.x86_64-linux.iso'
>>   Media current: stdio file, overwriteable
>>   Media status : is blank
>>   Media summary: 0 sessions, 0 data blocks, 0 data,  242g free
>>   xorriso : UPDATE : 27100 files added in 1 seconds
>>   xorriso : UPDATE : 47400 files added in 2 seconds
>>   xorriso : UPDATE : 50200 files added in 3 seconds
>>   [.....]
>>   Written to medium : 351969 sectors at LBA 0
>>   Writing to 'stdio:./guixsd-usb-install-0.11.0.x86_64-linux.iso' completed 
>> successfully.
>> Except, oops!  This won't boot.  We need to put GRUB on it.
>> Well here's where I'm stuck for tonight.  I don't know exactly what's
>> needed; maybe either the -b flag, or --grub2-mbr, or some combination.
>> The man page is a little bit overwhelming (I mean, xorrisofs is clearly
>> featureful, credit there):
>> But how do I generate the right GRUB stuff to put there?  Can I pull it
>> off the USB image?  Generate it separately?
>> This web page is very long but appears to have the appropriate info (and
>> unfortunately requires running arbitrary javascript to even render):
>> ... so I guess the next steps are following roughly what's described at
>> the bottom of the page?
> That is actually the exact webpage I was going to link to you.  What you
> need to do (I think) is make the CD bootable, and the common way to do
> that, apparently, is to do it via El Torito.  I've never done it,
> myself, but my understanding is that that is what needs to be done.

Yeah I think we need to generate the Grub configuration, then pass to
Guix somehow.  I don't totally understand how that is all done yet.

> In my opinion, unless the virtualization service provides no other easy
> way to import an image for booting, I doubt that making a bootable ISO
> is the simplest solution.  But it's good to experiment!

Maybe not.  I felt like it might be the easiest path after feeling like
the error message I got from the Rackspace image upload I made was
fairly opaque.  Something where I could watch the output of something
from something resembling a console seemed appealing.

I should probably try to replicate the work you've done on AWS hosting
as a next step.  I'm not wild about AWS, but at this point, maybe having
something working is most important.

I'll re-read what you posted anyway.  Clearly there was some useful info
I missed!

 - CHris

reply via email to

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