Create Packages

From hummy.tv Wiki
Revision as of 11:38, 19 August 2011 by Af123 (talk | contribs)
Jump to: navigation, search

The modified firmware includes a lightweight package management system called opkg (home page) which is similar to the Debian package management system (dpkg).

Package Repositories

The custom firmware is configured to use the package repository at hummypkg.org.uk by default.

Package Format

A package is a UNIX Archive (ar) file which itself contains three files:

debian-binary 
A file which just contains the string "2.0", a clue to the packaging system's roots.
data.tar.gz 
The files which make up the package.
control.tar.gz 
Package meta-information.

Creating a Package

The pkgtools package includes utilities for working with packages and can be used to create packages directly on the Humax itself. Before proceeding, install these utilities:

humax# opkg update
humax# opkg install pkgtools

Next create a directory to hold your new package and create a directory within it called CONTROL, which will be used for the package meta-information:

humax# cd /mod/tmp
humax# mkdir my-first-package
humax# mkdir my-first-package/CONTROL

Note Note: Package names should not contain underscore (_) characters as these are used as delimiters in package file names. It is safest to stick to alpha-numeric characters and use - as a delimiter where appropriate, e.g. webif-iphone

Place the files which make up your package directly into the new package directory. In this example, we'll create a package which just installs a script called hello.

humax# cd /mod/tmp/my-first-package
humax# mkdir bin
humax# cat > bin/hello
#!/bin/sh

echo "Hello!"
^D
humax# chmod 755 bin/hello

Note Note: Files should be included relative to /mod so in this example the bin/hello file will be installed as /mod/bin/hello

Create file package control file as CONTROL/control. Here's an example:

Package: jim-sqlite3
Priority: optional
Section: misc
Version: 0.71
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
Depends: jim(>=0.71-1),sqlite3
Description: Jim SQLite3 plugin.
 A plugin for the jim interpreter (a lightweight TCL interpreter) which
 provides access to SQLite3 databases (such as those used on the Humax).

The Debian project maintains documentation on the format of the control file which also applies to opkg packages, although some fields are not required.

Package 
The package name.
Priority 
Always set to optional for Humax packages.
Section 
One of misc, net, devel, etc. full list
Version 
The package version number of the format upstream_version[-opkg_version] more information
Architecture 
Always mipsel for the HD/HDR.
Maintainer 
An email address or hummy.tv/wiki username.
Depends 
A list of dependencies for this package, optionally with version constraints see Debian documentation
Description 
A description of the package. Continuation lines must be prefixed by whitespace.

The CONTROL directory can also contain other package maintenance scripts such as preinst, postinst, prerm and postrm. See the Debian documentation for more details and examples. The scripts are called with various arguments during package maintenance operations. Many simple packages do not require any maintenance scripts.

Continuing with our example package, create the bare minimum control file:

humax# cat > CONTROL/control
Package: hello
Version: 1.0
Architecture: mipsel
Maintainer: af123
Description: hello
^D

The package can now be built using the opkg-pack command:

humax# cd /mod/tmp
humax# opkg-pack my-first-package
TODO

The package can then be installed directly from the resulting file for testing.

humax# opkg install hello_1.0_mipsel.opk
humax# hello
Hello!
humax# opkg remove hello

If you have any packages which you'd like published in the hummypkg.org.uk repository, then email them to packages@hummypkg.org.uk.

Unpacking an existing package

The pkgtools package also contains a utility which can be used to unpack an existing package into a directory structure for editing or just for investigation.

humax# cd /mod/tmp
humax# opkg download webif
TODO
humax# opkg-unpack webif_0.6.4_mipsel.opk
Unpacked to webif_0.6.4_mipsel