最近工作中用到服务器的ipmi功能,linux上使用的大多是ipmitool这个命令,为了平台之间的统一,windows也计划使用ipmitool这个工具。但是google之后,发现windows版的ipmitool鲜有发布的工具包,所以就自己动手体验了一下ipmitool的编译。
我的编译环境清单如下:
1、操作系统 Win7 SP1操作系统
2、cygwin版本 CYGWIN_NT-6.1
3、ipmitool源码包 ipmitool-IPMITOOL_1_8_18
下载地址: https://github.com/ipmitool/ipmitool
编译步骤,如下:
1、打开cygwin terminal,cd到源码目录
$ cd /cygdrive/c/ipmitool-IPMITOOL_1_8_18/
2、运行bootstrap脚本,生成configure
$ ./bootstrap
+ aclocal
+ libtoolize --automake --copy
+ autoheader
+ automake --foreign --add-missing --copy
configure.ac:6: installing './config.guess'
configure.ac:6: installing './config.sub'
configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'
lib/Makefile.am: installing './depcomp'
+ aclocal
+ autoconf
+ automake --foreign
3、使用configure -h可以查看编译时可以指定参数,主要是接口参数
$ ./configure -h
4、配置编译项,主要是指定编译的接口。这里只指定lan、lanplus接口(不同平台支持不同的接口,--enable-intf-open为linux专用接口,windows不支持)
$ ./configure --enable-intf-lan --enable-intf-lanplus
配置完成后,可以看到你指定的接口已经标记为yes。一般显示如下:
ipmitool 1.8.18-csv
Interfaces
lan : yes
lanplus : yes
open : no
free : no
imb : no
bmc : no
usb : no
lipmi : no
serial : yes
dummy : no
Extra tools
ipmievd : yes
ipmishell : no
5、使用make进行编译
$ make
......
make[2]: 对“all”无需做任何事。
make[2]: 离开目录“/cygdrive/c/ipmitool-IPMITOOL_1_8_18/control”
make[2]: 进入目录“/cygdrive/c/ipmitool-IPMITOOL_1_8_18”
make[2]: 离开目录“/cygdrive/c/ipmitool-IPMITOOL_1_8_18”
make[1]: 离开目录“/cygdrive/c/ipmitool-IPMITOOL_1_8_18”
表示编译成功。
编译成功后在ipmitool-IPMITOOL_1_8_18/src/.libs下存放的是真实的ipmitool.exe可执行文件,src目录下的只是一个wrapper script。
C:\ipmitool-IPMITOOL_1_8_18\src\.libs>ls
ipmievd.exe ipmitool.exe lt-ipmievd.c
ipmievd_ltshwrapper ipmitool_ltshwrapper lt-ipmitool.c
6、制作独立副本ipmitool
将编译好的ipmitool和cygwin静态库(我安装的cygwin在C:\cygwin64目录)提取出来存放在一起,就可以在没有安装cygwin的环境使用了。
1、C:\ipmitool-IPMITOOL_1_8_18\src\.libs\ipmitool.exe
2、C:\cygwin64\bin\cygcrypto-1.0.0.dll
3、C:\cygwin64\bin\cygwin1.dll
4、C:\cygwin64\bin\cygz.dll
5、C:\cygwin64\bin\cyggcc_s-seh-1.dll (有的环境是cyggcc_s-1.dll)
总结:完成工作之余,我对所有可以使用的ipmi工具做了对比。我觉得ipmitool和ipmiutil都是可以选择的好工具。由于windows没有和linux类似的通用openipmi驱动,所以使用ipmitool不能像linux一样通过内核级API访问ipmi(即不支持本地操作)。如果对使用工具没有要求,windows环境可以试试ipmiutil这个工具,它是支持本地访问ipmi的。在既要支持本地使用ipmi,又要支持网络访问ipmi的需求下,我认为在linux系统上使用ipmitool具有通用性;在windows上使用ipmiutil更胜一筹。