製作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"之前

  1.  if [ ! -d /root/.ssh ]; then   
  2.   mkdir -p /root/.ssh   
  3.   chmod 700 /root/.ssh   
  4. fi   
  5.     
  6.    
  7. # Fetch public key using HTTP   
  8. ATTEMPTS=30   
  9. FAILED=0   
  10. while [ ! -f /root/.ssh/authorized_keys ]; do   
  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.    
  24.         curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null   
  25.         if [ $? -eq 0 ]; then   
  26.             TEMP_HOST=`cat /tmp/metadata-hostname`   
  27.             sed -i "s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g" /etc/sysconfig/network   
  28.             /bin/hostname $TEMP_HOST   
  29.             echo "Successfully retrieved hostname from instance metadata"   
  30.             echo "*****************"   
  31.             echo "HOSTNAME CONFIG"   
  32.             echo "*****************"   
  33.             cat /etc/sysconfig/network   
  34.             echo "*****************"   
  35.    
  36.         else   
  37.             echo "Failed to retrieve hostname from instance metadata. This is a soft error so we'll continue"   
  38.         fi   
  39.         rm -f /tmp/metadata-hostname   
  40.     else   
  41.         FAILED=$(($FAILED + 1))   
  42.         if [ $FAILED -ge $ATTEMPTS ]; then   
  43.             echo "Failed to retrieve public key from instance metadata after $FAILED attempts, quitting"   
  44.             break   
  45.         fi   
  46.         echo "Could not retrieve public key from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."   
  47.         sleep 5   
  48.   fi   
  49. 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來獲取更多Openstack的內容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章