可使用 pkgmk 命令生成软件包。pkgmk 命令可执行以下任务:
此命令最简单的形式是不带任何选项的 pkgmk 命令。在使用不带选项的 pkgmk 命令之前,请确保您的当前工作目录包含软件包的 prototype 文件。命令的输出、文件和目录都被写入 /var/spool/pkg 目录。
当使用 pkgmk 命令生成软件包时,它将创建一个替换 prototype 文件的 pkgmap 文件。来自上一个示例中的 pkgmap 文件包含以下内容:
$ more pkgmap : 1 3170 1 d none SUNWcadap 0755 root sys 1 d none SUNWcadap/demo 0755 root bin 1 f none SUNWcadap/demo/file1 0555 root bin 14868 45617 837527496 1 d none SUNWcadap/lib 0755 root bin 1 f none SUNWcadap/lib/file2 0644 root bin 1551792 62372 837527499 1 d none SUNWcadap/man 0755 bin bin 1 d none SUNWcadap/man/man1 0755 bin bin 1 f none SUNWcadap/man/man1/file3.1 0444 bin bin 3700 42989 837527500 1 f none SUNWcadap/man/man1/file4.1 0444 bin bin 1338 44010 837527499 1 f none SUNWcadap/man/windex 0644 root other 157 13275 837527499 1 d none SUNWcadap/srcfiles 0755 root bin 1 f none SUNWcadap/srcfiles/file5 0555 root bin 12208 20280 837527497 1 f none SUNWcadap/srcfiles/file6 0555 root bin 12256 63236 837527497 1 i pkginfo 140 10941 837531104 $ |
此文件格式非常类似于 prototype 文件的格式。但是,pkgmap 文件包含以下信息:
第一行指示了软件包所分布的卷的数量,以及软件包安装后的近似大小。
例如:1 3170 表明软件包分布在一个卷上,在安装后占用大约 3170 个 512 字节块。
有三个额外字段定义了每个软件包对象的大小、校验和和修改时间。
软件包对象根据类和路径名按照字母顺序列出,从而减少了安装软件包所需的时间。
创建 pkginfo 文件,如果尚未创建。
有关逐步说明,请参见如何创建 pkginfo 文件。
创建 prototype 文件,如果尚未创建。
有关逐步说明,请参见如何使用 pkgproto 命令创建 prototype 文件。
将您的当前工作目录设置为包含软件包的 prototype 文件的目录。
生成软件包。
$ pkgmk [-o] [-a arch] [-b base-src-dir] [-d device] [-f filename] [-l limit] [-p pstamp] [-r rootpath] [-v version] [PARAM=value] [pkginst] |
覆写软件包的现有版本。
重写 pkginfo 文件中的体系结构信息。
当 pkgmk 命令在开发系统上搜索对象时,要求将 base-src-dir 添加到可重定位路径名的开头。
指定应将软件包复制到 device 上(可能是一个绝对目录路径名、磁盘或可移除磁盘)。
指定一个文件 filename 作为您的 prototype 文件。缺省名称是 prototype 或 Prototype。
以 512 字节块为单位指定输出设备的最大大小。
重写 pkginfo 文件中的生产标记定义。
请求将根目录 rootpath 用于在开发系统上定位对象。
重写 pkginfo 文件中的版本信息。
设置全局环境变量。首字母为小写字母的变量在生成时被解析。首字母为大写字母的变量被放置到 pkginfo 文件中供安装时使用。
按软件包缩写或特定实例(例如,SUNWcadap.4)指定软件包。
有关更多信息,请参见 pkgmk(1) 手册页。
验证软件包的内容。
$ pkgchk -d device-name pkg-abbrev Checking uninstalled directory format package pkg-abbrev from device-name ## Checking control scripts. ## Checking package objects. ## Checking is complete. $ |
指定软件包的位置。请注意,device-name 可以是完整目录路径名或者磁带或可移除磁盘的标识符。
pkgchk 命令会列出检查软件包的哪些方面,并根据情况显示警告或错误。有关 pkgchk 命令的更多信息,请参见验证软件包的完整性。
应该非常认真地对待错误。错误可能意味着需要修正脚本。如果您不认同 pkgchk 命令的输出,请检查所有错误,然后继续。
此示例使用在优化使用 pkgproto 命令创建的 prototype 文件中创建的 prototype 文件。
$ cd /home/jane/InfoFiles $ pkgmk ## Building pkgmap from package prototype file. ## Processing pkginfo file. WARNING: parameter set to "system990708093144" WARNING: parameter set to "none" ## Attempting to volumize 13 entries in pkgmap. part 1 -- 3170 blocks, 17 entries ## Packaging one part. /var/spool/pkg/SUNWcadap/pkgmap /var/spool/pkg/SUNWcadap/pkginfo /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6 ## Validating control scripts. ## Packaging complete. $ |
如果您的软件包中包含可重定位文件,可使用 pkgmk 命令的 -b base-src-dir 选项,来指定在创建软件包期间将添加到可重定位路径名开头的路径名。如果您没有为可重定位文件使用 path1=path2 格式,或没有在 prototype 文件中使用 !search 命令指定搜索路径,该选项很有用。
以下命令将生成具有下列特征的软件包:
该软件包是使用 pkgproto 命令创建的 prototype 样例文件生成的。有关更多信息,请参见示例-使用 pkgproto 命令创建 prototype 文件。
生成软件包时没有修改 path 字段。
软件包会为 pkginfo 文件添加一个条目。
$ cd /home/jane/InfoFiles $ pkgmk -o -b /home/jane ## Building pkgmap from package prototype file. ## Processing pkginfo file. WARNING: parameter set to "system960716102636" WARNING: parameter set to "none" ## Attempting to volumize 13 entries in pkgmap. part 1 -- 3170 blocks, 17 entries ## Packaging one part. /var/spool/pkg/SUNWcadap/pkgmap /var/spool/pkg/SUNWcadap/pkginfo /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6 ## Validating control scripts. ## Packaging complete. |
在此示例中,通过指定 -o 选项在缺省目录 /var/spool/pkg 中生成软件包。此选项会覆写在示例 2–2 中创建的软件包。
如果您将软件包信息文件(例如 pkginfo 和 prototype)和软件包对象放置在两个不同的目录中,可使用 pkgmk 命令的 -b base-src-dir 和 -r rootpath 选项创建软件包。如果您的软件包对象位于名为 /product/pkgbin 的目录中,而其他软件包信息文件位于名为 /product/pkgsrc 的目录,可以使用以下命令将软件包放置在 /var/spool/pkg 目录下:
$ pkgmk -b /product/pkgbin -r /product/pkgsrc -f /product/pkgsrc/prototype |
可选择使用以下命令获得相同结果:
$ cd /product/pkgsrc $ pkgmk -o -b /product/pkgbin |
在此示例中,pkgmk 命令使用当前工作目录查找软件包的剩余部分(例如 prototype 和 pkginfo 信息文件)。
如果您要为软件包添加任何可选信息文件和安装脚本,请参见第 3 章。否则,在生成软件包之后,应该验证其完整性。第 4 章介绍了如何执行此任务,并提供了有关如何将经过验证的软件包转换为分发介质的逐步说明。