第一步,安装DVDiso镜像虚拟机
- mkdir -p/data0/images_base/centos-6.8.x86_64/
- virt-install --name=centos6.8 --arch=x86_64 --vcpus=2 --ram=2048 \
--disk path=/data0/images_base/centos-6.8.x86_64/centos-6.8.x86_64.img,size=12,device=disk,bus=virtio,format=raw \
--location=/data0/iso/CentOS-6.8-x86_64-bin-DVD1.iso --vnclisten=0.0.0.0 \
--vncport=5931 --vnc --os-type=linux \
--network bridge=br1,model=virtio --network bridge=br1,model=virtio
- 使用vncviewer 连接已经安装的虚拟机,逐步完成安装,主要需要修改的点有:分区只分根分区,时区,root密码设置
第二步,将虚拟机镜像分区提取出来
在第一步安装后生成的文件为基础文件,还不能直接为kvm virt使用(为什么?1. 生成的分区无法直接挂载,2.无法动态的更改相关配置,如硬盘、cpu、内存等), 所以要将第一步生成的文件进一步进行操作,将分区中内核镜像取出来,并将分区转换为可直接挂载的分区
- losetup /dev/loop0 centos-6.8.x86_64.img,转换完成后还看不到,需要:
- kpartx -a /dev/loop0 此时可以看到/dev/mapper/loop0p1分区
- mount /dev/mapper/loop0p1 /mnt/
- 创建未来给puppet使用的镜像文件夹,将第一步安装备份。 mv =/data0/images_base/centos-6.8.x86_64 =/data0/images_base/centos-6.8.x86_64_bak; mkdir /data0/images_base/centos6.8.x86_64
- cp /mnt/boot/vmlinuz-version.el7.x86_64 /data0/images_base/centos6.8.x86_64/kernel
- cp /mnt/boot/initramfs-3.10.0-514.el7.x86_64.img /data0/images_base/centos6.8.x86_64/ramdisk
- dd if=/dev/mapper/loop0p1 of=/data0/images_base/centos6.8.x86_64/centos-6.8.x86_64.img
第三步,测试虚拟机镜像
- 在 /data0/instance/instance-xxx, xxx为ip的第四位(使用前要确保这个ip与已经有的ip不冲突)本例使用188,mkdir -p /data0/instance/instance-188 ;cd /data0/instace/instace-188/
- 拷贝一个现有的instance-xxx.xml文件,将文件名和文件内存涉及到name,ip和内核版本都修改为正确的。cp /data0/instance/instace-xxx.xml /data0/instance/instance-188.xml
- 将第二创建的镜像cp过来。
cp /data0/images_base/centos6.8.x86_64/ramdisk /data0/instance/instance-188/
cp /data0/images_base/centos6.8.x86_64/kernel /data0/instance/instance-188/ cp /data0/images_base/centos6.8.x86_64/centos-6.8.x86_64.img /data0/instance/instance-188/ - 在puppet node.tbl为你添加的镜像添加sae角色并提交
- touch console.log, qemu-img create disk.local +1G && mkfs.ext4 -q -F disk.local, 运行virsh create instance-188.xml, 再运行psync
- 通过vnc登录你当前的镜像,并使用初始化新增机器的方法对这个镜像进行初始化。可能涉及路由、yum库和EPEL gpg认证问题,可以从大版本相同的的服务器上拷过来
第四步,对镜像进行清理
- 删除 /etc/udev/rules.d/中包含网卡的文件,rm -f 70-xxxx
- 打开/etc/ssh/sshd_config,将 Listen的ip必为 0.0.0.0
- 打开/etc/sysconfig/iptables 将规则都删除
- 在/etc/sysconfig/networks中,添加如下内容:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=188 - 确保/etc/sysconfig/network-scripts/ifcfg-eth0内容如下:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static - ifcfg-eth1的内容如下:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.188
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
红色部分不用管,只要是你启动镜像用的ip就可以,真正安装时puppet会覆盖 - 对于centos7要禁掉NetworkManager; systemctl disable NetworkManager.service,并启动network systemctl enable network.service && systemctl restart network.service
- 将镜像关掉,并将镜像文件拷到/data0/image_base中
- mount -o loop /data0/image_base/centos-6.8.x86_64.img /mnt/, 进入/mnt/再次确认防火墙,ssh,网卡配置是否正确