[HN Gopher] How to port your OS to EC2
       ___________________________________________________________________
        
       How to port your OS to EC2
        
       Author : valleyer
       Score  : 80 points
       Date   : 2021-05-21 08:08 UTC (14 hours ago)
        
 (HTM) web link (www.daemonology.net)
 (TXT) w3m dump (www.daemonology.net)
        
       | geofft wrote:
       | So... how do you get an ENA driver if you don't have one already?
       | I see Amazon provides Linux and FreeBSD drivers at
       | https://github.com/amzn/amzn-drivers - is the answer to start
       | with the the FreeBSD one (because it's under a more permissive
       | license) and adapt it to your OS?
        
       | [deleted]
        
       | zdw wrote:
       | > Due to some bizarre breakage in EC2 -- which I've been
       | complaining about for ten years -- the serial console is very
       | "laggy". If you find that you're not getting any output, wait
       | five minutes and try again.
       | 
       | This is the single most frustrating bug with EC2 I've
       | experienced. In my case, I have Jenkins spinning up temporary
       | executors in EC2, then getting the SSH host key from serial log
       | to verify the connection (I appreciate the "importance of SSH
       | host keys compared with flossing" comparison in this article...)
       | 
       | Machines take <1m to boot, then sit there for 4-8m just waiting
       | for the log message to show up.
        
         | paulddraper wrote:
         | You should add the fingerprint as an EC2 tag or something from
         | a boot script.
        
         | oppositelock wrote:
         | There's a new console feature which addresses this, but yes,
         | the previous incarnation was very frustrating. I'd like to see
         | this on all instance types.
         | 
         | https://aws.amazon.com/about-aws/whats-new/2021/03/introduci...
        
       | haolez wrote:
       | Waiting for someone to port MenuetOS[0] :D
       | 
       | [0] http://www.menuetos.net/
        
       | Syonyk wrote:
       | That's... very basic. Not an awful lot of useful information
       | about the hardware environment.
       | 
       | The challenge for things like EC2 is more in that most cloud
       | hypervisors, for security/performance/complexity reasons, have
       | stopped emulating the older hardware a lot of "basic osdev
       | projects" rely on. So you're stuck with a very modern set of
       | hardware for interrupt controllers, disk IO, etc. I was hoping to
       | see something more along those lines here, not just how to make
       | and upload a disk image.
        
         | cperciva wrote:
         | I agree that it's basic information -- but that's the most
         | important information to have! This blog post was essentially
         | constructed from the replies I sent people who asked me to help
         | them.
        
           | AndrewUnmuted wrote:
           | Just want to sneak in here to thank you for Tarsnap. It's the
           | best storage service I've ever used!
        
         | mikece wrote:
         | Is there a particular OS you had in mind that doesn't deal well
         | with modern hardware?
        
           | Syonyk wrote:
           | I guess it depends on how you read "Your OS." I read it as
           | "Hobby osdev project."
           | 
           | "Port your OS to EC2," as I read it (I live in weird weeds so
           | this may not be how other people read it) implies an OS
           | you've written ("your OS") that currently doesn't run on EC2
           | (or you wouldn't need to "port" it - that implies, at least
           | to me, getting something running where it doesn't currently
           | run).
           | 
           | A lot of the hobby OSes out there, even if they're 64-bit,
           | don't always support the latest and greatest drive
           | controllers, interrupt controllers, etc. So if you don't have
           | NVMe support (or virtio block device support - not sure if
           | EC2 supports that or not), you won't be able to read the
           | disk. Legacy ATA/SATA interfaces are often what's supported.
           | 
           | I would have expected, based on the title and what it
           | implied, a list of the hardware supported in various instance
           | types. If the virtualized instances support virtio, mention
           | it. If they only support SATA or NVMe, mention that. And
           | perhaps some references to the relevant specs to implement
           | those.
           | 
           | But if all you have to do to get your OS running is just put
           | it on a disk image, then I'm not sure it really qualifies as
           | "porting to EC2." Just "Installing on" would be more useful
           | phrasing for that.
        
             | eyberg wrote:
             | You are correct. There are actually quite a few different
             | configurations available on AWS alone - not to mention most
             | cloud providers are very different. What works on one
             | instance type on AWS won't immediately run on Azure without
             | additional drivers.
             | 
             | Google Cloud is probably the most friendly one for hobby
             | osdev cause they are based on KVM.
             | 
             | For instance when starting with
             | https://github.com/nanovms/nanos (whom I'm with) we
             | targeted the t2 instances first and it actually took a
             | longer time to come up with support for some of the newer
             | t3 instances because we had to add ENA and NVMe drivers.
        
           | actually_a_dog wrote:
           | I believe the GP comment was referring to the plethora of
           | basic/hobbyist OS'es out there. For instance, see
           | https://wiki.osdev.org/Bare_Bones#Implementing_the_Kernel
           | 
           | I'm pretty sure EC2 would barf on that, even if you were
           | running in 32-bit mode.
        
             | Syonyk wrote:
             | Correct.
             | 
             | Though I see no reason why EC2 would barf on it, as long as
             | you support the proper hardware. They just don't include a
             | lot of legacy hardware you find on a more standard bit of
             | x86 hardware.
             | 
             | Now, if you wanted a _really_ interesting article, discuss
             | how to port your OS to run on the EC2 ARM instances!
        
         | actually_a_dog wrote:
         | > ...most cloud hypervisors, for
         | security/performance/complexity reasons, have stopped emulating
         | the older hardware a lot of "basic osdev projects" rely on.
         | 
         | If you're really determined to do basic/hobbyist OS dev on EC2,
         | you can always just run it under QEMU, which is pretty much
         | what you'd do if you're developing on your own hardware,
         | anyway. I know that's kinda beside the point, and reintroduces
         | all those performance issues, but, security isn't a concern
         | here, and it's certainly no more complex than just running it
         | on your own machine.
        
       | goneri wrote:
       | Since this article, Cloud-Init supports FreeBSD, NetBSD and
       | OpenBSD natively. Cloud-Init handles all the interaction with the
       | Cloud provider and the metadata. So beside constraint of the disk
       | image format (qcow2, raw, etc), the same Cloud-Init base image is
       | likely to work for different Cloud vendor seamlessly.
       | 
       | I maintain some Cloud images (qcow2) for BSD https://bsd-cloud-
       | image.org/ that are based on Cloud-Init.
        
       | thayne wrote:
       | > The ENA driver is probably the hardest thing to port, since as
       | far as I know there's no way to get your hands on the hardware
       | directly, and it's very difficult to do any debugging in EC2
       | without having a working network.
       | 
       | I'm certainly not an expert on these things, but couldn't you run
       | your target OS in a VM on a better-supported OS in ec2 (for
       | example Linux), and pass-through a second ENA network interface
       | to the OS you are porting.
        
         | nijave wrote:
         | Ec2 just released serial console, too.
         | https://aws.amazon.com/about-aws/whats-new/2021/03/introduci...
         | 
         | This article appears to be a couple years old
        
           | eyberg wrote:
           | They've had serial output for a while now and one problem
           | with this new version of it is that you can only get the
           | output that is produced while you are actually connected to
           | it. So if you'd like to see output from say yesterday - it's
           | not going to happen.
           | 
           | Google Cloud will store this info (even after reboot) for a
           | while.
           | 
           | Azure is probably the best at dealing with this as they can
           | take both screenshots and dump text continuously into a
           | bucket of files so you can always have everything available.
        
         | my123 wrote:
         | That's a perfectly valid workflow. It's what we do sometimes at
         | AWS too.
         | 
         | With .metal instances, it's a good workflow to have.
        
       ___________________________________________________________________
       (page generated 2021-05-21 23:01 UTC)