Building OmniOS
See also the illumos developers’ guide if you are interested in contributing to illumos. OmniOS is a near-optimal platform for developing against illumos-gate or our own downstream illumos-omnios.
Overview
Core OmniOS consists of several parts:
- illumos-omnios - Our fork of illumos-gate; this is the core operating system.
- omnios-build - OmniOS userland packages.
- pkg5 - IPS packaging system.
- kayak - the OmniOS installer.
- g11n - Globalisation components (locales, iconv, etc.)
How to build
The easiest way to build OmniOS is using our omni utility which can be installed from the extra.omnios IPS repository.
Each version of OmniOS can only be built on the same version so if you want
to build bloody, you need a machine running up-to-date bloody and the same
for a stable branch such as r151022 - you will need a machine running that
version. A KVM instance works well - just be sure to use the virtio
interface
for the hard disk.
First, create a GitHub account if you don’t have one already and then use the web interface to fork the five repositories listed above.
Once that’s done you can add the extra.omnios
publisher and install omni
The example below is for bloody - if you’re building a stable version then
just replace /bloody/ in the publisher URL.
# pkg set-publisher -g https://pkg.omnios.org/bloody/extra extra.omnios
# pkg install developer/omni
Next, run the setup tool, providing your github username as an argument as well as a path to a build area. It’s common to create a new ZFS filesystem for this as shown below.
# zfs create -o mountpoint=/build rpool/build
% /opt/ooce/bin/omni setup /build <github username>
Note: It is also possible to build OmniOS in a non-global zone. Instructions for setting up a suitable zone can be found in the notes for omni
Once setup is complete, update the repositories using the omni
utility
and build the illumos and omnios components in turn.
% /opt/ooce/bin/omni update_illumos
% /opt/ooce/bin/omni update_omnios
% /opt/ooce/bin/omni build_illumos
% /opt/ooce/bin/omni build_omnios
You can also use
update_world
andbuild_world
to update and build everything at once.