如果你是想要使用 Windows 原生的驅動程式, 如: Intel IMB IPMI driver (imbdrv.sys) / Microsoft IPMI driver (ipmidrv.sys), 那就要使用 ipmiutil.
0. 編譯 ipmitool 時的失敗記錄:
- 0.1 ipmi_sunoem.c:1168:4: error: unknown type name 'fd_set'
- 我的 Windows 7 x64 系統上不會出現這個錯誤, Windows 10 x64 上有看到
- Bug ID 440: 1.8.17 已解決這個問題
- 0.2 Avast 免費家用版: 會造成錯誤
- 0.3 沒有 include file: usb.c:43:21: fatal error: scsi/sg.h: No such file or directory
- Bug ID 410: 說明請看 7.0, v1.8.17 已解決這個問題
1. 下載
https://www.cygwin.com/setup-x86_64.exe
2.
改用參數選擇要安裝的套件
gcc-coremakeopenssl-devellibssl-devel (Sheng 2019/10/18 補充: libssl-devel 取代 openssl-devel)diffFisher 2017/08/17 補充: Windows 10 / Cygwin 64, 尚須autoconfautomakem4libtoolPuwen 2018/03/02 補充: 如果需要支援 ipmishelllibncurses-devellibreadline-devel
$ setup-x86_64 --quiet-mode --disable-buggy-antivirus --upgrade-also --wait --arch="x86" --root="c:\cygwin" --only-site --site="ftp://ftp.cse.yzu.edu.tw/pub/cygwin/" --packages="bash,p7zip,libssl-devel,git,gcc-core,make,diff,autoconf,automake,m4,libtool,libncurses-devel,libreadline-devel" --verbose --no-admin
$ setup-x86_64 --quiet-mode --disable-buggy-antivirus --upgrade-also --wait --arch="x86" --root="d:\cygwin" --only-site --site="http://ftp.ntu.edu.tw/pub/cygwin/" --packages="bash,p7zip,libssl-devel,git,gcc-core,make,diff,autoconf,automake,m4,libtool,libncurses-devel,libreadline-devel" --verbose --wait
4. 開啟 [Cygwin Terminal] 後,
$ git clone https://github.com/ipmitool/ipmitool.git
$ cd ipmitool
5. 設定要支援的 interface , 需要 disable usb 因為 Cygwin 中沒有 kernel header files.
$ ./bootstrap
$ ./configure IANADIR="./" IANAUSERDIR="./" DEFAULT_INTF="lanplus" --enable-intf-lan --enable-intf-lanplus --disable-intf-bmc --disable-intf-free --disable-intf-open --disable-intf-imb --disable-intf-usb --enable-intf-serial --enable-ipmishell
$ LANG=C make
6. 把下列目錄裡的檔案, 單獨複製到一個目錄即可在不同的 Windows 中使用
$ mkdir -p $HOME/ipmitool-1.8.18-bin
$ cp src/.libs/ipmitool.exe $HOME/ipmitool-1.8.18-bin
$ cd $HOME/ipmitool-1.8.18-bin
$ cp /bin/cygreadline7.dll .
$ cp /bin/cygwin1.dll .
$ cp /bin/cygcrypto-1.1.dll .
$ cp /bin/cyggcc_s-1.dll .
$ cp /bin/cygncursesw-10.dll .
$ cp /bin/cygz.dll .
$ curl https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers -o enterprise-numbers
$ 7za a "/cygdrive/c/Users/$(echo $USERPROFILE|awk -F\\ '{print $NF}')/Desktop/ipmitool-1.8.18-bin_$(date +%F).7z" "$PWD/*"
PS. 根據參考網頁的說明, [ipmitool-1.8.XX\src\ipmitool.exe] is only a wrapper script
7. 附註
- 7.1 沒有 [--disable-intf-usb] 會出現的錯誤訊息
without --disable-intf-usb |
Interfaces lan : yes lanplus : yes open : no free : no imb : no bmc : no usb : yes lipmi : no serial : yes dummy : no |
usb.c:43:21: fatal error: scsi/sg.h: No such file or directory |
- 7.2 Windows 7 64-bit compile 後的檔案在 Windows Server 2008 R2 Standard 64-bit with SP1 上的執行截圖
8. Binaries for Windows
- ipmitool-1.8.18 (#c3939d), Google Drive
參考網址:
How to compile ipmitool for Windows 32-bit (404)
ipmitool for windows
https://stackoverflow.com/questions/12907005/ipmitool-for-windows
更新記錄:
2020/05/09 19:01, 最佳化 Cygwin 安裝流程, 使用 git 下載 ipmitool 的 source code.
2019/10/19 08:22, 加入 Sheng 與 Andy 的回饋.
2018/03/02 12:56, 更新成 ipmitool-1.8.18, 加入 --enable-ipmishell
2016/05/19 09:35, 加入 LANG=C
2016/05/19 09:26, 加入 ./bootstrap
2016/05/09 13:25, USB Issue been fixed by 1.8.17
2016/05/08 22:16, ipmitool-1.8.17 釋出, 加入 [Binaries for Windows]
2016/04/26 16:23, 加入 7.0/7.1
2016/04/24 23:16, 加入 Code Block CSS
2016/04/22 22:06, 更新 unknown type name 'fd_set'
你好我安照你的方式作完可以windows7 64bit使用,但無法在windowsserver2008 64bit下使用,不知是什麼問題
回覆刪除Hi Sam,
刪除我手邊沒有 Windows Server 2008 64-bit 的環境,
你可以附上錯誤訊息的截圖或 log 嗎?
Hi Puwen
回覆刪除我後來直接在windows2008 64BIt下重新compile,目前已可以使用了
只是想了解一下,是否有方式可以一次compile for 所有的windows版本皆可使用,謝謝!!
Hi Sam,
刪除理論上你把 [Section 6] 的東西放在一塊,
丟到其它的 Windows 都可以用.
我早上裝了一個 Windows 2008 R2 Standard 64-bit w/ SP1 的 VM,
把在 Windows 7 上產出的檔案放到 VM 上,
是可以執行的.
請看 [Section 7.1]
windows 10/cygwin64编译
回覆刪除还需要
autoconf
automake
m4
libtool
Hi Fisher,
刪除感謝你的資訊, 已更新到文章中.
十分感谢博主的资料,讲的非常详细!
回覆刪除請問這個做出來的ipmitool.exe 可以執行 -I ms 或是對Local的BMC做下指令嗎??
回覆刪除不行, 用要 Microsoft IPMI Driver 可以試看看 ipmiutil - http://ipmiutil.sourceforge.net/
刪除同事提供的舊版本1.8.10可以做到。
刪除新版本不行了嗎?謝謝
我在 ipmitool source code 裡找不到 ms 這個 interface. 所以合理推測是提供你同事 v1.8.10 的人 (公司) 自行加入的. 也許你可以問一下你同事, 看提供者有沒有給出新的版本.
刪除您好,請問這樣build出來的ipmitool是不是只能支援Out-Of-Band的command呢?
回覆刪除如果我用In-Band的方式下ipmi command,ex: ipmitool.exe sel
會顯示"no hostname specified".
Hi,
刪除如果要在 Windows 下使用 system interface,
可以參考看看 ipmiutil http://ipmiutil.sourceforge.net/
您好,我依照您的方法後,發現lanplus無法啟用,經過爬文,lanplus要 "libssl-devel"這隻套件,但"openssl-devel"與"libssl-devel"套件衝突,所以要移除"openssl-devel"。
回覆刪除補充:
刪除OS:Windows 10
ipmitool Version: 1.8.18
Hi Sheng,
刪除感謝提醒, 我會更新文章內容 :)
但 openssl-devel 與 libssl-devel 二個都是 OpenSSL 的 development library. 只是在 Cygwin 中, 用 libssl-devel 取代 openssl-devel.
且 https://cygwin.com/packages/summary/openssl-devel.html 有提示, The openssl-devel package is obsolete. Selecting this package for installation will cause the libssl-devel package, which replaces this one, to be installed instead.
所以你的無法啟用 lanplus 會不會是其它的原因造成的?
Hi Puwen,
刪除剛開始我安裝了openssl-devel:1.1.1d-1,進行configure時,lanplus總是無法被Enable.
The relevant log snippet is:
checking for EVP_aes_128_cbc in -lcrypto... no
checking for MD5_Init in -lcrypto... no
checking for MD2_Init in -lcrypto... no
** The lanplus interface requires an SSL library with EVP_aes_128_cbc defined.
查詢一下Bug list後,在/usr/bin/底下需要有"libcrypto.a"及"libcrypto.dll.a"這兩個檔案,而在我未安裝libssl-devel前,目錄底下是沒有這兩個檔案的.
The Bug list:
https://sourceforge.net/p/ipmitool/bugs/458/
https://sourceforge.net/p/ipmitool/bugs/441/
https://github.com/ipmitool/ipmitool/issues/34
這裡要跟您說聲抱歉,因為我不是專業人士,不懂lanplus無法啟用的原因是否為libssl-devel,但我確實是因為安裝了套件後,才在編譯時能Enable.
備註:我在重新補安裝libssl-devel套件時,確實只有安裝一支libssl-devel,並且安裝程序顯示與openssl-devel套件衝突.
Hi,您好,我window10 64位系统,依照您的方法後,可以make,但是make过程出现错误,如下:
回覆刪除lanplus_crypt_impl.c: In function 'lanplus_encrypt_aes_cbc_128':
lanplus_crypt_impl.c:167:17: error: storage size of 'ctx' isn't known
167 | EVP_CIPHER_CTX ctx;
| ^~~
lanplus_crypt_impl.c:167:17: warning: unused variable 'ctx' [-Wunused-variable]
lanplus_crypt_impl.c: In function 'lanplus_decrypt_aes_cbc_128':
lanplus_crypt_impl.c:242:17: error: storage size of 'ctx' isn't known
242 | EVP_CIPHER_CTX ctx;
| ^~~
lanplus_crypt_impl.c:242:17: warning: unused variable 'ctx' [-Wunused-variable]
make[4]: *** [Makefile:432: lanplus_crypt_impl.lo] Error 1
make[4]: Leaving directory '/home/ipmitool-1.8.18/src/plugins/lanplus'
make[3]: *** [Makefile:485: all-recursive] Error 1
make[3]: Leaving directory '/home/ipmitool-1.8.18/src/plugins'
make[2]: *** [Makefile:584: all-recursive] Error 1
make[2]: Leaving directory '/home/ipmitool-1.8.18/src'
make[1]: *** [Makefile:459: all-recursive] Error 1
make[1]: Leaving directory '/home/ipmitool-1.8.18'
make: *** [Makefile:390: all] Error 2
Hi Unknown,
刪除由下面這二個 link 來看,
https://github.com/ipmitool/ipmitool/issues/161
https://stackoverflow.com/questions/55992010/openssl-error-storage-size-of-ctx-isn-t-known
錯誤應該是 openssl 的版本所造成,
請試看看用不同版本.
感謝博主的整理和回應,
回覆刪除我也遇到相同問題, 並試了openssl 1.1.1c/d/f, 皆無法成功
從您提供的link https://github.com/ipmitool/ipmitool/issues/161
按照下方junlizhang 2020/02/22提供的檔案lanplus_crypt_impl.txt做修改後, 解決了此問題:D
解決當下openssl版本為1.1.1c-1
Hi,
刪除我更新了新流程, 在全新的安裝下看起來是沒有問題.
使用最新的 source code (2020/05/09).
也不用上 patch (也有可能是整合進去了?).
如果你還有需要的話可以再試看看.
在windows 2019上執行./bootstrape會出現%\r command not found
回覆刪除解決辦法 下載dos2unix
在cywin terminal內轉換格式 dos2unix bootstrape
作者已經移除這則留言。
刪除不只有bootstrap 我直接dos2unix * 把所有的都改就可以過
刪除只有改bootstrap在1.8.18 ./bootstrap可以過
但是在./configure的時候會有其他問題
而在master還是要改其他檔案 ./bootstrap才會過
總之~直接dos2unix * 比較快
OS: Windows Server 2019
另外如果懶得解決"unused variable 'ctx"的問題
直接build master的code也可以 這問題在master已解
你遇到的現象還蠻奇怪的說.
刪除我剛才試了一下, source code 是由 github 下載的.
解壓縮後 bootstrap 是 LF 沒錯.
你可以說一下 source code 的來源嗎?
Hi,
刪除我更新了新流程, 在全新的安裝下看起來是沒有問題.
使用最新的 source code (2020/05/09).
https://github.com/ipmitool/ipmitool.git
刪除我從這裡git clone下來的
你是在 Cygwin Terminal 中執行 git command嗎?
刪除不然你遇到的現象算是正常,它跟你 git 的設定有關。
感謝博主的分享,但我遇到另一個問題,想要詢問您...
回覆刪除因為OEM的hex code無法被ipmitool有效的翻譯, 而我在help指令內中, 發現了-O的參數, 並且嘗試修改contrib\oem_ibm_sel_map檔案, 但我失敗了, 我始終無法將Unknown Event自動翻譯, 不知道博主是否有這方面的研究?
Hi sheng,
刪除因為這個功能只針對 OEM SEL 有用.
實際範例:
// oem_event.txt 的內容
# cat oem_event.txt
"0xC1","XX","XX","XX","XX","XX","XX","XX","XX","XX","XX","XX","XX","XX","CPU shutdown - Potential cause 'triple fault' a software address problem"
// 手動產生一筆 OEM SEL (Record Type 0xC1)
# ipmitool raw 0x0a 0x44 0x00 0x00 0xC1 0x00 0x00 0x00 0x00 0x20 0x00 0x04 0x10 0xff 0x6f 0x02 0xff 0xff
02 00
// 使用 oem_event.txt 轉換 OEM SEL 的說明
# ipmitool -O oem_event.txt sel list
nrecs=1
2 | 01/22/2021 | 15:52:38 | OEM record c1 | 040020 | 10ff6f02ffff | CPU shutdown - Potential cause 'triple fault' a software address problem