OpenStack的centos镜像制作

官方文档:https://docs.openstack.org/image-guide/centos-image.html

基础环境准备

#安装libvirt相关工具
yum groupinstall Virtualization "Virtualization Client"
yum -y install libvirt

#启动服务
systemctl enable libvirtd; systemctl start libvirtd; systemctl status libvirtd

#下载或从本地上传系统镜像
mkdir /data
cd /data
wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso

启动安装程序

如前所述,使用virt-manager 或virt-install命令启动安装过程如果使用virt-install命令,请不要忘记将VNC客户端连接到虚拟机。

假使,假设:

  • 您的虚拟机映像的名称为centos使用virsh命令操作映像状态时,需要此名称

  • 您将netinstall ISO映像保存到该/data/目录。

如果使用virt-install命令,则这些命令应如下所示:

# qemu-img create -f qcow2 /data/centos.qcow2 10G
# virt-install --virt-type kvm --name kvm1 --ram 1024 
  --disk /tmp/centos.qcow2,format=qcow2 
  --network network=default 
  --graphics vnc,listen=0.0.0.0 --noautoconsole 
  --os-type=linux --os-variant=centos7.0 
  --location=/data/CentOS-7-x86_64-Minimal-2003.iso

逐步安装

在初始安装程序启动菜单中,选择“ 安装CentOS 7”选项。安装程序启动后,选择您的首选语言,然后单击“ 继续”以获取安装摘要。接受默认值。

_images / centos-install.png

更改以太网状态

以太网默认设置为OFF将以太网表格的设置更改OFFON特别是,请确保 ,这是默认设置。IPv4 Settings' MethodAutomatic (DHCP)

_images / centos-tcpip.png

主机名

安装程序允许您选择主机名。默认值(localhost.localdomain)很好。cloud-init稍后安装软件包,使用该映像配置新实例时,它将在引导时设置主机名

存储设备

如果系统提示您安装使用的设备类型,请选择Virtio Block Device

对磁盘分区

有不同的分区磁盘选项。默认安装使用LVM的分区,并创建三个分区(/boot/swap),工作正常。另外,您可能想创建一个挂载到的ext4分区/,它也可以正常工作。

如果不确定,请为安装程序使用默认分区方案。虽然没有一种方案从本质上比另一种方案更好,但是要在列表的末尾动态扩展的分区将使它可以扩展而不会越过另一个分区的边界。

选择安装选项

使用默认选项逐步完成安装。最简单的操作是选择 安装,它会安装SSH服务器。Minimal Install

设置root密码

在安装过程中,切记在出现提示时设置root密码。

取出CD-ROM并重新启动

等待安装完成。

_images / centos-complete.png

要使用virsh命令弹出磁盘,libvirt要求您在与CD-ROM先前相同的目标上附加一个空磁盘,该目标可能是hda您可以使用virsh dumpxml vm-image命令确认适当的目标 

# virsh dumpxml kvm1
<domain type='kvm' id='19'>
  <name>centos</name>
...
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
...
</domain>

从主机运行以下命令以弹出磁盘,并virsh以root用户身份重新启动如果使用virt-manager,下面的命令将起作用,但是您也可以使用GUI通过手动停止和启动来分离并重新引导它。

# virsh attach-disk --type cdrom --mode readonly kvm1 "" hda
# virsh start  kvm1

安装ACPI服务

要使系统管理程序能够重新引导或关闭实例,必须acpid在来宾系统上安装并运行该服务。

以root用户身份登录CentOS guest虚拟机,并运行以下命令来安装ACPI服务并将其配置为在系统启动时启动:

# yum install acpid
# systemctl enable acpid

配置获取元数据

实例必须与元数据服务交互才能在启动时执行多个任务。例如,该实例必须获取ssh公共密钥并运行用户数据脚本。为确保实例执行这些任务,请使用以下方法之一:

  • 安装cloud-initRPM,这是Ubuntu cloud-init软件包的端口 这是推荐的方法。

  • 修改/etc/rc.local文件以从元数据服务中获取所需的信息,如下一节所述。

使用cloud-init来获取公钥

cloud-init软件包自动获取从元数据服务器的公钥并将其放在一个帐户的关键。cloud-init通过运行以下命令在CentOS guest虚拟机中安装

