另一种常见使用情况是在新的发布者名称下重新发布软件包。将软件包从多个系统信息库中整合到单个系统信息库时,这很有用。例如,您可能希望将软件包从具有多个不同开发团队的系统信息库中整合到用于集成测试的单个系统信息库中。
要在新的发布者名称下重新发布,请使用上述示例中显示的 pkgrecv、pkgmogrify、pkgrepo 和 pkgsend 步骤。
以下转换示例将发布者更改为 mypublisher:
<transform set name=pkg.fmri -> edit value pkg://[^/]+/ pkg://mypublisher/>
可以使用简单的 shell 脚本迭代系统信息库中的所有软件包。使用 pkgrecv --newest 命令的输出仅处理系统信息库中的最新软件包。
以下脚本将上述转换保存在名为 change-pub.mog 的文件中,然后从 development-repo 重新发布到新的系统信息库 new-repo,从而在此过程中更改了软件包发布者:
#!/usr/bin/ksh93 pkgrepo create new-repo pkgrepo -s new-repo set publisher/prefix=mypublisher mkdir incoming for package in $(pkgrecv -s ./development-repo --newest); do pkgrecv -s development-repo -d incoming --raw $package done for pdir in incoming/*/* ; do pkgmogrify $pdir/manifest change-pub.mog > $pdir/manifest.newpub pkgsend -s new-repo publish -d $pdir $pdir/manifest.newpub done
可以修改此脚本,使其能够执行各种任务,如仅选择某些软件包、对软件包的版本控制方案做出其他更改以及在其重新发布每个软件包时显示进度。