制作Openstack上使用的CentOS系统镜像

作者: 魏延是反贼. 分类: 云平台, 系统·安全·调优

很多进行Openstack测试的人都发现,自己的openstack测试环境搭建的很成功,安全策略也添加了,但是上传镜像之后,却出现无法Ping通,无法ssh到实例等问题,实际上这很可能是由于我们没有使用一个正确的镜像导致的。那么如何创建一个自己想要的镜像呢,这里我就给大家说一下制作CentOS镜像的步骤。

一、准备工作
首先你需要有一台CentOS的机器,作为制作镜像的机器。比如自己的虚拟机。我的环境是用一台R410上面装CentOS6.3的系统来做的。

1.安装底层支持包
yum groupinstall Virtualization "Virtualization Client"
yum install libvirt

2.下载或从本地上传进去一个完整的系统镜像
(这里我下载的是从163镜像源下载的CentOS6.3,如果你需要其他版本的CentOS,请下载对应的版本)
mkdir /openstack-image
cd /openstack-image
wget http://mirrors.163.com/centos/6/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso

3.启动服务
service libvirtd restart

二、制作镜像
1.建立镜像文件
cd /openstack-image
qemu-img create -f qcow2 CentOS6.3-openstack.img 10G
chown qemu:qemu /openstack-image -R

2.通过virt-install来创建一个新的虚拟机
virt-install -n CentOSimg -r 4096 --cpu host -c /images/CentOS-6.3-x86_64-bin-DVD1.iso --disk path=/openstack-image/CentOS6.3-openstack.img,device=disk,bus=virtio,size=30,format=qcow2 --vnc --vncport=5900 --vnclisten=0.0.0.0 -v

这里要注意-n的指定我们虚拟机的名字,一会儿还要用到,这个命令运行之后,你就可以用VNC软件来连入了,ip就是你服务器的ip,端口就是5900,推荐使用vncviewer这个绿色的小软件来打开:
image

3.安装操作系统
操作系统的安装和正常的安装几乎一样,你需要什么样的包,就安装什么样的包,有两点需要注意的:

注意一:分区,分区的时候只给”/” 根目录分一个区即可,其他都不要。
注意二:网络设置方面,确保你的网卡eth0是DHCP状态的,而且请务必勾上”auto connect”的对勾

之后系统就按照你正常装的样子安装完毕了,安装完毕之后,我们刚才使用的vnc-install命令会自动退出。

4.设置系统
此时我们还需要为openstack的镜像而打磨一下我们刚装好的系统,你可以使用virsh list来看当前已启动的虚拟机。
virsh start CentOSimg
virsh list

查看确定是我们刚才制作的虚拟机”CentOSimg”重新开启了
之后再次用VNC连入到这个虚拟机中,端口不变,我们需要做下面的一些操作

4.1.删除网络配置
删除ifcfg-eth0的HWADDR一行,最后你的ifcfg-eth0的配置文件应该是这样的:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"

删除已生成的网络设备规则
rm -rf /etc/udev/rules.d/70-persistent-net.rules

4.2.关闭防火墙和selinux
sed -i s/^SELINUX=.*/SELINUX=disabled/g /etc/selinux/config
service iptables stop && chkconfig iptables off
service ip6tables stop && chkconfig ip6tables off

4.3(可选)设置系统能自动获取openstack指定的hostname和ssh-key
使用vim编辑/etc/rc.local文件
然后将以下内容输入进去,放在”touch /var/lock/subsys/local”之前

if [ ! -d /root/.ssh ]; then
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
ATTEMPTS=30
FAILED=0

while [ ! -f /root/.ssh/authorized_keys ]; do
curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null
if [ $? -eq 0 ]; then
cat /tmp/metadata-key >> /root/.ssh/authorized_keys
chmod 0600 /root/.ssh/authorized_keys
restorecon /root/.ssh/authorized_keys
rm -f /tmp/metadata-key
echo “Successfully retrieved public key from instance metadata”
echo “*****************”
echo “AUTHORIZED KEYS”
echo “*****************”
cat /root/.ssh/authorized_keys
echo “*****************”

curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
if [ $? -eq 0 ]; then
TEMP_HOST=`cat /tmp/metadata-hostname`
sed -i “s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g” /etc/sysconfig/network
/bin/hostname $TEMP_HOST
echo “Successfully retrieved hostname from instance metadata”
echo “*****************”
echo “HOSTNAME CONFIG”
echo “*****************”
cat /etc/sysconfig/network
echo “*****************”

