diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 9f1c8081..bbf50b65 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -14,6 +14,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..225ed479 --- /dev/null +++ b/modules/ROOT/pages/provisioning-oraclecloud.adoc @@ -0,0 +1,287 @@ += 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 download a Fedora CoreOS QEMU (QCWO2) image, convert it to an Oracle Cloud Infrastructure image and then upload it to your Oracle Cloud Infrastructure account as a https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/importingcustomimagelinux.htm[custom image]. + +== 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. + +NOTE: 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[this issue 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, find the QEMU image on the https://fedoraproject.org/coreos/download/?stream=stable#cloud_images[download page] and download it on your system. + +. 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,heztner}.x86_64.qcow2 heztner" + 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 + +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 can 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@ +----