制作kvm-linux镜像

制作kvm-linux镜像

April 145 2023-03-28

Linux KVM镜像制作

参考教程:

制作开箱即用的 Ubuntu qcow2 镜像

环境

我用的是centos7 桌面版,主要是想使用virt-manager, 有个客户端方便很多

查看CPU是否支持KVM虚拟化

egrep -c '(vmx|svm)' /proc/cpuinfo
# 返回值为0说明CPU不支持硬件虚拟化;返回1或更高值说明CPU支持。
# 通常情况,硬件虚拟化扩展是默认不启用的,要通过进入BIOS设置启用。

BIOS设置启用虚拟化(大概方法,各家机器各有不同,操作方式大致相同)

  1. 开机F12->BootMenu->->Config->CPU
  2. 将Intel® Virtualization Technology选为Enabled
  3. Intel® VT-d Feature选为Enabled

安装必要软件包

yum install -y libvirt-client cloud-utils virt-install libguestfs-tools openssh-askpass qemu-kvm.x86_64 qemu-img.x86_64 bridge-utils.x86_64 libvirt  virt-manager

所需工具:

  1. linux 系统

    我只做了ubuntu、debian和centos的镜像,都是根据官方提供的云镜像制作的,和自己下载ISO做的镜像相比,镜像体积要小不少。

    1. ubuntu

      Ubuntu Cloud Images - the official Ubuntu images for public clouds, Openstack, KVM and LXD

    2. centos

      CentOS Cloud images

    3. debian

      Index of /cdimage/openstack

    4. openstack 官方提供的镜像来源:

      Get images — Virtual Machine Image Guide documentation

  2. cloud_init [下载]

    1. 用于注入密码,许多的linux云镜像都是不提供密码的,需要用cloud_init注入密码,才能登陆到系统中。

    2. 源码:

      #cloud-config
      system_info:
        default_user:
          name: idss
          home: /home/idss
      
      password: IDss@123
      chpasswd: { expire: False }
      hostname: IDSS
      
      # 配置 sshd 允许使用密码登录
      ssh_pwauth: True
      
    3. 源码制作成iso

      cloud-localds cloud-init.iso cloud-init.cfg
      
  3. idss_netwrok_init[linux下载]

非必要程序,因为配合ovs,源码就不放了。

开始制作

方式1

根据下载好的镜像,制作qcow2镜像


qemu-img convert -f qcow2 -O qcow2 ubuntu-20.04-server-cloudimg-amd64.img ubuntu20.qcow2
# 调整镜像大小
qemu-img resize ubuntu20.qcow2 50G

启动实例

virt-install --name ubuntu_20 --memory 1024 \ 
--disk ubuntu20.qcow2,device=disk,bus=virtio \
--disk cloud-init.iso,device=cdrom \
--os-type linux \
--os-variant ubuntu20.04 \
--virt-type kvm \
--graphics none  \
--network network=default,model=virtio \
--import

方式2

  • 这个我一般用于iso的制作

创建一个空的qcow2镜像

qemu-img create -f qcow2  ubuntu.qcow2 50G

创建实例

virt-install --name ubuntu20 --ram 1024 --vcpus 2 \
--disk path=ubuntu.qcow2,format=qcow2,device=disk,bus=virtio \
--cdrom ubuntu-20.04-amd64.ios \
--disk cloud-init.iso,device=cdrom \
--os-type linux \
--os-variant  ubuntu20.04 \
--network network=default,model=virtio  \

查看–os-variant的选项,可以用以下命令

osinfo-query os

实例操作

安装vim, wget, net-tools等工具,以及配置linux

idss_netwrok_init 自启 (非必要)

以ubuntu20为例子

mv idss_network_init /usr/bin/
chmod +x /usr/bin/idss_network_init
vim /etc/init.d/idss_network.sh
  
# /etc/init.d/idss_network.sh 内容
"""
#!/bin/bash

### BEGIN INIT INFO
# Provides:     idss cloud network plug_in
# Required-Start:  $remote_fs $syslog
# Required-Stop:   $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: start test
# Description:    start test
### END INIT INFO

# 开机启动网络组建
idss_network_init
echo "start idss_network_init"
"""
chmod +750 /etc/init.d/idss_network.sh
update-rc.d idss_network.sh defaults

禁止cloudinit开机自启

# 具体需要自行查看系统内的服务
systemctl disable cloud-init.service cloud-init.target ...

重启

重启并查看服务是否正常

并清理历史记录:

history -c && history -w

去除cloud_init.iso

关机,删除挂载的cloud_init.iso

清理实例

virt-sysprep -d [实例名]

导出

qemu-img convert -f qcow2 -O qcow2 [现有.qcow2] [新的.qcow2]