准备
Cygwin 是一个在 Windows 操作系统上运行的类 Unix 环境。它提供了一个兼容层,允许 Windows 用户使用许多 Linux 系统上的工具和命令行程序。Cygwin 的核心组件是一个动态链接库(DLL)——cygwin1.dll,它实现了大量的 POSIX API,从而使得 Linux 应用程序可以在 Windows 平台上被编译和执行。
运行 setup ,安装所需软件包
一直下一步,直到选择镜像站时,这里可以选择一个适合当前网络环境的。
然后在安装软件包的页面中,选中 Devel 下的 make
、gcc-core
、automake
、autoconf
、libtool
、libreadline-devel
、libncurses-devel
,还有 Net 下的 libssl-devel
,下拉框中的版本随便选一个就行,可以配合顶部的搜索框更快的寻找软件包;如果你打算使用 git 克隆 ipmitool 的源码,还可以选中一下 Devel 下的 git
。
以下是我的“审查并确认更改”页面中的软件包列表,仅供参考:
安装 _autorebase 001091-1
安装 alternatives 1.31-1
安装 autoconf 15-2
安装 autoconf2.1 2.13-12 (自动添加)
安装 autoconf2.5 2.69-5 (自动添加)
安装 autoconf2.7 2.72-1 (自动添加)
安装 automake 11-1
安装 automake1.11 1.11.6-4 (自动添加)
安装 automake1.12 1.12.6-4 (自动添加)
安装 automake1.13 1.13.4-3 (自动添加)
安装 automake1.14 1.14.1-4 (自动添加)
安装 automake1.15 1.15.1-3 (自动添加)
安装 automake1.16 1.16.5-2 (自动添加)
安装 base-cygwin 3.8-2
安装 base-files 4.3-3
安装 bash 5.2.21-1
安装 binutils 2.44-1 (自动添加)
安装 bzip2 1.0.8-1
安装 ca-certificates 2024.2.69_v8.0.401-1
安装 coreutils 9.0-1
安装 crypto-policies 20190218-1
安装 cygutils 1.4.17-1
安装 cygwin 3.5.7-1
安装 cygwin-devel 3.5.7-1 (自动添加)
安装 dash 0.5.12-5
安装 diffutils 3.11-1
安装 editrights 1.04-1
安装 file 5.44-1
安装 findutils 4.10.0-1
安装 gawk 5.3.0-1
安装 gcc-core 12.4.0-3
安装 getent 2.18.90-5
安装 grep 3.11-1
安装 groff 1.23.0-1
安装 gzip 1.13-1
安装 hostname 3.13-1
安装 info 7.1-2
安装 ipc-utils 1.1-1
安装 less 668-1
安装 libargp 20230708-2
安装 libatomic1 12.4.0-3 (自动添加)
安装 libattr1 2.5.1-1.20.g0981a7bfe487
安装 libblkid1 2.40.2-2
安装 libbz2_1 1.0.8-1
安装 libcharset1 1.17-1 (自动添加)
安装 libcrypt2 4.4.20-1 (自动添加)
安装 libdb18.1 18.1.40-1 (自动添加)
安装 libfdisk1 2.40.2-2
安装 libffi6 3.2.1-2
安装 libffi8 3.4.7-1 (自动添加)
安装 libgc1 8.2.8-1 (自动添加)
安装 libgcc1 12.4.0-3
安装 libgdbm6 1.24-1
安装 libgdbm_compat4 1.24-1 (自动添加)
安装 libgmp10 6.3.0-1
安装 libgomp1 12.4.0-3 (自动添加)
安装 libguile3.0_1 3.0.10-3 (自动添加)
安装 libiconv-devel 1.17-1 (自动添加)
安装 libiconv2 1.17-1
安装 libintl-devel 0.22.5-1 (自动添加)
安装 libintl8 0.22.5-1
安装 libisl23 0.27-1 (自动添加)
安装 liblastlog2 2.40.2-2
安装 libltdl7 2.5.4-1 (自动添加)
安装 liblz4_1 1.9.4-1
安装 liblzma5 5.6.4-1
安装 libmpc3 1.3.1-1 (自动添加)
安装 libmpfr6 4.2.1-1
安装 libncurses++w10 6.5+20240427-1 (自动添加)
安装 libncurses-devel 6.5+20240427-1
安装 libncursesw10 6.5+20240427-1
安装 libp11-kit0 0.23.20-1
安装 libpcre1 8.45-1
安装 libpcre2_8_0 10.45-1
安装 libpipeline1 1.5.6-1
安装 libpkgconf5 2.3.0-1 (自动添加)
安装 libpopt-common 1.19-1
安装 libpopt0 1.19-1
安装 libquadmath0 12.4.0-3 (自动添加)
安装 libreadline-devel 8.2-2
安装 libreadline7 8.2-2
安装 libsmartcols1 2.40.2-2
安装 libsqlite3_0 3.34.0-1
安装 libssl-devel 3.0.15-1
安装 libssl1.1 1.1.1w-1
安装 libssl3 3.0.15-1
安装 libstdc++6 12.4.0-3
安装 libtasn1_6 4.14-1
安装 libtool 2.5.4-1
安装 libuchardet0 0.0.8-1
安装 libunistring5 1.2-1 (自动添加)
安装 libuuid1 2.40.2-2
安装 libzstd1 1.5.6-1
安装 login 1.13-1
安装 m4 1.4.19-1 (自动添加)
安装 make 4.4.1-2
安装 man-db 2.13.0-1
安装 mintty 3.7.7-1
安装 ncurses 6.5+20240427-1
安装 openssl 3.0.15-1
安装 p11-kit 0.23.20-1
安装 p11-kit-trust 0.23.20-1
安装 perl 5.40.1-1 (自动添加)
安装 perl-Archive-Zip 1.68-4 (自动添加)
安装 perl-Class-Inspector 1.36-5 (自动添加)
安装 perl-File-ShareDir 1.118-4 (自动添加)
安装 perl-Win32-API 0.84-6 (自动添加)
安装 perl_autorebase 5.40.1-1 (自动添加)
安装 perl_base 5.40.1-1 (自动添加)
安装 pkg-config 2.3.0-1 (自动添加)
安装 pkgconf 2.3.0-1 (自动添加)
安装 rebase 4.6.6-1
安装 run 1.3.4-2
安装 sed 4.9-1
安装 tar 1.35-2
安装 terminfo 6.5+20240427-1
安装 texinfo 7.1-2 (自动添加)
安装 tzcode 2025a-1
安装 tzdata 2025a-1
安装 util-linux 2.40.2-2
安装 vim-minimal 9.1.1054-1
安装 w32api-headers 12.0.0-1 (自动添加)
安装 w32api-runtime 12.0.0-1 (自动添加)
安装 which 2.20-2
安装 windows-default-manifest 6.4-2 (自动添加)
安装 xz 5.6.4-1
安装 zlib0 1.3.1-1
安装 zstd 1.5.6-1
执行下一步,等待软件包安装完成,然后结束 setup 。
下载 ipmitool 源码并解压
编译
打开 cygwin 终端,进入 ipmitool 源码所在目录,先后执行:
./bootstrap
./configure --enable-intf-lanplus
make
组包
编译完成后,可在 src/.libs
下找到 ipmitool.exe ,该 exe 在 cygwin 下可以直接使用。
如果你需要脱离 cygwin 环境使用由 cygwin 编译的 ipmitool ,则需要一起打包相关联的 dll ,包括:cygreadline7.dll
、cygcrypto-3.dll
、cygwin1.dll
、cygncursesw-10.dll
、cygz.dll
,这些 dll 都可以在 C:\cygwin64\bin
下面找到(假设你没有更改 cygwin 安装目录的话)
注意:具体的 dll 名可能和你安装软件包时选中的版本有关,如果想知道哪些 dll 缺失了,仅需双击 ipmitool.exe ,windows 会自动弹窗告诉你的。
如图所示,在打包了相关联的 dll 后,ipmitool 便可以脱离 cygwin 终端,在 powershell 下使用了。
修复 IANA PEN registry open failed
也许你会注意到,ipmitool 在执行时会有这么一行报错,虽然对多数功能没有影响,但会影响例如 mc info 中的厂商名称显示:
IANA PEN(Private Enterprise Number)是由互联网号码分配机构(IANA)分配的一种用于标识私有组织的唯一号码。这些号码一般用于SNMP(简单网络管理协议)、LDAP(轻量目录访问协议)和其他需要唯一标识符的协议中,以避免不同系统或产品之间的冲突。
造成此问题的原因是,ipmitool 默认从 /usr/share/misc/enterprise-numbers
加载 IANA 编码,而这个东西在 Windows 上压根就不存在。
解决方法也很简单,在编译的第二步传入环境变量,指定 IANADIR 为当前目录:
IANADIR=. ./configure --enable-intf-lanplus
然后从这里下载最新的 enterprise-numbers 文件,并在组包时一起打包到 ipmitool.exe 的同级目录即可。
(注意,只有在 ipmitool.exe 所在目录运行 ipmitool 时,该修复才有效,比如 ./ipmitool.exe
;假设隔了一层或多层目录运行 ipmitool ,比如 ./a/b/ipmitool.exe
,该修复就无效了,不过无所谓,能用就行)
预编译版本
基于 Github 源码预编译了 1.8.19 版的 ipmitool for windows ,并顺手修复了 IANA 报错,供各位伸手党使用: