Abuild and Helpers
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.
apk add alpine-sdk
The git repository contains always the lastest version of the scripts, example-files, and makefiles.
Building and maintaining packages
abuild
To build a package, abuild is used. Besides the package building functionality, options for other package maintainance tasks are also provided.
If you just want to build a package from an APKBUILD file, only those two command are needed.
abuild checksum && abuild -r
To use the command above, you have to be in the abuild
group.
Below all options and commands for abuild are listed.
abuild [options] [-i PKG] [-P REPODEST] [-p PKGDEST] [-s SRCDEST] [cmd] ...
abuild options
- -A Print CARCH and exit
- -c Enable colored output
- -d Disable dependency checking
- -f Force specified cmd, even if they are already done
- -F Force run as root
- -h Show this help
- -i Install PKG after successful build
- -k Keep built packages, even if APKBUILD or sources are newer
- -m Disable colors (monochrome)
- -p Set package destination directory
- -P Set PKGDEST to REPODEST/<repo>/\$CARCH, where repo is the parents dir name
- -q Quiet
- -r Install missing dependencies from system repository (using sudo)
- -R Recursively build and install missing dependencies (using sudo)
- -s Set source package destination directory
- -u Recursively build and upgrade all dependencies (using sudo)
abuild commands
- build Compile and install package into \$pkgdir
- checksum Generate checksum to be included in APKBUILD
- clean Remove temp build and install dirs
- cleancache Remove downloaded files from \$SRCDEST
- cleanoldpkg Remove binary packages except current version
- cleanpkg Remove already built binary and source package
- deps Install packages listed in makedepends and depends
- fetch Fetch sources to \$SRCDEST and verify checksums
- index Regenerate the APKINDEX for abuildrepo
- listpkg List target packages
- package Create package in \$PKGDEST
- prepare Apply patches
- rootpkg Run 'package', the split functions and create apks as fakeroot
- sanitycheck Basic sanity check of APKBUILD
- snapshot Create a \$giturl or \$svnurl snapshot and upload to \$disturl
- sourcecheck Check if remote source package exists upstream
- srcpkg Make a source package
- undeps Uninstall packages listed in makedepends and depends
- unpack Unpack sources to \$srcdir
- up2date Compare target and sources dates
- verify Verify checksums
See also
- Abuild and Helpers
abump
The tool abump is an utility to bump pkgver in APKBUILD files if the package gets an update to a newer 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
Generating new APKBUILDs
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-pypi [create <package> | check | recreate | update | upgrade
Signing packages and indexes
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
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
Setting up the build environment
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
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.
buildlab
See the buildlab page.