跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / 使用 ISO 映像部署 SUSE Linux Micro

使用 ISO 映像部署 SUSE Linux Micro

出版日期:2025-03-20
内容

SUSE Linux Micro 提供可直接部署到以下设备存储区的自行安装映像(也称为预构建映像):内存卡、USB 闪存盘或硬盘。映像可部署到的设备类型取决于具体的硬件。请参见供应商文档以获取指导。

原因

您需要了解如何在系统上部署 SUSE Linux Micro

工作量

读完本文大约需要 20 分钟。

目标

在系统上成功部署 SUSE Linux Micro

要求
  • 了解自行安装磁盘映像适合哪种环境。有关细节,请参见“SUSE Linux Micro 简介”一文。

  • 一台至少具备 20 GB 磁盘空间的设备,用于部署原始映像和运行 SUSE Linux Micro

  • (可选)一个配置媒体,例如 USB 闪存盘。

1 关于预构建映像

预构建映像代表正在运行的操作系统,随时可供使用。它们不是通过安装程序以传统方式安装的,而是会复制到目标主机的硬盘中。本主题将介绍有关这些预构建映像的基本信息。

在首次引导时,需使用预构建映像中提供的工具对其进行配置。引导加载程序会按照第 1.1 节 “首次引导检测”中所述检测首次引导。

1.1 首次引导检测

部署配置只在首次引导时运行。为了区分首次引导和后续引导,系统会在首次引导完成后创建文件 /etc/machine-id。如果文件系统中不存在该文件,系统会假定这是首次引导并触发配置过程。完成首次引导后,系统便会创建 /etc/machine-id 文件。

注意
注意:系统始终会创建 /etc/machine-id 文件

即使由于配置文件错误或缺失导致配置失败,系统也会创建 /etc/machine-id 文件。

1.1.1 在后续引导时强制重配置系统

如果您需要在发生首次引导后重配置系统,可以在后续引导时强制重配置。此处可以采取两种做法。

  • 可以将 ignition.firstbootcombustion.firstboot 属性传递给内核命令行。

  • 您可以删除文件 /etc/machine-id 并重引导系统。

2 准备配置设备

在安装过程中,可以传递复杂的配置来定义用户、目录或提供 SSH 密钥。为此,请创建一个稍后由 Ignition 或 Combustion 处理的配置设备。

重要
重要:SSH 登录

默认情况下,SUSE Linux Micro 中仅允许使用 SSH 密钥进行 root SSH 登录。我们建议在部署过程中创建一个非特权用户用于访问已安装的系统。可以在首次引导时使用 Combustion 或 Ignition 工具创建非特权用户帐户。在系统部署期间创建的非特权用户还可用于访问 Cockpit Web 界面。

要准备配置设备,请执行以下步骤:

过程 1︰ 准备配置设备
  1. 将磁盘格式化为 SUSE Linux Micro 支持的任何文件系统:Ext3、Ext4 等:

    > sudo mkfs.ext4 /dev/sdY
  2. 将设备标签设置为 ignition(使用 Ignition 或 时)或 combustioncombustion(仅使用 Combustion 时)。如果需要(例如在 Windows 主机上),请为标签使用大写字母。要为设备设置标签,请运行:

    > sudo e2label /dev/sdY ignition

    可以使用您的虚拟化系统或硬件支持的任何类型的配置存储媒体:ISO 映像、USB 闪存盘等

  3. 挂载设备:

    > sudo mount /dev/sdY /mnt
  4. 创建第 2.1.1.1 节 “ config.ign第 2.2 节 “使用 Combustion 配置 SUSE Linux Micro 部署”中所述的目录结构,具体取决于使用的配置工具:

    > sudo mkdir  /mnt/ignition/

    或:

    > sudo mkdir -p /mnt/combustion/
  5. 准备 IgnitionCombustion 所用配置的所有元素

2.1 使用 Ignition 配置 SUSE Linux Micro 部署

Ignition 是一种预配工具,可让您在首次引导时根据您的具体要求配置系统。

2.1.1 Ignition 的工作原理

系统首次引导时,会将 Ignition 作为 initramfs 的一部分加以装载,并会在特定目录(在 USB 闪存盘上,或者您也可以提供 URL)中搜索配置文件。所有更改都是在内核从临时文件系统切换到实际根文件系统前(即在 switch_root 命令发出前)进行的。

