From 7eef04d6cf2b8af30a001cbec40067000f0c9d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Ravier?= Date: Wed, 10 Jul 2024 18:21:39 +0200 Subject: [PATCH] Provisioning: Add Oracle Cloud Infrastructure Initial documentation to setup FCOS on Oracle Cloud Infrastructure. See:https://github.com/coreos/fedora-coreos-tracker/issues/414 --- modules/ROOT/nav.adoc | 1 + .../ROOT/pages/provisioning-oraclecloud.adoc | 311 ++++++++++++++++++ 2 files changed, 312 insertions(+) create mode 100644 modules/ROOT/pages/provisioning-oraclecloud.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 0a1212e5..231158ad 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -15,6 +15,7 @@ ** xref:provisioning-kubevirt.adoc[Booting on KubeVirt] ** xref:provisioning-libvirt.adoc[Booting on libvirt] ** xref:provisioning-openstack.adoc[Booting on OpenStack] +** xref:provisioning-oraclecloud.adoc[Booting on Oracle Cloud] ** xref:provisioning-nutanix.adoc[Booting on Nutanix] ** xref:provisioning-qemu.adoc[Booting on QEMU] ** xref:provisioning-raspberry-pi4.adoc[Booting on the Raspberry Pi 4] diff --git a/modules/ROOT/pages/provisioning-oraclecloud.adoc b/modules/ROOT/pages/provisioning-oraclecloud.adoc new file mode 100644 index 00000000..d3f8225b --- /dev/null +++ b/modules/ROOT/pages/provisioning-oraclecloud.adoc @@ -0,0 +1,311 @@ += Provisioning Fedora CoreOS on Oracle Cloud Infrastructure (OCI) + +This guide shows how to provision new Fedora CoreOS (FCOS) nodes on Oracle Cloud Infrastructure. +Fedora CoreOS images are currently not published directly on Oracle Cloud Infrastructure. +Thus you must first download a Fedora CoreOS QEMU (QCOW2) image, then convert it to an Oracle Cloud Infrastructure image and finally upload it to your Oracle Cloud Infrastructure account as a https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/importingcustomimagelinux.htm[custom image]. + +IMPORTANT: Support for Fedora CoreOS on Oracle Cloud Infrastructure is considerer emerging, in that it does not yet offer an optimized user experience. + See https://github.com/coreos/fedora-coreos-tracker/issues/414[issue #414] for more details. + +== Prerequisites + +Before provisioning an FCOS machine, you must have an Ignition configuration file containing your customizations. +If you do not have one, see xref:producing-ign.adoc[Producing an Ignition File]. + +NOTE: Fedora CoreOS has a default `core` user that can be used to explore the OS. + If you want to use it, finalize its xref:authentication.adoc[configuration] by providing e.g. an SSH key. + +// If you do not want to use Ignition to get started, you can make use of the https://coreos.github.io/afterburn/platforms/[Afterburn support]. + +You also need to have access to an Oracle Cloud Infrastructure account. +The examples below use the https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm[oci] command-line tool and https://stedolan.github.io/jq/[jq] as a command-line JSON processor. + +IMPORTANT: This guide currently only covers Virtual Machine shapes and not Bare Metal ones. See https://github.com/coreos/fedora-coreos-tracker/issues/414#issuecomment-1795808614[issue #414] for details. + +== Creating an Oracle Cloud Infrastructure custom image + +Fedora CoreOS is designed to be updated automatically, with different schedules per stream. + +. Once you have picked the relevant stream, download the latest QEMU image from the https://fedoraproject.org/coreos/download/?stream=stable#baremetal[download page] or with podman (see https://coreos.github.io/coreos-installer/cmd/download/[documentation] for options): ++ +[source, bash] +---- +arch="x86_64" # or aarch64 +podman run --security-opt label=disable --pull=always --rm -v .:/data -w /data \ + quay.io/coreos/coreos-installer:release download -s stable -p qemu -f qcwo2 -a "${arch}" +---- ++ +Note this is just using `coreos-installer` as a tool to download the QCOW2 disk image. ++ +NOTE: Both x86_64 and aarch64 architectures are supported on Oracle Cloud Infrastructure. + +. Copy paste the following Bash script into a file name `convert-image.sh`: ++ +.QEMU to Oracle Cloud Infrastructure image conversion script +[source, bash] +---- +#!/bin/bash + +set -euo pipefail + +if [[ ${#} -ne 3 ]]; then + echo "Usage: " + echo "" + echo "Example:" + echo "./$(basename "${0}") fedora-coreos-40.20240616.3.0-{qemu,oraclecloud}.x86_64.qcow2 openstack" + exit 1 +fi + +source="${1}" +dest="${2}" +platform="${3}" + +if [[ ! -f "${source}" ]]; then + echo "Source image ${source} does not exists" + exit 1 +fi + +if [[ -f "${dest}" ]]; then + echo "Destination image ${dest} already exists" + exit 1 +fi + +if [[ -z "$(command -v guestfish)" ]]; then + echo "Could not find 'guestfish' command" + exit 1 +fi + +cp --reflink=auto "${source}" "${dest}" +guestfish -a "${dest}" <",""]" ++ +. Create an Internet Gateway: ++ +[source, bash] +---- +getway_id="$(oci network internet-gateway create \ + --compartment-id "${compartment_ocid}" \ + --vcn-id "${vcn_id}" \ + --is-enabled true \ + --display-name "fedora-coreos-gateway" + | jq -r '.data.id')" +---- ++ +. Add a Rule to the Route Table: ++ +[source, bash] +---- +route_table="$(oci network route-table list \ + --compartment-id "${compartment_ocid}" \ + --vcn-id "${vcn_id}" + | jq -r '.data[0].id')" + +oci network route-table update \ + --rt-id "${route_table}" \ + --route-rules "[{"cidrBlock":"0.0.0.0/0","networkEntityId":"${getway_id}"}] \ + --force +---- ++ +// TODO: Set boot volume size +// TODO: Add setup for SSH keys with Afterburn support +. Launch an instance. Your Ignition configuration must be passed to the VM as its user data. +//, or you can skip passing user data if you just want SSH access. This provides an easy way to test out FCOS without first creating an Ignition config. ++ +.Example launching FCOS on Oracle Cloud Infrastructure using an Ignition configuration file +[source, bash] +---- +ignition_config="oraclecloud.ign" + +oci compute instance launch \ + --compartment-id "${compartment_ocid}" \ + --availability-domain "${availability_domain}" \ + --display-name "fedora-coreos" \ + --image-id "${image_id}" \ + --instance-options "{\"areLegacyImdsEndpointsDisabled\": false}" \ + --shape "VM.Standard.E2.1.Micro" \ + --assign-public-ip true \ + --user-data-file "${ignition_config}" \ + --subnet-id "${vcn_id}" +---- ++ +NOTE: While the Oracle Cloud Infrastructure documentation mentions `cloud-init`, FCOS does not support cloud-init. + It accepts only Ignition configuration files. ++ +. Get the public IP adress of your instance: ++ +---- +oci compute instance list-vnics --instance-id +---- ++ +. You now should be able to SSH into the instance using the associated IP address. ++ +.Example connecting +[source, bash] +---- +ssh core@ +----