Child pages
  • Building an IPS manifest

Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

When I build a third-party package, I publish it into an IPS repo using the following steps:

1. Put the metadata into a file called "metadata". Most of this information can come from a template file, eg a build Makefile or something. For example:

Code Block
set name=pkg.fmri value=my-package@$version
set name=pkg.description value="My Great Package"
set name=description value="My Great Package"
license /path/to/license/file license=BSD

2. Put the package dependencies into a file called "deps". This is hard to generate automatically, one (good, but incomplete) approach might be to use ldd to find all the linked libraries and then use pkg search to find which package provides them. I tend to calculate the dependencies once and commit them as part of the build. For example:

Code Block
depend fmri=pkg:/library/zlib type=require
depend fmri=pkg:/system/library/math type=require
depend fmri=pkg:/library/expat type=require

3. Do a "make install" into a local install root, for example:

Code Block
DESTDIR=insroot make install

4. Move to the install root and run the attached script to generate the file "payload". For example:

Code Block
perl usr > ../payload

5. Join "metadata", "deps", and "payload" together into "manifest":

Code Block
cat metadata deps payload > manifest

6. Upload the package:

Code Block
pkgsend -s $REPO publish -d insroot --fmri-in-manifest manifest