机房里面有几台“相约九八”那一年购买的 Alpha 老服务器,跑了几年 Alpha NT4.0 ,分别为办公局域网提供服务。几个机器一直有事无事“罢工”,经常要去控制面板重起服务甚至重起机器,不堪其烦。最可恶的是比尔盖茨竟然宣布不再支持这种架构了,升级打补丁都找不到人管了。 Alpha NT 平台下其实什么都不能运行,一般基于 Intel 平台编译的软件不能正常运行,连“ Winzip ”都没有;更有甚者,想增加一块 3Com 网卡,奈何没有 Alpha 平台的驱动,总不能一直买 Dec 片子的卡吧,于是决定换操作系统。 COMPAQ 的 TRU-64 给了一个天文数字的报价,想来想去还是Linux吧,经过多方检索索,发现 Alpha Redhat 6.2 算是一个比较经典的版本,参考资料也比较多,于是决定用之。 拼死拼活下载了 Alpha Redhat 6.2 的 ISO 文件,刻成光盘。仔细阅读 readme 文件,同时搜刮redhat 和 compaq 的网站下载秘籍,为了方便阅读,打印之。
先折腾 AS800 的机器,这样的机器我们有三台,两个 AS800 ,还有一个是 DS3300 ,据介绍 DS3300 是 AS800 的“白壳”版本,除了机壳是白色的而 AS800 是兰灰色,其他都一样。后来又折腾了一个 AS1200 的机器,大同小异,这里一并介绍。
Alpha 的 BIOS 分为 SRM 模式和 AlphaBios 两种状态, SRM 是命令行的,类似 Unix 的界面, AlphaBios 是图形界面,主要用于启动 Windows NT 。 Linux 在两种状态都可以启动, SRM 模式用 aboot , AlphaBios 下用 milo.exe ,由于 Milo 需要针对具体机型预先编译好的内核,正好我这种机器找不到,于是就决定用 SRM 状态了。按下面板上的 HALT 按钮,启动机器,系统就自动进入 SRM 模式而不启动 Alphabios 。 SRM 模式的提示符是“ ”。
据秘籍介绍,Alpha下的Linux是有SRM调用aboot来启动的,比PC机上的lilo要古怪许多,而且九八年的老版本的SRM是不支持调用 Aboot 的,于是第一个难关就是升级 SRM 的 Firmware , AS800 的最新 Firmware 是 5.8 的, AS1200 的最新版本是 6.0 的,在 compaq 网站能下载,一并下载。 AS800 的原 Firmware 不支持软盘升级,只好祭起bootp+tftp 的法宝,将我的笔记本(预装有 Linux )启动到 Linux 系统,配置 dhcpd.conf 主要在 subnet 区域中加上:
allow bootp;
allow booting;
filename "/tftproot/as5.exe";
然后在根目录建立一个叫 tftproot 的子目录,将 AS800 的刷新文件拷贝到此目录并且改名教 as5.exe ,在将 /etc/inetd.conf 中 tftp 这一行前面的 # 去掉,启动 dhcpd 和重起 inetd 。将笔记本网卡和 AS800 用交叉线连接起来,启动启动 AS800 将自动进入刷新程序。 AS1200 支持软盘更新,在 SRM 命令行下输入 lfu ,系统提示选择升级程序来源,选择软盘 DVA0 ,然后就进入升级界面,用 update 命令就可以完成升级。需要注意的是我的 AS1200 的 Firmware 版本是 5.1 的,系统不支持从 5.1 直接升级到 6.0 ,要先升级到 5.3 ,好在升级到 5.3 只需要一张软盘,然后再用两张软盘升级到 6.0 , COMPAQ 的说明文件上讲 6.0 是三张软盘,其实第三张用不着。和 Intel 机器刷新 BIOS 一样,升级的过程中不能关机或重起,一定要等到升级结束。
然后是准备硬盘,在 AS800 下有 exer 命令,可以对硬盘进行低级格式化, AS1200 中没有(或者叫别的什么名字而我没有找到),所以这一步干脆省略。然后是把硬盘写保护打开,先 show dev 查看一下硬盘和光盘的设备编号,比如我的 AS1200 机器上光盘是 DKA400 ,硬盘有三个 DKB0 、 DKB100 和 DKB200 ,用 chmod +w dkb* 打开写保护。由于这些机器原来装有 NT 所以要让 SRM 下次启动不再进入 AlphaBios ,用 set auto_action halt 就可以确保下一次启动还在 SRM 下面。
终于可以开始安装 Linux 了,将光盘放入光驱,使用命令:
boot dka400 -file kernels/generic.gz -flags "root=/dev/scd0"
系统启动以后基本安装界面与基本与PC版本相同,需要留意的是对启动硬盘进行分区的时候一定要为 aboot 留下相应的空间,而且 SRM 不支持启动普通格式的 Partition Table ,所以用来启动的那块硬盘上应该是用 BSD 风格的 Disk Label 分区格式。所以在选择安装模式的时候一定要选择“ Custom ”,然后在对硬盘进行分区之前点下“Use Fdisk”的按钮,由fdisk程序进行分区(不知道为什么其DiskDruid和自动分区为什么分的不对)。对启动盘(比如 dkb0 在 Linux 下叫 sda )进行分区的时候需要注意:在 Fdisk 下使用 b 命令先进入 BSD 格式分区,用 d 删除现有的所有分区,然后用 n 建立至少 3 个分区,注意磁道 0-15 要空出来给 aboot 使用,也就是说第一个分区从 16 道开始,建立一个约 50M 的 ext2 格式分区编号为“ a ”,然后建立一个 256M 的 swap 分区“ b ”,最后剩下的作一个主分区“ c ”。将 50M 的分区挂在 /boot 目录,大分区作为“ / ”,剩下其他的硬盘就可以按照普通的方式全部进行分区了。注意在 Diskdruid 中显示 sda 应该是没有占满 100% 。如下是我的系统启动盘的分区表:
# /sbin/fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun or SGI disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Command (m for help): b
Warning: starting partitions at cylinder 1 will be bad for the health of your
partition table -- start at cylinder 2 instead!
BSD disklabel command (m for help): p
3 partitions:
# size offset fstype [fsize bsize cpg]
a: 80325 240975 ext2 # (Cyl. 16 - 20)
b: 530145 321300 swap # (Cyl. 21 - 53)
c: 7518420 851445 ext2 # (Cyl. 54 - 521)
这一步一定要留意,我就是开始没有注意这样的分区方式总是安装以后无法启动,造成一次次的白装。
安装完毕以后系统会回到 SRM 状态,使用
boot dkb0 -fl 0
就可以启动系统了,然后在 Linux 中用 setup 设置好 X-window 环境和关闭一些不用的启动选项,比如我要自行编译新的 Apache ,所以系统原配的 httpd 就关了,还有一个叫 Kuduz 的是检测新硬件的,服务器不用经常改硬件,所以也关闭了。
系统原配内核是 2.2.14 的,建议升级,当然要是升级到 2.4 的话同时需要更新很多系统库,所以还是升级到 2.2 的较新版本为好,经过测试 2.2.20 不能在 Alpha 平台编译,好像是 PCI 驱动那一块出了什么问题,所以我用的是 2.2.19 。和 Intel 版核心不同,编译 Alpha 版本的核心用这样的命令:
#make mrproper
#make menuconfig
#make dep
#make boot
#make modules
#make modules_install
在 make menuconfig 的时候可以根据现有 /proc/cpuinfo 中的系统类型来选择合适的 CPU 类型,这样可以减少核心的冗余从而提高系统运行效率,比如我的 AS800 的 CPU 类型是 Noritake , AS1200 的类型是 Rawhide 。将需要的硬件驱动都编译进去, SCSI 卡和网卡可以参看 /var/log/dmesg 文件,比如我的 AS1200 的 SCSI 卡是需要 NCR53c8xx 和 Qlogic ISP 的驱动,而 Alpha 的 Server 一般都是用的 DEC 的芯片网卡,所以使用 Tulip 的网卡驱动。还要注意的就是在分区格式选项中要加上 BSD 风格分区的支持,否则新核心启动时会 Kernel Panic 。
编译完毕以后到 arch/alpha/boot 目录下会看见新的核心 vmlinux.gz ,将其拷贝到 /boot 目录,同时改为一个比较简单的名字,比如 mykernel 。再把核心源程序目录下的 System.map 拷贝到 /boot 目录。然后编辑 /etc/aboot.conf 增加一句:
1:1 /mykernel root=/dev/sda3
用 #halt 命令关闭 Linux ,重新回到 SRM 模式,作如下设置:
set os_type UNIX
set boot_osflages 1
set auto_action boot
boot
这样就可以启动新版本的核心了。
以后如果要安装什么新软件,要是二进制文件则需要寻找专门为 Alpha 编译的,其实最简单的是直接找源码在此平台重新编译就可以了,我在一个 AS800 上运行了 Bind9 作为 DNS 服务器,一个运行 DHCP2 作为动态地址分配服务器,还有一个用 ipchains 作 IP 伪装防火墙,还有一个 AS1200 运行 Apache 1.3.24+PHP4.2.0+Mysql3.23.48 作为 Webserber 。 Alpha 系统相当稳定高效。 As1200 是新装的,其他 AS800 到现在已经连续运行半年非常稳定。