使用 ISO 映像部署 SLE Micro
- 解释
 SLE Micro 提供可直接部署到以下设备存储区的自行安装映像(也称为预构建映像):内存卡、USB 闪存盘或硬盘。映像可部署到的设备类型取决于具体的硬件。请参见供应商文档以获取指导。
- 原因
 您需要了解如何在系统上部署 SLE Micro。
- 工作量
 读完本文大约需要 20 分钟。
- 目标
 在系统上成功部署 SLE Micro。
- 要求
 了解自行安装磁盘映像适合哪种环境。有关细节,请参见“SLE Micro 简介”一文。
一台至少具备 20 GB 磁盘空间的设备,用于部署原始映像和运行 SLE Micro。
(可选)一个配置媒体,例如 USB 闪存盘。
1 关于预构建映像 #
预构建映像代表正在运行的操作系统,随时可供使用。它们不是通过安装程序以传统方式安装的,而是会复制到目标主机的硬盘中。本主题将介绍有关这些预构建映像的基本信息。
在首次引导时,需使用预构建映像中提供的工具对其进行配置。引导加载程序会按照第 1.2 节 “首次引导检测”中所述检测首次引导。每个映像附带默认挂载的子卷,在首次引导配置期间,这些子卷可能会发生更改。有关子卷的细节,请参见第 1.1 节 “默认分区”。
1.1 默认分区 #
提供的预构建映像会使用默认的分区方案,在首次引导期间,可以使用 Ignition 或 Combustion 更改该方案。
如果您要对默认分区方案进行任何更改,根文件系统必须是 Btrfs。
每个映像都具有以下子卷:
/home /root /opt /srv /usr/local /var
/etc 目录会挂载为 OverlayFS,其中上一级目录挂载到 /var/lib/overlay/1/etc/。
  
    您可以通过 /etc/fstab 中的 x-initrd.mount 选项来识别默认挂载的子卷。其他子卷或分区必须通过 Ignition 或 Combustion 进行配置。
  
1.2 首次引导检测 #
    部署配置只在首次引导时运行。为了区分首次引导和后续引导,完成首次引导后,系统会创建标志文件 /boot/writable/firstboot_happened。如果文件系统中没有该文件,则会将 ignition.firstboot 属性传递给内核命令行,因而触发 Ignition 和 Combustion 的运行(在 initrd 中)。完成首次引导后,系统便会创建 /boot/writable/firstboot_happened 标志文件。
  
      即使由于配置文件错误或缺失导致配置失败,系统也会创建 /boot/writable/firstboot_happened 标志文件。
    
1.2.1 在后续引导时强制重配置系统 #
如果您需要在发生首次引导后重配置系统,可以在后续引导时强制重配置。此处可以采取两种做法。
可以将
ignition.firstboot=1属性传递给内核命令行。可以删除标志文件
/boot/writable/firstboot_happened。
2 准备配置设备 #
在安装过程中,可以传递复杂的配置来定义用户、目录或提供 SSH 密钥。为此,请创建一个稍后由 Ignition 或 Combustion 处理的配置设备。
      默认情况下,SLE Micro 中仅允许使用 SSH 密钥进行 root SSH 登录。我们建议在部署过程中创建一个非特权用户用于访问已安装的系统。可以在首次引导时使用 Combustion 或 Ignition 工具创建非特权用户帐户。在系统部署期间创建的非特权用户还可用于访问 Cockpit Web 界面。
    
要准备配置设备,请执行以下步骤:
将磁盘格式化为 SLE Micro 支持的任何文件系统:Ext3、Ext4 等:
>sudo mkfs.ext4 /dev/sdY将设备标签设置为
ignition(使用 Ignition 或 时)或combustioncombustion(仅使用 Combustion 时)。如果需要(例如在 Windows 主机上),请为标签使用大写字母。要为设备设置标签,请运行:>sudo e2label /dev/sdY ignition可以使用您的虚拟化系统或硬件支持的任何类型的配置存储媒体:ISO 映像、USB 闪存盘等
挂载设备:
>sudo mount /dev/sdY /mnt创建第 2.1.1.1 节 “
config.ign”或第 2.2 节 “使用 Combustion 配置 SLE Micro 部署”中所述的目录结构,具体取决于使用的配置工具:>sudo mkdir /mnt/ignition/或:
>sudo mkdir -p /mnt/combustion/准备 Ignition 或 Combustion 所用配置的所有元素
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 属性是必需的,在 SLE Micro 中,其值必须设置为 3.3.0 或任何更低版本。否则,Ignition 将会失败。
      
        要以 root 身份登录到系统,必须至少包含 root 的口令。但建议通过 SSH 密钥建立访问权限。要配置口令,请务必使用安全口令。如果您使用随机生成的口令,请至少包含 10 个字符。如果您要手动创建口令,请包含 10 个以上的字符,并结合使用大写与小写字母和数字。
      
