顯示具有 ESXi 標籤的文章。 顯示所有文章
顯示具有 ESXi 標籤的文章。 顯示所有文章

2010/05/03

vmci error on VMware Tools install on Ubuntu 10.04 (Linux 2.6.32) / ESXi 4

Reference: VMware Communities: Can't install latest VMware Server 2.0.2 on 2.6.32.8

Problem


升級 Ubuntu 10.04 LTS (內核 2.6.32) 後嘗試重新編譯 VMware Tools 卻發生如下的問題:
When OS kernel upgrade into Linux 2.6.32 (like Ubuntu 10.04 LTS), compiling VMware Tools will occur some problems like the below:

CC [M] /tmp/vmware-config1/vmci-only/vmciQueuePair.o
In file included from /tmp/vmware-config1/vmci-only/vmci_queue_pair.h:36,
from /tmp/vmware-config1/vmci-only/vmciQueuePair.c:36:
/tmp/vmware-config1/vmci-only/vm_atomic.h:996:7: warning: "_MSC_VER" is not defined
/tmp/vmware-config1/vmci-only/vm_atomic.h:1081:7: warning: "_MSC_VER" is not defined
In file included from /tmp/vmware-config1/vmci-only/vmci_queue_pair.h:36,
from /tmp/vmware-config1/vmci-only/vmciQueuePair.c:36:
/tmp/vmware-config1/vmci-only/vm_atomic.h:996:7: warning: "_MSC_VER" is not defined
/tmp/vmware-config1/vmci-only/vm_atomic.h:1081:7: warning: "_MSC_VER" is not defined
......

vmci 模組無法編譯成功,也無法載入至系統,更新失敗。
And vmci module will not be load into system.

Solution


1. cd /usr/lib/vmware-tools/modules/source
2. tar xvf vmci.tar (Extract it)
3. mv vmci.tar vmci.tar.bak (Backup)
4. cd vmci-only
5. vi pgtbl.h (Patch pgtbl.h)
--- vmci-only.old/include/pgtbl.h    2009-10-21 03:43:27.000000000 +0200
+++ vmci-only/include/pgtbl.h    2010-02-12 19:00:50.277528449 +0100
@@ -24,6 +24,7 @@
 #include "compat_pgtable.h"
 #include "compat_spinlock.h"
 #include "compat_page.h"
+#include "compat_sched.h"
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 11)
 # define compat_active_mm  mm

把 #include "compat_sched.h" 加在 #include "compat_page.h" 後面一行。存檔離開。
Add "#include "compat_sched.h"" after "#include "compat_page.h"" and save. Quit.

6. vi Makefile (Patch Makefile)
--- vmci-only.old/Makefile    2009-10-21 03:43:27.000000000 +0200
+++ vmci-only/Makefile    2010-02-12 17:59:21.470529639 +0100
@@ -113,7 +113,7 @@
 
 vm_check_build = $(shell if $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) \
     $(CPPFLAGS) $(CFLAGS) $(CFLAGS_KERNEL) \
-    $(EXTRA_CFLAGS) -Iinclude2/asm/mach-default \
+    $(EXTRA_CFLAGS) -I$(HEADER_DIR) -Iinclude2/asm/mach-default \
     -DKBUILD_BASENAME=\"$(DRIVER)\" \
     -Werror -S -o /dev/null -xc $(1) \
     > /dev/null 2>&1; then echo "$(2)"; else echo "$(3)"; fi)

找到這行
Replace this line:
$(EXTRA_CFLAGS) -Iinclude2/asm/mach-default \
取代成
With:
$(EXTRA_CFLAGS) -I$(HEADER_DIR) -Iinclude2/asm/mach-default \
一樣存檔退出。
Then save and quit.

7. cd .. (Quit this folder)
8. tar cvf vmci.tar vmci-only/ (Repack the source)
9. rm vmci-only -r (Delete the entire folder)
10. /usr/bin/vmware-config-tools.pl (Re-run config tool to recompile modules)

重新執行之後應該就可以順利編譯成功並載入至系統,檢查看看是否載入:
Alter all, check if these modules are loaded perfectly:
$ lsmod|grep "^v"
vsock                  38646  0
vmmemctl                8768  0
vmxnet                 15992  0
vga16fb                12757  1
vgastate                9857  1 vga16fb
vmci                   29828  1 vsock    <-- Here, good
vmw_pvscsi             15744  0
vmxnet3                30709  0

2010/03/26

Sometimes can't access Guest OS from outside in ESXi

很奇怪的問題,在專題期間如果發生了我們肯定氣死,不過現在換學弟妹痛苦了就是。

環境


描述情況,簡單說明一下 ESXi 伺服器的狀況:

ESXi Server [192.168.0.2]
├ Ubuntu Server [192.168.0.3]
└ Windows XP Pro [192.168.0.4]

