跳过导航链接 | |
退出打印视图 | |
应用程序包开发者指南 Oracle Solaris 10 1/13 Information Library (简体中文) |
在此案例研究中,使用标准类和类操作脚本在软件包安装期间修改现有文件。它使用三种修改方法之一。另外两种方法将在使用 sed 类和 postinstall 脚本修改文件和使用 build 类修改文件中进行介绍。修改的文件是 /etc/inittab。
此案例研究展示如何使用安装类操作脚本和删除类操作脚本。有关更多信息,请参见编写类操作脚本。
要使用类和类操作脚本在安装期间修改 /etc/inittab,您必须完成以下任务:
创建一个类。
创建名为 inittab 的类。必须为该类提供安装和删除类操作脚本。在 pkginfo 文件的 CLASSES 参数中定义 inittab 类。
创建一个 inittab 文件。
此文件包含将添加到 /etc/inittab 的条目的信息。请注意在 prototype 文件图中,inittab 是 inittab 类的成员并且文件类型为 e(表示可编辑)。
创建安装类操作脚本 (i.inittab)。
切记类操作脚本每次执行时都必须产生相同结果。类操作脚本执行以下过程:
检查以前是否已添加该条目
如果是,删除该条目的所有以前版本
编辑 inittab 文件并添加注释行,以便您知道该条目的来源
将临时文件移回 /etc/inittab
当收到 ENDOFCLASS 指示符时,执行 init q 命令
请注意,此安装脚本可执行 init q 命令。此方法不需要使用只有一行的 postinstall 脚本。
创建删除类操作脚本 (r.inittab)。
删除脚本与安装脚本非常类似。安装脚本添加的信息会被删除,而且会执行 init q 命令。
此案例研究比下一个更为复杂;请参见使用 sed 类和 postinstall 脚本修改文件。在此案例研究中,不是提供两个文件而是需要三个文件,而且提供的 /etc/inittab 文件实际上只是包含要插入的条目片段的占位符。此占位符可能已被放置到 i.inittab 文件中,除非 pkgadd 命令必须将一个文件传递到 i.inittab 文件。此外,必须将删除过程放置到一个单独的文件 (r.inittab) 中。虽然此方法效果很好,但最好将其保留为在涉及多个文件的非常复杂的安装情况下使用。请参见在安装期间修改 crontab 文件。
由于 inittab 条目末尾的注释基于软件包实例,因此使用 sed 类和 postinstall 脚本修改文件中使用的 sed 程序支持多个软件包实例。使用 build 类修改文件中的案例研究给出了一种在安装期间编辑 /etc/inittab 的更简化的方法。
PKG=case5 NAME=Case Study #5 CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1d05 CLASSES=inittab
i pkginfo i i.inittab i r.inittab e inittab /etc/inittab ? ? ?
# PKGINST parameter provided by installation service while read src dest do # remove all entries from the table that # associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest > /tmp/$$itab || exit 2 sed -e "s/$/#$PKGINST" $src >> /tmp/$$itab || exit 2 mv /tmp/$$itab $dest || exit 2 done if [ "$1" = ENDOFCLASS ] then /sbin/init q || exit 2 fi exit 0
# PKGINST parameter provided by installation service while read src dest do # remove all entries from the table that # are associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest > /tmp/$$itab || exit 2 mv /tmp/$$itab $dest || exit 2 done /sbin/init q || exit 2 exit 0
rb:023456:wait:/usr/robot/bin/setup