网络安全 频道

修改SUN工作站hostid不完全参考手册

一、永久修改法:
1、 查找eeprom地址修改
该方法对从station5、station20等等直到Blade100、Blade150系列都适用,注意操作过程中屏幕显示结果的细小差别,不要完全照搬。
以blade150+solaris8为例,原始HOSTID为:83188869,Ethernet address:0:3:ba:18:88:69;拟改为80cf7afe。
Step1: Stop+a 【进入OK状态】
Step2: OK show-devs 【按空格键找到包含eeprom的全路径名】
Step3: OK cd /pci@1f,0/ebus@c/eeprom@1,0
注意不同的eeprom版本输出的eeprom路径名会不同,请以屏幕显示为准。
step4:OK .properties 【有些版本可能为.attributes】
找到address值fff58000
step5: OK fff58000 >physical
step6: OK showstack
step7: OK 2000 memmap
step8: OK 1fd0+
step9: OK 30 dump
注意看附图中的输出结果,从fff55fd8开始各位的含义如下:

字节 地址 内容
0 fff55fd8 总为 01 - format/version number
1 fff55fd9 hostid的第一个字节【机器类型】
2-7 fff55fda~f ethernet address
8-b fff55fe0~3 生产日期,通常为0,不一定是真实日期
c fff55fe4 hostid的第二字节
d fff55fe5 hostid的第三字节
e fff55fe6 hostid的第四字节
f fff55fe7 IDPROM checksum - bitwise xor of bytes 0-e

Step10: OK 80 fff55fd9 c!
【第一个字节一般不推荐修改,如果一定要改,好像也是没有问题的。】
step11: OK cf fff55fe4 c!
step12: OK 7a fff55fe5 c!
step13: OK fe fff55fe6 c!
step14: OK 01 80 xor
step15: OK 00 xor
step16: OK 03 xor
【从fff55fd8开始向后作xor,直到fff55fe6处作完为止,假设输出结果为f6,见下一步的输出为f6。注意上图中的hostid的第二、三、四字节的值在作xor时要用新的值cf、7a、fe】
next: OK fe xor
OK f6
next: OK f6 fff55fe7 c!
next: OK banner
查看修改正确后可以输入boot重新引导,如果banner显示的结果有错,有两种方法恢复出厂设置,一是用stop+n组合键恢复,如果stop+n无效,则在OK状态下输入set-defaults即可。
上面的示例没有修改Ethernet address,用户也可以根据需要修改,修改对应字节即可。

2、 用mkp命令修改
有些机器可以用mkp修改,但在blade系列机器中就不支持mkp了【OBP 4.X之后的版本】。
用mkp修改IDPROM信息,命令格式为:
<数值><第几字节>mkp
如修改hostid为57c0ffee,ethernet 地址为08:00:20:c0:ff:ee
OK 1 0 mkp
OK real-machine-type 1 mkp
OK 8 2 mkp
OK 0 3 mkp
OK 20 4 mkp
OK c0 5 mkp
OK ff 6 mkp
OK ee 7 mkp
OK 0 8 mkp
OK 0 9 mkp
OK 0 a mkp
OK 0 b mkp
OK c0 c mkp
OK ff d mkp
OK ee e mkp
OK 0 f 0 do i idprom@ xor loop f mkp
OK reboot

如果不改hostid的第一个字节,也可以直接尝试用下面的步骤修改hodtid。
OK c0 c mkp
OK ff d mkp
OK ee e mkp
OK 0 f 0 do i idprom@ xor loop f mkp
OK update-system-idprom
OK boot

二、临时修改法:
此种方法用于eeprom版本不支持mkp命令,用show-devs命令也找不到eeprom路径的机器上,比如blade2000。其原理是在操作系统启动后修改操作系统设备文件中的有关hostid的信息【/dev/ksyms和/dev/mem文件】,是欺骗solaris的,并没有改变eeprom中的值。所以修改后在机器reboot时提示的hostid仍是原来的hostid,进入系统后输入hostid命令显示的才是新的hostid值。
具体做法如下:
step1:用系统中的计算器将你要改的83188869转换成10进制的(比如转换后是2199423081,对应的ASCII码是32313939343233303831);
step2:然后在/etc/rc2.d/S20sysetup文件尾加入下段【也可以自己建一个以S20开头命名的文件】,修改前将copy一个备份文件bak_S20sysetup:
#为C编译器临时修改hostid。Richard Shen,2003/08/24。
adb -w -k /dev/ksyms /dev/mem <<END>/dev/null
hw_serial/W 0x32313939
hw_serial+4/W 0x34323330
hw_serial+8/W 0x38310000
END
step3:#sh S20sysetup
step4:#hostid 【看看改过来了没】
注意:这样作可能会有严重的后果,机器可能会出现白屏,显示一堆乱码,这种情况尤其会出现在用户输入错误字符的时候。系统重启后会陷于死等状态,这时需要用stop+a进入OK状态,用boot –s命令重启机器,然后在提示输入root密码后将bak_S20sysetup覆盖S20sysetup文件,再用init 6重启即可恢复。
也可以将命令写在一个c文件中,用户可以参考网上的一个文件hid_solaris2.c:
#include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
unsigned int hid;
int i;
char obuf[15];
for (i=0; i<15; i++)
obuf = \0;

if (argc != 2) {
fprintf(stderr, "usage: %s hostid\n",argv[0]);
exit(1);
}
sscanf(argv[1],"%08x",&hid);
sprintf(obuf,"%u", hid); /* should this be %010u ? */

printf("#!/bin/sh\n");
printf("# this script sets the hostid to %08x\n",hid);
printf("adb -w -k /dev/ksyms /dev/mem <<END\n");
printf("hw_serial/W 0x");
for (i=0; i<4; i++)
printf("%02x", obuf);
printf("\n");
printf("hw_serial+4/W 0x");
for (; i<8; i++)
printf("%02x", obuf);
printf("\n");
printf("hw_serial+8/W 0x");
for (; i<12; i++)
printf("%02x", obuf);
printf("\n");
printf("END\n");
return(0);
}
详情请下载hid-1.7.4研究。


附一个forte6的license:
SERVER FZ27 83188869 1726
DAEMON sunwlicd /etc/opt/licenses/sunwlicd /etc/opt/licenses/daemon_options
INCREMENT workshop.dbx.sparc sunwlicd 6.000 01-jan-0 1 C056D1563E0E5F9445F4 VENDOR_STRING="0"
INCREMENT workshop.c.sparc sunwlicd 6.000 01-jan-0 1 C09641169B155EDF09E2 VENDOR_STRING="0"
INCREMENT workshop.cc.sparc sunwlicd 6.000 01-jan-0 1 E026212652888E8981D8 VENDOR_STRING="0"
INCREMENT workshop.f77.sparc sunwlicd 6.000 01-jan-0 1 20564176100A9F0D125C VENDOR_STRING="0"
INCREMENT workshop.f90.sparc sunwlicd 6.000 01-jan-0 1 60A6D196920A31DE754C VENDOR_STRING="0"
INCREMENT workshop.visu.sparc sunwlicd 6.000 01-jan-0 1 4086417697680A6FF724 VENDOR_STRING="0"
INCREMENT workshop.tools.sparc sunwlicd 6.000 01-jan-0 1 A0267136826913D6174B VENDOR_STRING="0"
INCREMENT workshop.teamware.sparc sunwlicd 6.000 01-jan-0 1 F0C6215621E7240D8F19 VENDOR_STRING="0"
INCREMENT workshop.mpmt.sparc sunwlicd 6.000 01-jan-0 1 A08661664484AF0CD04D VENDOR_STRING="0"


谨以此贴怀念远走深圳的毛建民先生,是他和徐先生一道开创了我所修改hostid的新局面.^_^.
感谢本论坛的ice先生,还有diag等等热心朋友.
I Love ChinaUnix.net.

 http://netadmin.77169.com/HTML/20031214085300.html

0
相关文章