Mengaktifkan login otomatis dan mengatur nama host kustom

Pastikan bahwa Anda telah menyelesaikan langkah-langkah yang diuraikan dalam halaman penyiapan awal sebelum memulai tutorial ini.

Penyediaan Fedora CoreOS

Fedora CoreOS tidak memiliki disk instalasi yang terpisah. Sebaliknya, setiap instalasinya dimulai dari image disk generik yang dikustomisasi pada boot pertama melalui Ignition.

Berkas konfigurasi Ignition ditulis dalam format JSON, tetapi umumnya tidak ramah pengguna. Konfigurasi tersebut kemudian ditulis dalam format yang lebih sederhana, yaitu Butane config, yang kemudian dikonversi menjadi berkas konfigurasi Ignition. Alat yang bertanggung jawab untuk mengonversi berkas konfigurasi Butane menjadi berkas konfigurasi Ignition disebut Butane.

Konfigurasi Ignition Pertama menggunakan Butana

Mari kita buat konfigurasi Butane kecil yang akan melakukan tindakan berikut:

  • Tambahkan file dropin systemd untuk mengganti pengaturan default serial-getty@ttyS0.service.

  • Pengaturan override ini akan membuat layanan secara otomatis masuk ke pengguna core pada konsol serial mesin yang telah di-boot.

  • Atur nama host sistem dengan menempatkan berkas di /etc/hostname,

  • Tambahkan profil bash yang memberitahu systemd untuk tidak menggunakan pager untuk output.

Kita dapat membuat berkas konfigurasi bernama autologin.bu sekarang sebagai berikut:

variant: fcos
version: 1.6.0
systemd:
  units:
    - name: serial-getty@ttyS0.service
      dropins:
      - name: autologin-core.conf
        contents: |
          [Service]
          # Override Execstart in main unit
          ExecStart=
          # Add new Execstart with `-` prefix to ignore failure`
          ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM
storage:
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: |
          tutorial
    - path: /etc/profile.d/systemd-pager.sh
      mode: 0644
      contents:
        inline: |
          # Tell systemd to not use a pager when printing information
          export SYSTEMD_PAGER=cat

Konfigurasi ini kemudian dapat dikonversi menjadi konfigurasi Ignition menggunakan Butane:

butane --pretty --strict autologin.bu --output autologin.ign

Konfigurasi Ignition yang dihasilkan oleh Butane sebagai autologin.ign memiliki isi sebagai berikut:

{
  "ignition": {
    "version": "3.4.0"
  },
  "storage": {
    "files": [
      {
        "path": "/etc/hostname",
        "contents": {
          "compression": "",
          "source": "data:,tutorial%0A"
        },
        "mode": 420
      },
      {
        "path": "/etc/profile.d/systemd-pager.sh",
        "contents": {
          "compression": "",
          "source": "data:,%23%20Tell%20systemd%20to%20not%20use%20a%20pager%20when%20printing%20information%0Aexport%20SYSTEMD_PAGER%3Dcat%0A"
        },
        "mode": 420
      }
    ]
  },
  "systemd": {
    "units": [
      {
        "dropins": [
          {
            "contents": "[Service]\n# Override Execstart in main unit\nExecStart=\n# Add new Execstart with `-` prefix to ignore failure`\nExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM\n",
            "name": "autologin-core.conf"
          }
        ],
        "name": "serial-getty@ttyS0.service"
      }
    ]
  }
}

Butane menghasilkan konfigurasi Ignition yang valid. Namun, jika Anda melakukan penyesuaian pada konfigurasi setelah Butane, atau membuat konfigurasi Ignition secara manual, Anda harus memverifikasi bahwa format konfigurasi tersebut valid menggunakan ignition-validate:

ignition-validate autologin.ign && echo 'Success!'

Membooting Fedora CoreOS

Sekarang setelah kita memiliki konfigurasi Ignition, kita dapat memulai mesin virtual menggunakan konfigurasi tersebut. Tutorial ini menggunakan gambar QEMU dengan libvirt, tetapi Anda seharusnya dapat menggunakan konfigurasi Ignition yang sama pada semua platform yang didukung oleh Fedora CoreOS.

Kita menggunakan virt-install untuk membuat mesin virtual Fedora CoreOS baru dengan konfigurasi tertentu:

