使用 pkgdepend(1) 命令可自动生成软件包的相关项。生成的 depend 操作在依赖操作中进行了定义,并在Chapter 4, 指定软件包相关项中有进一步的讨论。
相关项生成由两个单独的步骤组成:
相关项生成。确定软件依赖的文件。使用 pkgdepend generate 命令。
相关项解析。确定包含软件所依赖的那些文件的软件包。使用 pkgdepend resolve 命令。
如果 pkgdepend 无法完全确定相关项,手动声明某些相关项可能会是必要的。在这种情况下,应该向清单中添加解释性注释。
在以下命令中,-m 选项导致 pkgdepend 在输出中包含整个清单。-d 选项将 proto 目录传递给命令。
$ pkgdepend generate -md proto mypkg.p5m.2 | pkgfmt > mypkg.p5m.3
输出的 mypkg.p5m.3 文件包含以下内容。pkgdepend 实用程序通过 mylib.so.1 和 mycmd 添加了有关对 libc.so.1 的相关项的表示法。无提示地省略了 mycmd 和 mylib.so.1 之间的内部相关项。
set name=pkg.fmri value=mypkg@1.0,5.11-0 set name=pkg.summary value="This is an example package" set name=pkg.description \ value="This is a full description of all the interesting attributes of this example package." set name=info.classification \ value=org.opensolaris.category.2008:Applications/Accessories set name=variant.arch value=i386 dir path=opt/mysoftware owner=root group=bin mode=0755 dir path=opt/mysoftware/bin owner=root group=bin mode=0755 file opt/mysoftware/bin/mycmd path=opt/mysoftware/bin/mycmd owner=root \ group=bin mode=0644 dir path=opt/mysoftware/lib owner=root group=bin mode=0755 file opt/mysoftware/lib/mylib.so.1 path=opt/mysoftware/lib/mylib.so.1 \ owner=root group=bin mode=0644 dir path=opt/mysoftware/man owner=root group=bin mode=0755 dir path=opt/mysoftware/man/man1 owner=root group=bin mode=0755 file opt/mysoftware/man/man1/mycmd.1 path=opt/mysoftware/man/man1/mycmd.1 \ owner=root group=bin mode=0644 link path=usr/share/man/index.d/mysoftware target=/opt/mysoftware/man depend fmri=__TBD pkg.debug.depend.file=libc.so.1 \ pkg.debug.depend.reason=opt/mysoftware/bin/mycmd \ pkg.debug.depend.type=elf type=require pkg.debug.depend.path=lib \ pkg.debug.depend.path=opt/mysoftware/lib pkg.debug.depend.path=usr/lib depend fmri=__TBD pkg.debug.depend.file=libc.so.1 \ pkg.debug.depend.reason=opt/mysoftware/lib/mylib.so.1 \ pkg.debug.depend.type=elf type=require pkg.debug.depend.path=lib \ pkg.debug.depend.path=usr/lib
为解析相关项,pkgdepend 检查当前安装在用于生成软件的映像中的软件包。缺省情况下,pkgdepend 将输出置于 mypkg.p5m.3.res 中。此步骤需要运行一段时间,因为需要装入有关运行中系统的大量信息。如果希望将此时间分摊到所有的软件包上,可以使用 pkgdepend 实用程序一次性解析多个软件包。一次只对一个软件包运行 pkgdepend 从时间上来看不太高效。
$ pkgdepend resolve -m mypkg.p5m.3
完成后,输出的 mypkg.p5m.3.res 文件包含以下内容。pkgdepend 实用程序将有关依赖于 libc.so.1 的文件相关项的表示法转换为交付该文件的 pkg:/system/library 中的软件包相关项。
set name=pkg.fmri value=mypkg@1.0,5.11-0 set name=pkg.summary value="This is an example package" set name=pkg.description \ value="This is a full description of all the interesting attributes of this example package." set name=info.classification \ value=org.opensolaris.category.2008:Applications/Accessories set name=variant.arch value=i386 dir path=opt/mysoftware owner=root group=bin mode=0755 dir path=opt/mysoftware/bin owner=root group=bin mode=0755 file opt/mysoftware/bin/mycmd path=opt/mysoftware/bin/mycmd owner=root \ group=bin mode=0644 dir path=opt/mysoftware/lib owner=root group=bin mode=0755 file opt/mysoftware/lib/mylib.so.1 path=opt/mysoftware/lib/mylib.so.1 \ owner=root group=bin mode=0644 dir path=opt/mysoftware/man owner=root group=bin mode=0755 dir path=opt/mysoftware/man/man1 owner=root group=bin mode=0755 file opt/mysoftware/man/man1/mycmd.1 path=opt/mysoftware/man/man1/mycmd.1 \ owner=root group=bin mode=0644 link path=usr/share/man/index.d/mysoftware target=/opt/mysoftware/man depend fmri=pkg:/system/library@0.5.11-0.175.2.0.0.18.0 type=require