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

  1. - 安装启动后,,通过VNC Viewer连接登录到创建中的虚机,配置网络,配置磁盘分区,配置密码
  2. - 安装配置服务, 并设置随机启动

安装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

  1. - 配置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 )

    1. #!/bin/bash
    2. IPADDR=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "ip_address"|awk -F'"' '{print $4}')
    3. NETMASK=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "netmask"|grep -v "0.0.0.0"|awk -F'"' '{print $4}')
    4. GATEWAY=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "gateway"|awk -F'"' '{print $4}')
    5. MTU=$(cat /opt/openstack/latest/network_data.json|python -m json.tool|grep "mtu"|awk '{print $2}'|awk -F',' '{print $1}')
    6. echo """DEVICE=eth0
    7. TYPE=Ethernet
    8. ONBOOT=yes
    9. BOOTPROTO=static
    10. IPADDR=${IPADDR}
    11. NETMASK=${NETMASK}
    12. GATEWAY=${GATEWAY}
    13. MTU=${MTU}
    14. """ > /etc/sysconfig/network-scripts/ifcfg-eth0
    15. ifdown eth0
    16. ifup eth0
  • 关闭虚机并清理镜像内的MAC地址等

    1. virt-sysprep -d centos-6.9
  • 压缩镜像文件

    1. #qcow2 格式的 Image 有稀疏的问题, 在磁盘级别上看, 镜像会有大量连续的相同空洞, 通过virt-sparsify 我们可以消除这些空洞, 从而缩小磁盘大小, 便于我们传输磁盘镜像
    2. virt-sparsify --compress centos-6.9.qcow2 CentOS-6.9.qcow2
  • 上传镜像

    1. virsh undefine centos-6.9
    2. openstack image create --container-format bare --disk-format qcow2 --shared --property hw_qemu_guest_agent=yes --file CentOS-6.9.qcow2 CentOS-6.9

    参考文档

  • 阿里云CentOS Mirrors

  • 官方OpenStack Virtual Machine Image Guide
  • 如何构建OpenStack镜像
  • Qemu Guest Agent Integration