summaryrefslogtreecommitdiffstats
path: root/dev/packaging/tutorials
diff options
context:
space:
mode:
Diffstat (limited to 'dev/packaging/tutorials')
-rw-r--r--dev/packaging/tutorials/basic.mdwn113
1 files changed, 113 insertions, 0 deletions
diff --git a/dev/packaging/tutorials/basic.mdwn b/dev/packaging/tutorials/basic.mdwn
new file mode 100644
index 0000000..f8a3ee9
--- /dev/null
+++ b/dev/packaging/tutorials/basic.mdwn
@@ -0,0 +1,113 @@
+[[!meta title="Basic Packaging Tutorial"]]
+
+In this introduction to software packaging, we will package the Expat XML parser
+library. This is a pretty simple but complete package, consisting of a shared
+library and its development files plus an executable utility and some
+documentation.
+
+We will use [opkbuild 3.0.x][opkbuild] to build a package in [Source Package
+Format 2.0][spf] (SPF 2.0) with the assistance of [opkhelper 3.0.x][opkhelper].
+
+This tutorial assumes some knowledge of the UNIX shell command language and
+utilities (see the "Shell and Utilities" volume of [POSIX.1-2008][posix]) and at
+least basic familiarity with [makefile syntax][posix-makefile].
+
+
+Getting Started
+===============
+
+Source Package Directory
+------------------------
+
+First, make a *source package directory*. This is the directory that will
+contain all of our source package files. SPF 2.0 makes no requirements on the
+name of this directory, but using the name of the source package is recommended.
+
+ $ mkdir expat
+ $ cd expat
+
+We need [a file called `format`][spf-format] to identify the format of our
+source package. For SPF 2.0, it should simply contain the string `2.0`.
+
+ $ echo '2.0' >format
+
+Upstream Source Archive
+-----------------------
+
+Obviously we need the source code of the software to be packaged. Go to
+[Expat's Web site][expat], find the expat 2.1.0 archive, and download it into
+the source package directory.
+
+ $ wget 'http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz'
+
+SPF 2.0 requires that an [upstream source archive][spf-upstream-source] be named
+`<pkgname>-<pkgver>.orig.tar<ext>`, where `<pkgname>` is the name of the source
+package, `<pkgver>` is the upstream version of the source package, and `<ext>`
+is an optional file extension to indicate compression. So, rename the archive
+accordingly.
+
+ $ mv 'expat-2.1.0.tar.gz' 'expat-2.1.0.orig.tar.gz'
+
+
+Source Package Metadata
+=======================
+
+Now we need some metadata for our source package.
+
+Control File
+------------
+
+First we'll make a `control` file. The format of this file is not yet
+documented in the SPF 2.0 specification, but it is documented [in the Debian
+Policy Manual][dpm-control]. The [source package fields][spf-fields-src] are
+`Maintainer` (required), `Build-Depends` (optional), and `Homepage` (optional).
+We'll fill in the fields whose values we know right now: `Maintainer` and
+`Homepage`.
+
+`Maintainer` is the name and e-mail address of the person or team responsible
+for the package (i.e. usually you when you are making a package). The value
+must follow the syntax of the `mailbox` symbol in [RFC 5322 section
+3.4][rfc-5322-3.4]. That is, the value must be of the form `name <address>`.
+If `name` contains any of the following characters, it must be in double quotes:
+
+ ( ) < > [ ] : ; @ \ , .
+
+`Homepage` is the URL of the Web site for the package, if such a site exists.
+
+Our expat `control` file looks like this:
+
+ Maintainer: "J. Random Hacker" <jrandom@example.com>
+ Homepage: http://expat.sourceforge.net/
+
+Change Log
+----------
+
+Now we'll make a `changelog` file. The format of this file is documented [in
+the SPF 2.0 specification][spf-changelog]. We're making version "2.1.0-1" of
+the "expat" source package for the "trunk" distribution. We can get the current
+date and time in the RFC 5322 format using the **date**(1) command:
+
+ $ date '+%a, %d %b %Y %H:%M:%S %z'
+
+Our expat `changelog` file looks like this:
+
+ expat (2.1.0-1) trunk
+
+ * Initial release.
+
+ -- "J. Random Hacker" <jrandom@example.com> Sun, 18 Nov 2012 11:58:19 -0500
+
+TODO: Finish.
+
+[opkbuild]: http://git.os.libiquity.com/opkbuild/opkbuild.git/
+[spf]: http://specs.os.libiquity.com/spf-2.0/
+[opkhelper]: http://git.os.libiquity.com/opkhelper/opkhelper.git/
+[posix]: http://pubs.opengroup.org/onlinepubs/9699919799/
+[posix-makefile]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html#tag_20_76_13
+[spf-format]: http://specs.os.libiquity.com/spf-2.0/overview.html#files-format
+[expat]: http://expat.sourceforge.net/
+[spf-upstream-source]: http://specs.os.libiquity.com/spf-2.0/overview.html#files-src-src-ver-tar-ext
+[dpm-control]: http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-controlsyntax
+[spf-fields-src]: http://specs.os.libiquity.com/spf-2.0/fields.html#fields-src
+[rfc-5322-3.4]: https://tools.ietf.org/html/rfc5322#section-3.4
+[spf-changelog]: http://specs.os.libiquity.com/spf-2.0/metadata.html#changelog