Alibaba Cloud Linux 4 的安装方法以及seed.img的生成

博主:XiaoxuXiaoxu 昨天 26 0条评论


一、工作原理

Alinux 4.0 系统镜像本身通常不能直接完成本地虚拟机初始化。启动虚拟机时,需要额外挂载一个卷标为 cidata 的 ISO9660 配置盘。cloud-init 会从该盘读取:

  • meta-data:实例标识、主机名等元数据

  • user-data:用户、密码、软件包、YUM 源、SSH 等初始化配置

  • network-config:网络配置,可选

三个文件必须使用精确文件名,不能写成 final-user-datanetwork.yaml 等其他名称。

二、准备环境

以下命令以 CentOS/RHEL 类 linux 主机为例,并假设使用 root 或具有 sudo 权限的账号。

sudo yum install -y genisoimage cloud-utils

检查工具:

command -v genisoimagecommand -v cloud-localds

cloud-localds 在不同发行版或旧版本中支持的参数可能不同。为保证兼容性,本教程使用 genisoimage 直接制作 ISO9660 seed 镜像。

创建工作目录:

mkdir -p ~/alinux4-seed/{seed,output}cd ~/alinux4-seed

三、创建 meta-data

cat > seed/meta-data <<'EOF'#cloud-config#vim:syntax=yamllocal-hostname: Alinux-Mano
EOF

Alinux-Mano 换成需要的主机名。主机名建议只使用字母、数字和连字符,不要使用空格或中文。

四、创建 user-data

下面是一个适合基础环境的 Alinux 4.0 示例:

cat > seed/user-data <<'EOF'#cloud-config#vim:syntax=yamlhostname: Alinux-Mano
fqdn: Alinux-Mano
manage_etc_hosts: truepreserve_hostname: falsetimezone: Asia/Shanghai# 允许 root 使用密码登录 SSHssh_pwauth: truedisable_root: falseallow_public_ssh_keys: false# 请替换为实际密码。生产环境不建议使用明文密码。chpasswd:
  expire: false
  users:
    - name: root
      password: <ROOT_PASSWORD>      type: textusers:
  - default

package_update: truepackage_upgrade: falsepackages:
  - sudo
  - vim-enhanced
  - curl
  - wget
  - git
  - rsync
  - tar
  - zip
  - unzip
  - lsof
  - bind-utils
  - net-tools
  - iproute
  - iputils
  - procps-ng
  - which
  - bash-completion
  - tree
  - tmux
  - screen
  - chrony
  - ca-certificates
  - dnf-utils

yum_repos:
  alinux4-updates:
    name: alinux4-updates
    baseurl: https://mirrors.aliyun.com/alinux/$releasever/updates/$basearch/os/
    enabled: 1
    gpgcheck: 1
    gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-4
  alinux4-plus:
    name: alinux4-plus
    baseurl: https://mirrors.aliyun.com/alinux/$releasever/plus/$basearch/os/
    enabled: 1
    gpgcheck: 1
    gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-4
  alinux4-devel:
    name: alinux4-devel
    baseurl: https://mirrors.aliyun.com/alinux/$releasever/devel/$basearch/os/
    enabled: 0
    gpgcheck: 1
    gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-4
  alinux4-os:
    name: alinux4-os
    baseurl: https://mirrors.aliyun.com/alinux/$releasever/os/$basearch/os/
    enabled: 1
    gpgcheck: 1
    gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-4

runcmd:
  - [ systemctl, enable, --now, chronyd ]
  - [ systemctl, enable, --now, sshd ]
  - [ sh, -c, "sed -ri 's/^#?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config" ]
  - [ systemctl, restart, sshd ]
EOF

密码注意事项

  • password: <ROOT_PASSWORD> 必须替换成实际密码。

  • type: text 表示明文密码,会被写入 seed 镜像;也可以改用经过 SHA-512 处理的密码哈希并设置 type: hash

  • seed 镜像相当于敏感配置文件。不要上传到公共网盘、代码仓库或不可信设备。

  • 首次启动完成后,建议立即执行 passwd root 修改密码,并移除虚拟机上的 seed 配置盘。

