The design of smartos-live makes it easy to add additional software for the purpose of making custom live images and extending the SmartOS core. To facilitate this we have what we call 'local' projects.
Examples of local projects include:
To get started with this the first things that you would do are:
- Make a directory or clone in a repository for your project in projects/local/
- Create a file called Makefile.joyent
- Add the required targets to Makefile.joyent
- Go back to the smartos-live root and run gmake world and gmake live
The details of what needs to go into this Makefile are below. Here is an example of the Makefile that we use for kvm-cmd.
The local projects are built after illumos-joyent and illumos-extra. Anything can be added in there. The main requirement is to add a Makefile that has specific targets. If you're adding something that already has its own Makefile that you don't want to modify, then you should name it Makefile.joyent.
The required targets are:
The world target should take care of building everything required for a local project. Note some projects may not have anything to do here.
The install target installs built files into the proto area. The root of the proto area is always defined as $(DESTDIR).
The manifest target is where you need to specify what files need to be copied from the proto area into the live image. The manifest should be a file that is placed in: $(DESTDIR)/$(DESTNAME). An example of a manifest file as used by kvm is:
The mancheck_conf target should produce and copy a mancheck.conf file that describes check rules for shipping manual pages from the proto area. If no mancheck configuration is required, the target may exit successfully without touching any files.
The update target is when someone has requested to update your project. This may be as simple as a git pull.
The clean target asks you to clean up everything that you have generated.
It is entirely plausible that these targets have no meaning for what you're doing. For example, if you had a series of man pages, you wouldn't have to build anything and you wouldn't have to clean anything.