使用Debian云映像创建虚拟机

环境准备

  • Oracle Virtual Box
  • Debian GNU/Linux 11 (bullseye)系统
  • Debian 11 Cloud Image

如果有一台装有Debian 11系统的机器最好,也可以用Windows/WSL2代替,而我用的是vscode devcontainer1创建的docker容器来作为工具搭建,配置见下。

ls -al

.devcontainer/
  devcontainer.json
  Dockerfile
networks/
  debian-master # 主节点网络配置
  debian-node01 # 从节点网络配置
vboxes/          # virtual box虚拟机
  debian-master/
  debian-node01/

.devcontainer/devcontainer.json

{
	"name": "Cloud Init Environment",
	"dockerFile": "Dockerfile",
	"remoteUser": "vscode"
}

.devcontainer/Dockerfile

FROM mcr.microsoft.com/vscode/devcontainers/base:0-bullseye

RUN sed -i 's:deb.debian.org:ftp.cn.debian.org:g' /etc/apt/sources.list \
    && sed -i 's:security.debian.org:ftp.cn.debian.org:g' /etc/apt/sources.list

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install --no-install-recommends \
    bash-completion \
    cloud-image-utils \
    qemu-utils \
    && apt-get -y clean && rm -rf /var/lib/apt/lists/*

RUN mkdir /images \
    && cd /images \
    && curl -sSL https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-generic-amd64.qcow2 -O

然后从VSCode打开该目录,完成容器环境的搭建。

其中,我直接在容器中,直接从远程获取了Debian的云映像资源(目录/images),如果是自行环境搭建,可以从官网2下载。

新建Virtual Box虚拟机

由于VBox虚拟机不支持直接在已有文件夹下创建。

打开Oracle VM VirtualBox,新建一个虚拟机。

我将输入名称debian-master(名字随意)。

内存大小选择“512MB”,虚拟硬盘选择“不添加虚拟硬盘”。

进入虚拟机设置,在网络选项卡中,选择启用“网卡2”,选择连接方式“仅主机(Host-Only)网络”。

创建并vmdk虚拟硬盘

qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic /images/debian-11-generic-amd64.qcow2 vboxes/debian-master/root-disk.vmdk

创建NoCloud的iso镜像

参考cloud init3配置基础用户信息和系统配置(这里我们选用20.4.1版本查询模块设置参数),例如

master-data

#cloud-config

password: passw0rd          # 设置默认用户密码
chpasswd: { expire: False } # 是否强制用户修改初始密码
ssh_pwauth: True            # 是否允许通过ssh访问
system_info:
  default_user:
    name: sysadmin          # 设置默认用户登录名

apt: # 使用中国镜像
  primary:
    - arches: [default]
      uri: http://ftp.cn.debian.org/debian/
  security:
    - arches: [default]
      uri: http://ftp.cn.debian.org/debian-security/
  sources_list: |
    deb $PRIMARY $RELEASE main 
    # deb-src $PRIMARY $RELEASE main

    deb $PRIMARY $RELEASE-updates main
    # deb-src $PRIMARY $RELEASE-updates main

    # deb $PRIMARY $RELEASE-backports main
    # deb-src $PRIMARY $RELEASE-backports main

    deb $SECURITY $RELEASE-security main
    # deb-src $SECURITY $RELEASE-security main

write_files:
  - path: /etc/sysctl.d/70-disable-ipv6.conf  # 关闭IPv6协议
    content: |
      net.ipv6.conf.all.disable_ipv6 = 1

以下是初始网络配置信息设置:

networks/debian-master

version: 2
ethernets:
  enp0s8:
    match:
      name: enp0s8
    addresses:
      - 192.168.56.10/255.255.255.0
cloud-localds vboxes/debian-master/seed.iso master-data --hostname debian-master --dsmode local --network-config networks/debian-maste

关联虚拟硬盘和配置镜像

打开虚拟机设置,在存储选项卡中,在SATA添加注册vboxes/debian-master/root-disk.vmdk虚拟硬盘,在IDE分配光驱选择vboxes/debian-master/seed.iso

打开虚拟机

等待虚拟机启动完成后,可以使用ssh访问192.168.56.10访问到虚拟机,输入刚才master-data配置用户名和密码,默认用户拥有sudo权限。

ssh sysadmin@192.168.56.10

这时已完成安装,并且支持外网访问。

安装apt-cacher-ng

安装apt-cacher-ng,使内网节点支持代理更新软件包:

sudo apt-get install apt-cacher-ng

配置部署内网节点

首先内网节点,我们不需要用户名和密码登录,使用主节点(debian-master)的ssh密钥登录,所以在主节点运行生成密钥对。

ssh-keygen -t rsa -a 2048

复制黏贴公钥文本后,修改master-data复制到node-data

配置apt下载HTTP代理:http://192.168.56.10:3142。

#cloud-config

ssh_authorized_keys:  # SSH公钥设置
  - ssh-rsa AAA..(你的公钥字符串)..ZgE= sysadmin@debian-master

system_info:
  default_user:
    name: sysadmin    # 设置默认用户登录名

apt: # 使用中国镜像
  http_proxy: http://192.168.56.10:3142 # 内网代理节点
  primary:
    - arches: [default]
      uri: http://ftp.cn.debian.org/debian/
  security:
    - arches: [default]
      uri: http://ftp.cn.debian.org/debian-security/
  sources_list: |
    deb $PRIMARY $RELEASE main 
    # deb-src $PRIMARY $RELEASE main

    deb $PRIMARY $RELEASE-updates main
    # deb-src $PRIMARY $RELEASE-updates main

    # deb $PRIMARY $RELEASE-backports main
    # deb-src $PRIMARY $RELEASE-backports main

    deb $SECURITY $RELEASE-security main
    # deb-src $SECURITY $RELEASE-security main

write_files:
  - path: /etc/sysctl.d/70-disable-ipv6.conf  # 关闭IPv6协议
    content: |
      net.ipv6.conf.all.disable_ipv6 = 1

重复上述操作建立debian-node01虚拟机,并在网络设置中,启用网络1,使用连接方式“仅主机(Host-Only)网络”具体内容不再概述,以下是相关执行脚本。

qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic /images/debian-11-generic-amd64.qcow2 vboxes/debian-node01/root-disk.vmdk

cloud-localds vboxes/debian-node01/seed.iso node-data --hostname debian-node01 --dsmode local --network-config networks/debian-node01

示例项目参考

https://gitee.com/rwyc/debian-cloud-init-setups