ESXi 伺服器運作兩台虛擬機器,且兩台虛擬機器都直接設定靜態IP位置 (Static IP),原本是 140 開頭的為了保護我就先以 192 代替。

原本在只有 ESXi 和 Ubuntu 的時候相安無事,一切都很順。最近新灌了一個 XP,要給學弟妹用,架設完成給定 MAC Address 和對應的 IP Address,從外面連接也能瀏覽架設的網頁伺服器。

問題


但運作幾天後,從外面分別連 Ubuntu Server 和 Windows XP Pro 都出現逾時錯誤 (Connection Timeout),更扯的是 ESXi 甚至連不上管理了,感覺好像整個網路被鎖了一樣。但可能等個一段時間,又突然正常。正常的機器也不一定,可能是 Windows、Ubuntu、ESXi 其中一台,也可能一次多台。

後來有機會能夠透過同網域的電腦來連線 (即 192.168.0.1/24 網域) 發現這些伺服器都能正常連線!可是從外面連不進去,將 ESXi 更新到最新版本仍舊有此問題,因為以往都能正常連線排除網路線路問題,開始懷疑可能是網卡驅動的問題。

進一步發現,出問題的 Guest OS 一開始會無法對外瀏覽,查詢 DNS 階段就發生錯誤,但是只要進行網路操作 (Windows 是選修復網路;Ubuntu 是 ping 外面的機器),奇妙的是連線又恢復正常了。

PING XXX.XXX.XXX.XXX (---------) 56(84) bytes of data.
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=1, ttl=224, time=600.59ms
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=2, ttl=224, time=5.59ms
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=3, ttl=224, time=4.82ms
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=4, ttl=224, time=5.35ms

會有這種第一次查詢爆慢,後面查詢開始正常的狀況。

類似案例


說真的不知道要用什麼關鍵字來找這種問題,但是還是被我搜到類似的東西:

- Minix 上的 AMD Lance 网卡驱动问题
使用静态 IP 地址以后,外部网络无法 ping 通 Minix,必须 Minix 先 ping 外面,然后外面才能 ping 通它
簡直是一模一樣的狀況!不同的是OS不一樣,所以解決方案就沒有效了。不過可推測問題可能就是OS載入的網路驅動出問題。

- [other] In ESXi can't access guest OS (Ubuntu 8.10) from outside
Ubuntu 官方論壇,描述跟我的情況是最相近的了。可惜沒多少人注意並回答這個問題,回應提到可能跟 ESXi 的 vSwitch 或 VLAN 設定有關?但我都沒有更動過,完全是預設值。至少虛擬機器只有一台的時候,非常順。

結論


總之,目前無解。茲紀錄如下希望能有其他有相同問題的人、或是有能力解決的人解惑了。

土砲解法


問題不能就這樣放著,所以我想出奇招。

既然機器ping外部的時候,網路會暫時回復一陣子,那我就定時ping外面的機器,讓線路保持動作。這樣就可以確保連線正常了。聽起來很蠢,但是實際使用確實有效。需要搭配 cron 作定期工作。

/etc/crontab 加一行
*/2 * * * * root python /usr/bin/randomping.py >> /var/log/ping.log

其中 >> 後面的意思是附加輸出 STDOUT 到檔案,觀察用,與ping無關。關鍵程式 randomping.py:
import random, os

pingHosts = ["168.95.1.1", "168.95.192.1", "139.175.150.20", "139.175.55.244", "8.8.8.8", "8.8.4.4"]

Host = random.sample(pingHosts, 1)[0]
os.system("date")
os.system("ping " + Host + " -c 2")
因為怕定期ping某單一機器會被鎖之類的,所以設定了多組名單來ping。而這些Server都是公開的DNS,應該沒有問題。

存到 /usr/bin/randomping.py 後,就讓它自動運作吧。真是爛方法,但是確實有效,唉。

2010/03/14

Install/Upgrade VMware Tools on ESXi Guest OS

這麼重要的流程竟然沒做紀錄,作一下免得日後忘記。

ESXi 裡的 Guest OS 最好裝一下 VMware Tools 以取得更佳的效能,和 VMware 自家其他虛擬機器程式一樣。安裝方式首先要從 ESXi 管理介面設定 Install/Upgrade VMware Tools。



按下選項後,Guest OS 的光碟機就好像放了一片驅動程式光碟一般,*nix 系的安裝方式比較麻煩,需要手動操作:

0. 首先先切換到 root 帳號取得必要權限
sudo -s

1. 安裝必要編譯套件及檔頭檔
apt-get update
apt-get install build-essential
apt-get install linux-headers-`uname -r`

第二行是安裝所需的編譯套件 (gcc, make 等),第二行是安裝 VMware Tools 需要的 Linux 檔頭檔。

2. 建立暫存目錄,掛載 CD-ROM
cd /tmp

mkdir /tmp/vm
mount /dev/cdrom /tmp/vm

