Abuild and Helpers

From Alpine Linux
Revision as of 16:27, 10 May 2012 by Fab (Talk | contribs)

Jump to: navigation, search

The abuild package provides scripts you need when creating packages for Alpine Linux. The abuild and its friends are installed automatically along with the alpine-sdk package. For details about abuild itself, please check this page.

apk add alpine-sdk

The git repository contains always the lastest version of the scripts, example-files, and makefiles.

Contents

Package build helpers

abuild-keygen

For abuild a public/private rsa key pair is needed. abuild-keygen does the generation of those keys for you.

abuild-keygen -a -i

abuild-keygen options

  • -a Set PACKAGER_PRIVKEY=<generated key> in abuild.conf
  • -i Install public key into /etc/apk/keys using sudo
  • -h Show this help
  • -n Non-interactive. Use defaults
  • -q Quiet mode


Creating keys manually

In older versions of Alpine, we had to manually create keys for signing packages and indexes. This explains how. Nowadays you can just use abuild-keygen.

Since the public key needs to be unique for each developer, the email address should be used as name for the public key.

Create the private key:

openssl genrsa -out emailaddress.priv 2048

Tip: Append -aes256 if you want it encrypted, but then you'll need to enter the password for every package you sign

Create the public key:

openssl rsa -in emailaddress.priv -pubout -out /etc/apk/keys/emailaddress

The public key should be distributed and installed into /etc/apk/keys on the alpine box that will install the packages. This basically means that the main developer's public keys should be in /etc/apk/keys on all Alpine boxes.

abuild-sign

abuild-sign is for signing indexes.

abuild-sign [-hq] [-k PRIVKEY] [-p PUBKEY] INDEXFILE...

abuild-sign options

  • -h Show this help
  • -k The private key to use for signing
  • -p The name of public key. apk add will look for /etc/apk/keys/PUBKEY

abuild-tar

apkbuild-tar [--hash[=<algorithm>]] [--cut]

apkbuild-tar options

  • --hash[=sha1|md5] Read tar archive from stdin, precalculate hash for regular entries and output tar archive on stdout
  • --cut Remove the end of file tar record

abump

The tool abump is an utility to bump pkgver in APKBUILD files if the package gets an update to a nwer upstream release.

abump [-hR]

abump options

  • -h Show this help
  • -R Run abuild with -R for recursive building
  • -k Keep existing packages

apkgrel

If you want to bump or reset the pkgrel value of your APKBUILD or test your APKBUILD files, apkgrel can assist you.

apkgrel -a|-h|-s NUM|-t|-z [-f] FILE...

apkgrel options

  • -a Add 1 to current pkgrel
  • -f Force, even if given files are not in proper format
  • -h Show this help
  • -s Set pkgrel to NUM
  • -t Only verify that files are in proper format
  • -z Set pkgrel to 0

abuild

To build a package, abuild is used. Beside the package building functionality also options for other package maintainance tasks are provided.

If you just want to build a package from a APKBUILD file, only those two command are needed.

abuild checksum && abuild -r

Below all options and commands for abuild are listed.

abuild [options] [-i PKG] [-P REPODEST] [-p PKGDEST] [-s SRCDEST] [cmd] ...


abuild options

  • -h Show this help
  • -c Enable colored output
  • -m Disable colors (monochrome)
  • -q Quiet
  • -p Set package destination directory
  • -P Set PKGDEST to REPODEST/<repo>/\$CARCH, where repo is the parent's dir name
  • -s Set source package destination directory
  • -f Force specified cmd, even if they have already been done
  • -F Force run as root
  • -d Disable dependency checking
  • -r Install missing dependencies from system repository (using sudo)
  • -R Recursively build and install missing dependencies (using sudo)
  • -u Recursively build and upgrade all dependencies (using sudo)
  • -k Keep built packages, even if APKBUILD or sources are newer
  • -i Install PKG after successful build

abuild commands

  • sanitycheck Basic sanity check of APKBUILD
  • checksum Generate checksum to be included in APKBUILD
  • listpkg List target packages
  • sourcecheck Check if remote source package exists upstream
  • up2date Compare target and sources dates
  • fetch Fetch sources to \$SRCDEST and verify checksums
  • md5check Check md5sums
  • unpack Unpack sources to \$srcdir
  • build Compile and install package into \$pkgdir
  • package Create package in \$PKGDEST
  • rootpkg Run '$0 build package' as fakeroot
  • srcpkg Make a source package
  • installdeps Install packages listed in makedepends and depends
  • uninstalldeps Uninstall packages listed in makedepends and depends
  • clean Remove temp build and install dirs
  • cleanoldpkg Remove binary packages except current version
  • cleanpkg Remove already built binary and source package
  • cleancache Remove downloaded files from \$SRCDEST

APKBUILD generation

newapkbuild

To create the actual APKBUILD file newapkbuild can serve you a template to start with. It will create a directory with the given package name, place an example/template APKBUILD file to the given directory, and fill some variables if those are provided.

newapkbuild packagename

newapkbuild options

  • -a Create autotools (use ./configure ...)
  • -c Copy a sample init.d, conf.d and install script to new directory
  • -d Set package description (pkgdesc) to DESC
  • -f Force even if directory already exist
  • -h Show this help
  • -l Set package license to LICENSE
  • -p Create perl package (Assume Makefile.PL is there)
  • -y Create python package (Assume setup.py is there)
  • -u Set package URL
  • -s Use sourceforge source url

apkbuild-cpan

The Comprehensive Perl Archive Network (CPAN) provides a large collection of perl software and documentation. apkbuild-cpan helps with the creation of APKBUILD for perl modules from CPAN.

apkbuild-cpan [create <Module::Name> | check | recreate | update | upgrade]

apkbuild-pypi

The Python Package Index (PyPi) is a repository of software and libraries for the Python programming language. apkbuild-pypi helps with the creation of APKBUILD for python package hosted at PyPI.

apkbuild-cpan apkbuild-pypi [create <package> | check | recreate | update | upgrade


Misc tools

buildlab

More details can be found at the buildlab page.


buildrepo

buildrepo creates a local package repository for you.

buildrepo [-a APORTSDIR] [-d REPODIR] [-hp] [-l LOGPREFIX ] [-r DEPREPO] REPOSITORY...

buildrepo options

  • -a Set the aports base dir to APORTSDIR instead of $HOME/aports
  • -d Set destination repository base dir to REPODIR instead of $HOME/packages
  • -h Show this help and exit
  • -l Send build to logfile, prefixed by LOGPREFIX
  • -p Purge obsolete packages from REPODIR after build
  • -r Dependencies are found in DEPREPO