Ignition 使用名为 config.ign 的 JSON 格式配置文件。您可以手动编写配置,也可以使用 https://ignite.opensuse.org 上的 Fuel Ignition Web 应用程序生成配置。

重要
重要

Fuel Ignition 尚未涵盖完整的 Ignition 词汇,生成的 JSON 文件可能需要进行额外的手动调整。

2.1.1.1 config.ign

config.ign 包含多种数据类型:对象、字符串、整数、布尔值和对象列表。如需完整规范,请参见 Ignition specification v3.3.0

version 属性是必需的,在 SUSE Linux Micro 中,其值必须设置为 3.4.0 或任何更低版本。否则,Ignition 将会失败。

要以 root 身份登录到系统,必须至少包含 root 的口令。但建议通过 SSH 密钥建立访问权限。要配置口令,请务必使用安全口令。如果您使用随机生成的口令,请至少包含 10 个字符。如果您要手动创建口令,请包含 10 个以上的字符,并结合使用大写与小写字母和数字。

2.1.2 Ignition 配置示例

本节提供内置 JSON 格式的 Ignition 配置的几个示例。

注意
注意:version 属性为必要属性

每个 config.ign 都必须包含版本 3.4.0 或更低版本,该版本随后会转换为相应的 Ignition 规范。

2.1.2.1 默认分区

每个映像都具有以下子卷:

/home
/root
/opt
/srv
/usr/local
/var

/etc 目录会挂载为 OverlayFS,其中上一级目录挂载到 /var/lib/overlay/1/etc/

您可以通过 /etc/fstab 中的 x-initrd.mount 选项来识别默认挂载的子卷。其他子卷或分区必须通过 Ignition 或 Combustion 进行配置。

如果您要在默认未挂载的子卷上添加新用户或修改任何文件,则需要先声明此类子卷,以便将其挂载。

2.1.2.2 存储配置

storage 属性用于配置分区、RAID,定义文件系统,创建文件等。要定义分区,请使用 disks 属性。filesystems 属性用于格式化分区。files 属性可用于在文件系统中创建文件。后续章节中将介绍上述每个属性。

2.1.2.2.1 disks 属性

disks 属性是设备列表,可用于定义这些设备上的分区。disks 属性必须至少包含一个 device,其他属性为可选属性。以下示例使用单个虚拟设备,并将磁盘划分为四个分区:

{
  "ignition": {
    "version": "3.0.0"
  },
  "storage": {
    "disks": [
      {
        "device": "/dev/vda",
        "partitions": [
          {
            "label": "root",
            "number": 1,
            "typeGuid": "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"
          },
          {
            "label": "boot",
            "number": 2,
            "typeGuid": "BC13C2FF-59E6-4262-A352-B275FD6F7172"
          },
          {
            "label": "swap",
            "number": 3,
            "typeGuid": "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F"
          },
          {
            "label": "home",
            "number": 4,
            "typeGuid": "933AC7E1-2EB4-4F13-B844-0E14E2AEF915"
          }
        ],
        "wipeTable": true
      }
    ]
  }
}
2.1.2.2.2 raid 属性

raid 是 RAID 阵列列表。raid 的下列属性为必要属性:

level

特定 RAID 阵列的级别(线性、raid0、raid1、raid2、raid3、raid4、raid5、raid6)

devices

阵列中设备的列表,通过绝对路径引用这些设备

name

将用于 md 设备的名称

例如:

{
  "ignition": {
    "version": "3.0.0"
  },
  "storage": {
    "raid": [
      {
        "devices": [
          "/dev/sda",
          "/dev/sdb"
        ],
        "level": "raid1",
        "name": "system"
      }
    ]
  }
}
2.1.2.2.3 filesystems 属性
注意
注意:Ignition 不会执行对挂载单元的修改

filesystems 属性不会修改挂载单元。如果添加新分区或去除现有分区,必须手动调整挂载单元。

filesystems 必须包含以下属性:

device

设备的绝对路径,如果是物理磁盘,通常为 /dev/sda

format

文件系统格式(Btrfs、Ext4、xfs、vfat 或 swap)