2.1.2 Ignition 配置示例 #
2.1.2.1 配置示例 #
本部分提供内置 JSON 格式的 Ignition 配置的几个示例。
第 1.1 节 “默认分区”列出了在运行预构建的映像时默认挂载的子卷。如果您要在默认未挂载的子卷上添加新用户或修改任何文件,则需要先声明此类子卷,以便将其挂载。有关挂载文件系统的详细信息,请参见第 2.1.2.1.1.3 节 “filesystems 属性”。
      
version 属性为必要属性
        每个 config.fcc 都必须包含版本 1.4.0 或更低版本,该版本随后会转换为相应的 Ignition 规范。
      
2.1.2.1.1 储存配置 #
storage 属性用于配置分区、RAID,定义文件系统,创建文件等。要定义分区,请使用 disks 属性。filesystems 属性用于格式化分区和定义特定分区的挂载点。files 属性可用于在文件系统中创建文件。后续章节中将介绍上述每个属性。
      
2.1.2.1.1.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.1.1.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.1.1.3 filesystems 属性 #
filesystems 必须包含以下属性:
        
- device
 设备的绝对路径,如果是物理磁盘,通常为
/dev/sda- format
 文件系统格式(Btrfs、Ext4、xfs、vfat 或 swap)
注意对于 SLE Micro,
root文件系统必须为 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.1.1.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.1.1.5 directories 属性 #
directories 属性是将在文件系统中创建的目录列表。directories 属性必须至少包含一个 path 属性。
        
例如:
{
  "ignition": {
    "version": "3.0.0"
  },
  "storage": {
    "directories": [
      {
        "path": "/home/tux",
        "user": {
          "name": "tux"
        }
      }
    ]
  }
}2.1.2.1.2 用户管理 #
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.1.3 启用 systemd 服务 #
        您可以通过在 systemd 属性中指定 systemd 服务来启用相应服务。
      
例如:
{
  "ignition": {
    "version": "3.0.0"
  },
  "systemd": {
    "units": [
      {
        "enabled": true,
        "name": "sshd.service"
      }
    ]
  }
}2.2 使用 Combustion 配置 SLE Micro 部署 #
Combustion 是一种 dracut 模块,可用于在首次引导时配置系统。您可以使用 Combustion 来更改默认分区、设置用户口令、创建文件、安装软件包等。
2.2.1 Combustion 的工作原理 #
      系统将在 ignition.firstboot 参数传递给内核命令行后调用 Combustion。Combustion 会读取提供的文件(名为 script)并执行其中的命令,以对文件系统进行更改。如果 script 中包含网络标志,Combustion 会尝试配置网络。挂载 /sysroot 后,Combustion 会尝试激活 /etc/fstab 中的所有挂载点,然后调用 transactional-update 来应用其他更改,例如设置 root 口令或安装软件包。
    
          Combustion 可与 Ignition 搭配使用。如果您要将它们搭配使用,请将配置媒体标记为 ignition,并在目录结构中添加包含 config.ign 的 ignition 目录,如下所示:
        
<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 执行的配置任务的一些示例。
    
script 文件由外壳解释,所以请务必在文件的第一行以解释器声明开头。例如,对于 Bash:
      
#!/bin/bash
      为了登录系统,请至少包含 root 口令,但建议使用 SSH 密钥建立身份验证。如果您需要使用 root 口令,请务必配置安全口令。对于随机生成的口令,请至少包含 10 个字符。如果您要手动创建口令,请包含 10 个以上的字符,并结合使用大写与小写字母和数字。
    
2.2.2.1.1 网络配置 #
        要在首次引导期间配置并使用网络连接,请在 script 中添加以下语句:
      
# combustion: network
        使用此语句会将 rd.neednet=1 参数传递给 dracut。网络配置默认设为使用 DHCP。如果需要使用不同的网络配置,请按照第 2.2.2.1.2 节 “在 initramfs 中进行修改”中所述操作。
      
如果不使用该语句,将不会为系统配置任何网络连接。
2.2.2.1.2 在 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
# Leave a marker
echo "Configured with combustion" > /etc/issue.d/combustion2.2.2.1.3 分区 #
提供的 SLE Micro 原始映像会使用第 1.1 节 “默认分区”中所述的默认分区方案。您可能希望使用不同的分区方式。下面一组示例代码段会将 /home 移至另一个分区。
      
          以下脚本会执行快照中未包含的更改。如果脚本失败且快照被丢弃,那么某些更改将仍然可见且无法还原,例如对 /dev/vdb 设备的更改。
        
        以下代码段会在 /dev/vdb 设备上创建仅含一个分区的 GPT 分区方案:
      
