启用自动登录并设置自定义主机名

确保您已完成中描述的步骤 初始设置页面 在开始本教程之前。

配置Fedora CoreOS

Fedora CoreOS没有单独的安装盘。相反,每个实例都从一个通用磁盘镜像开始,该镜像在第一次引导时通过 Ignition

Ignition配置文件是用JSON编写的,但通常对用户不友好。因此,配置以一种更简单的格式编写,即Butane配置,然后转换为Ignition配置。负责将Butane构型转化为Ignition构型的工具自然称为Butane。

首次通过Butane进行Ignition配置

让我们创建一个非常简单的Butane配置,它将执行以下操作:

  • 添加一个system d dropin以覆盖缺省值 serial-getty@ttyS0.service

  • 覆盖将使服务自动记录 core 用户登录到已启动计算机的串口控制台。

  • 通过在以下位置放置文件来设置系统主机名 /etc/hostname

  • 添加一个bash配置文件,告诉系统d不要使用寻呼机进行输出。

  • 提高内核控制台日志记录级别以对控制台隐藏审核消息。

我们可以创建名为的配置文件 autologin.bu 现在的身份是:

variant: fcos
version: 1.4.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
    - path: /etc/sysctl.d/20-silence-audit.conf
      mode: 0644
      contents:
        inline: |
          # Raise console message logging level from DEBUG (7) to WARNING (4)
          # to hide audit messages from the interactive console
          kernel.printk=4

然后可以将此配置转换为带有Butane的Ignition配置:

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

ButaneAS产生的Ignition构型 autologin.ign 有以下内容:

{
  "ignition": {
    "version": "3.1.0"
  },
  "storage": {
    "files": [
      {
        "path": "/etc/hostname",
        "contents": {
          "source": "data:,tutorial%0A"
        },
        "mode": 420
      },
      {
        "path": "/etc/profile.d/systemd-pager.sh",
        "contents": {
          "source": "data:,%23%20Tell%20systemd%20to%20not%20use%20a%20pager%20when%20printing%20information%0Aexport%20SYSTEMD_PAGER%3Dcat%0A"
        },
        "mode": 420
      },
      {
        "path": "/etc/sysctl.d/20-silence-audit.conf",
        "contents": {
          "source": "data:,%23%20Raise%20console%20message%20logging%20level%20from%20DEBUG%20(7)%20to%20WARNING%20(4)%0A%23%20to%20hide%20audit%20messages%20from%20the%20interactive%20console%0Akernel.printk%3D4%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配置。但是,如果您正在调整Butane之后的配置,或手动创建Ignition配置,则必须使用验证配置格式是否有效 ignition-validate

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

引导Fedora CoreOS

现在我们有了一个Ignition配置,我们可以用它来启动一个虚拟机。本教程使用QEMU镜像和 libvirt ,但您应该能够在Fedora CoreOS支持的所有平台上使用相同的Ignition配置。

我们用 virt-install 要使用特定配置创建新的Fedora CoreOS虚拟机,请执行以下操作:

# 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 命令将启动名为 fcosfedora-coreos.qcow2 使用 autologin.ign Ignition配置。它将自动连接机器的串行控制台,以便您能够看到映像启动消息。

我们使用 backing_store 选项以 virt-install --disk 为了快速创建新的磁盘映像并避免写入我们下载的原始映像。这个新的磁盘映像可以很容易地被丢弃。

取决于您的版本 virt-install ,您可能无法使用 --os-variant=fedora-coreos-stable 并将得到一个错误。在这种情况下,您应该选择一个较旧的Fedora变体( --os-variant=fedora31 例如)。您可以找到当前版本支持的变体 virt-install 使用 osinfo-query os | grep '^\s*fedora'

机器启动后,您应该会看到一些提示,然后您应该会自动登录并显示一个bash外壳:

[确定]已启动rpm-ostree系统管理守护程序。

Fedora CoreOS 32.20200715.3.0 X86_64(TtyS0)上的内核5.7.8-200.fc32.x86_64

SSH主机密钥:SHA256:XlbayjbgDKNoAAHQxsEL5Q7BdwLxxWSw4NXN9SALLmo(ED25519) SSH主机密钥:SHA256:3sx5jseteO4BvdOMWIi0J4koQL015mLonnD0UPTtnZk(Ecdsa) SSH主机密钥:SHA256:K0fn5/TMJOoMs7Fu7RRkE7IBEf2t8OYCfVaVc+GJWGs(Rsa) Ens2:192.168.122.127 fe80::5054:ff:feb9:3d97 Ignition:应用了用户提供的配置 没有由Ignition或Afterburn提供的SSH授权密钥 教程登录:CORE(自动登录)

[core@教程~]$

让我们验证我们的配置是否已正确应用。当我们自动登录到终端时,我们可以安全地假设已经创建了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

我们还可以检查是否正确设置了主机名:

[core@教程~]$cat/etc/主机名 补习 [core@教程~]$hostnamectl 静态主机名:教程 图标名称:Computer-VM 机箱:VM 机器ID:d06466128a1c4a6ab255d9581748755c 启动ID:2a19abb9681e442cb1e10271350bfff3 虚拟化:KVM 操作系统:Fedora CoreOS 32.20200715.3.0 CPE操作系统名称:cpe:/o:fedora项目:fedora:32 内核:Linux 5.7.8-200.fc32.x86_64 架构:x86-64

探索Fedora CoreOS内部结构

一旦我们可以访问机器的控制台,我们就可以浏览一下,看看操作系统的一些不同部分。例如,即使这是一个基于OSTree的系统,它仍然是通过RPM组成的,我们可以检查该系统以了解它是由什么组成的:

$rpm-qIgnition内核Moby-Engine Podman系统d rpm-ostree zincati Ignition-2.4.1-1.git5260a5b.fc32.x86_64 内核-5.7.8-200.fc32.x86_64 Moby-engine-19.03.11-1.ce.git42e35e6.fc32.x86_64 Podman-1.9.3-1.fc32.x86_64 系统D-245.6-2.fc32.x86_64 Rpm-ostree-2020.3-1.fc32.x86_64 Zincati-0.0.12-2.fc32.x86_64

我们还可以查看Fedora CoreOS的当前版本:

[core@教程~]$rpm-ostree状态 状态:空闲 部署: * Ostree://fedora:fedora/x86_64/coreOS/稳定 版本:32.20200715.3.0(2020-07-27T11:36:29Z) 提交:a3b08ee51b1d950afd9d0d73f32d5424ad52c7703a6b5830e0dc11c3a682d869 GPG签名:97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0的有效签名

并查看 zincati.service ,它与我们的更新服务器通信并告知 rpm-ostree 何时进行更新以及要更新到哪个版本:

[core@教程~]$systemctl状态—​完整的zincati.service Zincati.service-Zincati更新代理 已加载:已加载(/usr/lib/systemd/system/zincati.service;已启用;供应商预设:已启用) 活跃:自清华时间2020-08-06 14:50:36开始活跃(运行);1小时41分钟前 文档: https://github.com/coreos/zincati 主PID:889(金卡迪) 任务:2(限制:2288) 内存:1420万 Cgroup:/system.Slice/zincati.service └─889/USR/libexec/zincati代理-v

8月06日14:50:36教程系统d[1]:已启动Zincati更新代理。 8月06日14:50:36教程zincati[889]:[信息]启动更新代理(zincati 0.0.12) Aug 06 14:50:39教程zincati[889]:[信息]辛辛那提服务: https://updates.coreos.fedoraproject.org 8月06日14:50:39教程zincati[889]:[INFO]代理在更新组‘Default’中的节点‘dbe8968f75c34d9eb3d3c4c226aa8fdf’上运行 Aug 06 14:50:39教程zincati[889]:[信息]初始化完成,已启用自动更新逻辑

要做的另一件有趣的事情是查看Ignition的日志,以防我们想要调查的任何有趣的事情:

[core@教程~]$Jouralctl-tIgnition .。。

最后,我们当然可以使用 podman (或 docker )命令检查系统上容器的当前状态:

[core@教程~]$podman版本 [core@教程~]$podman信息

podman 命令可以作为超级用户或非超级用户运行。 docker 命令需要通过以超级用户身份运行 sudo 除非已将用户添加到 docker 一群人。
通过以下方式运行容器 dockerpodman 同时也会引发问题并导致意想不到的行为。请参阅 常见问题条目 了解更多详细信息。
默认情况下,Docker守护进程不会启动,但会运行 docker 命令将启动它,因为它是通过system d激活的套接字。

关闭虚拟机

现在让我们删除该虚拟机,这样我们就可以从头开始。首先通过按键退出串口控制台 CTRL + ] 然后键入:

病毒摧毁fcos 未定义病毒—​删除所有存储fcos

您现在可以继续进行 第二个教程