使用 NIM 通过 HTTP 协议安装 AIX 更新和新软件包

网络 Installation Manager (NIM) 支持通过安全超文本传输协议 (HTTP) 协议安装 AIX® 更新,以符合限制使用网络文件服务器 (NFS) 的新兴数据中心策略。

AIX BOS 安装仍需要使用 NFS V 3 协议或更安全的 NFS V 4 协议。 除了安装文件集之外,还支持通过 HTTP 协议执行诸如脚本执行和复制 file_res 目录之类的 NIM 定制进程。

HTTP 协议为 NIM 管理提供了以下优点:
  • 所有通信都通过单个 HTTP 端口进行。 因此,通过防火墙进行的授权更容易管理。
  • AIX 安装步骤是从客户机的端 (即安装的目标系统) 开始执行的。 因此,运行命令时不需要远程访问。
  • NIM 或当前使用 NFS 的客户机/服务器模型的任何其他产品可以轻松地使用 HTTP。
  • 能够扩展最终产品,以支持其他协议。

NIM HTTP 服务

AIX 7.2.0 提供了一个新的服务处理程序,用于提供对 NIM 资源的 HTTP 访问权。 nimhttp 服务在 /etc/servicesnimhttp 守护程序中定义,它们侦听通过 4901 端口发出的请求。 当 nimhttp 服务处于活动状态时, NIM 客户机尝试访问 /etc/services 文件并请求定制 nimhttp 服务中定义的脚本。 如果 HTTP 访问失败或访问被拒绝,那么将发生对 NFS 客户机的访问故障转移尝试。

在 NIM 服务器上启用 nimhttp 服务

要启用 nimhttp 服务,请在 NIM 服务器上运行以下命令:
# nimconfig -h
注: 将自动发现 cryptossl 设置。
启动 nimhttp 服务时,该服务会尝试读取位于 root 用户的缺省主目录中的 httpd.conf 配置文件。 如果您是首次使用 nimhttp 服务,并且在未创建配置文件的情况下启动 nimhttp 服务,那么将创建配置文件并使用 nimhttp 服务的缺省值进行填充。
以下是缺省 httpd.conf 配置文件的示例:
# cat /httpd.conf
#
#
#http service defines
#
#
service.name=nimhttp
# Designates the service name used  when discovering the listening port for requests (i.e., nimhttp)
#
service.log=/var/adm/ras/nimhttp.log
#Log of access attempts and equivalent responses. Also useful for debug purposes.
#
# service.proxy_port=
#Designates the service portnumber used when configured as a proxy.
#
#-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­
#	http configuration 
#-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­
#	
document_root=/export/nim/
#Designates the directory to serve files from.
#	
enable_directory_listing=yes
#Allow requests for listing served files/directories under the document root.
#
enable_proxy=no
#Enable the webservice to act as a proxy server.
#
ssl.cert_authority=/ssl_nimsh/certs/root.pem
#Designates the file location of the certificate authority used for digital certificate signing.
#
ssl.pemfile=/ssl_nimsh/certs/server.pem
#Designates the file location of the PEM format file which contains both a certificate and private key.
#

httpd.conf 文件的属性

httpd.conf 文件具有以下属性和设置:

document_root 路径

可以使用 HTTP 协议来访问未定义为资源位置的文件。 这些文件必须位于 document_root的路径设置中。 当 nimhttp 服务可操作时,无法修改定义的 document_root 路径位置。

document_root 路径可能包含许多目录。 设置 enable_directory_listing 选项时,客户机请求可以通过 document_root 路径。 如果 enable_directory_listing 选项设置为值 no,那么安装期间使用的所有文件都必须位于 document_root 路径的当前工作目录中。

安全套接字层 (SSL) 设置

nimhttp 服务使用基本协议握手作为缺省认证。 必须为认证中心 (CA) 和服务器的根证书文件提供有效路径,才能启用更安全的 "摘要认证" 方法。

可以使用 NIM 中的现有 SSL 管理选项来创建 nimhttp 服务中使用的认证中心和根隐私增强邮件 (PEM) 文件。 要创建 nimhttp 服务所使用的 ssl.cert_authorityssl.pemfiles 文件,请在 NIM 主控机上运行以下命令:
# nimconfig –c
注: 如果当前目录中存在这些 SSL 文件,那么您不需要创建 ssl.cert_authorityssl.pemfiles 文件。
要在使用 SSL 选项启动 nimhttp 服务之前检查是否已针对 SSL 权限配置 NIM 主控机,请在 NIM 主控机上运行以下命令:
# lsnim –a ssl_support

代理设置

NIM 客户机命令依赖于 nimhttp 服务,因为 NIM 服务器充当托管 NIM 资源的文件服务器。

或者,您可以使用代理选项,通过使用 nimhttp 服务器代码来处理 HTTP 请求。 使用值 enable_proxy=yes启用代理选项时,通过 nimhttp 端口发出的任何服务请求都将转发到 service.proxy_port 端口列表中列出的服务端口。

HTTP 认证由目标服务处理,而不是由 nimhttp 服务处理。 在 NIM 客户机中本地标识了目标服务端口。

在 NIM 服务器上禁用 nimhttp 服务