注意
注意

对于 SUSE Linux Microroot 文件系统必须为 Btrfs 格式。

下面的示例演示如何使用 filesystems 属性。/opt 目录将挂载到 /dev/sda1 分区,该分区为 Btrfs 格式。系统将不会擦除该设备。

例如:

{
  "ignition": {
    "version": "3.0.0"
  },
  "storage": {
    "filesystems": [
      {
        "device": "/dev/sda1",
        "format": "btrfs",
        "path": "/opt",
        "wipeFilesystem": false
      }
    ]
  }
}

普通用户的主目录通常位于 /home/USER_NAME 目录中。由于 /home 默认不会挂载到 initrd 中,因此必须明确定义挂载,才能成功创建用户:

{
  "ignition": {
    "version": "3.1.0"
  },
  "passwd": {
    "users": [
      {
        "name": "root",
        "passwordHash": "PASSWORD_HASH",
        "sshAuthorizedKeys": [
          "ssh-rsa SSH_KEY_HASH"
        ]
      }
    ]
  },
  "storage": {
    "filesystems": [
      {
        "device": "/dev/sda3",
        "format": "btrfs",
        "mountOptions": [
          "subvol=/@/home"
        ],
        "path": "/home",
        "wipeFilesystem": false
      }
    ]
  }
}
2.1.2.2.4 files 属性

您可以使用 files 属性在计算机上创建任何文件。请注意,要在默认的分区方案之外创建文件,需使用 filesystems 属性定义目录。

在下面的示例中,将使用 files 属性创建一个主机名。将创建文件 /etc/hostname,其中包含 sl-micro1 主机名:

重要
重要

请记住,JSON 接受十进制数格式的文件模式,例如 420

JSON:

{
  "ignition": {
    "version": "3.0.0"
  },
  "storage": {
    "files": [
      {
        "overwrite": true,
        "path": "/etc/hostname",
        "contents": {
          "source": "data:,sl-micro1"
        },
        "mode": 420
      }
    ]
  }
}
2.1.2.2.5 directories 属性

directories 属性是将在文件系统中创建的目录列表。directories 属性必须至少包含一个 path 属性。

例如:

{
  "ignition": {
    "version": "3.0.0"
  },
  "storage": {
    "directories": [
      {
        "path": "/home/tux",
        "user": {
          "name": "tux"
        }
      }
    ]
  }
}
2.1.2.3 用户管理

passwd 属性用于添加用户。由于某些服务(例如 Cockpit)要求使用非 root 用户身份登录,因此请在此处至少定义一个非特权用户。或者,您可以按第 4.2 节 “添加用户”中所述在正在运行的系统中创建此类用户。

要登录系统,请创建 root 和一个普通用户,并设置他们的口令。您需要对口令进行哈希处理,例如使用 openssl 命令来处理:

 openssl passwd -6

该命令会为您选择的口令创建哈希。使用此哈希作为 password_hash 属性的值。

例如:

{
  "ignition": {
    "version": "3.0.0"
  },
  "passwd": {
    "users": [
      {
        "name": "root",
        "passwordHash": "PASSWORD_HASH",
        "sshAuthorizedKeys": [
          "ssh-rsa SSH_KEY_HASH USER@HOST"
        ]
      }
    ]
  }
}

users 属性必须至少包含一个 name 属性。ssh_authorized_keys 是用户的 SSH 密钥列表。

2.1.2.4 启用 systemd 服务

您可以通过在 systemd 属性中指定 systemd 服务来启用相应服务。

例如:

{
  "ignition": {
    "version": "3.0.0"
  },
  "systemd": {
    "units": [
      {
        "enabled": true,
        "name": "sshd.service"
      }
    ]
  }
}

2.2 使用 Combustion 配置 SUSE Linux Micro 部署

Combustion 是一种 dracut 模块,可用于在首次引导时配置系统。您可以使用 Combustion 来更改默认分区、设置用户口令、创建文件、安装软件包等。

2.2.1 Combustion 的工作原理

