OpenStack CentOS7镜像制作
下载CentOS ISO镜像文件
在CentOS mirrors 找到合适的站点下载 CentOS-7-x86_64-DVD-1611.iso
,这里我选择网易镜像进行下载:
# wget http://mirrors.163.com/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso
开始安装过程
安装过程可以使用 virt-manager 或者 virt-install 命令,如果用 virt-install :
# qemu-img create -f qcow2 /tmp/CentOS-7-x86_64-v1.qcow2 10G
# virt-install --virt-type kvm --name centos7 --ram 1024 \
--disk /tmp/CentOS-7-x86_64-v1.qcow2,format=qcow2 \
--network=bridge:br0 \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=centos7.0 \
--location=/storage/isos/CentOS-7-x86_64-DVD-1611.iso
通过 --network=bridge:br0
指定网络类型和接口。
逐步安装
根据提示,逐步安装。
安装界面配置网络信息,确保能正确访问互联网,软件选择最小化安装。
配置界面接着设置root 管理员密码,普通用户这里不用创建,最后等待安装完成并重启系统。
执行virsh dumpxml matching-name 可查看对应信息:
# virsh dumpxml centos7
<domain type='kvm'>
<name>centos7</name>
...
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
...
</domain>
在主机运行virsh
命令弹出磁盘,再重启host。
# virsh attach-disk --type cdrom --mode readonly centos7 "" hda
Disk attached successfully
# virsh reboot centos7
Domain centos7 is being rebooted
安装ACPI服务
以root身份登录guest主机,安装并设置开机启用acpid
服务:
# yum install acpid
# systemctl enable acpid
配置元数据
一般在实例创建最后一步时,必须要获取到用户的公钥信息,还有用户的数据和脚本,如何获取到? 此时就需要guest host 安装cloud-init
程序包来获取这些信息:
# yum install cloud-init
在基于CentOS的虚拟机上,公钥信息会被存放在centos帐号下,也就是可以使用centos作为用户名,通过密钥远程登录。通过编辑/etc/cloud/cloud.cfg
文件可以使用其他的用户帐号名称。
安装cloud-utils-growpart 以允许调整分区大小
# yum install cloud-utils-growpart
禁用zeroconf 路由
对于访问元数据服务的实例,必须禁用默认的zeroconf路由:
# echo "NOZEROCONF=yes" >> /etc/sysconfig/network
另外,还需要手动修改下网卡的配置文件:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
NM_CONTROLLED="no"
再自定义设置一些初始化的运行环境。
配置控制台
为了让 nova console-log 命令在CentOS 7能正常执行,还需修改一下配置:
-
编辑
/etc/default/grub
,在GRUB_CMDLINE_LINUX
选项,删除rhgb quiet
,再添加console=tty0 console=ttyS0,115200n8
。
例如:# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8" GRUB_DISABLE_RECOVERY="true"
-
运行下面命令进行修改保存:
# grub2-mkconfig -o /boot/grub2/grub.cfg
关闭实例
在实例内部,以root身份关闭实例:
# poweroff
保存修改并关机
清除MAC地址
在实例运行中,操作系统会将虚拟以太网卡的MAC地址记录在/etc/sysconfig/network-scripts/ifcfg-eth0
等位置。但是,每次使用镜像启动新实例时,虚拟以太网卡将会有不同的MAC地址,因此必须从配置文件中删除该信息。
可以用virt-sysprep 程序,完成各种清理任务,如删除MAC地址引用:
# virt-sysprep -d centos7
如果没有virt-sysprep 这个命令,需要手动安装:
# yum install libguestfs-tools
取消定义libvirt域
# virsh undefine centos7
Domain centos7 has been undefined
压缩镜像
# virt-sparsify --compress /tmp/CentOS-7.3-x86_64-Cloud.qcow2 CentOS-7.3-x86_64-Cloud.qcow2
至此,可以将镜像上传至 Image service 使用。
【参考】:
https://docs.openstack.org/image-guide/centos-image.html