# Atur label SELinux yang benar untuk mengizinkan akses ke config
chcon --verbose --type svirt_home_t autologin.ign

# Mulai mesin virtual Fedora CoreOS
virt-install --name=fcos --vcpus=2 --ram=2048 --os-variant=fedora-coreos-stable \
    --import --network=bridge=virbr0 --graphics=none \
    --qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${PWD}/autologin.ign" \
    --disk="size=20,backing_store=${PWD}/fedora-coreos.qcow2"

Perintah virt-install akan memulai instance bernama fcos dari gambar fedora-coreos.qcow2 menggunakan konfigurasi Ignition autologin.ign. Perintah ini akan secara otomatis menghubungkan konsol serial mesin sehingga Anda dapat melihat pesan booting gambar tersebut.

Kita menggunakan opsi backing_store pada perintah virt-install --disk untuk dengan cepat membuat gambar disk baru dan menghindari penulisan ke gambar asli yang telah kita unduh. Gambar disk baru ini dapat dengan mudah dihapus.

Tergantung pada versi virt-install yang Anda gunakan, Anda mungkin tidak dapat menggunakan opsi --os-variant=fedora-coreos-stable dan akan mendapatkan pesan kesalahan. Dalam hal ini, Anda sebaiknya memilih varian Fedora yang lebih lama (misalnya --os-variant=fedora31). Anda dapat menemukan varian yang didukung oleh versi virt-install Anda saat ini dengan perintah osinfo-query os | grep '^\s*fedora'.

Setelah mesin dinyalakan, Anda akan melihat beberapa prompt, lalu Anda akan secara otomatis masuk dan disajikan dengan shell bash:

Fedora CoreOS 38.20230709.3.0
Kernel 6.3.11-200.fc38.x86_64 on an x86_64 (ttyS0)

SSH host key: SHA256:Eq0GiuflXh/3E+9h689DV4K2C0VQZ5UsXXfbJ7nB4rw (ECDSA)
SSH host key: SHA256:53uunBzHa2kfCO20q8h4cFeM19QRSscwUWUPoL4BP+4 (ED25519)
SSH host key: SHA256:HXrypq4OjKQ267RPhpptulMMYwsnrVWW3PYuvkIyt3k (RSA)
Ignition: ran on 2023/08/03 15:59:14 UTC (this boot)
Ignition: user-provided config was applied
No SSH authorized keys provided by Ignition or Afterburn
tutorial login: core (automatic login)

Fedora CoreOS 38.20230709.3.0
[core@tutorial ~]$

Mari kita verifikasi bahwa konfigurasi telah diterapkan dengan benar. Karena kita telah masuk secara otomatis ke terminal, kita dapat dengan aman mengasumsikan bahwa berkas dropin systemd telah dibuat:

[core@tutorial ~]$ systemctl cat serial-getty@ttyS0.service
# /usr/lib/systemd/system/serial-getty@.service
...

# /etc/systemd/system/serial-getty@ttyS0.service.d/autologin-core.conf
[Service]
# Override Execstart in main unit
ExecStart=
# Add new Execstart with `-` prefix to ignore failure`
ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM

Kita juga dapat memeriksa apakah nama host telah diatur dengan benar:

[core@tutorial ~]$ cat /etc/hostname
tutorial
[core@tutorial ~]$ hostnamectl
     Static hostname: tutorial
           Icon name: computer-vm
             Chassis: vm πŸ–΄
          Machine ID: fc4c5d5a14a741babe20559a25dcb846
             Boot ID: 22ed3b3c049d42968fb6ca9e35c8055d
      Virtualization: kvm
    Operating System: Fedora CoreOS 38.20230709.3.0
         CPE OS Name: cpe:/o:fedoraproject:fedora:38
      OS Support End: Tue 2024-05-14
OS Support Remaining: 9month 1w 3d
              Kernel: Linux 6.3.11-200.fc38.x86_64
        Architecture: x86-64
     Hardware Vendor: QEMU
      Hardware Model: Standard PC _Q35 + ICH9, 2009_
    Firmware Version: 1.16.2-1.fc38
       Firmware Date: Tue 2014-04-01

Menjelajahi bagian dalam Fedora CoreOS