系统将在 ignition.firstboot 参数传递给内核命令行后调用 Combustion。Combustion 会读取提供的文件(名为 script)并执行其中的命令,以对文件系统进行更改。如果 script 中包含网络标志,Combustion 会尝试配置网络。挂载 /sysroot 后,Combustion 会尝试激活 /etc/fstab 中的所有挂载点,然后调用 transactional-update 来应用其他更改,例如设置 root 口令或安装软件包。

提示
提示:搭配使用 Combustion 与 Ignition

Combustion 可与 Ignition 搭配使用。如果您要将它们搭配使用,请将配置媒体标记为 ignition,并在目录结构中添加包含 config.ignignition 目录,如下所示:

<root directory>
└── combustion
    └── script
    └── other files
└── ignition
    └── config.ign

在此情况下,Ignition 会先于 Combustion 运行。

2.2.2 Combustion 配置示例

2.2.2.1 script 配置文件

script 配置文件是一组由 Combustion 在 transactional-update 外壳中分析并执行的命令。本文提供了 Combustion 执行的配置任务的一些示例。

提示
提示:使用 Fuel Ignition 生成 Combustion 脚本

要创建 Combustion 脚本,可以使用 Fuel Ignition Web 应用程序。您可以在其中选择适当的参数,应用程序即会生成一个可以下载的 Combustion 脚本。

重要
重要:包含解释器声明

script 文件由外壳解释,所以请务必在文件的第一行以解释器声明开头。例如,对于 Bash:

#!/bin/bash

为了登录系统,请至少包含 root 口令,但建议使用 SSH 密钥建立身份验证。如果您需要使用 root 口令,请务必配置安全口令。对于随机生成的口令,请至少包含 10 个字符。如果您要手动创建口令,请包含 10 个以上的字符,并结合使用大写与小写字母和数字。

2.2.2.1.1 默认分区

每个映像都具有以下子卷:

/home
/root
/opt
/srv
/usr/local
/var

/etc 目录会挂载为 OverlayFS,其中上一级目录挂载到 /var/lib/overlay/1/etc/

您可以通过 /etc/fstab 中的 x-initrd.mount 选项来识别默认挂载的子卷。其他子卷或分区必须通过 Ignition 或 Combustion 进行配置。

如果您要在默认未挂载的子卷上添加新用户或修改任何文件,则需要先声明此类子卷,以便将其挂载。

2.2.2.1.2 网络配置

要在首次引导期间配置并使用网络连接,请在 script 中添加以下语句:

# combustion: network

使用此语句会将 rd.neednet=1 参数传递给 dracut。网络配置默认设为使用 DHCP。如果需要使用不同的网络配置,请按照第 2.2.2.1.3 节 “在 initramfs 中进行修改”中所述操作。

如果不使用该语句,将不会为系统配置任何网络连接。

2.2.2.1.3 在 initramfs 中进行修改

您可能需要对 initramfs 环境进行更改,例如,将 NetworkManager 的自定义网络配置写入 /etc/NetworkManager/system-connections/ 中。要执行此操作,请使用 prepare 语句。

例如,要使用静态 IP 地址创建连接并配置 DNS,请使用以下代码:

#!/bin/bash
# combustion: network prepare
set -euxo pipefail
          
nm_config() {
  umask 077 # Required for NM config
  mkdir -p /etc/NetworkManager/system-connections/
  cat >/etc/NetworkManager/system-connections/static.nmconnection <<-EOF
  [connection]
  id=static
  type=ethernet
  autoconnect=true
          
  [ipv4]
  method=manual
  dns=192.168.100.1
  address1=192.168.100.42/24,192.168.100.1
EOF
}
          
if [ "${1-}" = "--prepare" ]; then
  nm_config # Configure NM in the initrd
  exit 0
fi
          
# Redirect output to the console
exec > >(exec tee -a /dev/tty0) 2>&1
          
  nm_config # Configure NM in the system
  curl example.com

# Close outputs and wait for tee to finish
exec 1>&- 2>&-; wait;

# Leave a marker
echo "Configured with combustion" > /etc/issue.d/combustion
2.2.2.1.4 等待任务完成

后台可能会运行一些进程,例如将输出重定向到终端的 tee 进程。要确保所有正在运行的进程在 script 执行完毕前均已完成,请添加以下一行内容:

exec 1>&- 2>&-; wait;
2.2.2.1.5 分区

