CentOS 官方镜像
阿里云> 腾讯云> 官方CentOS 6 Images> 官方CentOS 7 images CentOS镜像制作示例 s/x86_64
- 创建虚机文件
```
创建空白镜像文件
qemu-img create -f qcow2 centos-6.9.qcow2 100G创建KVM虚机
virt-install —virt-type kvm —name centos-6.9 —ram 1024 —disk centos-6.9.qcow2,format=qcow2 —networ k network=default —graphics vnc,listen=0.0.0.0 —noautoconsole —location=CentOS-6.9-x86_64-netinstall.iso确定虚机运行
[root@kongzz ~]# virsh list —all Id Name State
1 CentOS-6.9 running
- 安装启动后,,通过VNC Viewer连接登录到创建中的虚机,配置网络,配置磁盘分区,配置密码
- 安装配置服务, 并设置随机启动
安装epel源并更新系统
yum -y install epel-release; yum -y update
安装acpid服务, 能让宿主机对虚拟机进行开关机等电源管理操作
yum -y install acpid; chkconfig acpid on
安装cloud-init
yum -y install cloud-init cloud-utils-growpart chkconfig cloud-init on
安装qemu-ga服务
yum -y install qemu-guest-agent chkconfig qemu-ga on vim /etc/sysconfig/qemu-ga FSFREEZE_HOOK_ENABLE=1
BLACKLIST_RPC=”guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush”
virsh edit $image
修改网络信息删除mac信息
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改selinux和防火墙
vim /etc/sysconfig/selinux chkconfig iptables off
- 配置Cloud-init
users:
- default disable_root: 0 ssh_pwauth: 1 datasource_list: [ ‘ConfigDrive’, ‘None’ ] bootcmd:
- grep 114.114.114.114 /etc/resolv.conf || echo nameserver 114.114.114.114 >> /etc/resolv.conf mounts:
- [ /dev/sr0, /opt, auto, “defaults,noexec” ] mount_default_fields: [~, ~, ‘auto’, ‘defaults,nofail’, ‘0’, ‘2’] runcmd:
- sh /etc/cloud/network.sh locale_configfile: /etc/sysconfig/i18n resize_rootfs_tmp: /dev ssh_deletekeys: 0 ssh_genkeytypes: ~ syslog_fix_perms: ~ cloud_init_modules:
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- rsyslog
- users-groups
- ssh cloud_config_modules:
- mounts
- locale
- set-passwords
- yum-add-repo
- package-update-upgrade-install
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
system_info:
default_user:
name: centos
lock_passwd: true
gecos: Cloud User
groups: [wheel, adm]
sudo: [“ALL=(ALL) NOPASSWD:ALL”]
shell: /bin/bash
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
vim:syntax=yaml
```
配置网络 ( /etc/cloud/network.sh )
#!/bin/bash
IPADDR=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "ip_address"|awk -F'"' '{print $4}')
NETMASK=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "netmask"|grep -v "0.0.0.0"|awk -F'"' '{print $4}')
GATEWAY=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "gateway"|awk -F'"' '{print $4}')
MTU=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "mtu"|awk '{print $2}'|awk -F',' '{print $1}')
echo """DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=${IPADDR}
NETMASK=${NETMASK}
GATEWAY=${GATEWAY}
MTU=${MTU}
""" > /etc/sysconfig/network-scripts/ifcfg-eth0
ifdown eth0
ifup eth0
关闭虚机并清理镜像内的MAC地址等
virt-sysprep -d centos-6.9
压缩镜像文件
#qcow2 格式的 Image 有稀疏的问题, 在磁盘级别上看, 镜像会有大量连续的相同空洞, 通过virt-sparsify 我们可以消除这些空洞, 从而缩小磁盘大小, 便于我们传输磁盘镜像
virt-sparsify --compress centos-6.9.qcow2 CentOS-6.9.qcow2
上传镜像
virsh undefine centos-6.9
openstack image create --container-format bare --disk-format qcow2 --shared --property hw_qemu_guest_agent=yes --file CentOS-6.9.qcow2 CentOS-6.9
参考文档
- 官方OpenStack Virtual Machine Image Guide
- 如何构建OpenStack镜像
- Qemu Guest Agent Integration