CentOS6.3下爲OpenStack製作CentOS鏡像

參考文檔:
http://docs.openstack.org/essex/openstack-compute/admin/content/manually-creating-qcow2-images.html
https://github.com/rackerjoe/oz-image-build/blob/master/templates/centos60_x86_64.tdl

目前網上有許多爲OpenStack製作鏡像的方法,但大部分是通過命令行來創建的,其實在CentOS下有很方便的窗口程序Virual Machine Manager來爲OpenStack創建鏡像。接下來我以創建一個CentOS6.3鏡像爲例簡單說明一下這個創建過程。

啓動管理程序

管理程序需要以root用戶登錄桌面才能啓動,因此首先我們需要以root用戶直接或者通過vnc方式登錄以圖形界面方式登錄到服務器,然後在終端輸入virt-manager或者依次點擊應用》系統工具》Virtual Machine Manager啓動管理程序。當然前提是你已經安裝好了管理程序,如果沒有安裝請通過以下命令安裝

yum install virt-manager virt-viewer

創建虛擬機

點擊創建虛擬機按鈕打開創建虛擬機對話框,如下圖所示:

1.給要創建的虛擬機取一個名字如centos63,選擇安裝方式;
2.選擇安裝文件及操作系統類型、版本;
3.配置內存、CPU;
4.創建磁盤,這裏我選擇了第二項,單擊Browse,然後選擇New Volume創建一個7G大小的qcow2格式的磁盤,最後選擇創建的磁盤文件。如下所示:

繼續前進,直到完成彈出虛擬機界面,然後完成系統安裝。PS:在對磁盤進行分區時,我只創建了一個root分區,沒有創建boot及swap分區。

後期處理

安裝完系統並重啓後,安裝所需要的軟件,最後還需要對系統進行一些後期處理。

修改grub參數

如果不修改grub,鏡像上傳後啓動實例後,實例無法啓動,報“kernel panic - not syncing: Attempted to kill init!”錯誤,方法一:從網上查到修改/boot/grub/grub.conf文件,在kernel項參數quiet的後面添加一個參數enforcing=0即可網址。方法二:參考文檔https://github.com/rackerjoe/oz-image-build/blob/master/templates/centos60_x86_64.tdl運行以下命令:

sed -i 's/ rhgb//g' /boot/grub/grub.conf
sed -i 's/ quiet//g' /boot/grub/grub.conf

修改網卡配置文件

實例的MAC地址是在實例創建時由OpenStack分配的,因此我們要刪除/etc/sysconfig/network-scripts/ifcfg-eth0中的MAC信息。另外OpenStack通過dhcp方式給CentOS注入ip地址,請不要給鏡像配置靜態ip,可通過以下命令完成這一步操作

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE="eth0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
EOF

修改rc.local文件

要使實例能接受OpenStack注入的密鑰文件等信息,還要修改rc.local文件,命令如下:

cat >> /etc/rc.d/rc.local <<EOF
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
EOF

上傳鏡像

到這裏鏡像就做好了,關閉虛擬機,通過glance命令上傳就是了

glance add name="centos63" is_public=true container_format=ovf disk_format=qcow2 < /var/lib/libvirt/images/centos63.img

北方工業大學 | 雲計算研究中心 | 姜永

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章