提供的 SUSE Linux Micro 原始映像会使用默认分区方案。您可能希望使用不同的分区方式。下面一组示例代码段会将 /home 移至另一个分区。

注意
注意:在快照中包含的目录外部进行更改

以下脚本会执行快照中未包含的更改。如果脚本失败且快照被丢弃,那么某些更改将仍然可见且无法还原,例如对 /dev/vdb 设备的更改。

以下代码段会在 /dev/vdb 设备上创建仅含一个分区的 GPT 分区方案:

sfdisk /dev/vdb <<EOF
sleep 1
label: gpt
type=linux
EOF

partition=/dev/vdb1

由于 sfdisk 命令可能需要较长时间才能完成,因此在 sfdisk 后使用 sleep 命令推迟 label

该分区为 Btrfs 格式:

wipefs --all ${partition}
mkfs.btrfs ${partition}

以下代码段会将 /home 中可能包含的内容移到新的 /home 文件夹位置:

mount /home
mount ${partition} /mnt
rsync -aAXP /home/ /mnt/
umount /home /mnt

下面的代码段会去除 /etc/fstab 中的旧项并创建新项:

awk -i inplace '$2 != "/home"' /etc/fstab
echo "$(blkid -o export ${partition} | grep ^UUID=) /home btrfs defaults 0 0" >>/etc/fstab
2.2.2.1.6 创建新用户

由于某些服务(例如 Cockpit)要求使用非 root 用户身份登录,因此请在此处至少定义一个非特权用户。或者,您可以按第 4.2 节 “添加用户”中所述在正在运行的系统中创建此类用户。

要添加新用户帐户,请先创建一个代表用户口令的哈希字符串。使用 openssl passwd -6 命令。

获取口令哈希后,在 script 中添加以下几行内容:

mount /home
useradd -m EXAMPLE_USER
echo 'EXAMPLE_USER:PASSWORD_HASH' | chpasswd -e
2.2.2.1.7 设置 root 的口令

在设置 root 口令前,请先生成口令的哈希,例如,使用 openssl passwd -6 来生成。要设置口令,请在 script 中添加以下几行内容:

echo 'root:PASSWORD_HASH' | chpasswd -e
2.2.2.1.8 添加 SSH 密钥

以下代码段会创建用于存储 root 的 SSH 密钥的目录,然后将位于配置设备上的公共 SSH 密钥复制到 authorized_keys 文件中。

mkdir -pm700 /root/.ssh/
cat id_rsa_new.pub >> /root/.ssh/authorized_keys
注意
注意

如果您需要通过 SSH 进行远程登录,则必须启用 SSH 服务。有关细节,请参见第 2.2.2.1.9 节 “启用服务”

2.2.2.1.9 启用服务

要启用系统服务(例如 SSH 服务),请将下面一行添加到 script 中:

systemctl enable sshd.service
2.2.2.1.10 安装软件包
重要
重要:可能需要注册您的系统并连接网络

由于您可能需要额外订阅特定的软件包,因此可能需事先注册系统。此外,安装额外的软件包可能还需要有网络连接。

在首次引导配置期间,可以在系统上安装额外的软件包。例如,可以通过添加以下命令安装 vim 编辑器:

zypper --non-interactive install vim-small
注意
注意

请注意,在配置完毕并引导到配置的系统前,您将无法使用 zypper。如果想要在稍后进行更改,则必须使用 transactional-update 命令创建已更改快照。

3 部署自行安装 ISO 映像

以下过程介绍如何使用自行安装 ISO 映像部署 SUSE Linux Micro

  1. 下载映像。

  2. 使用挂接的自行安装 ISO 引导计算机。

  3. 选择 Install SL Micro(安装 SL Micro)以启动安装过程。

  4. 选择将安装 SUSE Linux Micro 的磁盘,并确认要删除磁盘上的数据。SUSE Linux Micro 映像随后会复制到该磁盘。

  5. 通过使用 kexec,您的系统会重引导,随后便会为配置过程做好准备。

  6. 选择 SL Micro 启动配置过程。如果提供了配置设备,将会根据配置设备上提供的说明配置 SUSE Linux Micro。否则,将触发 JeOS Firstboot(如第 3.1 节 “使用 JeOS Firstboot 配置 SUSE Linux Micro中所述)。

  7. 配置过程完成后,您便可登录系统。

  8. 第 4 节 “部署后步骤”中所述执行部署后步骤。

