一.CentOS7镜像制作
1.1创建CentOS7虚拟机
1.1.1创建虚拟磁盘
1 #注:尽量将虚拟机创建在控制节点,以便于将镜像上传至glance 2 [root@linux-node1 ~]# qemu-img create -f qcow2 /tmp/centos7.qcow2 10G
1.1.2创建虚拟机
#非桥接网卡 [root@linux-node1 ~]# virt-install \ --virt-type kvm \ --name centos \ --ram 1024 \ --disk /tmp/centos2.qcow2,format=qcow2 \ --network network=default \ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --os-type=linux --os-variant=rhel7 \ --location=/tmp/CentOS-7-x86_64-DVD-1511.iso #桥接网卡 [root@linux-node1 ~]# virt-install \ --virt-type kvm \ --name centos \ --ram 1024 \ --disk /tmp/centos.qcow2,format=qcow2 \ --network bridge=brqce3d2bda-d5 \ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --os-type=linux --os-variant=rhel7 \ --location=/tmp/CentOS-7.2-x86_64-DVD-1511.iso
1.1.3VNC连接虚拟机
#选择英文语言,下一步
#选择时区:亚洲上海
#选择最小化安装包组
#自定义磁盘分区
#不使用LVM,单机 "+" 添加分区
#只分配一个 “/” 分区,不创建 swap分区,本身就是虚拟机,更影响性能。
#创建完,单机左上角“done”
#开始安装系统
#给root用户创建密码
1.2连接虚拟机并优化
1.2.1安装常用基础软件包
1 [root@example ~]# yum install -y snmap net-tools tree screen wget git vim salt-minion zabbix-agent lsof tcpdump
1.2.2修改网卡信息
1 #删除UUI、mac等信息,只保留以下内容 2 [root@example ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 3 TYPE=Ethernet 4 BOOTPROTO=dhcp 5 NAME=eth0 6 DEVICE=eth0 7 ONBOOT=yes
1.2.3修改yum源
1 [root@example ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
1.2.4关闭Networkemanager和防火墙
1 [root@example ~]# systemctl disable firewalld 2 [root@example ~]# systemctl stop firewalld 3 [root@example ~]# systemctl stop NetworkManager
1.2.5关闭selinux
1 #修改selinux配置文件 2 [root@example ~]# vim /etc/sysconfig/selinux 3 SELINUX=enforcing 改为 SELINUX=disabled 4 #重启后,检查结果如下 5 [root@example ~]# getsebool 6 getsebool: SELinux is disabled
1.3编写metadata脚本
1 [root@example ~]# vim /tmp/init.sh 2 #!/bin/bash 3 4 set_key(){ 5 if [ ! -d /root/.ssh ]; then 6 mkdir -p /root/.ssh 7 chmod 700 /root/.ssh 8 fi 9 for ((i=1;i<=5;i++));do 10 if [ ! -f /root/.ssh/authorized_keys ];then 11 curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null 12 if [ $? -eq 0 ];then 13 cat /tmp/metadata-key >> /root/.ssh/authorized_keys 14 chmod 0600 /root/.ssh/authorized_keys 15 restorecon /root/.ssh/authorized_keys 16 rm -f /tmp/metadata-key 17 echo "Successfully retrieved public key from instance metadata" 18 echo "*****************" 19 echo "AUTHORIZED KEYS" 20 echo "*****************" 21 cat /root/.ssh/authorized_keys 22 echo "*****************" 23 fi 24 fi 25 done 26 } 27 28 set_hostname(){ 29 PRE_HOSTNAME=$(curl -s http://169.254.169.254/latest/meta-data/hostname) 30 DOMAIN_NAME=$(echo $PRE_HOSTNAME | awk -F '.' '{print $1}') 31 hostnamectl set-hostname `echo ${DOMAIN_NAME}.example.com` 32 } 33 34 set_static_ip(){ 35 PRE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) 36 NET_FILE="/etc/sysconfig/network-scripts/ifcfg-eth0" 37 echo "TYPE=Ethernet" > $NET_FILE 38 echo "BOOTPROTO=static" >> $NET_FILE 39 echo "NAME=eth0" >> $NET_FILE 40 echo "DEVICE=eth0" >> $NET_FILE 41 echo "ONBOOT=yes" >> $NET_FILE 42 echo "IPADDR=${PRE_IP}" >> $NET_FILE 43 echo "NETMASK=255.255.255.0" >> $NET_FILE 44 echo "GATEWAY=192.168.56.2" >> $NET_FILE 45 } 46 47 main(){ 48 set_key; 49 set_hostname; 50 set_static_ip; 51 /bin/cp /tmp/rc.local /etc/rc.d/rc.local 52 reboot 53 } 54 55 main
1.3.1修改rc.local
1 #将rc.local拷贝到tmp下 2 [root@example ~]# cp /etc/rc.d/rc.local /tmp 3 #CentOS7开机执行rc.local,需将rc.local添加执行权限 4 [root@example ~]# chmod +x /etc/rc.d/rc.local 5 #编辑rc.local 6 [root@example ~]# vim /etc/rc.d/rc.local 7 /bin/sh /tmp/init.sh
1.4关机并压缩镜像
1 #关机 2 [root@example ~]# init 0 3 #压缩镜像,清理磁盘碎片 4 [root@linux-node1 ~]# qemu-img convert -c disk -O qcow2 centos7.qcow2
1.5上传镜像至glance
注:镜像就是一开始创建虚拟机的qcow2的虚拟磁盘
1 [root@linux-node1 ~]# openstack image create "CentOS-7-x86_64" \ 2 --file /tmp/centos7.qcow2 \ 3 --disk-format qcow2 \ 4 --container-format bare \ 5 --public
至此,openstack的镜像就制作完毕,请根据自己公司优化需求来制定
【开源是一种精神,分享是一种美德】
— By GoodCook
— 笔者QQ:253097001
— 欢迎大家随时来交流
—原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。