要禁用 nimhttp 服务,请在 NIM 服务器上运行以下命令:
# nimconfig -H

支持 HTTP 访问的 NIM 资源

以下资源可以使用 nimhttp 服务访问 http 文件:
  • file_res
  • fix_bundle
  • installp_bundle
  • lpp_source
  • script

示例

  1. 要安装 bos.sysmgt.nim.master 文件集并定义基本资源,请运行以下命令:
    # nim_master_setup –a device=/dev/cd0
  2. 要对 NIM 环境启用安全套接字层 (SSL) 管理,请运行以下命令:
    # nimconfig –c
  3. 要启用具有 SSL 支持的 nimhttp 服务,请运行以下命令:
    # nimconfig -h
  4. 要检查服务日志文件中是否存在任何已发生的错误,请运行以下命令:
    # cat /var/adm/ras/nimhttp.log
  5. 如果您正在使用推送操作,那么以下命令支持 nimhttp 服务:
    nim –o cust–a file_res= <obj_name> <client_obj_name>
    nim –o cust–a script= <obj_name> <client_obj_name>
    nim –o cust –a lpp_source=<obj_name> -a filesets=<fileset names to install> 
                                                    <client_obj_name>
    nim –o cust –a lpp_source=<obj_name> -a installp_bundle=<obj_name> <client_obj_name>
    nim –o cust –a lpp_source=<obj_name> -a fixes=update_all <client_obj_name>
    
  6. 如果正在使用来自 NIM 客户机的拉取操作,那么以下命令支持 nimhttp 服务:
    nimclient –o cust –a file_res=<obj_name>
    nimclient –o cust –a script=<obj_name>
    nimclient –o cust –a lpp_source=<obj_name> -­-­-­a filesets=<fileset names to install> 
    nimclient –o cust –a lpp_source=<obj_name> -­-­-­a installp_bundle=<obj_name>
    nimclient –o cust –a lpp_source=<obj_name> -­-­-­a fixes=update_all

用于 nimhttp 服务的调试会话

从 NIM 主控机到客户机的通信通过 nimsh 协议进行,以运行应用程序。 但是,客户机请求通过 HTTP 协议 (而不是通常的 NFS 导出或安装过程) 发送文件资源。 以下步骤显示了示例调试会话。
  1. 要从 NIM 主控机启动 nimhttp 服务,请运行以下命令:
    nimconfig -h
  2. 要使 NIM 主控机的当前窗口保持活动状态以查看来自客户机的 HTTP 请求,请运行以下命令。
    tail -f /var/adm/ras/nimhttp.log
  3. 在单独的窗口中,在客户机或主系统上,从安装了 AIX 7.2 的系统运行所需的 cust 操作。
  4. nimhttp 服务的日志活动显示在终端窗口上。

确认使用 HTTP 而不是 NFS

要确保使用 HTTP 协议而不是使用 NFS 协议来执行 NIM cust 操作,请确保 NFS 无法通过从 /etc/exports 文件中除去条目来访问 NIM 资源。 有关指示信息,请参阅 nimhttp 服务的调试会话 部分中的步骤 1 - 4 。 在 NIM cust 操作开始下载文件集之后,运行 exportfs -uav 命令以确保 NIM 主控机不会从客户机故障转移到 NFS 安装。

如果成功接收到 nimhttp 服务请求,那么将显示类似于以下示例的日志条目:
-­-­-­-­-­-­
Mon Oct 26 14:45:37 2015	
nim_http: data string passed to get_http_request: "GET /client.defs HTTP/1.1

Connection: close

"

Mon Oct 26 14:45:37 2015	Request Type is GET
Mon Oct 26 14:45:37 2015	Sending Response Header "200 OK"

Mon Oct 26 14:45:37 2015	Sending file over socket 5. Expected length is 2989
Mon Oct 26 14:45:37 2015	Total length sent is 2989

Mon Oct 26 14:45:37 2015	handle_httpGET: Entering cleanup statement

验证 NIM 环境配置

可以使用以下步骤来确认是否正确配置了 NIM 环境以处理 nimhttp 服务。

  1. 要验证 NIM 主控机是否正在侦听特定主机地址上的连接请求,请在 NIM 主控机上运行以下命令:
    # cat /etc/niminfo
    
    # nimconfig -h	(if necessary)
     
    # netstat -­a | grep nimhttp
    # netstat -­i
    # cat /httpd.conf
    # cat /var/adm/ras/nimhttp.log
    
    在客户机上,运行以下命令:
    # cd /tmp
    # nimhttp -f /export/nim -o dest=/tmp -v
    要确定客户机请求是否已到达 NIM 主控机,请在 NIM 主控机上运行以下命令:
    # cat /var/adm/ras/nimhttp.log
  2. 如果步骤 1 中的命令导致意外输出,那么客户机可能正在从 NIM 主控机未响应的主机 IP 请求 nimhttp 服务。 您可以检查正在运行主系统的主机名和 IP 地址的列表。 您可以提供主机名作为先前客户机请求期间提供的 nimhttp 命令的自变量。 您可以运行 nimhttp -­? 命令以了解 nimhttp 命令的标志语法。