3. 取出 VMware Tools 並解壓編譯
cp /tmp/vm/VMwareTools* /tmp
umount /tmp/vm

tar xzf VMwareTools*
/tmp/vmware-tools-distrib/vmware-install.pl

過程中會看到許多訊息跑出來,大概就是要問你安裝的位置和是否手動編譯之類的,一路按下 Enter 採用預設值即可,到最後會編譯各個組件,然後設定完成。

出現如下的成功訊息就表示整個安裝/升級的程序完成了!


檢查一下 Guest OS 的面板顯示狀態。


記得只要更新了 Linux Kernel 版本 (uname -r 可得知版本),就必須重作一次升級的動作,因為 VMware Tools 是針對 Kernel 作更動以達成最佳化,舊有的版本在新版的 Kernel 是沒有用的。另外升級的話 apt-get install build-essential 可以不必再作,因為要安裝時就已經有這個套件了吧。但是 linux-headers 記得要裝!上面的指令會自動抓取與 Kernel 相同版本的 Header 檔。

2009/07/13

部署 VMware ESXi Server 4 on IBM System x3550

最後我選了 ESXi 作為虛擬化的方案。

第一:OpenVZ 基於一個 Linux,這個 OS 必須去維護它,我維護其他 OS 都嫌麻煩了;ESXi 是特化的 Linux 核心,幾乎不需維護 (定期注意系統更新即可)。

第二:OpenVZ 只能支援 Linux OS,因為它是 OS-Based 虛擬化的緣故;ESXi 使用 VMware 長久以來全虛擬化的結晶實作了一個半虛擬化的 Hypervisor 平台,可以運作多樣的 OS,當然也包含 Windows。

第三:這有點偏見,ESXi 安裝很簡單,OpenVZ 卻還要慢慢設定。

說了這麼多,最後我終於啟動了 System x3550,有如渦輪引擎的六具 6000 轉抽風扇瞬間轉起,那吵度真不是蓋的。卻發現它沒有 PS/2 插孔而只有 USB,因為手中沒有 USB 鍵盤所以只好又跑一趟電子街買一個 KIMYO NT$195 的 USB 陽春鍵盤。插上去後仔細看螢幕說明,按下 F1 按鍵進入 BIOS 設定,可以看到裝著兩顆 Intel Xeon E5405 2.0GHz、2GB 的記憶體及兩顆 SAS 167GB 硬碟。接著依指示按下 Ctrl + A 進入 RAID 管理。

我想 RAID 0 應該沒有勇者要試吧,這是伺服器耶。於是就選了 RAID 1 鏡像備份模式。建立完之後跳出設定,放入預先燒好的 ESXi 安裝光碟,開始安裝。

安裝過程沒什麼好說的,就是看指示按下對應按鈕,可能是 F8、F11 或 Enter 一直變換,大概是不想讓你一路跳過去吧。安裝過程根本沒難度,只是 ESXi 4 的安裝條件相當嚴苛,通常不能安裝都是卡在 RAID 卡或是網路卡不支援,這台 IBM System x3550 算是通過考驗了。安裝完成重開機,就進入 ESXi 介面。

介面什麼都沒有。總之先按下 F2 設定 root 密碼跟伺服器 IP 吧,成功輸入 IP、Subnet mask、Gateway和 DNS 後,就完成了網路設定。最後打開被封印的 SSH 遠端管理功能,這是一定要的 (參考文章)。過程中比較難的大概是 vi 指令,因為許久未碰都忘光了XD 按 a 進編輯模式,刪除註解的 # 字元,按下 Esc 跳出編輯模式,輸入 :wq (冒號: Shift + ;) 寫入並離開就大功告成,最後重開一下。

要管理必須透過 vSphere Client 連線 (可以 HTTP 連到伺服器 IP 有下載連結),而且只有 Windows 版,怪。安裝完成後發現 Windows 7 RC 版不能登入,顯示 clients.xml 錯誤啥的。官方也有網友回報討論串,官方解答竟然是叫你用 7 的 XP Mode 執行,這真是我聽過最棒的回答法了,去你的。還好下面有強者提出解套法:去其他安裝 .NET 3.5 SP 的電腦上找 System.dll 複製,修改 VpxClient.exe.config 文件,使用 BAT 下環境變數執行,真的成功,真是太棒了。

最後就利用 GUI 登入,上傳作業系統 ISO 檔供虛擬系統安裝時使用,設定虛擬系統跟 VMware 其他產品非常像,這是最易上手的地方。最後啟動虛擬系統,按照安裝 OS 的步驟來安裝 (放入光碟、更改 BIOS 開機順序),就大功告成。記得最後裝個 VMware Tools 來使系統更快更穩。

灌了一個 CentOS 5.3 版,跑看看再說。在 CentOS 的 eth0 設定使用手動 IP 設定,也可以取得固定 IP,有如另一台伺服器在線運作一般,真好玩。也可以 SSH 連進去管理。