Mac 服务器 Servermgrd 崩溃

首先说一下背景:

我们平常用Server Admin来管理MacOSX Server时, 是通过图形界面与一个叫servermgrd的后台进程沟通交换数据的, 它由LaunchCtl启动/System/Library/LaunchDaemon/com.apple.servermgrd.plist实现开机自动运行, 侦听端口311.

事实上servermgrd是一个Web服务器, 我们的Server Admin是通过HTTP的方式实现远程管理的(即便你在本机使用). 你可以在本机上打开https://localhost:311印证这一点.

不得不说servermgrd的启动依赖太多东西, 修复的过程让我意识到许多服务的配置都会间接的导致servermgrd崩溃. 我认为这会导致许多不便, 问题的根源是servermgrd不能尝试去修复你的配置, 但至少应该兼容这些未包括在图形界面上或不正确的配置, 例如当配置Apache的时候用户自己打开配置文件加入的参数Server Admin是不会碰的. 总之, 不应该崩溃, 因为它一旦崩溃, Server Admin就无法修改, 这真的很尴尬.

我的Mac Pro运行着Mac OS X Server 10.6.3. 在一次运行Gateway Setup Assistant失败后, 遭遇了servermgrd不能启动的尴尬局面. Console里显示servermgrd不能启动的原因是”Segmentation fault”.

May 12 14:20:39 mes servermgrd[7658]: servermgr_ipfilter:ipfw config:Notice:Flushed IPv4 rules
May 12 14:20:39 mes servermgrd[7658]: servermgr_ipfilter:ipfw config:Notice:Flushed IPv6 rules
May 12 14:20:39 mes com.apple.launchd[1] (com.apple.servermgrd[7658]): Job appears to have crashed: Segmentation fault
May 12 14:20:39 mes com.apple.launchd[1] (com.apple.servermgrd): Throttling respawn: Will start in 9 seconds
May 12 14:20:39 mes com.apple.ReportCrash.Root[7607]: 2010-05-12 14:20:39.824 ReportCrash[7607:440b] Saved crash report for servermgrd[7658] version ??? (???) to /Library/Logs/DiagnosticReports/servermgrd_2010-05-12-142039_localhost.crash

我尝试着google各种可能的关键词, 发现servermgrd不能启动的原因真的太多了. 许多问题都没有答案, 解决办法往往是重装系统.

没有了Server Admin这个图形化的工具, 其实我们还有serveradmin这个shell工具, 它不需要与后端通讯, 只是用起来有点不方便.

我是在运行向导时出现的问题, 因此我将目标锁定在NAT服务. (说起来容易, 其实到此为止我已经浪费了大半天的时间了.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看NAT服务配置
sudo serveradmin settings nat
nat:reverse = no
nat:unregistered_only = yes
nat:same_ports = yes
nat:natportmap_interface = "en0"
nat:log = yes
nat:clamp_mss = yes
nat:dynamic = yes
nat:log_denied = no
nat:use_sockets = yes
nat:proxy_only = no
nat:enable_natportmap = yes
nat:interface = ""
nat:deny_incoming = no

看到了没? NAT的接口竟然指向了空字符串.

nat:interface = ""

修复方法:

1
2
3
4
5
6
7
8
9
# 试着改回正常值
sudo serveradmin settings nat:natportmap_interface = "en1"
nat:natportmap_interface = "en1"
sudo serveradmin settings nat:interface = "en0"
nat:interface = "en0"

# 等10秒看看servermgrd起来没
ps aux | grep servermgrd | grep -v grep
root 7687 0.0 0.2 2577788 38484 ?? Ss 2:20PM 0:03.57 servermgrd -x

顺便跟着乔老爷子起哄, BS一下Adobe.

起死回生的Server Admin再一次尝试连接时, 会出奇的慢, 似乎在重置着自己的配置. 等了N久后显示 Server Admin wants to use the PrivateEncryptedDatak keychain, 并且提示我输入密码, 可是怎么输也不对.

你有没有觉得 PrivateEncryptedDatak 很眼生, 它是谁呀? Google后发现它是Adobe Air的一个示例程序生成的Keychain. Adobe suck!

删了它, 没事的, 反正就一Demo.

位置: ~/Library/Application Support/Adobe/AIR/ELS/com.adobe.demo.RememberMe/

如果你有洁癖, 就继续打开Keychain - Edit - Keychain List. 把那里面的也删除了.