Setelah kita memiliki akses ke konsol mesin, kita dapat menjelajahi sistem operasi untuk melihat beberapa komponennya. Misalnya, meskipun ini adalah sistem berbasis OSTree, sistem ini tetap dibangun menggunakan RPM, dan kita dapat memeriksa sistem untuk melihat komponen apa saja yang membentuknya:

[core@tutorial ~]$ rpm -q ignition kernel moby-engine podman systemd rpm-ostree zincati
ignition-2.15.0-3.fc38.x86_64
kernel-6.3.11-200.fc38.x86_64
moby-engine-20.10.23-1.fc38.x86_64
podman-4.5.1-1.fc38.x86_64
systemd-253.4-1.fc38.x86_64
rpm-ostree-2023.5-1.fc38.x86_64
zincati-0.0.25-4.fc38.x86_64

Kita juga dapat memeriksa versi terbaru Fedora CoreOS:

[core@tutorial ~]$ rpm-ostree status
State: idle
AutomaticUpdatesDriver: Zincati
  DriverState: active; periodically polling for updates (last checked Thu 2023-08-03 15:59:23 UTC)
Deployments:
● fedora:fedora/x86_64/coreos/stable
                  Version: 38.20230709.3.0 (2023-07-24T12:25:01Z)
                   Commit: 552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9
             GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464

Dan periksa zincati.service, yang berkomunikasi dengan server pembaruan kita dan memberitahu rpm-ostree kapan harus melakukan pembaruan dan ke versi mana pembaruan tersebut harus dilakukan:

[core@tutorial ~]$ systemctl status --full zincati.service
● zincati.service - Zincati Update Agent
     Loaded: loaded (/usr/lib/systemd/system/zincati.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Thu 2023-08-03 16:06:39 UTC; 18s ago
       Docs: https://github.com/coreos/zincati
   Main PID: 1843 (zincati)
     Status: "periodically polling for updates (last checked Thu 2023-08-03 16:06:39 UTC)"
      Tasks: 6 (limit: 2238)
     Memory: 2.8M
        CPU: 257ms
     CGroup: /system.slice/zincati.service
             └─1843 /usr/libexec/zincati agent -v

Aug 03 16:06:39 tutorial systemd[1]: Starting zincati.service - Zincati Update Agent...
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::cli::agent] starting update agent (zincati 0.0.25)
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::cincinnati] Cincinnati service: https://updates.coreos.fedoraproject.org
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::cli::agent] agent running on node '8fb5386cba574235a21ad3b2d59885d9', in update group 'default'
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::update_agent::actor] registering as the update driver for rpm-ostree
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::update_agent::actor] initialization complete, auto-updates logic enabled
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::strategy] update strategy: immediate
Aug 03 16:06:39 tutorial systemd[1]: Started zincati.service - Zincati Update Agent.
Aug 03 16:06:39 tutorial zincati[1843]: [INFO  zincati::update_agent::actor] reached steady state, periodically polling for updates
Aug 03 16:06:41 tutorial zincati[1843]: [INFO  zincati::cincinnati] current release detected as not a dead-end

Hal menarik lainnya yang bisa dilakukan adalah memeriksa log dari Ignition, jikalau ada hal menarik di sana yang mungkin ingin kita selidiki:

journalctl -t ignition

Dan terakhir, tentu saja kita dapat menggunakan perintah podman (atau docker) untuk memeriksa status saat ini dari kontainer di sistem:

podman version
podman info
Perintah podman dapat dijalankan sebagai pengguna root atau pengguna non-root. Perintah docker harus dijalankan sebagai root melalui sudo kecuali pengguna telah ditambahkan ke grup docker.
Menjalankan kontainer menggunakan docker dan podman secara bersamaan dapat menyebabkan masalah dan mengakibatkan perilaku yang tidak terduga. Lihat entri FAQ untuk detail lebih lanjut.
Daemon Docker tidak dijalankan secara default, tetapi menjalankan perintah docker apa pun akan memulainya karena daemon ini diaktifkan melalui soket menggunakan systemd.

Menonaktifkan Mesin Virtual

Mari kita hapus mesin virtual tersebut agar kita bisa memulai dari awal lagi. Pertama, keluar dari konsol serial dengan menekan CTRL + ], lalu ketik:

virsh destroy fcos
virsh undefine --remove-all-storage fcos

Anda dapat melanjutkan dengan tutorial kedua.