sfdisk /dev/vdb <<EOF label: gpt type=linux EOF partition=/dev/vdb1
该分区为 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/fstab2.2.2.1.4 创建新用户 #
由于某些服务(例如 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.5 设置 root 的口令 #
        在设置 root 口令前,请先生成口令的哈希,例如,使用 openssl passwd
        -6 来生成。要设置口令,请在 script 中添加以下几行内容:
      
echo 'root:PASSWORD_HASH' | chpasswd -e
2.2.2.1.6 添加 SSH 密钥 #
        以下代码段会创建用于存储 root 的 SSH 密钥的目录,然后将位于配置设备上的公共 SSH 密钥复制到 authorized_keys 文件中。
      
mkdir -pm700 /root/.ssh/ cat id_rsa_new.pub >> /root/.ssh/authorized_keys
2.2.2.1.7 启用服务 #
        要启用系统服务(例如 SSH 服务),请将下面一行添加到 script 中:
      
systemctl enable sshd.service
2.2.2.1.8 安装软件包 #
由于您可能需要额外订阅特定的软件包,因此可能需事先注册系统。此外,安装额外的软件包可能还需要有网络连接。
        在首次引导配置期间,可以在系统上安装额外的软件包。例如,可以通过添加以下命令安装 vim 编辑器:
      
zypper --non-interactive install vim-small
          请注意,在配置完毕并引导到配置的系统前,您将无法使用 zypper。如果想要在稍后进行更改,则必须使用 transactional-update 命令创建已更改快照。
        
3 部署自行安装 ISO 映像 #
以下过程介绍如何使用自行安装 ISO 映像部署 SLE Micro:
下载映像。
使用挂接的自行安装 ISO 引导计算机。
选择 (安装 SL Micro)以启动安装过程。
选择将安装 SLE Micro 的磁盘,并确认要删除磁盘上的数据。SLE Micro 映像随后会复制到该磁盘。
通过使用 kexec,您的系统会重引导,随后便会为配置过程做好准备。
选择 启动配置过程。如果提供了配置设备,将会根据配置设备上提供的说明配置 SLE Micro。否则,将触发 JeOS Firstboot(如第 3.1 节 “使用 JeOS Firstboot 配置 SLE Micro”中所述)。
配置过程完成后,您便可登录系统。
按第 4 节 “部署后步骤”中所述执行部署后步骤。
3.1 使用 JeOS Firstboot 配置 SLE Micro #
首次引导 SLE Micro 时,如果未提供任何配置设备,JeOS Firstboot 可用于对系统执行最低限度的配置。如果需要更好地控制部署过程,请使用具有 Ignition 或 Combustion 配置的配置设备。有关详细信息,请参见第 2.1 节 “使用 Ignition 配置 SLE Micro 部署”和第 2.2 节 “使用 Combustion 配置 SLE Micro 部署”。
要使用 JeOS Firstboot 配置系统,请按以下步骤操作:
会显示欢迎屏幕。单击 Enter 确认。
在接下来的屏幕中,选择键盘,确认许可协议,并选择时区。
在对话框窗口中,输入
root的口令并确认。图 1︰ 输入 root 口令 #成功部署后,按第 4.3 节 “从 CLI 注册 SLE Micro”中所述注册系统并创建非特权用户。
4 部署后步骤 #
4.1 添加 UEFI 引导记录 #
     部署期间,系统映像会复制到所选磁盘,因此不会创建 EFI 引导项。您可能需要使用 EFI 外壳选择 SLE Micro 引导加载程序来手动引导系统。首次引导后,可以使用 efibootmgr 创建引导项。部署的映像中默认会提供 efibootmgr。
    
4.2 添加用户 #
由于 SLE Micro 要求使用非特权用户身份通过 SSH 登录系统或访问 Cockpit,因此您需要创建这样的帐户。
    如果已在 Ignition 或 Combustion 中定义了非特权用户,则可以不执行此步骤。如果您是使用 JeOS Firstboot 部署系统的,那么只需设置 root 口令,并且需要手动创建非特权帐户,如下所述:
  
如下所示运行
useradd命令:#useradd -m USER_NAME为该帐户设置口令:
#passwdUSER_NAME根据需要将用户添加到
wheel组:#usermod -aG wheelUSER_NAME
4.3 从 CLI 注册 SLE Micro #
        部署成功后,需要注册系统以获得技术支持并接收更新。可以使用 transactional-update
        register 命令从命令行注册系统。
      
要在 SUSE Customer Center 中注册 SLE Micro,请执行以下操作:
按如下方式运行
transactional-update register:#transactional-update register -rREGISTRATION_CODE -e EMAIL_ADDRESS要在本地注册服务器中注册,另请提供该服务器的 URL:
#transactional-update register -rREGISTRATION_CODE -e EMAIL_ADDRESS \ --url "https://suse_register.example.com/"将 REGISTRATION_CODE 替换为随您的 SLE Micro 一起收到的注册码。将 EMAIL_ADDRESS 替换为与您或贵组织管理订阅时所用 SUSE 帐户关联的电子邮件地址。
重引导您的系统以切换到最新的快照。
SLE Micro 现已注册完毕。
      如果所需的信息超出了本节的范畴,请使用 SUSEConnect --help 查看内嵌文档。
    
5 法律声明 #
版权所有 © 2006–2025 SUSE LLC 和贡献者。保留所有权利。
根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的权限;本版权声明和许可证附带不可变部分。许可版本 1.2 的副本包含在题为“GNU Free Documentation License”的部分。
有关 SUSE 商标,请参见 https://www.suse.com/company/legal/。所有其他第三方商标分别为相应所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。