注意
注意:无人照管的安装

要跳过有关目标设备的提示,您可以使用一个自定义映像,以便利用内核命令行上的 rd.kiwi.oem.installdevice 选项来传递此目标设备。有关细节,请参见 boot process customization 工作流程。

3.1 使用 JeOS Firstboot 配置 SUSE Linux Micro

首次引导 SUSE Linux Micro 时,如果未提供任何配置设备,JeOS Firstboot 可用于对系统执行最低限度的配置。如果需要更好地控制部署过程,请使用具有 Ignition 或 Combustion 配置的配置设备。有关详细信息,请参见第 2.1 节 “使用 Ignition 配置 SUSE Linux Micro 部署”第 2.2 节 “使用 Combustion 配置 SUSE Linux Micro 部署”

要使用 JeOS Firstboot 配置系统,请按以下步骤操作:

  1. JeOS Firstboot 会显示欢迎屏幕。单击 Enter 确认。

  2. 在接下来的屏幕中,选择键盘,确认许可协议,并选择时区。

  3. 输入 root 口令对话框窗口中,输入 root 的口令并确认。

    输入 root 口令
    图 1︰ 输入 root 口令
  4. (可选) 要登记 SSH 密钥以访问系统,请按。如果按了,请执行以下步骤:

    1. 使用 SSH 连接到显示的 IP 地址。

    2. 如果妥当收到了公共密钥,请在下一个屏幕中进行确认。

    3. 要求您导入 SSH 密钥的提示随即出现。根据个人喜好选择选项。

  5. (可选) 如果需要,您可以在 User Creation 表单中创建非特权用户。填写用户名、全名和口令(需输入两次)。单击确定进行确认。

  6. (可选) 要设置用于访问 Cockpit 的 MFA,请打开 TOTP 应用程序并扫描二维码。输入应用程序提供的 OTP 值。单击确定继续。

  7. 成功完成部署后,按照第 4.3 节 “从 CLI 注册 SUSE Linux Micro中所述注册您的系统。

4 部署后步骤

4.1 添加 UEFI 引导记录

部署期间,系统映像会复制到所选磁盘,因此不会创建 EFI 引导项。您可能需要使用 EFI 外壳选择 SUSE Linux Micro 引导加载程序来手动引导系统。首次引导后,可以使用 efibootmgr 创建引导项。部署的映像中默认会提供 efibootmgr

4.2 添加用户

由于 SUSE Linux Micro 默认要求以非特权用户身份通过 SSH 登录或访问 Cockpit,因此建议您创建一个这样的帐户。

如果您已在系统部署期间定义了非特权用户,则可以不执行此步骤。若未定义,则可以按如下所示操作:

  1. 如下所示运行 useradd 命令:

                # 
                useradd -m USER_NAME
  2. 为该帐户设置口令:

    # passwd USER_NAME
  3. 根据需要将用户添加到 wheel 组:

    # usermod -aG wheel USER_NAME

4.3 从 CLI 注册 SUSE Linux Micro

部署成功后,需要注册系统以获得技术支持并接收更新。可以使用 transactional-update register 命令从命令行注册系统。

要在 SUSE Customer Center 中注册 SUSE Linux Micro,请执行以下操作:

  1. 按如下方式运行 transactional-update register

    # transactional-update register -r REGISTRATION_CODE -e EMAIL_ADDRESS

    要在本地注册服务器中注册,另请提供该服务器的 URL:

    # transactional-update register -r REGISTRATION_CODE -e EMAIL_ADDRESS \
     --url "https://suse_register.example.com/"

    REGISTRATION_CODE 替换为随您的 SUSE Linux Micro 一起收到的注册码。将 EMAIL_ADDRESS 替换为与您或贵组织管理订阅时所用 SUSE 帐户关联的电子邮件地址。

  2. 重引导您的系统以切换到最新的快照。

  3. SUSE Linux Micro 现已注册完毕。

注意
注意:其他注册选项

如果所需的信息超出了本节的范畴,请使用 SUSEConnect --help 查看内嵌文档。