一、基础
智能平台管理接口 (IPMI) 是一种开放标准的硬件管理接口规格,定义了嵌入式管理子系统进行通信的特定方法。IPMI 信息通过基板管理控制器 (BMC)(位于 IPMI 规格的硬件组件上)进行交流。使用低级硬件智能管理而不使用操作系统进行管理,具有两个主要优点: 首先,此配置允许进行带外服务器管理;其次,操作系统不必负担传输系统状态数据的任务。
BMC是一个标准,IBM和Dell的服务器标配都有BMC,而且都是和第一个网卡共用的,HP的服务器的iLO是要单独接一根网线用来做远程管理的,这点和DELL的服务器不一样 。只要在BIOS里设置一下IP地址就可以了,也可通过dell的Open Manage设置。或者在linux系统中使用工具设置,将在后面介绍。
BMC的IP地址在本机上ping本机BMC的IP地址是不通的!在别的服务器上ping才通。
使用Dell的Open Manage设置IPMI时会有提示:
Remote Access management traffic does not function properly when the LAN on Motherboard(LOM)is teamed with any network adapter add-in cards
警告:主板上的 LAN (LOM) 与任何网络适配器添加式卡搭配使用时,远程访问管理通信量无法正常起作用
关于是否可以和系统的IP相同?
可以设置和系统相同,不会造成IP冲突,但是有一个问题,就是当系统启动时,使用IPMI无法连接服务器。这会造成无法使用IPMI关机。但是可以开机,因为系统的IP已经停止了。
当和系统设置相同的IP,启动服务器,系统启动到设置IP时,IPMI的IP将被禁用“session closed by BMC”。
注:使用OMSA的web页面可以修改的参数,都可以通过CLI来修改:
/opt/dell/srvadmin/sbin/omconfig chassis biossetup -?
/opt/dell/srvadmin/sbin/omconfig chassis bmc -?
/opt/dell/srvadmin/sbin/omconfig chassis -?
需要注意一点,对于Dell的2950服务器,当使用Open Manage设置时,其中有一项New Encryption Key,这项默认为20个0,不要修改。修改以后会造成使用IPMI的lanplus时失败,报错信息为:
Error: Unable to establish IPMI v2 / RMCP+ session
Get User Access command failed (channel 14, user 1)
关于New Encryption Key:
-
Specifies the KG value in Hex format. The IPMI encryption key is a public key used to generate an encryption key for use between firmware and application. It is differentiated from a password, which is not public and is used to access the firmware. The maximum value is 20 ASCII hex pairs with no spaces between the pairs.
-
The IPMI encryption key is available only on PowerEdge x9xx systems。
二、ipmitool
该工具可以用于设置ipmi的ip等。
1、环境检测
-
# dmidecode |sed -n '/IPMI/,+5p'
如果能看到IPMI信息,就说明支持ipmi,比如下面DELL R300的输出,Version为2.0
-
IPMI Device Information
-
Interface Type: KCS (Keyboard Control Style)
-
Specification Version: 2.0
-
I2C Slave Address: 0x10
-
NV Storage Device: Not Present
-
Base Address: 0x0000000000000CA8 (I/O)
2、安装ipmitool
安装ipmitool
-
wget
-
tar -xvzf ipmitool-1.8.11.tar.gz
-
./configure
-
make
-
make install
对于ubuntu:
apt-get install ipmitool
如果编译安装出现readline相关错误:
apt-cache search libreadline
apt-get install libreadline-dev
3、设置本机的IPMI还需要启动ipmi服务
-
yum install OpenIPMI
-
-
service ipmi start
对于ubuntu:
-
apt-get install openipmi
-
加载模块
-
modprobe ipmi_msghandler
-
modprobe ipmi_devintf
-
modprobe ipmi_si
4、LAN configuration
一共有16个channel,找到所使用的channel
-
for i in `seq 1 14`; do ipmitool lan print $i 2>/dev/null | grep -q ^Set && echo Channel $i; done
找不到channel?报:
is not a LAN channel!?
解决办法:使用的是HP ILO2?查看:
-
ipmitool channel info 1
-
ipmitool lan set 1 ipaddr
-
ipmitool lan set 1 ipsrc static
-
ipmitool lan set 1 netmask 255.255.255.0
-
ipmitool lan set 1 defgw ipaddr 137.138.1.1
-
ipmitool lan set 1 arp generate on
-
ipmitool lan set 1 arp interval 8
-
ipmitool lan set 1 auth callback,user,operator,admin md2,md5
-
ipmitool lan set 1 access on
-
ipmitool lan set 1 user
关于lan:
lan用于远程访问,电源管理等。
open用于本地访问。
lanplus用于sol。
5、USER configuration
-
ipmitool user set name 3 ipmiuser
-
ipmitool user enable 3
-
ipmitool channel setaccess 1 3 ipmi=on link=on privilege=4
-
ipmitool user set password 3 PASSWORDHERE
查看:
6、一旦设置好ip,就可以通过远程服务器来更改ipmi的配置了。
-
ipmitool -I lan -U ipmiuser -P password -H 172.18.6.30 power status
关于debug
-
ipmitool -vv -I lanplus -U ipmiuser -P password -H 172.168.6.3 power status
7、SOL configuration
SOL需要IPMI2.0支持,使用lanplus进行远程连接。
7.1 Serial Over LAN (SOL) 功能非常有用。SOL 通过 IPMI 会话重定向本地串行接口,允许远程访问 Windows 的紧急事件管理控制台 (EMS) 特殊管理控制台 (SAC),或访问 LINUX 串行控制台。
-
ipmitool sol set enabled true 1
-
ipmitool sol set payload enable 1 3
关于设置波特率:
ipmitool sol set non-volatile-bit-rate 115.2
报错:
Error setting SOL parameter 'volatile-bit-rate' to '115.2': Parameter out of range
设置为57.6。
如果通过OMSA的web界面配置,可以看到,最高为57600,而不是115200
查看:
7.2
要使用SOL查看BIOS输出,需要在BIOS里将BIOS的信息重定向到串口COM2
Serial Communications
Serial Communications: On with Console Redirection via COM2
Conole Redirection After Boot: Enable
External Serial Connector: Com2
如果安装了OMSAm,也可以使用命令行来修改:
/opt/dell/srvadmin/sbin/omconfig chassis biossetup -?
/opt/dell/srvadmin/sbin/omconfig chassis biossetup attribute=serialcom setting=com2
7.3
如果要通过SOL查看linux的控制台,还需要重定向kernel的输出:
Note the choices here for COM port number must match the entry you made in the Firmware Setup section: use ttyS0 for COM1; and ttyS1 for COM2.
注意:ttyS0 对应COM1口,ttyS1对应COM2口,注意选择
7.3.1 /etc/inittab添加以下两行:
-
S0:2345:respawn:/sbin/agetty -h -L 57600 ttyS0 vt100
-
S1:2345:respawn:/sbin/agetty -h -L 57600 ttyS1 vt100
7.3.2 grub.conf,在kernel的options后面添加参数:
-
kernel ...options... console=tty0 console=ttyS1,57600
需要注意:
如果使用sed修改,不要sed /etc/grub.conf,该文件是个软连接,sed -i会造成该文件变成普通文件,而真正需要修改的grub.conf却没有修改。
#注掉splashimage 图形显示行,否则在字符模式下无法显示菜单
#splashimage=(hd0,0)/grub/splash.xpm.gz
7.3.3 /etc/securetty
增加:
如果使用kickstart安装系统,可以加 %post 段,系统安装后自动执行:
-
echo "S0:2345:respawn:/sbin/agetty -h -L 57600 ttyS0 vt100" >>/etc/inittab
-
echo "S1:2345:respawn:/sbin/agetty -h -L 57600 ttyS1 vt100" >>/etc/inittab
-
echo "ttyS0" >>/etc/securetty
-
echo "ttyS1" >>/etc/securetty
-
sed -i '/kernel.*root=.*quiet.*/s/$/ console=tty0 console=ttyS1,57600/g' /boot/grub/grub.conf
7.4 UBUNTU12.04设置kernel的输出
1) Paste the following into /etc/init/ttyS1.conf
# ttyS1 - getty
#
# This service maintains a getty on ttyS1 from the point the system is
# started until it is shut down again.
start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -L 57600 ttyS1 vt100
2) Ask upstart to start the getty
sudo start ttyS1
This will get you access to console. To get access to Linux init console, configure grub.
1) Edit /etc/default/grub to contain the following lines
注意,上面有一条GRUB_CMDLINE_LINUX=""不需要注释掉
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS1,57600"
GRUB_TERMINAL=serial
#GRUB_SERIAL_COMMAND="serial --speed=57600 --unit=1 --word=8 --parity=no --stop=1"
GRUB_SERIAL_COMMAND="serial --speed=57600 --unit=1 "
2) update grub
sudo update-grub
8、关于配合kickstart安装操作系统
8.1 设置从pxe启动:
-
ipmitool -H -U root -P chassis bootdev pxe
然后重启服务器:
-
pmitool -H -U root -P power reset
设备启动后,就可以从pxe启动引导。
注:即便bios启动顺序未选择pxe启动,此命令一样可以让设备从pxe启动。此pxe引导功能仅生效一次,设备再重启就按默认启动顺序启动。
不要用linux的reboot,而应该用ipmitoo的power reset,否则前面设置的pxe启动不生效。
安装系统时,不能看到相应的进度,但是如果rpm使用的是http作为源,可以在http server中看到access log,以此来判断系统安装的进度。
关于kickstart,需要注意几点:
8.2 /tftpboot/pxelinux.cfg/default
ksdevice=eth0,当我们有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择。
8.3 kickstart的配置文件
clearpart --all --initlabel
--initlabel,根据不同体系结构把磁盘标签初始化为缺省设置(例如,msdos用于x86而gpt用于Itanium).当
安装到一个崭新的硬盘时,这很有用,安装程序不会询问是否应该初始化磁盘标签。
安装后自动重启
ks.cfg任意位置添加reboot
9、ipmitool 常用命令
-
# ipmitool -I lan -H 172.168.6.3 -U root -P 密码 power off (硬关机,直接切断电源)
-
# ipmitool -I lan -H 172.168.6.3 -U root -P 密码 power soft (软关机,即如同轻按一下开机扭,对于linux,服务器将halt,power status 为off)
-
# ipmitool -I lan -H 172.168.6.3 -U root -P 密码 power on (硬开机)
-
# ipmitool -I lan -H 172.168.6.3 -U root -P 密码 power reset (硬重启) // 这个你也许经常用到.
-
# ipmitool -I lan -H 172.168.6.3 -U root -P 密码 power status ( 获取当前电源状态)
-
# ipmitool -I lanplus -U root -P "password" -H 172.168.6.3 sensor get "Ambient Temp"| /bin/grep -i "Sensor Reading"|/bin/cut -c 26-28 //获取机箱温度.
-
#ipmitool -I lanplus -U ipmiuser -P "password" -H 172.168.6.3 sol
-
SOL Commands: info []
-
set [channel]
-
payload [channel] [userid]
-
activate []
-
deactivate
-
looptest [] []
-
#ipmitool -I lanplus -U ipmiuser -P "password" -H 172.168.6.3 sol activate
三、IPMI 键盘MAP表
-
Terminate connection ~+.
-
Suspend IPMItool ~+^+Z
-
Send break ~+B
-
Print escape sequence help ~+?
-
F1 Esc+1
-
F2 Esc+2
-
F3 Esc+3
-
F9 Esc+9
-
F10 Esc+0
-
F11 Esc+!
-
F12 Esc+@
-
Home Esc+h
-
End Esc+k
-
Insert Esc++
-
Delete Esc+-
-
Page Up Esc+?
-
Page Down Esc+/
-
Ctrl+M Esc+Ctrl+M
-
Ctrl+H Esc+Ctrl+H
-
Ctrl+I Esc+Ctrl+I
-
Ctrl+J Esc+Ctrl+J
-
Alt+x (where x is any letter) Esc+X+x
-
-
Ctrl+Alt+Del Esc+R+Esc+r+Esc+R
四、错误
Error: Unable to establish IPMI v2 / RMCP+ session
查看用户名密码是否正确。
dell web控制台 启用 LAN 上的 IPMI
debug:
ipmitool -vv -I lanplus -U root -P password -H 172.18.6.30 lan print
五、关于乱码
进入grub以后,出现乱码,这是由于grub里kernel的波特率和LAN上串行的波特率不同造成的。
六、puppet
-
exec {
-
"sed -i '/kernel.*root=.*quiet.*/s/$/ console=tty0 console=ttyS1,57600/g' /boot/grub/grub.conf":
-
path => "/bin",
-
unless => 'grep "console=tty0 console=ttyS1,57600" /boot/grub/grub.conf ';
-
-
'echo "S0:2345:respawn:/sbin/agetty -h -L 57600 ttyS0 vt100" >>/etc/inittab':
-
path => "/bin",
-
unless => 'grep "S0:2345:respawn:/sbin/agetty -h -L 57600 ttyS0 vt100" /etc/inittab ';
-
-
'echo "S1:2345:respawn:/sbin/agetty -h -L 57600 ttyS1 vt100" >>/etc/inittab':
-
path => "/bin",
-
unless => 'grep "S1:2345:respawn:/sbin/agetty -h -L 57600 ttyS1 vt100" /etc/inittab ';
-
-
'echo "ttyS0" >>/etc/securetty':
-
path => "/bin",
-
unless => 'grep "ttyS0" /etc/securetty ';
-
-
'echo "ttyS1" >>/etc/securetty':
-
path => "/bin",
-
unless => 'grep "ttyS1" /etc/securetty ';
-
}