Table of Contents

Overview of release.sh

/usr/src/tools/release.sh generates an .iso image, a livecd and installer cd for minix, a.k.a., a Release.

It has two major modes: full release with binary packages and package sources; and 'quick cd' which does nothing with the packages, is faster to make and results in a smaller image.

Things you should know

ramdisks

The script uses 3 ramdisks for temporary storage to create the image from. You need enough physical RAM for this.

SVN / copy

The default, cleanest mode is to check out trunk from subversion and build the whole system from scratch with the checked out source. This is “clean” because it's crystal clear what this image is built from (revision number is known) and is in theory deterministic for the same svn revision number.

Another minor mode, invoked with -c, is to copy your working copy of /usr/src and make a cd with that.

USRMB

The USRMB environment variable specifies how big /usr will be on the CD, and determines how big the .iso image will be. You have to set this parameter to a reasonable value yourself. Added to this are the boot image (1.44MB), and the minix root filesystem (16MB). 550MB is the default and is OK for the packages but unnecessarily large without packages. (Only a problem if you transfer it uncompressed or have to burn it to a real CD.)

Packages

In packages mode, release.sh retrieves sources and binary packages for the current version from the webserver using wget -c, so in continue mode. It also uses the webserver List file to get the package descriptions and generates its own List file with its own packing list and the webserver's List descriptions.

Packages on the webserver side, binary and source

The web root is /usr/local/www/docs/minix3/.

packages/ contains binary packages. software/ contains source tarballs ('source packages'), and the index.html with all the packages on it. Paths here are relative to the web root.

There is one important script in MakeWeb/Packages called 'run' that maintains the server-side package packman index and html page, and makes source packages. The only practical mode to run it is incremental (sh run -i). It uses the bigports checkout in that directory to access the .descr files (update the bits you know have changed with 'svn update' first), generates List index files in packages/ and packages/<arch>/<version>, checks for the existence of the .tar.bz2 in software/ and generates it if it doesn't exist, and updates the software/index.html page.

Adding a package

* First build it on a minix system. Using a checked out copy from bigports, use the 'binpackage' script to build and install the software, and bundle the package for you. It does this by executing the build script (build+install package) and then scanning the entire filesystem for new files (skipping a few special case paths). Invocation:

# binpackage <packagedir> <destdir>

where <packagedir> is the dir containing the source package, with the build.minix script, and destdir is where you want the bundled package to go. The name is always <packagedir>.tar.bz2.

* Upload the binary package to packages/<arch>/<version>

* Update the bigports directory if necessary in MakeWeb/Packages

* sh run -i in MakeWeb/Packages to update the webserver packman List and software/index.html files.