做了多年 Solaris 系统管理工作,几乎每位运维同行都会遇到一些重复出现的问题。本文将这些高频场景及其解决方案一次性系统梳理,方便快速查阅。
先从一个基础话题开始:Solaris 的系统配置文件存放在哪里?
答案指向 /etc/system 文件。该文件定义了 Solaris 启动时加载的默认选项,其中包含共享内存大小等关键参数。
用户默认的 Shell 在哪里指定?查看 /etc/passwd 文件即可,每个用户记录行的最后一个字段便是。若忘记 root 密码,处理方式会因环境而异。
遗忘 root 密码的两种典型场景
如果工作站上只有 root 一个用户且网络连通,理论上可通过远程缓冲区溢出破解。但这种方法既不“经典”,还可能对系统造成损害,并不推荐。更稳妥的方案是使用 SUN 自带的光盘引导。
具体操作流程如下:
1. 从光盘启动:boot cdrom -s
2. 检查根分区:fsck /dev/dsk/c0t0d0s0 (实际设备名根据情况调整)
3. 挂载根分区:mount -F ufs /dev/dsk/c0t0d0s0 /mnt
4. 设置终端类型:TERM=ansi; export TERM
5. 编辑 /mnt/etc/shadow 文件,删除 root 行的口令字段。
6. 重启后 root 口令即为空。
如果工作站上还有其他普通用户,则属于另一种情形。本地缓冲区溢出虽然破坏性较小,但仍存在损坏硬盘引导区的风险。更安全的方式是利用“文件连接”错误获取 root 权限,该方法几乎无风险。
日常运维实用技巧
使用 vi 编辑器时觉得窗口太大?直接在终端窗口上拖拽鼠标即可缩小,问题瞬间解决。
共享内存大小的设置,在 /etc/system 文件末尾添加一行:Set shmsys:shminfo_shmmax=XXX。其中 XXX 为共享内存大小(字节)。经验公式为物理内存的一半。例如 512M 内存,计算公式为 512/2*1024*1000 = 262144000 字节。
root 用户的配置文件与普通用户不同,位于 /etc/profile。若想通过远程 X-win pro 以 root 身份登录,默认是被限制的。问题出在 /etc/default/login 脚本,该脚本禁止了远程终端上的 root 登录。将 CONSOLE=/dev/console 一行注释掉即可解除限制。
要确认网络配置是否正确,使用 ifconfig -a 查看。只要网卡绑定的 IP 不是 0.0.0.0,通常就没有问题。剩下的只需检查网线、RJ45 等物理介质即可。
敲错命令如何终止?Solaris 使用 ctrl+C,与 SCO 的 ctrl+Del 不同。
网络配置关键细节
网关配置方面,Solaris 与 SCO 完全遵循两套不同的逻辑。
SCO 的网关在 /etc/gateways 文件中配置,格式复杂:
例如:net 129.9 gateways 129.6.0.1 metric 1 passive
或者:host 129.7.10.21 gateway 129.6.0.2 metric 1 passive
Solaris 则简洁很多,只需在 /etc/defaultrouter 文件中写入网关 IP 即可。
网络安装与 DHCP 配置
通过网络安装 Solaris,服务器端需预留 340M 剩余空间。具体步骤:
先将 Solaris 2.6 安装盘插入 CD-ROM,然后复制 slice 0 到硬盘:
# cd /cdrom/sol_2_6_sparc_smcc_svr/s0/solaris_2.6/Tools
# ./setup_install_server /export/install
编辑 /export/autocfg/sysidcfg 文件,定义系统区域、时区、时间服务器等信息。然后在 /etc/hosts 中添加服务器 IP 与主机名的对应关系。
最后添加安装客户端:
# ./add_install_client -e CLIENT的以太网地址 -i CLIENT的IP地址 -s inssvr:/export/install -c inssvr:/export/autocfg -p inssvr:/export/autocfg inscli sun4u
客户端在 OK 提示符下执行 boot net - install。Solaris 7 for SPARC 与 2.6 的区别在于:7 没有默认的 sysidcfg 和 autocfg 目录,需要手动创建,且 OK 提示符下只需 boot net 即可。
Solaris 8 下的 DHCP 配置相对繁琐。核心思路是修改 /etc/init.d/network 和 /etc/init.d/inetsvc 两个脚本,因为旧版本 DHCP 服务器可能不支持返回 DNS 域名、DNS 服务器、节点名称等信息,需从本地文件读取。
具体改动包括:
1. 在 /etc/init.d/inetsvc 文件开头加入检测 DHCP 的语句。
2. 将原来从 DHCP 获取主机名和 DNS 信息的命令,改为从本地文件读取。
3. 创建 /etc/defaultdomain、/etc/nodename、/etc/dnsservers 文件。
最后不要忘记创建 /etc/dhcp.hme0 文件(设备名根据实际网卡调整)。
编译与硬件配置
在 SUN 上编译动态库,Makefile 写法如下:
CC=cc
C++=CC +w
.cpp.o:
$(C++) -g -c -Kpic $<
liberrlog.so:ErrLog.o
ld -o liberrlog.so -G ErrLog.o
如果安装 Solaris 时没有配置网卡,事后如何添加?直接执行 # reboot --r 或 ok boot -r 即可自动识别新硬件。然后用 ifconfig hme0 配置,hme0 可通过 dmesg 命令查看。
DNS 设置分为三步:
1. 修改 /etc/nsswitch.conf 文件中 hosts 解析部分,添加 dns。
2. 在 /etc/defaultrouter 中设置 DNS 服务器的网关。
3. 在 /etc/resolv.conf 中写入 DNS 服务器 IP 和域名。
硬件兼容性的典型问题
Ultra60 工作站从光驱启动时,使用 boot cdrom 命令会报“Drive not found”。原因是 cdrom 设备别名指向了内置光驱的物理设备。解决方案:
先按 stop+a 进入 OK 提示符,然后执行 probe-scsi-all 查看实际设备路径。再用 devalias 确认别名指向。最后使用完整路径启动,例如 boot /pci@1f,4000/scsi@3,1/disk6,0:f。
另一个更严重的情况:Ultra80 工作站安装 SunOS 5.6 时失败,报错信息显示 CPU 特权 UE 错误。这是由于 CPU 硬件结构与 Solaris 系统不兼容所致。不仅 Ultra80,如果 Ultra60 使用了 400MHz 以上的高速 CPU(通常 450MHz)配合 Solaris 2.6 或 2.5.1,也会出现类似问题。随机附带的《Installing Solaris 2.5.1 or Solaris 2.6 Software on 419+ MHz Systems》手册专门介绍了解决方案。另外还有一张补丁光盘 Operating Environment Installation CD May 1999,正是为解决此兼容性问题而准备的。
