系统管理指南:网络服务

第 10 章 引入传统服务

传统服务是早于 SLP 的开发和实现的网络服务。行式打印机守护进程 (lpsched)、NFS 文件服务和 NIS/NIS+ 名称服务等 Solaris 服务不包含用于 SLP 的内部 SA。本章介绍通知传统服务的时间和方式。

何时通知传统服务

通过传统服务通知,可使 SLP UA 在网络中查找如下所示的设备和服务。可以查找不包含 SLP SA 的硬件设备和软件服务。例如,当具有 SLP UA 的应用程序需要查找不包含 SLP SA 的打印机或数据库时,可能需要使用传统通知。

通知传统服务

可以使用以下任一方法来通知传统服务。

修改服务

如果软件服务器的源代码可用,则可引入 SLP SA。用于 SLP 的 C 和 Java API 使用起来相对简单。有关 C API 的信息和有关 Java API 的文档,请参见手册页。如果服务是硬件设备,则制造商可能会有可引入 SLP 的更新 PROM。有关更多信息,请与设备制造商联系。

通知未启用 SLP 的服务

如果没有源代码或包含 SLP 的更新的 PROM,则可编写一个使用 SLP 客户机库通知服务的小型应用程序。此应用程序可用作小型守护进程,可在用来启动和停止服务的同一 Shell 脚本中启动或停止。

SLP 代理注册

Solaris slpd 支持用代理注册文件通知的传统服务。代理注册文件是可移植格式的服务通知的列表。

Procedure如何启用 SLP 代理注册

  1. 在主机文件系统或可通过 HTTP 访问的任何网络目录中创建代理注册文件。

  2. 确定是否存在用于该服务的服务类型模板。

    模板是对服务 URL 和服务类型的属性的说明。模板用于为特定服务类型定义通知的组成部分:

    • 如果存在服务类型模板,请使用该模板来构造代理注册。有关服务类型模板的更多信息,请参见 RFC 2609。

    • 如果没有该服务的服务类型模板,请选择可以准确描述该服务的属性集合。请对通知使用命名授权而非缺省设置。缺省的命名授权只允许用于已标准化的服务类型。有关命名授权的更多信息,请参见 RFC 2609。

      例如,假设一个名为 BizApp 的公司有一个用于跟踪软件缺陷的本地数据库。为通知该数据库,该公司可能使用服务类型为 service:bugdb.bizapp 的 URL。命名授权将为 bizapp

  3. 执行以下步骤,以配置 /etc/inet/slp.conf 文件(此文件位于前面步骤创建的注册文件的位置)中的 net.slp.serializedRegURL 属性。

  4. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  5. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  6. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  7. /etc/inet/slp.conf 文件的 net.slp.serializedRegURL 属性中指定代理注册文件的位置。


    net.slp.net.slp.serializedRegURL=proxy registration file URL
    

    例如,如果串行化的注册文件是 /net/inet/slp.reg,则可按如下所示来配置属性:


    net.slp.serializedRegURL=file:/etc/inet/slp.reg
  8. 保存更改并关闭文件。

  9. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

使用 SLP 代理注册进行通知

服务通知由标识服务 URL、可选范围和一系列属性定义的行构成。SLP 守护进程将完全按照与 SA 客户机相同的方式来读取、注册和维护代理通知。下面是来自代理注册文件的通知的示例。

在此示例中,通知了支持 LPR 协议和 FTP 服务器的传统打印机。为了便于说明,添加了行号,但它们不是文件的构成部分。


 (1) #Advertise legacy printer. 

 (2) 

 (3) service:lpr://bizserver/mainspool,en,65535

 (4) scope=eng,corp

 (5) make-model=Laserwriter II

 (6) location-description=B16-2345

 (7) color-supported=monochromatic

 (8) fonts-supported=Courier,Times,Helvetica 9 10

 (9) 

 (10) #Advertise FTP server

 (11) 

 (12) ftp://archive/usr/src/public,en,65535,src-server

 (13) content=Source code for projects

 (14) 

注 –

对于转义非 ASCII 字符,代理注册文件与配置文件支持相同的约定。有关代理注册文件格式的更多信息,请参见 RFC 2614。


表 10–1 SLP 代理注册文件说明

行号 

说明 

1 和 10 

注释行以井号 (#) 开头,不影响文件操作。从注释行开头一直到结束的所有字符都将被忽略。 

2、9 和 14 

限定通知的空行。 

3 和 12 

具有用逗号分隔的三个必需字段和一个可选字段的服务 URL: 

  • 通知的通用或 service:URL。有关如何形成 service: URL 的说明,请参见 RFC 2609。

  • 通知的语言。在前面的示例中,此字段指定为英语,即 en。语言是 RFC 1766 语言标记。

  • 注册的生命周期,以秒为单位度量。生命周期限制为 16 位的无符号整数。如果生命周期小于最大值 65535,slpd 将使通知超时。如果生命周期为 65535,slpd 将定期刷新通知,并且在 slpd 退出之前,一直将生命周期视为永久。

  • (可选)服务类型字段-如果使用此字段,它将定义服务类型。如果定义了服务 URL,则可更改通知 URL 所用的服务类型。在前面的代理注册文件示例中,第 12 行包含一个通用 FTP URL。可选类型字段会使 URL 以服务类型名称 src-server 来进行通知。缺省情况下,类型名称中不会添加 service 前缀。

范围指定。 

可选行由标记 scope、后面的等号和以逗号分隔的范围名称列表组成。范围名称由 net.slp.useScopes 配置属性定义。此列表中只应包括为主机配置的范围。如果未添加范围行,则在配置了 slpd 的所有范围内进行注册。范围行必须紧随 URL 行之后。否则,系统会将范围名称识别为属性。

5–8 

属性定义。 

在可选的范围行之后,批量服务通知中包含属性/值列表对行。每个对都包含属性标记,其后是等号以及属性值或以逗号分隔的值列表。在前面的代理注册文件示例中,第 8 行显示了具有多个值的属性列表。所有其他列表都是单值。属性名称和值的格式与在线 SLP 消息的格式相同。 

通知传统服务时的注意事项

通常,修改源代码来添加 SLP 的方法,优于编写启用 SLP 的服务(该服务使用 SLP API 代表其他服务进行通知)。修改源代码的方法也优于使用代理注册的方法。修改源代码时,可以添加特定于服务的功能并密切跟踪服务的可用性。如果源代码不可用,则编写代表其他服务进行通知的启用 SLP 的帮助器服务的方法,优于使用代理注册的方法。此帮助器服务最好集成到用于控制激活和取消激活服务启动/停止过程中。当没有源代码可用并且编写单独的 SA 不可行时,代理通知通常是第三种选择。

仅当运行 slpd 以读取代理注册文件时,才能维护代理通知。代理通知与服务之间没有直接的联系。如果通知超时或 slpd 停止,代理通知将不再可用。

如果服务关闭,则必须停止 slpd。该序列化注册文件被编辑,以注释掉或删除代理通知,然后 slpd 重新启动。重新启动或重新安装服务时,必须遵循相同的过程。代理通知与服务之间缺少联系是代理通知的主要缺点。