After that, you'll have two directories of interest under illumos-gate.
- The proto area, specifically proto/root_i386, that is a fully installed copy of illumos.
- Under packages, an on-disk IPS package respoitory.
For this, there is an additional github repo you'll need to check out, in addition to the ones from the previous article.
cd ${HOME}/Tribblix
git clone https://github.com/tribblix/tribblix-transforms
What is this repo? It's a list of transformations that are applied to the package conversion process. Generally, rather than modify the gate or the build, if there's something I don't want to ship, or something I want to move between packages, or a file I want to change, then it gets transformed at the packaging stage.
The other thing you'll need to use my scripts is a signing certificate. In Tribblix, the illumos ELF objects are digitally signed (yes, I ought to extend this to all ELF objects I ship). Nothing actually uses this yet, but it's all there ready for when verification is required.
To create a signing key and certificate:
mkdir ${HOME}/fOf course, choose the subject to match your own requirements.
cd ${HOME}/f
openssl req -x509 -newkey rsa:2048 -nodes \
-subj "/O=MyOrganization/CN=my.domain.name" \
-keyout elfcert.key -out elfcert.crt -days 3650
Then you can run the scripts in the tribblix-build repo to generate SVR4 packages. These parse the IPS manifests, extract the files from the IPS repo, create the SVR4 prototype file, and automatically generate SVR4 install scripts from the IPS metadata.
So, to create packages, run the following as root:
/illumos/Tribblix/tribblix-build/repo_all.sh \
-T /illumos/Tribblix \
-G /illumos/Illumos/illumos-gate \
-S /illumos/f/elfcert
Of course, replace /illumos with wherever your build user's home directory is. (You can't use $HOME, because this is run as root where $HOME is likely to be different to that of the user who did the build.) The -T flag tells it where the Tribblix tools are checked out, -G where the gate was built, and -S where the signing certificate is. If you want to change the version of the packages you generate, there's a -V flag as well. I normally redirect the output to a log file, as it's quite verbose
Wait a while, and you'll have a set of packages under /var/tmp/illumos-pkgs. Hopefully the pkgs directory there will have your packages, and the build and tmp directories will be empty (if the build directory isn't, it will have a half-created package or packages in it, so you'll be able to see which package or packages failed).
For omnitribblix it's very similar:
/illumos/Tribblix/tribblix-build/omni_all.sh \
-T /illumos/Tribblix \
-G /illumos/Illumos/omnitribblix \
-S /illumos/f/elfcert
And the packages in this case end up in /var/tmp/omni-pkgs.
If you look, you'll see that there are 3 files for each package:
- A .pkg file, which is in SVR4 datastream format
- A .zap file, which is the (compressed) zap format Tribblix uses
- An md5 checksum, which is used for basic validation in the package catalog