# yum install cloud-init

该帐户因分配而异。在基于CentOS的虚拟机上,该帐户称为centos

您可以cloud-init 通过编辑/etc/cloud/cloud.cfg文件并添加其他用户的行来更改所使用帐户的名称例如,要配置cloud-init 将密钥放入名为的帐户中admin,请在配置文件中使用以下语法:

users:
  - name: admin
    (...)

安装cloud-utils-growpart以允许分区调整大小

为了正确调整根分区的大小,请安装该 cloud-utils-growpart软件包,其中包含适当的工具,以允许使用cloud-init调整磁盘的大小。

# yum install cloud-utils-growpart

编写脚本以获取公钥(如果没有cloud-init)

如果您无法cloud-init在映像中安装该软件包,则要获取ssh公钥并将其添加到根帐户,请编辑该/etc/rc.d/rc.local文件并在该行之前添加以下行touch /var/lock/subsys/local

if [ ! -d /root/.ssh ]; then
  mkdir -p /root/.ssh
  chmod 700 /root/.ssh
fi

# Fetch public key using HTTP
ATTEMPTS=30
FAILED=0
while [ ! -f /root/.ssh/authorized_keys ]; do
  curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key 
    > /tmp/metadata-key 2>/dev/null
  if [ $? -eq 0 ]; then
    cat /tmp/metadata-key >> /root/.ssh/authorized_keys
    chmod 0600 /root/.ssh/authorized_keys
    restorecon /root/.ssh/authorized_keys
    rm -f /tmp/metadata-key
    echo "Successfully retrieved public key from instance metadata"
    echo "*****************"
    echo "AUTHORIZED KEYS"
    echo "*****************"
    cat /root/.ssh/authorized_keys
    echo "*****************"
  fi
done

 

 
注意

一些VNC客户端用分号(:代替冒号(),;_用连字符(-代替下划线)。确保指定http:而不是http;确保指定authorized_keys而不是authorized-keys

 

 
注意

先前的脚本仅从元数据服务器获取ssh公共密钥。它不获取用户数据,这是用户在请求新实例时可以传递的可选数据。实例启动时,用户数据通常用于运行自定义脚本。

由于OpenStack元数据服务与Amazon EC2元数据服务的2009-04-04版本兼容,因此请参阅有关使用实例元数据的Amazon EC2文档,以获取有关如何获取用户数据的详细信息。

禁用zeroconf路由

为了使实例访问元数据服务,必须禁用默认的zeroconf路由:

# echo "NOZEROCONF=yes" >> /etc/sysconfig/network

配置控制台

为了使nova console-log命令在CentOS 7上正常工作,您可能需要执行以下步骤:

  1. 编辑/etc/default/grub文件并配置 GRUB_CMDLINE_LINUX选项。删除 和添加到选项。rhgb quietconsole=tty0 console=ttyS0,115200n8

    例如:

    ...
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap console=tty0 console=ttyS0,115200n8"
    
  2. 运行以下命令以保存更改:

    # grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-3.10.0-229.14.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
    Found linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72ba
    Found initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.img
    done
    

关闭实例

从实例内部,以root用户身份运行:

# poweroff

 

清理(​​删除MAC地址的详细信息)

操作系统在诸如/etc/sysconfig/network-scripts/ifcfg-eth0 实例处理期间的位置记录虚拟以太网卡的MAC地址但是,每次启动映像时,虚拟以太网卡都会具有不同的MAC地址,因此必须从配置文件中删除此信息。

有一个名为virt-sysprep的实用程序,该实用程序执行各种清除任务,例如删除MAC地址引用。它将在适当位置清理虚拟机映像:

# virt-sysprep -d kvm1
#清除网络相关硬件生成信息
yum install /usr/bin/virt-sysprep
virt-sysprep -d kvm1

#压缩镜像
virt-sparsify --compress /data/centos.qcow2 centos7
 

从virsh删除image模版

确保您制作的状态已经可用。并且意味着您下次需要重新创建并安装系统。

virsh list --all
virsh undefine kvm1
 

图像已完成

使用qemu-img create命令创建的基础图像文件 已准备好上载。

 
原文地址:https://www.cnblogs.com/rui517hua20/p/13620134.html