Fedora CoreOS & podman, hello world?

hello-world, Fedora Linux, podman, YAML

Sometimes I try to learn something new, instead of just repeating what I already know and love. It’s hard and I sometimes prefer to avoid it.

However, I had some time to mess around tonight and decided to try Fedora CoreOS. Bear with me.

The tutorial was nice and easy, and I just had to suffer from the relatively poor ergonomics of generating multiple throw-away VMs with QEMU, a tool which I haven’t used much. So I’ve basically created virtual machines named httpd, httpd2, …, httpdN. Yay me.

sudo virt-install --connect qemu:///system --name httpd2 \
--memory 2048 --os-variant=fedora31 --import --graphics=none \
--disk size=10,backing_store=/tmp/fedora-coreos-31.20200505.3.0-qemu.x86_64.qcow2 \
--qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=/tmp/httpd.ign"

As I obviously was missing something regarding creating these VMs in a convenient manner, I also had to rely to manually assigning any needed file to QEMU/KVM.

sudo chown qemu:qemu /tmp/helloworld.* /tmp/fedora-coreos-31.20200505.3.0-qemu.x86_64.qcow2

Here’s my helloworld.fcc, which I transcompiled (I get grumpy whenever I have to transpile anything) to httpd.ign to make things confusing.

variant: fcos
version: 1.0.0
    - name: core
        # my super secret ssh pubkey goes here, as per the tutorial
        - ssh-.......
    - name: helloworld.service
      enabled: true
      contents: |
        Description=gimme webz

        ExecStartPre=-/bin/podman kill httpd
        ExecStartPre=-/bin/podman rm httpd
        ExecStartPre=-/bin/podman pull
        ExecStart=/bin/podman run --name httpd -p 8080:80 httpd:2.4

        ExecStop=/bin/podman stop httpd


To transpile it, download and run the fcct utility using podman. OK.

podman pull
podman run -i --rm --pretty --strict < helloworld.fcc > /tmp/httpd.ign

One thing that bit me was that podman-pull has an order of container repositories, and that the only documentation I found (as in the first hit on Google) was old and indicated that I had to use a docker-daemon bridge to pull from dockerhub.

podman pull # wrong
podman pull httpd:2.4                         # correct
podman pull               # correct-er

Not sure why isn’t included in the default repository list, but it’s easy to specify for fcct and friends, I guess?

Well, now I can visit a website that says “It works!”, running on a virtual machine on my laptop, using just 30 lines of yaml, transcompiled into json and then provisioned unto my new VM. I honestly think this is pretty nice, now I just have to learn how to actually use this for something - but only after learning how to gracefully shutdown the machine. That has the difficulty setting on par with exiting vi

Hopefully next iteration might be useful - maybe this article will help me? Who knows?