=pod =head1 NAME csbs - Common Solaris Build System =head1 INTRODUCTION CSBS is a system for creating things which could be regarded as Solaris Source Packages. It is inspired by cdbs, the Common Debian Build System ( http://packages.debian.org/unstable/devel/cdbs ). Differences with cdbs: csbs-generated source packages are usable on systems which don't have csbs installed. =head1 USAGE Likely, you want one of these 3 things =over 4 =item install a Solaris binary package Fetch the prebuild binary package for your Solaris version - likely it is called something like foobar-n.m_k-sol8-sparc-local.gz - and install that one, using pkgadd(1). If there is no prebuild package supplied which suits your needs, read on. pkgadd -d foobar-n.m_k-sol8-sparc-local =item create a Solaris binary package from a Solaris source package If there is a Solaris source package supplied - likely it is called something like foobar-n.m_k.diff.gz - and you'd like to use a Solaris binary package, read on. =item create a Solaris source package from a tarball If you'd like to create Solaris binary packages from not-yet-packaged source tarballs, you could supply Solaris source packages too. This makes it easier for people to adapt your package to their specific needs. From this source package, you can create a binary package. Read on. =back We'll explain the last 2 things in detail. =head1 CREATING A BINARY PACKAGE FROM A SOURCE PACKAGE =head2 Setting up the files Download tar.gz and solaris-ized diff.gz. The tar.gz is the vanilla upstreams source, you might as well get it from upstream. Unpack the source gunzip -c foobar-n.m.tar.gz | tar -xf - (foobar is the name of the source package, n.m is upstream version, k is Solaris package version.) Now, using a sane patch(1), apply the patch, running gunzip -c foobar-n.m_k.diff.gz | patch -p0 . Beware: Solaris patch, as shipped with Solaris 8, does I do this trick. A patch which works is e.g. Larry Wall's GNU patch available from ftp://ftp.gnu.org/pub/gnu/patch/ , and, in Solaris pkg format, from http://www.sunfreeware.com/ . You could also perform this step on a nearby GNU/Linux or *BSD system, which likely has a right patch(1) installed. =head2 Optionally: copy patched stuff around If you need to build the package on a different platform as where you've patched it, pack the patched tarball together doing tar zcf foobar-n.m.solaris.tar.gz foobar-n.m . Copy this file around, and unpack it again on the build platform tar zxf foobar-n.m.solaris.tar.gz . =head2 Building the Solaris package In the foobar-n.m/ directory, run make -f solaris/Makefile . (Both Solaris make (tested with SunOS 5.7 /usr/ccs/bin/make) and GNU make do fine.) This creates binary packages /var/tmp/foobar-n.m_k-sol8-sparc-local and, for your convenience /var/tmp/foobar-n.m_k-sol8-sparc-local.gz . If you're building on a SunOS 5.7 box, do make -f solaris/Makefile OSVERSION=sol7 to get a nice OS string in the package name. =head1 CREATING A SOURCE PACKAGE FROM A TARBALL In a directory /some/where, create files Makefile.m4, README.Solaris, pkginfo.in, prototype, and, optionally, postinstall, preinstall and bootstrap. Typically, Makefile.m4 looks like: divert(-1) changequote([, ]) define([CSBS_VENDORTAG], [BOZO]) define([CSBS_TARNAME], [foobarble]) define([CSBS_UPVERSION], [n.m]) define([CSBS_PKGVERSION], [1]) # max 6 chars: some old solaris-en break otherwise define([CSBS_SHORTTARNAME], [foobar]) define([CSBS_ARCH], [sparc]) include([csbs.m4]) divert(0)dnl CSBS_ALL Typically, pkginfo.in features: PKG="@PKGNAME@" NAME="@TARNAME@" VERSION="@VERSION@" ARCH="@ARCH@" next to the common variables found in pkginfo. Run tar zxf foobar-n.m.tar.gz mv foobar-n.m foobar-n.m.orig tar zxf foobar-n.m.tar.gz cd foobar-n.m mkdir solaris cp /some/where/{Makefile.m4,README.Solaris,pkginfo.in,postinstall,preinstall,prototype} solaris Now, make sure you've installed CSBS: be sure the CSBS files C, C, and C are installed in ~/.csbs/ . Then, continue with: cd solaris sh ~/.csbs/bootstrap cd .. make -f solaris/Makefile source The last command runs something like diff -Pdur foobar-n.m.orig foobar-n.m | gzip -c > foobar-n.m_k.diff.gz . Your diff(1) needs to understand the C<-P> flag. Solaris diff(1) does I. GNU diff, from the GNU diffutils package version 2.7, ftp://ftp.gnu.org/pub/gnu/diffutils/ , does. The option's effect is: When comparing directories, if a file appears only in the second directory of the two, treat it as present but empty in the other. (Solaris diff can only state something like: ``Only in foodir: bar'' which is really too little for our needs.) In 2.8, the -P option should be invoked as --unidirectional-new-file. =head1 EXAMPLES See http://cvs.alioth.debian.org/cgi-bin/cvsweb.cgi/~checkout~/caspar/solaris/pkg/Makefile.m4?content-type=text/plain&cvsroot=caspar for an example of usage. =head1 SOURCE PACKAGES The idea for Solaris source packages is based upon the Debian .deb source package format, see appendix C. ``Source packages'' from ``Debian Policy Manual'', http://packages.debian.org/debian-policy ; http://www.debian.org/doc/debian-policy/ap-pkg-sourcepkg.html =head1 HACKING You can fetch a copy of the current state of csbs by running: joostvb@banach:~/arch% tla register-archive joostvb-arch@mdcc.cx--2005-csbs http://mdcc.cx/arch/\{archives\}/2005-csbs joostvb@banach:~/arch% tla get joostvb-arch@mdcc.cx--2005-csbs/csbs--mainline--0.1 csbs . =head1 SEE ALSO =head2 alternatives for csbs solpkg ( http://solpkg.berlios.de/ ) is a framework and repository of Makefile "recipes" that can be used to build Solaris packages, by Matt Behrens ( http://www.zigg.com/matt/ ). Very likely, it does about the same job as CSBS. See also http://lists.berlios.de/pipermail/solpkg-devel/ . Guenther Schreiner has written about his spb (Solaris Package Builder) on http://lists.gnu.org/archive/html/savannah-hackers/2002-06/msg00298.html . No publication of this software is known to the author. Joerg Schilling has created SPS ( http://sps.berlios.de/pkg/ ). As of 2005-08, it does not create Solaris packages, but just tarballs holding the binaries. This might change once Sun has released its packaging tools under an Open Source license. =head2 instructions on how to create solaris binary packages Philip Brown's instructions on http://www.bolthole.com/solaris/makeapackage.html . Dennis Clarke's instructions on http://www.blastwave.org/standards/pkgcreation.php . Mark Ashley's instructions on http://ibiblio.org/pub/packages/solaris/sparc/html/creating.solaris.packages.html . Steven M. Christensen's instructions on http://sunfreeware.com/pkgadd.html . Troy Johnson's instructions on http://troy.jdmz.net/sun/ . =head1 COPYRIGHT Copyright (C) 2003 Tilburg University Copyright (C) 2005 Joost van Baal This document is free software; you can redistribute it and/or modify it under the terms of the GNU GPL, available online at http://www.gnu.org/copyleft/gpl.html . There is NO WARRANTY. =head1 AUTHOR Joost van Baal =cut