ການເປີດໃຊ້ງານການເຂົ້າລະບົບອັດຕະໂນມັດ ແລະ ການຕັ້ງຊື່ Hostname ແບບກຳນົດເອງ

ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານໄດ້ເຮັດຕາມຂັ້ນຕອນທີ່ໄດ້ອະທິບາຍໄວ້ໃນ ໜ້າການຕັ້ງຄ່າເບື້ອງຕົ້ນ ກ່ອນທີ່ຈະເລີ່ມບົດຮຽນນີ້.

ການຈັດຕັ້ງລະບົບ Fedora CoreOS

Fedora CoreOS ບໍ່ມີແຜ່ນຕິດຕັ້ງແຍກຕ່າງຫາກ. ແທນທີ່ຈະເປັນແນວນັ້ນ, ທຸກໆ instance ຈະເລີ່ມຕົ້ນຈາກ disk image ທົ່ວໄປ ເຊິ່ງຖືກປັບແຕ່ງໃນຕອນເລີ່ມຕົ້ນລະບົບຜ່ານ Ignition.

ໄຟລ໌ກຳນົດຄ່າ Ignition ແມ່ນຂຽນໃນຮູບແບບ JSON ແຕ່ໂດຍທົ່ວໄປແລ້ວມັນບໍ່ສະດວກສຳລັບຜູ້ໃຊ້. ດັ່ງນັ້ນ, ການກຳນົດຄ່າຈຶ່ງຖືກຂຽນໃນຮູບແບບທີ່ງ່າຍກວ່າ ຄື Butane config, ເຊິ່ງຈະຖືກປ່ຽນເປັນ Ignition config. ເຄື່ອງມືທີ່ເຮັດໜ້າທີ່ປ່ຽນ Butane configs ເປັນ Ignition configs ແມ່ນມີຊື່ວ່າ Butane.

ການກຳນົດຄ່າ Ignition ທຳອິດຜ່ານ Butane

ມາສ້າງໄຟລ໌ກຳນົດຄ່າ Butane ຂະໜາດນ້ອຍ ເພື່ອເຮັດໜ້າທີ່ດັ່ງຕໍ່ໄປນີ້:

  • ເພີ່ມ systemd dropin ເພື່ອຂຽນທັບຄ່າເລີ່ມຕົ້ນຂອງ serial-getty@ttyS0.service.

  • ການຂຽນທັບນີ້ຈະເຮັດໃຫ້ບໍລິການເຂົ້າລະບົບຜູ້ໃຊ້ core ໂດຍອັດຕະໂນມັດ ໄປຍັງ serial console ຂອງເຄື່ອງທີ່ເປີດຂຶ້ນມາ.

  • ຕັ້ງຊື່ hostname ຂອງລະບົບໂດຍການສ້າງໄຟລ໌ໄວ້ທີ່ /etc/hostname,

  • ເພີ່ມ bash profile ທີ່ບອກໃຫ້ systemd ບໍ່ໃຊ້ pager ສຳລັບການສະແດງຜົນ.

ຕອນນີ້ເຮົາສາມາດສ້າງໄຟລ໌ກຳນົດຄ່າທີ່ມີຊື່ວ່າ autologin.bu ໄດ້ດັ່ງນີ້:

variant: fcos
version: 1.7.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

ຈາກນັ້ນ ການກຳນົດຄ່ານີ້ສາມາດຖືກປ່ຽນເປັນ Ignition config ດ້ວຍ Butane:

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

Ignition configuration ທີ່ໄດ້ຈາກ Butane ໃນຊື່ autologin.ign ມີເນື້ອຫາດັ່ງນີ້:

{
  "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 ຈະສ້າງ Ignition configs ທີ່ຖືກຕ້ອງ. ຢ່າງໃດກໍຕາມ, ຖ້າທ່ານມີການປັບແຕ່ງ config ຫຼັງຈາກໃຊ້ Butane ຫຼື ສ້າງ Ignition configs ດ້ວຍຕົນເອງ, ທ່ານຈະຕ້ອງກວດສອບວ່າຮູບແບບ config ນັ້ນຖືກຕ້ອງດ້ວຍ ignition-validate:

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

ການເລີ່ມຕົ້ນລະບົບ Fedora CoreOS

ເມື່ອເຮົາມີ Ignition config ແລ້ວ, ເຮົາສາມາດເລີ່ມຕົ້ນລະບົບ virtual machine ດ້ວຍມັນໄດ້. ບົດຮຽນນີ້ໃຊ້ QEMU image ກັບ libvirt, ແຕ່ທ່ານກໍຄວນຈະສາມາດໃຊ້ Ignition config ດຽວກັນນີ້ໄດ້ໃນທຸກແພລັດຟອມທີ່ Fedora CoreOS ຮອງຮັບ.

ເຮົາໃຊ້ virt-install ເພື່ອສ້າງ Fedora CoreOS virtual machine ໃໝ່ດ້ວຍ config ທີ່ກຳນົດໄວ້:

# Setup the correct SELinux label to allow access to the config
chcon --verbose --type svirt_home_t autologin.ign

# Start a Fedora CoreOS virtual machine
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"

ຄຳສັ່ງ virt-install ຈະເລີ່ມຕົ້ນ instance ທີ່ມີຊື່ວ່າ fcos ຈາກ image fedora-coreos.qcow2 ໂດຍໃຊ້ Ignition config autologin.ign. ມັນຈະເຊື່ອມຕໍ່ serial console ຂອງເຄື່ອງໂດຍອັດຕະໂນມັດ ເພື່ອໃຫ້ທ່ານສາມາດເຫັນຂໍ້ຄວາມໃນຂະນະ boot ລະບົບ.

ເຮົາໃຊ້ຕົວເລືອກ backing_store ສຳລັບ virt-install --disk ເພື່ອສ້າງ disk image ໃໝ່ຢ່າງວ່ອງໄວ ແລະ ຫຼີກລ່ຽງການຂຽນທັບ image ຕົ້ນສະບັບທີ່ເຮົາໄດ້ດາວໂຫຼດມາ. disk image ໃໝ່ນີ້ສາມາດລຶບຖິ້ມໄດ້ງ່າຍ.

ອີງຕາມເວີຊັນ virt-install ຂອງທ່ານ, ທ່ານອາດຈະບໍ່ສາມາດໃຊ້ --os-variant=fedora-coreos-stable ແລະ ຈະໄດ້ຮັບຂໍ້ຜິດພາດ. ໃນກໍລະນີນີ້, ທ່ານຄວນເລືອກ Fedora variant ທີ່ເກົ່າກວ່າ (ຕົວຢ່າງ: --os-variant=fedora31). ທ່ານສາມາດຄົ້ນຫາ variant ທີ່ຮອງຮັບໂດຍເວີຊັນ virt-install ປັດຈຸບັນຂອງທ່ານໄດ້ດ້ວຍ osinfo-query os | grep '^\s*fedora'.

ເມື່ອເຄື່ອງ boot ສຳເລັດແລ້ວ ທ່ານຈະເຫັນຂໍ້ຄວາມແຈ້ງເຕືອນເລັກໜ້ອຍ ແລະ ຈາກນັ້ນທ່ານຈະຖືກເຂົ້າລະບົບໂດຍອັດຕະໂນມັດ ແລະ ຈະປະກົດ bash shell ຂຶ້ນມາ:

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 ~]$

ມາທົດສອບເບິ່ງວ່າການກຳນົດຄ່າຂອງເຮົາຖືກນຳໃຊ້ຢ່າງຖືກຕ້ອງຫຼືບໍ່. ເນື່ອງຈາກເຮົາໄດ້ເຂົ້າລະບົບ terminal ໂດຍອັດຕະໂນມັດແລ້ວ, ເຮົາສາມາດໝັ້ນໃຈໄດ້ວ່າ systemd dropin ໄດ້ຖືກສ້າງຂຶ້ນແລ້ວ:

[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

ເຮົາຍັງສາມາດກວດສອບໄດ້ວ່າ hostname ໄດ້ຖືກຕັ້ງຄ່າຢ່າງຖືກຕ້ອງຫຼືບໍ່:

[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

ການສຳຫຼວດພາຍໃນຂອງ Fedora CoreOS

ເມື່ອເຮົາເຂົ້າເຖິງ console ຂອງເຄື່ອງໄດ້ແລ້ວ ເຮົາສາມາດສຳຫຼວດເບິ່ງພາກສ່ວນຕ່າງໆ ຂອງລະບົບປະຕິບັດການໄດ້. ຕົວຢ່າງ, ເຖິງແມ່ນວ່ານີ້ຈະເປັນລະບົບທີ່ອີງຕາມ OSTree ແຕ່ມັນກໍຍັງຖືກປະກອບຂຶ້ນມາຜ່ານ RPMs ແລະ ເຮົາສາມາດກວດສອບລະບົບເພື່ອເບິ່ງວ່າມັນປະກອບມີຫຍັງແດ່:

[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

ເຮົາຍັງສາມາດກວດສອບເວີຊັນ (revision) ປັດຈຸບັນຂອງ 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

ແລະ ກວດສອບ zincati.service ເຊິ່ງເຮັດໜ້າທີ່ຕິດຕໍ່ກັບ update server ຂອງເຮົາ ແລະ ບອກ rpm-ostree ວ່າຄວນຈະອັບເດດຕອນໃດ ແລະ ອັບເດດເປັນເວີຊັນໃດ:

[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

ອີກສິ່ງໜຶ່ງທີ່ໜ້າສົນໃຈແມ່ນການເບິ່ງ log ຈາກ Ignition ໃນກໍລະນີທີ່ມີສິ່ງທີ່ໜ້າສົນໃຈທີ່ເຮົາຕ້ອງການກວດສອບ:

journalctl -t ignition

ແລະ ສຸດທ້າຍ, ແນ່ນອນວ່າເຮົາສາມາດໃຊ້ຄຳສັ່ງ podman (ຫຼື docker) ເພື່ອກວດສອບສະຖານະປັດຈຸບັນຂອງ container ໃນລະບົບ:

podman version
podman info
ຄຳສັ່ງ podman ສາມາດໃຊ້ໄດ້ທັງໃນນາມ root ຫຼື ຜູ້ໃຊ້ທົ່ວໄປ (non-root). ສ່ວນຄຳສັ່ງ docker ຕ້ອງໃຊ້ຜ່ານ sudo ໃນນາມ root ເທົ່ານັ້ນ ນອກຈາກວ່າຜູ້ໃຊ້ຈະໄດ້ຖືກເພີ່ມເຂົ້າໃນກຸ່ມ docker ແລ້ວ.
ການໃຊ້ container ຜ່ານ docker ແລະ podman ພ້ອມກັນອາດຈະເຮັດໃຫ້ເກີດບັນຫາ ແລະ ພຶດຕິກຳທີ່ບໍ່ຄາດຄິດ. ເບິ່ງລາຍລະອຽດເພີ່ມເຕີມໄດ້ທີ່ FAQ Entry.
Docker daemon ຈະບໍ່ຖືກເລີ່ມຕົ້ນໂດຍອັດຕະໂນມັດ ແຕ່ການໃຊ້ຄຳສັ່ງ docker ໃດໆກໍຕາມຈະເປັນການເລີ່ມຕົ້ນການເຮັດງານຂອງມັນ ເນື່ອງຈາກມັນຖືກເປີດໃຊ້ງານຜ່ານ socket ໂດຍ systemd.

ການປິດການໃຊ້ງານ Virtual Machine

ຕອນນີ້ເຮົາມາລຶບ virtual machine ນັ້ນຖິ້ມ ເພື່ອທີ່ເຮົາຈະໄດ້ເລີ່ມຕົ້ນໃໝ່ແຕ່ຕົ້ນ. ທຳອິດໃຫ້ອອກຈາກ serial console ໂດຍການກົດ CTRL + ] ແລ້ວພິມ:

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

ຕອນນີ້ທ່ານສາມາດສືບຕໍ່ໄປຍັງ ບົດຮຽນທີສອງ ໄດ້.