else
echo “Failed to retrieve hostname from instance metadata. This is a soft error so we’ll continue”
fi
rm -f /tmp/metadata-hostname
else
FAILED=$(($FAILED + 1))
if [ $FAILED -ge $ATTEMPTS ]; then
echo “Failed to retrieve public key from instance metadata after $FAILED attempts, quitting”
break
fi
echo “Could not retrieve public key from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds…”
sleep 5
fi
done

三、上传镜像,开启实例
如果以上的内容都做完了,那么就可以直接把这个生成的镜像关机了
init 0
之后,我们可以看看之前生成的那个qcow2格式的img,发现不超过2G应该。我们只需要将这个镜像传到Openstack的环境里,然后使用glance add添加即可
glance add name=XXXX is_public=true container_format=ovf disk_format=qcow2 < /tmp/CentOS6.3-openstack.img

再之后,用这个镜像创建一个实例~~启动起来看看吧~~你会发现直接获取的就是Openstack分配的ip ~而且直接可以ssh到哦~!

感谢关注”魏延是反贼“的小站www.weiyan.me

标签:

返回正文

(19)条评论

  • fbt045

    |

    顺便问一下楼主169.254.169.25是openstack server的IP吗?

    回复

    • 反贼

      |

      @fbt045: 这只能说明你没有被分配到正确的IP地址。169.254的ip地址是特殊的错误ip地址。

      回复

  • fbt045

    |

    楼主,我命令执行出现以下错误:
    [root@cloud ~]# virt-install -n CentOS6.5 -r 4096 –cpu host -c ./CentOS-6.5-x86_64-minimal.iso –disk path=./CentOS6.5.img,device=disk,bus=virtio,size=30,format=qcow2 –vnc –vncport=5900 –vnclisten=0.0.0.0 -v

    Starting install…
    ERROR internal error Process exited while reading console log output: char device redirected to /dev/pts/2
    qemu-kvm: -drive file=/root/CentOS6.5.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none: could not open disk image /root/CentOS6.5.img: Permission denied

    Domain installation does not appear to have been successful.
    If it was, you can restart your domain by running:
    virsh –connect qemu:///system start CentOS6.5
    otherwise, please restart your installation.
    不知道是怎么回事,用root权限都不行

    回复

    • 反贼

      |

      @fbt045: 修改 qemu.conf 配置,把下面几个地方的注释去掉,然后把 dynamic_ownership 的值改成0,禁止 libvirtd 动态修改文件的归属:
      # vi /etc/libvirt/qemu.conf

      user = “root”
      group = “root”
      dynamic_ownership = 0

      重启 libvirtd 服务

      回复

    • 摇滚贝斯

      |

      @fbt045: /root/CentOS6.5.img别放在、root

      回复

  • 匿名

    |

    按这个做了个CentOS的没什么问题。

    但做了个WINXP的镜像,其它的一切正常,用virsh -c qemu:///system start winxp启动镜像正常。

    但上传到glance,以此镜像做一个实例时,不能启动,启动时VNC窗口提示:找不到NTLDR,好像没找到磁盘呢。

    回复

  • yangsk2@163.com

    |

    hi。我按照这个方法制作的镜像可以再本机启动,glance add正常,通过dashboard 能启动并且能vnc,但是vnc过去,看到虚拟机没有网卡。。ifconfig 只有1个lo 没有eth0:;
    ifconfig eth0 提示 eth0 error:fetching interface information:Device not found
    最初创建镜像启动的时候是有网卡的 不知道为什么到nova 里面起来就没有了。
    期待…………

    回复

    • 哦呦呦呦拳

      |

      你可以看看创建出来的虚拟机里/etc/udev/rules.d/70-persistent-net.rules这个文件中的内容,看看它有没有识别到网卡,使用nova-manager network list查看你分配的网络是否正确。通过nova show XXXX(为你的虚拟机名字)来查看虚拟机被分配的IP。

      回复

  • 三六一十九

    |

    博主你好,关注你的小站一段时间了,觉得openstack的配置说明只有你讲的最清楚。给力!

    关于创建镜像,我按照你的步骤来做,在用livirt创建虚拟机的时候出错了:
    命令是(我换成Live-CD的镜像了):
    # virt-install -n CentOSimg -r 4096 –cpu host -c /root/CentOS-6.3-x86_64-LiveCD.iso –disk path=/root/openstack-image/CentOS6.3-openstack.img,device=disk,bus=virtio,size=30,format=qcow2 –vnc –vncport=5900 –vnclisten=0.0.0.0 -v
    结果会出现下面的错误:
    Starting install…
    ERROR internal error Process exited while reading console log output: char device redirected to /dev/pts/7
    qemu-kvm: -drive file=/root/openstack-image/CentOS6.3-openstack.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none: could not open disk image /root/openstack-image/CentOS6.3-openstack.img: Permission denied

    我是在root账户下操作的,之前的步骤也和你说的完全一样。
    刚开始接触这些东西,所以遇到问题不知道咋整了。。。希望得到解答
    谢谢!

    回复

    • 三六一十九

      |

      为什么格式乱成这样了。。。

      回复

    • 三六一十九

      |

      折腾了半天,上面的问题解决了,把镜像放在/var/lib/libvirt/images/下就行了。。。但是在install的时候会提示virt-viewer: Cannot open display,用vnc-viewer也无法连接,这是怎么回事?

      回复

      • 哦呦呦呦拳

        |

        你命令之所以跑不起来,是因为liveCD镜像的权限不对,你可以直接给777的权限,也可以将属主和属组改为qemu,特别注意目录的权限,它创建虚拟机是用qemu用户来做的,所以一定要确保这个用户可读。

        回复

        • 三六一十九

          |

          明白了!我发现虽然我已经把相关文件、路径的属主属组都改成qemu的,但是在执行virt-install -n CentOSimg -r 4096 –cpu host -c /images/CentOS-6.3-x86_64-bin-DVD1.iso –disk path=/openstack-image/CentOS6.3-openstack.img,device=disk,bus=virtio,size=30,format=qcow2 –vnc –vncport=5900 –vnclisten=0.0.0.0 -v命令会把CentOS6.3-openstack.img的属主属组改成root(我实在root环境下操作的),导致permission denied,郁闷。
          把所有相关文件的权限改成777就可以了。
          多谢

          回复

        • 三六一十九

          |

          我在执行完virt-install命令会报一个错:
          Starting install…
          Creating domain… | 0 B 00:01
          Cannot open display:
          Run ‘virt-viewer –help’ to see a full list of available command line options
          Domain installation still in progress. You can reconnect to
          the console to complete the installation process.

          然后我用vncviewer尝试连接,会警告我该连接未加密,继续操作,先会闪一下(感觉连上了,只不过漆黑一片),然后vncviewer就自动关闭了。

          我已经把防火墙关闭了,宿主机的系统是centos6.3,最简安装;创建的虚拟机的系统是centos6.3,live-CD镜像。因为vnc连接不上导致没法继续,现在不知道问题出在哪里了。能否帮我解答一下,谢谢。

          回复

          • 哦呦呦呦拳

            |

            它提示Cannot open display是因为你用的是ssh工具连接的,不是在终端前,所以这个提示是正常的。只要你vnc的port 5900的端口在,然后用vncviewer在网络通畅的情况下应该肯定是可以连上的。不过你用的LiveCD,LiveCD一般是用来修复系统的,对于直接进行安装,我不是很清楚是否可行。建议你使用bin-CD试试~起码能保证用这个DVD的iso可以成功的安装出一台系统。

            回复

          • 三六一十九

            |

            非常感谢,我试试

            回复

          • 三六一十九

            |

            终于做完了,用liveCD制作镜像成功。
            vncviewer仍然连不上,不过用dashboard可以连上

            回复

          • 哦呦呦呦拳

            |

            恭喜啦~有什么问题的话我们再交流~

            回复

    • 三六一十九

      |

      我在执行完virt-install命令会报一个错:
      Starting install…
      Creating domain… | 0 B 00:01
      Cannot open display:
      Run \’virt-viewer –help\’ to see a full list of available command line options
      Domain installation still in progress. You can reconnect to
      the console to complete the installation process.

      然后我用vncviewer尝试连接,会警告我该连接未加密,继续操作,先会闪一下(感觉连上了,只不过漆黑一片),然后vncviewer就自动关闭了。

      我已经把防火墙关闭了,宿主机的系统是centos6.3,最简安装;创建的虚拟机的系统是centos6.3,live-CD镜像。因为vnc连接不上导致没法继续,现在不知道问题出在哪里了。能否帮我解答一下,谢谢。

      回复

您的留言是我最大的支持!