五、可选:配置 SSH 公钥

如果只使用密码登录,可以不添加任何公钥。若需要公钥登录,在 user-data 的 root 用户配置中增加:

users:
  - default
  - name: root
    ssh_authorized_keys:
      - <SSH_PUBLIC_KEY>

也可以将公钥放入 runcmd,但不建议把私钥放入 seed。私钥永远不能写入 seed,也不能复制到虚拟机镜像中。

使用公钥时仍建议保留密码登录作为首次排障手段,确认密钥登录正常后,再通过 SSH 配置关闭密码认证。

六、DHCP 网络配置

如果虚拟机网络由 DHCP 自动分配,创建 network-config

cat > seed/network-config <<'EOF'version: 2
ethernets:
  auto-ethernet:
    match:
      name: "e*"
    dhcp4: trueEOF

Alinux 4 的虚拟网卡通常可能命名为 eth0ens3 或其他以 e 开头的名称。若实际网卡名称不符合匹配规则,cloud-init 可能不会应用此配置。DHCP 场景也可以不放置 network-config,让系统使用镜像默认网络配置。

七、静态网络配置

需要固定 IP 时,将 seed/network-config 写成:

cat > seed/network-config <<'EOF'version: 2
ethernets:
  auto-ethernet:
    match:
      name: "e*"
    dhcp4: false
    addresses:
      - 10.1.1.7/24
    routes:
      - to: 0.0.0.0/0
        via: 10.1.1.1
    nameservers:
      addresses:
        - 223.5.5.5
EOF

注意:

  • 10.1.1.7/24 等价于 IP 10.1.1.7、掩码 255.255.255.0

  • 静态 IP 不能与局域网其他设备冲突。

  • 网关必须与虚拟机网络所在网段匹配。

  • 如果 Alinux 4 中 cloud-init 没有将配置转换为 NetworkManager 连接,需登录系统后使用 nmcli 手工配置。

  • 静态配置错误可能导致 SSH 断开,首次部署应优先准备虚拟机控制台。

八、生成 seed.img

确认三个文件名正确:

ls -l seed/meta-data seed/user-data seed/network-config

检查 YAML 中没有残留占位符:

grep -n '<ROOT_PASSWORD>\|<SSH_PUBLIC_KEY>' seed/* || true

生成 ISO9660 NoCloud 镜像:

genisoimage \
  -quiet \
  -volid cidata \
  -joliet \
  -rock \
  -output output/seed.img \
  seed/meta-data \
  seed/user-data \
  seed/network-configchmod 600 output/seed.img

关键参数说明:

  • -volid cidata:必须使用 cidata 卷标,NoCloud 才能自动识别。

  • -rock:保留 Unix 文件名和属性。

  • -joliet:提高兼容性。

  • -output output/seed.img:指定输出路径。

九、验证 seed 镜像

首先检查文件格式:

file output/seed.img

预期包含:

ISO 9660 CD-ROM filesystem data 'cidata'

计算校验和:

sha256sum output/seed.img

挂载并确认文件名:

mkdir -p /mnt/seed-check
mount -o loop,ro output/seed.img /mnt/seed-check
find /mnt/seed-check -maxdepth 1 -type f -printf '%f\n' | sort

必须看到:

meta-data
network-config
user-data

继续检查关键内容:

grep -n 'local-hostname\|Alinux-Mano' /mnt/seed-check/meta-data
grep -n 'ssh_pwauth\|timezone\|yum_repos' /mnt/seed-check/user-data
grep -n 'dhcp4\|addresses\|nameservers' /mnt/seed-check/network-config
umount /mnt/seed-check

十、下载 Alinux 4.0 系统镜像

Alinux 4.0 官方镜像目录:

https://mirrors.aliyun.com/alinux/4.0/image/

目录中的系统镜像包括 x86_64 和 ARM64 的 VHD、QCOW2 格式。必须根据宿主机和虚拟机架构选择对应镜像:

  • x86_64 主机使用 aliyun_4_x64_...

  • ARM64 主机使用 aliyun_4_arm64_...

seed.img 只提供初始化配置,不能替代 VHD/QCOW2 系统盘。

十一、使用 KVM/libvirt 挂载

使用 libvirt XML 时,将系统盘作为第一块盘,seed.img 作为第二块盘。例如:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/path/to/alinux4.qcow2'/>
  <target dev='vda' bus='virtio'/></disk><disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/path/to/seed.img'/>
  <target dev='vdb' bus='virtio'/></disk>

使用 qemu 命令行时:

qemu-system-x86_64 \
  -drive file=/path/to/alinux4.qcow2,if=virtio,format=qcow2 \
  -drive file=/path/to/seed.img,if=virtio,format=raw

如果使用 VHD,系统盘的 format 应改为 vpc;seed.img 仍然是 raw

十二、首次启动后的检查

登录虚拟机后执行:

hostnamectl
ip -br addr
ip route
systemctl status cloud-init --no-pager
cloud-init status --long
systemctl status sshd --no-pager

检查 DHCP 或静态网络是否生效:

nmcli device status
nmcli connection show

检查 cloud-init 日志:

journalctl -u cloud-init -b --no-pager
journalctl -u cloud-init-local -b --no-pager
sed -n '1,240p' /var/log/cloud-init.log
sed -n '1,240p' /var/log/cloud-init-output.log

十三、常见问题

1. 主机名生效,但网络仍然是 DHCP

先确认 seed 中确实有 network-config,文件名必须完全正确。然后检查实际网卡名:

nmcli device status

如果实际网卡名不是以 e 开头,name: "e*" 可能没有匹配到。还要检查 NetworkManager 和 cloud-init 日志。Alinux 4 通常使用 NetworkManager,不能简单照搬 Alinux 3 中旧的 systemd-networkd 配置。

2. root 无法通过 SSH 密码登录

检查:

sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|pubkeyauthentication'passwd -S root
systemctl status sshd --no-pager

确认 ssh_pwauth: truedisable_root: false,并确认 /etc/ssh/sshd_config 没有被其他配置文件覆盖。修改 SSH 配置后执行:

sshd -t && systemctl restart sshd

3. 软件包安装失败

检查 cloud-init 输出和 YUM 源:

dnf repolist
yum repolisttail -100 /var/log/cloud-init-output.log

Alinux 4 必须使用带 ALINUX-4 的 GPG key 和 Alinux 4 仓库路径,不要使用 Alinux 3 的仓库。

4. 修改 seed 后虚拟机没有重新执行

cloud-init 会记录实例初始化状态。更换 seed 后,虚拟机可能因为已有 /var/lib/cloud/ 状态而跳过初始化。仅在测试虚拟机中执行:

cloud-init clean --logs
reboot

生产环境不要随意清理 cloud-init 状态,否则可能重复执行初始化动作。

十四、安全清单

  • 不要把真实密码、私钥或包含密码的 seed 上传到公共位置。

  • seed 挂载完成后应从虚拟机移除。

  • 首次登录后立即修改 root 密码。

  • 完成 SSH 公钥验证后,建议关闭 root 密码登录。

  • root 直接开放 SSH 会增加暴力破解风险,正式环境建议创建普通管理员账号。

  • 静态 IP 使用前先确认地址未被占用。

  • 生成后记录 SHA256,传输后再次校验。

  • 只在测试虚拟机中执行 cloud-init clean --logs

官方参考

https://help.aliyun.com/zh/alinux/getting-started/use-alibaba-cloud-linux-3-images-in-an-on-premises-environment

https://mirrors.aliyun.com/alinux/4.0/image/

https://alinux4.oss-cn-beijing.aliyuncs.com/images/seed.img

  • Alibaba Cloud Linux 本地镜像说明:

  • Alinux 4.0 镜像目录:

  • Alinux 4 官方 seed 镜像:


The End

发布于:2026-08-29,除非注明,否则均为晓旭博客原创文章,转载请注明出处。