要从 Desktop Manager 访问配置数据,桌面客户端需要安装 Java Desktop System Configuration Agent。Configuration Agent 可以与远程配置数据系统信息库和适配器进行通信,还能将数据集成到特定的配置系统中。当前支持的配置系统为: GConf、Java Preferences、Mozilla Preferences 和 StarSuite Registry。
Solaris 10 操作系统随附有 Configuration Agent 的一个版本。 但是,Desktop Manager 需要安装该工具的较新版本。此较新版本将在安装 Desktop Manager 客户端组件及相关修补程序时一起安装。
安装 Desktop Manager 客户端组件:
下载 Desktop Manager 的 Zip 归档文件,并将其内容解压缩到临时目录中。
# unzip SunDesktopMgr-1.0.zip |
安装建议的修补程序。
在 SunDesktopMgr-1.0/<platform>/client/Patches 目录中提供了这些修补程序。请按照每个修补程序的安装说明进行操作。
以超级用户 (root) 身份登录,然后通过以下命令执行安装脚本:
# cd SunDesktopMgr-1.0/<platform>/client # ./setup |
Configuration Agent 是多个不同软件包之一,下表列出了这些软件包:
Solaris 软件包名称 |
描述 |
---|---|
SUNWapbas |
配置共享库 |
SUNWapmsc |
Configuration Agent 的其他文件 |
SUNWapoc |
Configuration Agent |
SUNWapdc |
Configuration Agent 向导 |
安装这些软件包时,将安装此 API 需要的所有文件。可以手动安装这些软件包,也可以通过 Java Desktop System 安装来完成。安装完成之后,必须在系统上配置并启用 Configuration Agent。
在 Java Desktop System 安装中,Configuration Agent 软件包将作为 Solaris 的一部分进行安装。但是,Desktop Manager 会在安装过程中对这些文件进行修补,以便提供正确的功能级别。
要访问远程配置数据,Configuration Agent 需要某些最基本的引导信息,例如 LDAP 服务器的主机名和端口。这些信息保存在一组属性文件(如 policymgr.properties、apocd.properties 和 os.properties)中。这些文件存储在本地 /etc/apoc 目录中。可以手动编辑这些属性文件(请参见附录 A,配置参数),也可以使用 Configuration Agent 的配置向导。
该配置向导提供了一个图形用户界面,可以引导您完成 Configuration Agent 的必要设置。对于该向导的每个页面,都存在一个相应的帮助屏幕。您可以通过 /usr/bin/apoc-config 脚本以超级用户 (root) 的身份启动该向导。
也可以启动该向导而不启动图形界面。例如,通过执行 /usr/bin/apoc-config -nodisplay 在控制台模式下启动该向导。
在括号中指明了关联的属性文件关键字(在适当的位置)。
状态:Configuration Agent 的状态。可以使用该复选框激活或取消激活 Configuration Agent。要使用配置系统信息库,必须激活 Configuration Agent。激活操作自动包括对 Solaris 上服务管理工具 ( smf(5) ) 的必要注册。
主机标识符 (HostIdentifierType):可以是 "HostName" 或 "IPAddress"。搜索特定于主机的策略数据时,Configuration Agent 将通过主机名或 IP 地址来识别当前主机。请根据主机的标识方式(在选定类型的上下文中)来选择正确的值。
上下文类型:使用此设置可以向 Configuration Agent 指明,组织层次结构和配置数据是在 LDAP 存储、基于文件的存储还是混合式存储中定义的。
要手动启用或禁用 Configuration Agent,请以 root 身份登录,然后键入 /usr/lib/apoc/apocd enable(如果要启用)或 /usr/lib/apoc/apocd disable(如果要禁用)。
图 3–2 中的屏幕将随着在前一个屏幕中所选的上下文类型而变化。如果选择了 LDAP 或混合式上下文类型,则必须提供服务器标识符、服务器端口和后缀。如果选择了基于文件或混合式上下文类型,则必须提供配置设置 URL。
服务器标识符:LDAP 服务器的主机名。
服务器端口:LDAP 服务器的端口号。
后缀:LDAP 系统信息库的基本 DN。
配置设置 URL:用于指定基于文件系统信息库位置的 URL。
URL 列表可用于指定备用系统信息库,以便在无法连接到第一个系统信息库时使用。 此列表可由一个或多个 URL 组成(URL 之间以空格分隔),每个 URL 的格式为 file://<filepath> 、http://<host>:<port>/<filepath> 或 https://<host>:<port>/<filepath>。有关详细信息,请参见附录 A,配置参数。
代理将首先尝试使用 SSL 连接来访问 LDAP 服务器。如果失败,代理会尝试普通的 SSL 连接。
要成功进行 SSL 连接,Java 运行时环境密钥库中必须具有合适的证书。标准 JRE 的密钥库位于 <installation directory>/lib/security/cacerts 中,而标准 JDK 的密钥库位于 <installation directory>/jre/lib/security/cacerts 中。必须将证书颁发机构或 LDAP 服务器证书添加到密钥库中,方法是使用命令 keytool -import -file <certificate file> -keystore <cacerts file location>。该密钥库的默认密码为 changeit。
Configuration Agent 的验证类型:可以是“匿名”或“简单”。如果选择“匿名”,将自动禁用“限定的用户名”和“密码”字段。
限定的用户名 (AuthDn):具有读取和搜索系统信息库权限的用户的完整 DN。
密码 (Password):已注册的 LDAP 用户的密码
如果在目录中启用了匿名访问,则可以将“限定的用户名”和“密码”设置留空。
应用程序的验证类型 (AuthType):可以是“匿名”或“GSSAPI”,这取决于 LDAP 服务器验证用户的方式。
有关详细信息,请参见数据访问/用户验证。
Configuration Agent 使用以下两个端口:
代理端口 (DaemonPort):代理使用该端口与客户端应用程序进行通信(默认值为 38900)。
管理端口 (DaemonAdminPort):在与代理通信时,代理控制器程序 (apocd) 所用的端口(默认值为 38901)。
Configuration Agent 使用以下两种间隔定期检查配置数据中的更改:
常规检测间隔 (ChangeDetectionInterval):桌面应用程序(客户端)的配置数据的两个更改检测周期之间的间隔(以分钟为单位)。
指定 -1 将关闭更改检测。
代理设置的间隔 (DaemonChangeDetectionInterval):代理特定的配置设置的两个更改检测周期之间的间隔(以分钟为单位)。
指定 -1 将关闭更改检测。
可以使用常规检测间隔来调整远程配置数据更改至客户端应用程序的传播。为此设置指定的值表示最长经过多少分钟后,远程更改才反映在客户端应用程序中。
值越小,Configuration Agent 和 LDAP 服务器活动就越多。因此,调整此设置的值时应谨慎。例如,在初始部署阶段,可以将该值设置为一分钟,这样就可以测试远程配置对客户端应用程序的影响。完成测试后,请将此设置还原为初始值。
可以配置以下设置:
数据目录 (DataDir):用于存储运行时数据的目录。默认值为 /var/opt/apoc。
缓存数据的存储期限 (TimeToLive):非脱机配置数据在本地数据库中的保留时间(以分钟为单位)。
垃圾收集周期 (GarbageCollectionInterval):本地配置数据库中两个垃圾收集周期之间的间隔(以分钟为单位)。
客户端线程的最大数目 (MaxClientThreads):可以同时处理的客户端请求的最大数目。
客户端连接的最大数目 (MaxClientConnections):客户端连接的最大数目。
最大请求大小 (MaxRequestSize):客户端请求的最大大小。
连接超时 (ConnectTimeout):表示 LDAP 服务器响应连接请求时所允许的间隔。默认值为一秒。
日志级别 (LogLevel):代理日志文件中的详细程度。此日志级别应与 Java 记录程序的级别保持一致。这些级别如下所示(按严重性递减顺序):
严重
警告
信息
配置
良好
较好
最好
大多数操作设置(“数据目录”和“连接超时”设置除外)也可以通过 LDAP 服务器中存储的相应策略进行集中维护。如果要使用此功能,请不要通过向导更改相应的设置。相反,应使用 Desktop Manager 中的 Configuration Agent 策略来集中指定操作设置。
已通过 Desktop Manager 存储在 LDAP 服务器中的操作设置(“数据目录”和“连接超时”除外)将在代理配置的下一个更改检测周期自动生效(请参见 DaemonChangeDetectionInterval)。
在本地更改的所有其他设置均需要重新装入 Configuration Agent,或者重新启动 Configuration Agent。如果使用配置向导,将自动执行重新装入和重新启动操作。
要手动重新启动 Configuration Agent,请确保未运行任何相关的客户端应用程序,然后以 root 身份登录,并键入命令 /usr/lib/apoc/apocd restart。
在配置向导中未提供以下设置。
应用本地策略 (ApplyLocalPolicy):使用此设置可以指明本地主机上的策略数据是否可用于客户端应用程序。"true" 值表示本地策略数据可用于客户端应用程序。"false" 值表示本地策略数据无法用于客户端应用程序。有关详细信息,请参见使用本地策略。
可以配置 Configuration Agent 来应用部署于本地的策略 (替代全局策略或作为其补充) 中的设置。可以使用以下步骤部署此类本地策略:
使用 Desktop Manager 创建具有所需策略设置的配置文件。
使用 Desktop Manager 将配置文件导出为一个 Zip 文件。
在客户端主机上,创建 ${DataDir}/Policies/profiles/PROFILE_REPOSITORY_default 目录(如果此目录尚未存在)。
${DataDir} 与 Configuration Agent 数据目录的值(默认值为 /var/opt/apoc)相对应。
将先前导出的 Zip 文件复制到 ${DataDir}/Policies/profiles/PROFILE_REPOSITORY_default 中。
确保将 Configuration Agent 配置为应用可用的本地策略(有关详细信息,请参见其他代理设置)。
如果更改了 Configuration Agent 的 "ApplyLocalPolicy" 设置,则需要重新加载 Configuration Agent(方法是以 root 身份登录,然后键入命令 /usr/lib/apoc/apocd reload)。
在下一个 Configuration Agent 更改检测周期中,所有以此方式部署的本地策略都将可用于客户端。
如果失败,Configuration Agent 将自动重新启动。服务管理工具 ( smf(5) ) 负责作出此项决策。如果服务管理工具认为不应该重新启动(例如,如果失败次数太多),则会将 Configuration Agent 置于维护模式。
如果无法重新启动 Configuration Agent,则应暂时禁用此代理(方法是以 root 身份登录,然后执行命令 /usr/lib/apoc/apocd disable),纠正导致代理失败的所有问题,然后通过执行命令 /usr/lib/apoc/apocd enable 重新启用代理。
Configuration Agent 将基于桌面用户的登录 ID 从 LDAP 服务器中检索信息。组织映射文件中的 User/UniqueIdAttribute 设置会将登录 ID 映射到 LDAP 服务器中的用户元素。Configuration Agent 还将检索有关主机的信息,例如主机的名称或 IP 地址。这些信息将通过组织映射文件中的 Host/UniqueIdAttribute 设置映射到 LDAP 服务器中的主机元素。有关组织映射的详细信息,请参见附录 C,组织映射。
有两种方式访问 LDAP 服务器:匿名方式或使用 GSSAPI。对于匿名访问,无需在桌面上执行任何操作。对于 GSSAPI 方式,必须在桌面上获得 Kerberos 凭证。要将 Kerberos 凭证的获得与用户登录集成在一起,必须在 Java Desktop System 主机上安装和配置 pam_krb5 模块。
您可以使用 gdm 将 Kerberos 同用户登录集成在一起,例如使用以下 /etc/pam.d/gdm 文件:
#%PAM-1.0 auth required pam_unix2.so nullok #set_secrpc auth optional pam_krb5.so use_first_pass missing_keytab_ok ccache=SAFE putenv_direct account required pam_unix2.so password required pam_unix2.so #strict=false session required pam_unix2.so # trace or none session required pam_devperm.so session optional pam_console.so |
如果您以这种方式将 Kerberos 同用户登录集成在一起,则您应启用屏幕保护程序的 Kerberos 支持。例如,使用以下 /etc/pam.d/xscreensaver 文件:
auth required pamkrb5.so use_first_pass missing_keytab_ok ccache=SAFE putenv_direct |
应用程序适配器是 Desktop Manager 所支持的配置系统的扩展。适配器允许各种应用程序使用集中配置数据(具体取决于配置系统)。支持的配置系统包括:
GConf:Gnome 配置系统,用于桌面和大多数 Gnome 应用程序,如 Evolution
StarSuite Registry:StarSuite 和 OpenOffice.org 使用的配置系统
Mozilla Preferences:Mozilla 使用的配置系统
Java Preferences:提供给 Java 应用程序的配置 API
此外还提供了桌面定义适配器,它向用户桌面中添加了桌面启动器、菜单项和启动程序。
GConf 适配器是用于 Solaris 的 SUNWapoc-adapter-gconf 软件包的一部分。从相应的 packageAdapter 安装适配器时,将更新 /etc/gconf/2/path 中的 GConf 数据源路径,以包括 Desktop Manager 源。适配器提供两种数据源,它们为:
"apoc:readonly:":用来访问策略的非保护设置。在用户设置之后、本地默认设置之前插入此数据源。
"apoc:readonly:mandatory@":用来访问策略的保护设置。在本地强制设置之后、用户设置之前插入此数据源。
GConf 适配器是作为安装的一部分进行配置的,但其操作取决于在 GConf 路径文件 (/etc/GConf/2/path) 中是否包含表示强制性集中设置和默认设置的两个数据源。安装完系统之后,即使此路径文件中包含正确的信息(使 GConf 能够按预期那样使用集中设置),管理员也要确保以 "apoc" 为前缀的数据源仍存在于该文件中,以便在需要时可以修改此路径以包含其他自定义数据源。此外,还要确保表示强制性集中设置的数据源位于本地强制性设置和用户设置之间,而表示默认集中设置的数据源位于用户设置和本地默认设置之间。
Java Preferences 适配器是用于 Solaris 的 SUNWapcj 软件包的一部分。
Java Preferences 适配器是作为 Preferences API 实现提供的,此实现必须用作其他现有实现(例如随 JRE 一起提供的默认基于文件的系统)的包装器。要在使用 Preferences API 的 Java 应用程序中使用集中配置,必须为该应用程序编写启动脚本(使用 /usr/lib/apoc/apocjlaunch 脚本作为帮助程序)。此脚本需要定义几个环境变量,然后在其末尾添加 apocjlaunch 脚本(此脚本可在必要的环境中启动 Java 应用程序)。必须设置的环境变量包括:
JAVA:包含 Java 运行时可执行文件的路径
APPLICATION:包含该应用程序常规 Java 运行时调用的结尾部分。例如, classname [arguments] 用于单一类启动,-jar jarname [arguments] 用于 jar 归档文件启动。
可以设置的其他可选环境变量包括:
CLASSPATH:以冒号分隔的 jar 文件或类文件列表,这些文件需要作为应用程序类路径的一部分
DEFINES:包含定义语句的字符串,这些定义语句需要作为应用程序启动的一部分
PREFFACTORY:应用程序需要使用的基础 Preferences API 实现中的工厂类名称
Mozilla 适配器是用于 Solaris 的 SUNWmozapoc-adapter 软件包的一部分。
Mozilla 适配器是作为此产品安装的一部分进行安装的,且不需要其他任何配置。
StarSuite 适配器包含在标准的 StarSuite 安装中,并且允许您访问配置文件配置数据,而无需进行任何特殊的修改。
StarSuite 适配器是作为此产品安装的一部分进行安装的,且不需要其他任何配置。
桌面定义适配器由以下软件包组成:
软件包名称 |
描述 |
---|---|
SUNWapleg |
配置访问二进制文件 |
SUNWardsa |
桌面定义适配器 |
SUNWardsa-misc |
适配器的系统集成 |
这些软件包将在安装 Desktop Manager 客户端组件时进行安装,且不需要任何其他设置。
桌面定义适配器由安装进程配置(以便在用户登录时使用),且不需要任何其他设置。
删除这些产品时会同时删除 Mozilla 适配器和 StarSuite 适配器。通过删除安装部分所提到的软件包,可以使用相应的软件包管理系统工具来删除 GConf、Java Preferences 和桌面定义适配器。
删除 Java Preferences 适配器后,不应再使用为启动 Java 应用程序(该程序使用 Preferences API)而编写的启动脚本。这些脚本中的 Java 调用将失败,因为缺少了某些必需的类。
导致在相应的应用程序中看不到集中配置数据的大多数问题都可能来源于 Configuration Agent,因为它是所有适配器用于检索数据的通用机制。
如果对于给定设置(或其中的组),对集中配置所做的更改看上去未能生效,则可能是因为用户已经在应用程序中为此设置明确设置了一个值(通常使用产品的“选项”或“首选项”对话框)。在这种情况下,除非将集中设置定义为受保护(即管理员强制指定一个值,且不允许用户修改),否则用户首选项将优先于使用 Desktop Manager 设置的值。
本部分解答了一些与 Configuration Agent 的特性和使用方法相关的问题,并提供了一些用于解决代理问题的提示。
Configuration Agent 是一种策略缓存和传送应用程序。设计和构建此应用程序的目的是确保能够集中配置桌面客户端应用程序,同时不会对这些应用程序及其所在主机的性能造成显著影响。这一点是通过以下方式实现的:
在本地可用缓存中缓存任意已下载的策略,以备客户端将来使用
共享所有可以且应该共享的昂贵资源(例如,与保存策略的 LDAP 服务器的连接)
客户端应用程序与 Configuration Agent 进行交互的典型方案极其简单,其过程可描述如下:
用户启动一种相关的桌面客户端应用程序(gconfd、Mozilla 或 StarSuite)
客户端应用程序连接到 Configuration Agent
客户端应用程序从 Configuration Agent 中请求所需的策略数据
Configuration Agent 在缓存中搜索请求的策略数据
如果在缓存中未找到策略数据,Configuration Agent 将从预配置的策略系统信息库中下载所需数据,然后将其存储在缓存中
将策略数据发送给发出请求的客户端应用程序
Configuration Agent 监视策略系统信息库中是否存在对策略数据进行的任何修改
如果检测到修改,Configuration Agent 会刷新缓存以保持最新状态,并向客户端应用程序通知此修改。
Configuration Agent 随 Solaris 10 一起提供,并在默认情况下随 Solaris 10 一起安装
默认情况下,Configuration Agent 处于禁用状态且未进行配置。要使用 Configuration Agent,必须至少对其进行最低配置,然后启用该程序。完成以上步骤后,桌面客户端应用程序将在下一次启动时自动开始使用提供的所有策略。
要正确配置 Configuration Agent,请使用 Configuration Agent 向导。可以通过执行(以 root 身份)/usr/bin/apoc-config 命令来启动向导。向导会指导您逐步完成正确配置代理所需的步骤。多数情况下,完成向导过程中唯一必需的信息是策略系统信息库的位置。
也可以通过手动编辑 Configuration Agent 的配置文件来配置 Configuration Agent。但不建议这样做,因为使用此方法配置代理很容易发生错误。另外,Configuration Agent 向导还包含其他逻辑,用于确定进行特定的配置更改后是否需要重新启动或重新加载代理。
可以使用三种可能的机制来启用代理:
使用 Configuration Agent 向导 ( /usr/bin/apoc-config ),将“代理状态”设置为“活动”。
使用 Configuration Agent 控制器程序 ( /usr/lib/apoc/apocd ),以 root 身份执行以下命令:
/usr/lib/apoc/apocd enable |
使用smf(5),以超级用户身份执行以下命令:
/usr/sbin/svcadm enable svc:/network/apocd/udp |
了解 Configuration Agent 是否正确配置且正常工作的最简单方法是:使用 Desktop Manager 创建一个策略,将其指定给一个用户,然后以该用户身份登录到桌面计算机,再验证创建的策略设置是否正被使用。在桌面会话中有很多容易检测到的策略设置,例如背景和主题。
Configuration Agent 是一种符合 smf(5) 的服务,因此,启用该代理的意义来源于 smf(5)。启用代理之后,代理即可开始提供服务。启用代理后会发生以下行为:
代理启动
在启用代理之后启动的所有桌面客户端应用程序均可检索策略数据
代理会在系统启动期间自动重新启动
可以使用以下任一方法来确定 Configuration Agent 是否已启用:
使用 Configuration Agent 的控制器程序。 以超级用户身份登录并键入以下命令:
/usr/lib/apoc/apocd is-enabled |
如果代理已启用,控制器程序会返回以下消息:
Checking Configuration Agent enabled status ... Enabled |
否则,控制器程序会返回以下消息:
Checking Configuration Agent enabled status ... Not enabled |
使用 smf(5) 执行以下命令:
/usr/bin/svcs svc:/network/apocd/udp:default |
如果代理已启用,svcs 会返回以下消息:
STATE STIME FMRI online 8:36:04 svc:/network/apocd/udp:default |
如果代理被禁用,svcs 会返回以下消息:
STATE STIME FMRI disabled 15:58:34 svc:/network/apocd/udp:default |
如果代理处于维护模式,svcs 会返回以下消息:
STATE STIME FMRI maintenance 8:38:42 svc:/network/apocd/udp:default |
可以使用以下任一方法来确定 Configuration Agent 是否正在运行:
以超级用户身份登录并执行 Configuration Agent 控制器程序:
/usr/lib/apoc/apocd status |
如果代理已启用,控制器程序会返回以下消息:
Checking Configuration Agent status ... Running |
否则,控制器程序会返回以下消息:
Checking Configuration Agent status ... Not running |
执行以下命令:
/usr/bin/svcs svc:/network/apocd/udp:default |
如果代理正在运行,svcs 会返回以下消息:
STATE STIME FMRI online 8:36:04 svc:/network/apocd/udp:default |
如果代理未运行,svcs 会返回以下消息:
STATE STIME FMRI disabled 15:58:34 svc:/network/apocd/udp:default |
如果代理处于维护模式,svcs 会返回以下消息:
STATE STIME FMRI maintenance 8:38:42 svc:/network/apocd/udp:default |
执行以下命令:
ps -ef | grep apoc |
如果 Configuration Agent 正在运行,在 ps 输出中应显示以下相关的 Java 进程:
daemon 29295 29294 0 13:05:22? 0:03 java -Djava.library.path=/usr/lib/apoc -cp /usr/share/lib/apoc/apocd.jar:/usr/s daemon 29294 1 0 13:05:22? 0:00 sh -c java -Djava.library.path=/usr/lib/apoc -cp /usr/share/lib/apoc/apocd.jar: root 29345 28134 0 13:08:59 pts/1 0:00 grep apoc |
需要解决 Configuration Agent 问题时,可以参考以下日志文件:
smf(5) 日志文件:
/var/svc/log/network-apocd-udp:default.log 文件记录了与尝试启动和停止 Configuration Agent 特定实例相关的事件。此文件还包含 Configuration Agent 控制器程序 (/usr/lib/apoc/apocd) 写入标准输出的消息,以及 JVM 或 Configuration Agent 的输出消息。
/var/svc/log/svc.startd.log 日志文件记录了较高级别的 smf(5) 事件。例如,如果在短时间内多次尝试启动 Configuration Agent 失败,smf(5) 可能会认为 Configuration Agent 无法启动。在这种情况下,smf(5) 会将 Configuration Agent 置于维护模式,并将此结果写入一个日志条目。
当遇到与启动 Configuration Agent 相关的问题时,以上两种日志文件通常都很有用。
Configuration Agent 日志:
Configuration Agent 将日志消息写入默认日志目录 /var/opt/apoc/Logs 中的日志文件。 Configuration Agent 的“数据目录”为 /var/opt/apoc 。可以使用 Configuration Agent 向导 (/usr/bin/apoc-config) 应用程序来更改此目录的位置。可以通过更改“日志级别”(使用 Configuration Agent 向导)来更改日志消息的详细程度。如果您认为未正确配置 Configuration Agent,或者遇到一些其他类型的代理失败事件,则可以在参考代理日志文件之前使用 Configuration Agent 向导将日志级别设置为“最详细”。 此步骤可以确保您获得最全面的可用日志信息。
系统日志:
也可以在 SunRay 计算机上查看 /var/adm/messages 日志文件或 /var/opt/SUNWut/log/messages 日志文件,以诊断 Configuration Agent 的各种问题。
请参见日志文件在什么位置?
当 smf(5) 检测到与启动或重新启动代理相关的问题时,就会将 Configuration Agent 置于维护模式。如果 smf(5) 启动代理失败,它将多次尝试重新启动,直到代理启动成功,否则,smf(5) 将认为代理无法启动。如果是后一种情况,smf(5) 会将代理置于维护模式,以指明您需要解决代理所遇到的问题。解决这些问题之后,您可以清除代理的 smf(5) 状态以返回到正常运行模式。
以超级用户身份登录并执行 /usr/sbin/svcadm clear svc:/network/apocd/udp 命令。
smf(5) 会检测到代理已停止运行并尝试重新启动代理。如果由于某种原因导致连续尝试重新启动失败,smf(5) 会将代理置于维护模式。如果代理重新启动成功,则不会影响正在运行的桌面客户端应用程序。任何此类客户端应用程序都会在代理重新启动后自动重新连接到代理。
实际操作取决于启动特定桌面客户端应用程序时代理是否已启用/正在运行。如果代理已启用/正在运行,则客户端应用程序会建立与代理的连接,并在连接断开后尝试重新建立连接。也就是说,每次启动、启用或禁用代理时,客户端应用程序都会一直尝试重新连接代理(在代理运行之后)。如果在客户端应用程序启动时代理未启用/正在运行,则客户端应用程序不会使用 Configuration Agent,甚至在代理启动之后也不会尝试与其连接。综上所述可以得出以下结论:
代理已启用/正在运行时启动的桌面客户端应用程序不需要重新启动。
代理未启用/正在运行时启动的桌面客户端应用程序必须重新启动。
与 Configuration Agent 相关的最常见问题是:看不到已配置的策略对桌面客户端应用程序产生的效果。造成这种问题最常见的原因是:代理配置不正确、策略系统信息库配置不正确或策略系统信息库不可用。以下指导方法可以帮助您发现和解决上述问题:
确保已配置代理。
确保代理已启用/正在运行。 如果需要启动代理,必须同时重新启动当前打开的桌面客户端应用程序。
如果问题仍然存在,可暂时提高代理日志记录机制的详细程度,然后重新启动代理(如有可能),这样即可获得自代理启动之后的完整而详细的日志消息。
如果代理无法正常启动,请参考启动 Configuration Agent 时出现的问题部分。
如果代理正常启动,但桌面客户端应用程序未使用可用的策略,请参考“从正在运行的 Configuration Agent 获取策略时出现的问题”部分。
如果仍然无法解决问题,请与技术支持联系。
如果无法启动 Configuration Agent,并且确定已配置并启用了 Configuration Agent,则需要参考日志文件。以下各部分描述了关于此问题的最常见错误。
Configuration Agent 数据目录由代理创建并使用,用于存储日志文件、策略缓存等。此目录的默认位置为 /var/opt/apoc。
如果将数据目录设置为无法访问的位置(即, /dev/null/cant/write/here),则 Configuration Agent 会在 smf(5) 日志中生成以下错误消息。要解决此问题,请使用 Configuration Agent 向导 (/usr/bin/apoc-config) 将数据目录指向一个可访问的位置。
[ Nov 17 14:35:38 Executing start method ("/usr/lib/apoc/apocd svcStart") ] Starting Configuration Agent ... Warning: Cannot create Log directory '/dev/null/cant/write/here/Logs' Warning:Failed to create log file handler Nov 17, 2005 2:35:39 PM com.sun.apoc.daemon.misc.APOCLogger config CONFIG: Daemon configuration: MaxRequestSize = 4096 DaemonAdminPort = 38901 ThreadTimeToLive = 5 DaemonChangeDetectionInterval = 10 IdleThreadDetectionInterval = 15 PROVIDER_URL = DataDir = /dev/null/cant/write/here ApplyLocalPolicy = true ChangeDetectionInterval = 60 MaxClientConnections = 50 GarbageCollectionInterval = 10080 InitialChangeDetectionDelay = 10 TimeToLive = 10080 ConnectionReadTimeout = 5000 DaemonPort = 38900 LogLevel = FINEST MaxClientThreads = 5 Nov 17, 2005 2:35:39 PM Daemon main FINER: THROW com.sun.apoc.daemon.misc.APOCException at com.sun.apoc.daemon.apocd.Daemon.initAuthDir(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.init(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.main(Unknown Source) [ Nov 17 14:36:08 Method or service exit timed out. Killing contract 980 ] [ Nov 17 14:36:08 Method "start" failed due to signal KILL ] |
Configuration Agent 使用 TCP/IP 套接字连接与桌面客户端应用程序进行通信。 默认情况下,这些连接都是通过端口 38900 建立的。
如果将 Configuration Agent 配置为使用端口 1234(此端口已由其他服务使用),则会生成以下错误消息。错误消息将记录在 Configuration Agent 日志中。要解决此问题,请使用 Configuration Agent 向导 (/usr/bin/apoc-config) 将代理端口设置更改为未使用的端口号。
Nov 17, 2005 2:50:59 PM com.sun.apoc.daemon.misc.APOCLogger config CONFIG: Daemon configuration: MaxRequestSize = 4096 DaemonAdminPort = 38901 ThreadTimeToLive = 5 DaemonChangeDetectionInterval = 10 IdleThreadDetectionInterval = 15 PROVIDER_URL = DataDir = /var/opt/apoc ApplyLocalPolicy = true ChangeDetectionInterval = 60 MaxClientConnections = 50 GarbageCollectionInterval = 10080 InitialChangeDetectionDelay = 10 TimeToLive = 10080 ConnectionReadTimeout = 5000 DaemonPort = 1234 LogLevel = FINEST MaxClientThreads = 5 Nov 17, 2005 2:50:59 PM com.sun.apoc.daemon.misc.APOCLogger info INFO: Daemon starting Nov 17, 2005 2:50:59 PM com.sun.apoc.daemon.misc.APOCLogger fine FINE: Garbage collection scheduled ( interval = 10080 minutes ) Nov 17, 2005 2:50:59 PM Daemon main FINER: THROW com.sun.apoc.daemon.misc.APOCException: java.net.BindException: Address already in use at com.sun.apoc.daemon.transport.ChannelManager.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.run(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.main(Unknown Source) Caused by: java.net.BindException: Address already in use at sun.nio.ch.Net.bind(Native Method) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52) |
Configuration Agent 使用 TCP/IP 套接字连接与 Configuration Agent 控制器程序 (/usr/lib/apoc/apocd) 进行通信。默认情况下,这些连接都是通过端口 38901 建立的。
如果将 Configuration Agent 配置为使用端口 1234(此端口已由其他服务使用),Configuration Agent 日志中将出现以下错误消息。要解决此问题,请使用 Configuration Agent 向导 (/usr/bin/apoc-config ) 将管理端口设置更改为未使用的端口号。
ONFIG: Daemon configuration: MaxRequestSize = 4096 DaemonAdminPort = 1234 ThreadTimeToLive = 5 DaemonChangeDetectionInterval = 10 IdleThreadDetectionInterval = 15 PROVIDER_URL = DataDir = /var/opt/apoc ApplyLocalPolicy = true ChangeDetectionInterval = 60 MaxClientConnections = 50 GarbageCollectionInterval = 10080 InitialChangeDetectionDelay = 10 TimeToLive = 10080 ConnectionReadTimeout = 5000 DaemonPort = 38900 LogLevel = FINEST MaxClientThreads = 5 Nov 17, 2005 2:55:11 PM com.sun.apoc.daemon.misc.APOCLogger info INFO: Daemon starting Nov 17, 2005 2:55:11 PM com.sun.apoc.daemon.misc.APOCLogger fine FINE: Garbage collection scheduled ( interval = 10080 minutes ) Nov 17, 2005 2:55:11 PM com.sun.apoc.daemon.misc.APOCLogger fine FINE: Client manager started Nov 17, 2005 2:55:11 PM com.sun.apoc.daemon.misc.APOCLogger fine FINE: Channel manager started Nov 17, 2005 2:55:11 PM Daemon main FINER: THROW com.sun.apoc.daemon.misc.APOCException: java.net.BindException: Address already in use at com.sun.apoc.daemon.admin.AdminManager.initChannel(Unknown Source) at com.sun.apoc.daemon.admin.AdminManager.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.run(Unknown Source) at com.sun.apoc.daemon.apocd.Daemon.main(Unknown Source) Caused by: java.net.BindException: Address already in use at sun.nio.ch.Net.bind(Native Method) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52) ... 4 more |
Configuration Agent 需要连接到有效的配置系统信息库,以便下载和缓存策略信息。如果未在代理配置中正确标识配置系统信息库(例如,使用了无效格式或未指定系统信息库),则当桌面客户端应用程序启动时,会在 Configuration Agent 日志中记录类似以下内容的错误消息。要解决此问题,请使用 Configuration Agent 向导 (/usr/bin/apoc-config ) 来标识要使用的配置系统信息库。
FINER: New client added Nov 18, 2005 1:59:22 PM com.sun.apoc.daemon.misc.APOCLogger finer FINER: CreateSession transaction started Nov 18, 2005 1:59:22 PM com.sun.apoc.daemon.misc.APOCLogger finer FINER: Creating new client session Nov 18, 2005 1:59:22 PM com.sun.apoc.daemon.misc.APOCLogger finest FINEST: Authenticating user geoffh Nov 18, 2005 1:59:22 PM com.sun.apoc.daemon.misc.APOCLogger finest FINEST: Authentication successful Nov 18, 2005 1:59:23 PM PolicyBackend openPolicyBackend FINER: THROW com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.spi.environment.InvalidParameterException: The parameter organisation PROVIDER_URL#protocol (null) is not valid, the value must be comprised in {ldaps,ldap,https,http,file}. at com.sun.apoc.daemon.apocd.PolicyBackend.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.HostPolicyBackend.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.PolicyBackendFactory.openPolicyBackend(Unknown Source) at com.sun.apoc.daemon.apocd.Cache$DataSource.openPolicyBackend(Unknown Source) at com.sun.apoc.daemon.apocd.Cache$DataSource.open(Unknown Source) at com.sun.apoc.daemon.apocd.Cache.createDataSources(Unknown Source) at com.sun.apoc.daemon.apocd.Cache.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.CacheFactory.createNewCache(Unknown Source) at com.sun.apoc.daemon.apocd.CacheFactory.openCache(Unknown Source) at com.sun.apoc.daemon.apocd.Session.<init>(Unknown Source) at com.sun.apoc.daemon.transaction.CreateSessionTransaction.executeTransaction (Unknown Source) at com.sun.apoc.daemon.transaction.Transaction.execute(Unknown Source) at com.sun.apoc.daemon.apocd.ClientEventHandler.handleEvent(Unknown Source) at com.sun.apoc.daemon.apocd.EventWorkerThread.run(Unknown Source) Caused by: com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.spi.environment.InvalidParameterException: The parameter organisation PROVIDER_URL#protocol (null) is not valid, the value must be comprised in {ldaps,ldap,https,http,file}. at com.sun.apoc.daemon.apocd.PolicyBackendFactory.openPolicyMgr(Unknown Source) ... 14 more Caused by: com.sun.apoc.spi.environment.InvalidParameterException: The parameter organisation PROVIDER_URL#protocol (null) is not valid, the value must be comprised in {ldaps,ldap,https,http,file}. at com.sun.apoc.spi.PolicyMgrFactoryImpl.createPolicyMgr(Unknown Source) ... 15 more Nov 18, 2005 1:59:23 PM PolicyBackend openPolicyBackend |
Configuration Agent 需要连接到有效的配置系统信息库,以便下载和缓存策略信息。如果无法建立连接,则当桌面客户端应用程序启动时,会在 Configuration Agent 日志中记录类似以下内容的错误消息。在以下情况中,主机 sobuild 不存在、无法连接或无法通过端口 389 访问 LDAP 服务器。要解决此问题,请使用 Agent Configuration 向导 (/usr/bin/apoc-config) 确保正确标识了策略系统信息库,并在此基础上确保可以访问该策略系统信息库。例如,对于 LDAP 系统信息库,必须确保 LDAP 服务器正在运行、LDAP 服务器所在的计算机在网络上可用,并且指定的端口为 LDAP 服务器正在使用的端口。
如果尝试使用 SSL 连接来访问 LDAP 服务器,请确保与 Java 运行时环境(用于运行 Configuration Agent)关联的密钥库中包含合适的证书。有关 apoc-config 的详细信息,请参见 Configuration Agent 部分。
FINER: New client added Nov 18, 2005 2:17:43 PM com.sun.apoc.daemon.misc.APOCLogger finer FINER: CreateSession transaction started Nov 18, 2005 2:17:43 PM com.sun.apoc.daemon.misc.APOCLogger finer FINER: Creating new client session Nov 18, 2005 2:17:43 PM com.sun.apoc.daemon.misc.APOCLogger finest FINEST: Authenticating user geoffh Nov 18, 2005 2:17:43 PM com.sun.apoc.daemon.misc.APOCLogger finest FINEST: Authentication successful Nov 18, 2005 2:17:43 PM PolicyBackend openPolicyBackend FINER: THROW com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.spi.OpenConnectionException: An error occured while connecting to ldap://sobuild:389. at com.sun.apoc.daemon.apocd.PolicyBackend.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.HostPolicyBackend.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.PolicyBackendFactory.openPolicyBackend(Unknown Source) at com.sun.apoc.daemon.apocd.Cache$DataSource.openPolicyBackend(Unknown Source) at com.sun.apoc.daemon.apocd.Cache$DataSource.open(Unknown Source) at com.sun.apoc.daemon.apocd.Cache.createDataSources(Unknown Source) at com.sun.apoc.daemon.apocd.Cache.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.CacheFactory.createNewCache(Unknown Source) at com.sun.apoc.daemon.apocd.CacheFactory.openCache(Unknown Source) at com.sun.apoc.daemon.apocd.Session.<init>(Unknown Source) at com.sun.apoc.daemon.transaction.CreateSessionTransaction.executeTransaction (Unknown Source) at com.sun.apoc.daemon.transaction.Transaction.execute(Unknown Source) at com.sun.apoc.daemon.apocd.ClientEventHandler.handleEvent(Unknown Source) at com.sun.apoc.daemon.apocd.EventWorkerThread.run(Unknown Source) Caused by: com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.spi.OpenConnectionException: An error occured while connecting to ldap://sobuild:389. at com.sun.apoc.daemon.apocd.PolicyBackendFactory.openPolicyMgr(Unknown Source) ... 14 more Caused by: com.sun.apoc.spi.OpenConnectionException: An error occured while connecting to ldap://noSuchHost:389. at com.sun.apoc.spi.ldap.LdapClientContext.prepareConnection(Unknown Source) at com.sun.apoc.spi.ldap.LdapClientContext.connect(Unknown Source) at com.sun.apoc.spi.ldap.LdapConnectionHandler.openAuthorizedContext(Unknown Source) at com.sun.apoc.spi.ldap.LdapConnectionHandler.connect(Unknown Source) at com.sun.apoc.spi.ldap.entities.LdapOrganizationProvider.open(Unknown Source) at com.sun.apoc.spi.PolicyMgrFactoryImpl.createPolicyMgr(Unknown Source) ... 15 more Caused by: netscape.ldap.LDAPException: failed to connect to server sobuild:389 (91); Cannot connect to the LDAP server at netscape.ldap.LDAPConnSetupMgr.connectServer(LDAPConnSetupMgr.java:422) at netscape.ldap.LDAPConnSetupMgr.openSerial(LDAPConnSetupMgr.java:350) at netscape.ldap.LDAPConnSetupMgr.connect(LDAPConnSetupMgr.java:244) at netscape.ldap.LDAPConnSetupMgr.access$0(LDAPConnSetupMgr.java:241) at netscape.ldap.LDAPConnSetupMgr$1.run(LDAPConnSetupMgr.java:179) at java.lang.Thread.run(Thread.java:595) Nov 18, 2005 2:17:44 PM PolicyBackend openPolicyBackend |
要使 Configuration Agent 能够在策略系统信息库中找到策略数据,必须先正确配置策略系统信息库。如果指定了未配置或错误配置的策略系统信息库,则当桌面客户端应用程序启动时,会在 Configuration Agent 日志中记录类似以下内容的错误消息。要解决此问题,请参见
FINER: New client added Nov 18, 2005 2:36:55 PM com.sun.apoc.daemon.misc.APOCLogger finer FINER: CreateSession transaction started Nov 18, 2005 2:36:55 PM com.sun.apoc.daemon.misc.APOCLogger finer FINER: Creating new client session Nov 18, 2005 2:36:55 PM com.sun.apoc.daemon.misc.APOCLogger finest FINEST: Authenticating user geoffh Nov 18, 2005 2:36:55 PM com.sun.apoc.daemon.misc.APOCLogger finest FINEST: Authentication successful Nov 18, 2005 2:36:55 PM PolicyBackend openPolicyBackend FINER: THROW com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.daemon.misc.APOCException: com.sun.apoc.spi.environment.RemoteEnvironmentException: Error on reading the configuration data on LDAP server ldap://sobuild:389. at com.sun.apoc.daemon.apocd.PolicyBackend.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.HostPolicyBackend.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.PolicyBackendFactory.openPolicyBackend(Unknown Source) at com.sun.apoc.daemon.apocd.Cache$DataSource.openPolicyBackend(Unknown Source) at com.sun.apoc.daemon.apocd.Cache$DataSource.open(Unknown Source) at com.sun.apoc.daemon.apocd.Cache.createDataSources(Unknown Source) at com.sun.apoc.daemon.apocd.Cache.<init>(Unknown Source) at com.sun.apoc.daemon.apocd.CacheFactory.createNewCache(Unknown Source) at com.sun.apoc.daemon.apocd.CacheFactory.openCache(Unknown Source) at com.sun.apoc.daemon.apocd.Session.<init>(Unknown Source) at com.sun.apoc.daemon.transaction.CreateSessionTransaction.executeTransaction (Unknown Source) at com.sun.apoc.daemon.transaction.Transaction.execute(Unknown Source) at com.sun.apoc.daemon.apocd.ClientEventHandler.handleEvent(Unknown Source) at com.sun.apoc.daemon.apocd.EventWorkerThread.run(Unknown Source) |
由 Configuration Agent 启用的每个桌面客户端应用程序(gconfd、Mozilla 或 StarSuite)在运行时都会打开一个与 Configuration Agent 的连接。这些连接的限制是在代理配置中指定的。默认的连接数限制为 50。如果一台计算机上有多个用户,则可能需要增加此限制的值,方法是使用 Configuration Agent 向导 (/usr/bin/apoc-config) 更改“最大客户端连接数”设置。如果 Configuration Agent 达到最大连接数,则会在 Configuration Agent 日志中记录与以下内容类似的错误消息:
Nov 18, 2005 3:20:55 PM com.sun.apoc.daemon.misc.APOCLogger warning WARNING: The maximum number of client connections ( 50 ) has been reached. No new client connections can be established at this time. |
设计 Configuration Agent 时的假设之一是,Desktop Manager 所创建的策略数据是相对静态的(即,不会发生频繁更改)。此假设导致生成了一个步骤,即代理间歇性地参考策略系统信息库,以查看是否进行过修改。默认情况下,代理每小时为所有正在运行的桌面应用程序检查一次系统信息库。因此,使用 Desktop Manager 进行更改之后,至多需要等一小时,正在运行的桌面应用程序即会收到更改通知。如果需要,可以使用 Agent Configuration 向导 (/usr/bin/apoc-config ) 更改“常规检测间隔”的值,以提高系统信息库检查频率。另外,也可以强制 Configuration Agent 为所有连接的应用程序刷新策略数据,方法是以超级用户身份登录,然后执行 /usr/lib/apoc/apocd change-detect 命令。