AIX系统作为一个“古老”的Unix系统,如今伴随着IBM公司的Power系列小型机依旧存在于众多银行、电信公司以及其他大型企业的数据中心。虽然其江湖地位不如从前,但其他设备厂商仍不舍得放弃对AIX的支持。而ODM驱动程序是对其支持的必要条件。
# 什么是ODM?
ODM(Object Data Manager),顾名思义就是管理系统对象数据的系统工具。我们熟悉的Windows系统中,有个叫注册表(Register)的部件,存有许多系统和软件的相关配置,ODM大体可以理解为AIX系统的“注册表”。 AIX系统中的ODM主要存储两大类:
- 设备(网卡、HBA卡、磁带、硬盘等)及其配置信息
- 软件(3rd part、SMIT工具)及其配置信息
详细的介绍可以参照这篇博文AIX ODM 简介 (opens new window).
# AIX为什么有ODM?
先说类似的Windows的注册表,学生时代,有过一行修改注册表的CMD命令修好同学电脑时的自豪感,也有过改错了注册表系统被迫重装的尴尬境地。Windows作为大众玩家的系统,大家对注册表的诟病颇多,因为其不像Linux一样,可以轻松编辑配置文件。软件安装或者卸载过程中出现问题,难以解决。
既然Windows的注册表是问题颇多的,那AIX为什么会一直采用这样的ODM系统呢?其原因大概有:
- AIX是商用系统,会对底层的信息做一些屏蔽,
- 运维人员都是专业技术人员,一般不至于因为错误修改ODM而导致系统崩溃,
- 屏蔽软件的配置过程,更有利于安全地使用,
- 集中存放配置信息,读取更加高效。
不过在其他商用的Unix/Linux系统中,例如HP-UX、Solaris、RHEL、SLES中都没有像这样的集中式系统及软件配置系统。大多数系统还是分散的配置文件形式。
而到底是集中配置系统好,还是分散的自由配置文件好,恐怕又会上升到“集中式--分布式之争”。
# ODM具体存在形式及相关操作
ODM以二进制文件的方式存在于:
/etc/objrepos: 主要包含Cu*类的文件,其Pd*类为/usr/lib/objrepos/Pd*类的软链接/usr/lib/objrepos:主要包含预定义的Pd*类文件/usr/share/lib/objrepos:仅包含软件相关信息(SWVPD)
主要的对象文件:
- PdDv:设备类别定义
- PdAt:某一设备类别的相关参数定义
- CuDv:具体某一设备
- CuAt:具体某一设备的相关参数值
ODM文件内容为Stanza样式,如:
PdAt:
uniquetype = "logical_volume/vgsubclass/vgtype"
attribute = "quorum"
deflt = "y"
values = ""
width = ""
type = "R"
generic = ""
rep = "sl"
nls_index = 0
相关操作命令:
- 查询:
odmget -q "name=hdisk0" CuDv - 删除:
odmdelete -q "name=hdisk11" -o CuAt - 增加:
odmadd /odmadd/file/path
# ODM开发中的主要部分介绍
各个厂商或者IBM自己的AIX程序,下载解压后,一般是*.rte文件(runtime environment file),可以直接installp命令行安装,或者用SMIT界面交互式工具来安装。而安装时,必须选择具体的fileset(一个*.rte安装程序可能包含多个fileset)。
# 打包需要的几个重要文件
lpp_name: AIX 软件包应当包含的一个文件,里面纪录软件包以及fileset的依赖、版本、名称、附带文件大小等信息。有固定的格式,如下面的一个简单例子。具体字段意义可以参看IBM Knowledge Center
4 R S farm.apps { farm.apps.hog04.01.0000.0003 1 N U en_US Hog Utilities # ... [ *ifreq bos.farming.rte (4.2.0.0) 4.2.0.15 % /usr/sbin 48 /usr/lpp/farm.apps/farm.apps.hog/4.1.0.3 280 /usr/lpp/farm.apps/farm.apps.hog/inst_root/4.1.0.3.96 /usr/lpp/SAVESPACE 48 /lpp/SAVESPACE 32 /usr/lpp/bos.hos/farm.apps.hog/inst_root/4.1.0.3/ etc 32 % % ranch.hog 4.1.0.0 % IX51366 Hogs producing eggs. IX81360 Piglets have too many ears. ] }liblpp.a: 一个压缩归档文件,里面包含软件安装或者更新所需的对象信息文件及执行脚本,可以用
ar -x liblpp.a反向解压出所含文件。其中几个重要文件:- fileset.inventory: 文件清单表,包含fileset需要的工具或者脚本文件的具体信息,比如大小、所属用户组、可执行情况,
- fileset.config: shell脚本文件,在安装或者更新的最后执行,
- fileset.odmdel: 在添加新的之前,用于删除ODM实体的脚本,
- fileset.odmadd: 核心文件,定义了所有ODM类型和属性的信息,Stanza样式,
- fileset.pre_i、fileset.pre_d、fileset.pre_rm: 故名思意,安装程序之前(i)、卸载程序之前(d)、移除附带文件之前(rm)运行的脚本。
# ODM对象及属性定义(设备驱动)
之前提到liblpp.a这个库文件里面有一个核心文件fileset.odmadd,里面便是需要注入系统ODM的自定义对象信息。
对于设备驱动程序的开发,定义这样的文件是基础。
- PdDv: 定义设备对象,具体参数意义可参照Predefined Devices (PdDv) Object Class (opens new window)
- PdAt: 某一对象的属性定义,可参照Predefined Attribute (PdAt) Object Class (opens new window),而又有哪些参数可以定义呢,IBM官方会有一个叫IHV_ODM_INSTALL的PDF文档来说明。那这个文档哪里获取呢?其实IBM把它放在了你的操作系统里,检查一下这个路径
/usr/lpp/devices.common.IBM.mpio/。这些参数里,比较重要的一些:- model_map:读取SCSI Standard Inquiry Page或者VPD Page的相关字段,来识别设备的一个参数。设对它才是设备接入的第一步,
- model_data:设备启动时需要的,
- model_default:
- vpd_map:读取VPD Page的相关字段信息,解析给操作系统,会成为
lsdev -l xxx输出的结果。 - PCM:设备会选用哪种PCM(Path Control Module),使用AIX系统自带多路径管理软件MPIO的时候,需要定义。当然,可以自己定义一个PCM对象,放在这里引用。
- 注意:这个IHV_ODM_INSTALL并非包含所有系统的可设参数,有一些涉及I/O的参数,需要与IBM工程师沟通来设定。
# Reference
[1] IBM Knowledge Center, Offical, https://www.ibm.com/support/knowledgecenter/ssw_aix_72/generalprogramming/odm.html (opens new window)
[2] AIX for System Administrators, Blog, http://aix4admins.blogspot.com/2011/08/odm-object-data-manager-it-is-database.html (opens new window)
[3] Understanding the AIX Object Data Manager, Training, www.globalknowledge.com
[4] General Programming Concepts: Writing and Debugging Programs, Book.