[arch-projects] [ABS] [RFC] abs(8)

matt mooney mfm at muteddisk.com
Mon Jun 13 22:35:14 EDT 2011

:doctype: manpage
:man source: abs
:man manual: ABS Manual
:man version: %%ABS_VERSION%%

abs - the Arch Build System utility

'abs'  [-h] [--version] [--abs-root=<path>]
     [--build-dir=<path>] [--pkg-dir=<path>]
     <command>... [<pkgspec>...]

*`abs`* is a utility used to interact with the 'Arch Build System', *ABS*(7). It
provides a rich set of commands to facilitate building packages from source

The *``ABS tree''* contains the PKGBUILDs used by Arch Linux for creating
packages: it is a snapshot of the official package database and the central
structure with which *`abs`* operates. `abs` allows full or partial
synchronization of the ABS tree through a `<pkgspec>`.

Every `abs` '<command>' takes zero or more `<pkgspec>` arguments. Each
`<pkgspec>` defines a nonempty set of packages. The union of `<pkgspec>s` is
known as the *working set* for that invocation of `abs`. If a `<pkgspec>` is not
given, the *working set* is generated entirely from the configuration variables
set in 'abs.conf'.

The Package Specification
A '<pkgspec>' is composed of three parts: an architecture (``<arch>''), a
repository (``<repo>''), and a package name (``<pkg>''). The fully specified
`<pkgspec>` is `<arch>/<repo>/<pkg>`; however, *`abs`* can deduce the
`<pkgspec>` from variables set in the configuration file. Valid package
specifications are *`<pkg>`*, *`<repo>/<pkg>`*, and *`<arch>/<repo>/<pkg>`*.

When a `<pkgspec>` is not fully specified, the *`repos`* variable determines the
precedence of the repositories to search, and the *`arch`* variable determines
which architectures to include.

Please see *abs.conf*(5) for more details.

*-h, --help*::
	Print the synopsis and command list.

	Print the ABS version and exit.

	Path to the ABS tree.

	Path to the build directory.

	Path to the directory where packages will be output.

	Bypass all confirmation messages generated by *`pacman`*.

	Build packages in the *ABS tree*. The 'ABS files' for each package in
	the *working set* are copied into a subdirectory and built; moreover,
	missing dependencies are automatically added to the *working set* and
	treated as if they were explicitly included. Files created during the
	build process are stored within a subdirectory named for the package and
	will *not* be overwritten across builds. The resulting packages will be
	in *`pkgdir`*. '%%ABS_BUILD_DIR%%' is provided for building packages,
	but you can use a different build directory.

	*-b, --builddeps*;;
		Build missing dependencies. The 'default' setting.

	*-d, --nodeps*;;
		Do not perform dependency checks. A build failure will occur if
		build dependencies are missing (i.e., *`makedepends`* is not

	*-f, --force*;;
		Recopy ABS files to the build directory. This overwrites the old
		package subdirectory.

	*-s, --syncdeps*;;
		Install missing dependencies using *`pacman`*.

	Clean the build directory. The files created during the build process
	are removed from each package in the build directory.

	*-p, --package*;;
		Revert patches to the ABS files and source code.

	Install packages. The packages will be installed using *`pacman`*, which
	should be used for further management operations. All packages found in
	the *`pkgdir`* that are newer than an installed version will be

	Apply patches to packages in the *ABS tree*. Packages that are not
	already in the build directory will be retrieved, accordingly. The 'ABS
	files' are copied into a subdirectory and patched; next, the source code
	will be downloaded and patched. If a package in the *working set* has
	formerly been patched, it will be skipped.
// The following line is needed to get the correct indentation!!
	The patches must be in the unified format and located under
	*`patchdir`*; the default is '%%ABS_PATCH_DIR%%'. This should consist of
	subdirectories containing the patches. Each subdirectory is to be named
	after the package to which its patches will be applied.
// The following line is needed to get the correct indentation!!
	The PKGBUILD patch must be named *PKGBUILD.patch*; the remaining patches
	must end in *.patch* and be for the packages source code. The patches
	are applied from the source directory in an unspecified manner. (A
	patch series may be supported in the future!)

	Synchronize the *ABS tree* with the current snapshot. It allows full or
	partial syncing of repositories; however, it overwrites the part of the
	ABS tree that is newly synced. Without arguments, the *`pkgs`* in
	*`repos`* are synchronized. If the user running this command does not
	have write access to the ABS root directory, the command will fail.

	*-r, --rsync*;;
		Synchronize the ABS tree using rsync. The *`syncserver`* must be
		running '`rsyncd`'. This is the 'default' method.

	*-t, --tarball*;;
		Synchronize the ABS tree using a tarball. The first functioning
		server in *`mirrorlist`* that contains the ABS tarball will be

NOTE: When synchronizing the *ABS tree*, only one of the two methods can be used
at a time. The options are mutually exclusive and an error will occur if both
options are given.

A sample workflow to build and install *`abs`*:

*abs sync x86_64/extra/abs*::
	Sync the *ABS tree* with only the abs package.

*abs patch x86_64/extra/abs*::
	Add my innovative patch set.

*abs build x86_64/extra/abs*::
	Build the package.

*abs install x86_64/extra/abs*::
	Install the package.

*abs clean x86_64/extra/abs*::
	Clean the build directory but leave my innovative patch set applied.

This is quite a tedious process for a single package. Fortunately, *`abs`*
supports chaining the commands together.

*abs sync patch build install clean x86_64/extra/abs*::
	One caveat though, the order of the commands is important but not

	The path to the *ABS tree*. Overrides the value set in
	'%%ABS_CONF_FILE%%' and can also be set with `--abs-root`.

	The path to the ABS build directory. Overrides the value set in
	'%%ABS_CONF_FILE%%' and can also be set with `--build-dir`.

	The default location of the ABS tree.

	System-wide configuration file. The configuration variables and file
	format are described in *abs.conf*(5).

See Also
*abs.conf*(5), *ABS*(7), *PKGBUILD*(5),


More information about the arch-projects mailing list