Menyediakan Fedora CoreOS di Oracle Cloud Infrastructure (OCI)

Panduan ini menunjukkan cara menyediakan node Fedora CoreOS (FCOS) baru di Oracle Cloud Infrastructure. Citra Fedora CoreOS saat ini belum dipublikasikan secara langsung di Oracle Cloud Infrastructure. Oleh karena itu, Anda harus terlebih dahulu mengunduh citra Fedora CoreOS untuk Oracle Cloud Infrastructure, kemudian mengunggahnya ke akun Anda sebagai [custom image](https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/importingcustomimagelinux.htm).

Persyaratan

Sebelum menyediakan mesin FCOS, Anda harus memiliki file konfigurasi Ignition yang berisi kustomisasi Anda. Jika belum memilikinya, lihat [Producing an Ignition File](xref:producing-ign.adoc).

Fedora CoreOS memiliki pengguna bawaan bernama core yang dapat digunakan untuk menjelajahi sistem operasi. Jika Anda ingin menggunakannya, selesaikan [konfigurasinya](xref:authentication.adoc) dengan menyediakan, misalnya, kunci SSH.

Jika Anda tidak ingin menggunakan Ignition untuk memulai, Anda dapat memanfaatkan [dukungan Afterburn](https://coreos.github.io/afterburn/platforms/).

Anda juga perlu memiliki akses ke akun Oracle Cloud Infrastructure. Contoh di bawah ini menggunakan alat baris perintah [oci](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm) dan [jq](https://stedolan.github.io/jq/) sebagai pemroses JSON berbasis baris perintah.

Panduan ini saat ini hanya mencakup bentuk Virtual Machine dan tidak mencakup Bare Metal. Lihat [issue #414](https://github.com/coreos/fedora-coreos-tracker/issues/414#issuecomment-1795808614) untuk detailnya.

Mengunduh citra Oracle Cloud Infrastructure

Fedora CoreOS dirancang agar diperbarui secara otomatis, dengan jadwal berbeda untuk setiap stream. Setelah Anda memilih stream yang relevan, unduh, verifikasi, dan dekompres citra terbaru untuk Oracle Cloud Infrastructure:

ARCH="x86_64"    # atau "aarch64"
STREAM="stable"  # atau "testing", "next"
coreos-installer download -s $STREAM -a $ARCH -p oraclecloud -f qcow2.xz --decompress
Arsitektur x86_64 dan aarch64 keduanya didukung di Oracle Cloud Infrastructure.

Sebagai alternatif, Anda dapat mengunduh citra Oracle Cloud Infrastructure secara manual dari [halaman unduhan](https://fedoraproject.org/coreos/download/?stream=stable#cloud_images).

Mengunggah citra ke Oracle Cloud Infrastructure

Identifikasi ID dari root compartment Anda.

Menampilkan daftar compartment dalam tenancy Anda.
oci iam compartment list
ROOT_COMPARTMENT_ID=<root_compartment_id>
OCID compartment root sama dengan OCID tenancy Anda. Anda dapat menemukan informasi ini di konfigurasi CLI Anda di ~/.oci/config atau di [Cloud Console](https://cloud.oracle.com/tenancy).

Jika Anda hanya memiliki satu tenant/root compartment, Anda dapat menggunakan perintah berikut untuk mendapatkan informasi tersebut dengan lebih mudah.

Mengatur ID root compartment berdasarkan compartment pertama dalam daftar.
ROOT_COMPARTMENT_ID=$(oci iam compartment list |
                      jq --raw-output '.data."compartment-id"')
Membuat compartment baru untuk pengujian.
COMPARTMENT_ID=$(oci iam compartment create                \
                 --name fedora-coreos-test                 \
                 --compartment-id $ROOT_COMPARTMENT_ID     \
                 --description "Fedora CoreOS compartment" \
                 | jq -r '.data.id')
Membuat bucket penyimpanan untuk unggahan citra.
BUCKET_NAME="fedora-coreos"
oci os bucket create --compartment-id $COMPARTMENT_ID --name $BUCKET_NAME
Mengunggah citra ke bucket penyimpanan.
FCOS_VERSION='...'
IMAGE_NAME="fedora-coreos-${FCOS_VERSION}-oraclecloud.${ARCH}.qcow2"
FILE_PATH="./${IMAGE_NAME}"
oci os object put --bucket-name $BUCKET_NAME --file $FILE_PATH
Melihat objek dalam bucket.
oci os object list -bn $BUCKET_NAME
Impor citra sebagai custom image dan catat ID-nya.
NAMESPACE=$(oci os ns get | jq -r '.data')
IMAGE_ID=$(oci compute image import from-object               \
           --compartment-id $COMPARTMENT_ID                   \
           --namespace $NAMESPACE                             \
           --bucket-name $BUCKET_NAME                         \
           --name $IMAGE_NAME                                 \
           --display-name "Fedora CoreOS $FCOS_VERSION $ARCH" \
           --launch-mode PARAVIRTUALIZED                      \
           --source-image-type QCOW2                          \
           --operating-system "Linux"                         \
           | jq -r '.data.id')

Tunggu hingga proses impor selesai.

Ulangi hingga citra menjadi tersedia.
while true; do
    state=$(oci compute image get --image-id $IMAGE_ID |
            jq -r '.data."lifecycle-state"')
    echo "$(date): $state"
    [ "$state" == "AVAILABLE" ] && break || sleep 30
done

Citra perlu dikonfigurasi agar platform mengetahui kemampuan yang dimilikinya. Di sini kita akan mengambil set kemampuan versi default 1.2 dan mengatur beberapa kemampuan tambahan. Perlu dicatat bahwa beberapa di antaranya bersifat spesifik untuk arsitektur tertentu, tetapi tidak menjadi masalah karena tetap harus diaktifkan saat runtime.

Konfigurasikan kemampuan tambahan untuk citra.
GLOBAL_CAP_ID=$(
    oci compute global-image-capability-schema list --all | jq -r '.data.id')
GLOBAL_CAP_VERSION_NAME=$(
    oci compute global-image-capability-schema-version list --all \
    --global-image-capability-schema-id $GLOBAL_CAP_ID            \
    --display-name 1.2 | jq -r '.data.name')

oci compute image-capability-schema create \
    --global-image-capability-schema-version-name $GLOBAL_CAP_VERSION_NAME \
    --compartment-id $COMPARTMENT_ID --image-id $IMAGE_ID --schema-data '{
    "Compute.AMD_SecureEncryptedVirtualization": {
        "default-value": true,
        "descriptor-type": "boolean",
        "source": "IMAGE"
    },
    "Compute.SecureBoot": {
        "default-value": true,
        "descriptor-type": "boolean",
        "source": "IMAGE"
    },
    "Storage.Iscsi.MultipathDeviceSupported": {
        "default-value": true,
        "descriptor-type": "boolean",
        "source": "IMAGE"
    }
}'

Sekarang kita dapat menandai citra agar kompatibel dengan [shapes](https://docs.oracle.com/en-us/iaas/Content/Compute/References/computeshapes.htm) VM yang sesuai.

Hapus shapes default yang kompatibel.
oci compute image-shape-compatibility-entry \
    list --image-id $IMAGE_ID | jq -r '.data[].shape' |
while read shape; do
    [[ "$shape" =~ Generic ]] && continue # Tidak dapat menghapus shape Generic
    echo "Menghapus $shape dari $IMAGE_ID"
    oci compute image-shape-compatibility-entry remove \
        --force --image-id $IMAGE_ID --shape-name "${shape}"
done
Tandai sebagai kompatibel dengan shapes VM yang sesuai.
shapes_info=$(oci compute shape list --compartment-id $COMPARTMENT_ID | jq -r '.data[]')

# Batasi hanya untuk shapes VM
# [https://github.com/coreos/fedora-coreos-tracker/issues/414#issuecomment-1795808614](https://github.com/coreos/fedora-coreos-tracker/issues/414#issuecomment-1795808614)
vm_shapes_info=$(jq -r 'select(.shape | select(startswith("VM")))' <<< "$shapes_info")

# Tentukan shapes untuk x86_64 dan aarch64
amd64_shape_ids=$(jq -r 'select(."processor-description"  |
                                contains("AMD", "Intel")) |
                                .shape' <<< "$vm_shapes_info")
arm64_shape_ids=$(jq -r 'select(."processor-description" |
                                contains("Ampere"))      |
                                .shape' <<< "$vm_shapes_info")

# Terapkan shapes yang sesuai ke IMAGE
[ "$ARCH" == "x86_64" ] && shape_ids="$amd64_shape_ids"
[ "$ARCH" == "aarch64" ] && shape_ids="$arm64_shape_ids"
for shape in $shape_ids; do
    oci compute image-shape-compatibility-entry add \
        --image-id $IMAGE_ID --shape-name "${shape}"
done
Tampilkan semua shapes yang kompatibel untuk citra.
oci compute image-shape-compatibility-entry list --image-id $IMAGE_ID | jq -r '.data[].shape'

Meluncurkan instance

Buat Virtual Cloud Network.
NETWORK_ID=$(oci network vcn create        \
    --compartment-id $COMPARTMENT_ID       \
    --display-name "fedora-coreos-network" \
    --cidr-blocks '["10.0.0.0/16"]'        \
    --dns-label "myfcos"                   \
    --wait-for-state AVAILABLE | jq -r '.data.id')
Buat Subnet.
SUBNET_ID=$(oci network subnet create     \
    --compartment-id $COMPARTMENT_ID      \
    --display-name "fedora-coreos-subnet" \
    --cidr-block "10.0.0.0/24"            \
    --vcn-id $NETWORK_ID                  \
    --dns-label "subnet1"                 \
    --wait-for-state AVAILABLE | jq -r '.data.id')
Buat Internet Gateway.
GATEWAY_ID=$(oci network internet-gateway create \
    --compartment-id $COMPARTMENT_ID             \
    --display-name "fedora-coreos-gateway"       \
    --vcn-id $NETWORK_ID                         \
    --is-enabled true | jq -r '.data.id')
Tambahkan Rule ke Route Table.
ROUTE_TABLE_ID=$(oci network route-table list \
    --compartment-id $COMPARTMENT_ID          \
    --vcn-id $NETWORK_ID | jq -r '.data.id')

oci network route-table update \
    --rt-id $ROUTE_TABLE_ID    \
    --force --route-rules      \
    '[{"cidrBlock":"0.0.0.0/0","networkEntityId":"'"${GATEWAY_ID}"'"}]'

Sekarang Anda dapat memilih availability domain atau cukup mengaturnya menjadi domain pertama di region tersebut.

Pilih availability domain.
AVAILABILITY_DOMAIN=$(oci iam availability-domain list | jq -r '.data.name')
Lihat semua domain yang memungkinkan dengan oci iam availability-domain list.

Sekarang kita dapat meluncurkan instance. Jika Anda hanya menginginkan akses SSH, Anda dapat melewatkan pemberian konfigurasi Ignition ke instance.

Meluncurkan instance tanpa konfigurasi Ignition.
NAME=fedora-coreos
SHAPE=VM.Standard.E5.Flex # atau VM.Standard.A1.Flex untuk aarch64
SSHKEYS="/path/to/authorized_keys" # path ke file authorized_keys

INSTANCE_ID=$(oci compute instance launch               \
    --compartment-id $COMPARTMENT_ID                    \
    --availability-domain $AVAILABILITY_DOMAIN          \
    --display-name $NAME                                \
    --image-id $IMAGE_ID                                \
    --shape $SHAPE                                      \
    --shape-config '{"ocpus": '2', "memoryInGBs": '4'}' \
    --subnet-id $SUBNET_ID                              \
    --assign-public-ip true                             \
    --ssh-authorized-keys-file $SSHKEYS                 \
    --wait-for-state TERMINATED                         \
    --wait-for-state RUNNING | jq -r '.data.id')
Shape VM.Standard.E2.1.Micro yang memenuhi syarat free tier memiliki memori yang kurang dari jumlah yang direkomendasikan untuk menjalankan Fedora CoreOS. Untuk instance yang memenuhi syarat free tier, direkomendasikan untuk menggunakan shape berbasis ARM VM.Standard.A1.Flex.
Meluncurkan instance dengan kustomisasi dan konfigurasi Ignition.
NAME=fedora-coreos
SHAPE=VM.Standard.E5.Flex      # atau VM.Standard.A1.Flex untuk aarch64
DISK=50                        # ukuran boot volume dalam GB
OCPUS=2                        # jumlah OCPU yang dialokasikan
MEMORY=4                       # ukuran memori dalam GB
INSTANCE_HOSTNAME=mycoreos     # hostname untuk instance
USERDATA="/path/to/config.ign" # path ke konfigurasi Ignition Anda
                               # yang mengatur kunci SSH

INSTANCE_ID=$(oci compute instance launch               \
    --compartment-id $COMPARTMENT_ID                    \
    --availability-domain $AVAILABILITY_DOMAIN          \
    --display-name $NAME                                \
    --image-id $IMAGE_ID                                \
    --shape $SHAPE                                      \
    --shape-config                                      \
    '{"ocpus": '${OCPUS}', "memoryInGBs": '${MEMORY}'}' \
    --subnet-id $SUBNET_ID                              \
    --assign-public-ip true                             \
    --hostname-label $INSTANCE_HOSTNAME                 \
    --boot-volume-size-in-gbs $DISK                     \
    --user-data-file $USERDATA                          \
    --wait-for-state TERMINATED                         \
    --wait-for-state RUNNING | jq -r '.data.id')
Meskipun dokumentasi Oracle Cloud Infrastructure menyebutkan cloud-init, Fedora CoreOS tidak mendukung cloud-init. Fedora CoreOS hanya menerima file konfigurasi Ignition. Saat menggunakan Cloud Console, konfigurasi Ignition dapat diletakkan pada kolom "Cloud-init script".
Untuk mengaktifkan SecureBoot, Anda dapat menambahkan konfigurasi tambahan melalui --platform-config '{"type": "AMD_VM", "isSecureBootEnabled": true}' atau --platform-config '{"type": "INTEL_VM", "isSecureBootEnabled": true}' tergantung pada jenis prosesor instance Anda. Mengaktifkan SecureBoot saat ini tidak dimungkinkan untuk instance ARM.
Dapatkan alamat IP publik dari instance.
PUBLIC_IP=$(oci compute instance list-vnics --instance-id $INSTANCE_ID |
            jq -r '.data."public-ip"')
echo "Alamat publik IPv4 instance adalah: $PUBLIC_IP"

Sekarang Anda seharusnya dapat melakukan SSH ke dalam instance menggunakan alamat IP yang terkait.

Lakukan SSH ke instance yang sedang berjalan.
ssh "core@${PUBLIC_IP}"