Sortix
Sortix Download Manual Development Source Code News Blog More
current nightly

Sortix volatile manual

This manual documents Sortix volatile, a development build that has not been officially released. You can instead view this document in the latest official manual.

NAME

tix-metabuild — build packages from ports

SYNOPSIS

tix-metabuild [-C collection] [--build=triplet] [--build-id=build-id] [--cache-package] [--destination=directory] [--distclean] [--download-package] [--end=step] [--exec-prefix=prefix] [--generation=level] [--host=triplet] [--hosts=triplets] [--make=path] [--makeflags=makeflags] [--metadata] [--mirror=url] [--mirror-directory=directory] [--mirrors=urls] [--packages=packages] [--prefix=prefix] [--public-key=path] [--randomize] [--release=release] [--release-directory=directory] [--release-key=file] [--release-info] [--release-url=url] [--repository=directory] [--secret-key=path] [--sign] [--start=step] [--sysroot=directory] [--sysroot-download-packages=packages] [--sysroots=directory] [--tar=path] [--target=triplet] [--tmp=directory] [--version=version] ports

DESCRIPTION

tix-metabuild builds each port in the ports directory and creates a repository with the binary packages. Each port is in its own subdirectory named after it, containing the port(5) The --packages option can be used to select which packages to build. tix-metabuild determines the build order using tix-list-packages(8), and then builds and installs the packages in order using tix-port(8), forwarding all the appropriate options. tix-metabuild is usually invoked through development(7) for the official ports.
If the end of the build is beyond the clean phase, then the tix collection is automatically created if needed using tix-create(8) before the builds begin.
Optionally tix-metabuild can create a tix release and sign it per the --metadata, --release-info, and --sign options which invoke tix-repository(8) appropriately.
The options are as follows:
--build=triplet
The platform triplet for the machine the port is built on. (Default: Automatically detected.)
--build-id=build-id
The overall build identifier, such as a git commit hash, forwarded to the tix-create(8) and tix-release(8) release invocations.
--cache-package
Skip the build if the binary package already exists and is the right version.
-C, --collection=collection
Install the binary package into this collection created with tix-create(8). (Default: --sysroot plus --prefix)
--destination=directory
The binary package is placed inside this directory.
--download-package
Download an existing binary package from the collection using tix-fetch(8) and use it if it is the right version as per --cache-package.
--distclean
Clean the port for distribution. Remove the extraction and all the metadata files. If DEVELOPMENT is true in the port(5), then emit a warning, and do nothing to avoid deleting any in-progress work.
--end=step
Stop the build after this step:
start
The start step before anything has happened.
download
Download the source code.
extract
Extract the source code and apply patches.
tix-build-start
The start step in tix-build(8).
clean, pre-clean
Clean the source directory before the build.
configure
Configure the port.
build
Build the port.
install
Install the port into the DESTDIR.
post-install
Run the post-installation script.
post-clean
Clean the source code after the port.
package
Create the binary package.
tix-build-end
The end step in tix-build(8).
strip
Strip the executables in the binary package.
diff
Regenerate the patches if in development.
tix-install
Install the binary package.
end
The end step after everything has happened. (Default)
--exec-prefix=prefix
The prefix where architecture dependent files are installed. (Default: --prefix)
--generation=generation
Create a binary package in the format of this tix generation level. (Default: 3)
--host=triplet
The platform triplet for the machine the port will run on. (Default: --build)
--hosts=triplets
Build binary packages for each --host triplet in the space-separated triplets list. The --sysroots option is useful for cross-compilation.
--make=path
Which make(1) to use. (Default: MAKE if set and otherwise make(1))
--makeflags=makeflags
Override the MAKEFLAGS variable inherited by make.
--metadata
After building the packages, run the tix-repository(8) metadata command to generate the tix repository metadata from the binary packages.
--mirror=url
First attempt to download the upstream releases from the port's source code mirror at url before attempting the upstream site. The files are copied from the filesystem if the url has no schema.
--mirror-directory=directory
Place the downloaded upstream releases in this directory in the layout that can be used as a mirror for the --mirror option. (Default: port.mirror)
--mirrors=url
The space-separated URLs to the mirrors in the release information. Forwarded to the tix-repository(8) release invocation. This option is usually not used, as the mirror feature should be used in a tix-repository(8) channel instead.
--packages=packages
Build these packages as evaluated by tix-list-packages(8). The defaullt is ‘all!!’.
--prefix=prefix
Build the port into this prefix. (Default: The empty prefix designating the root directory)
--public-key=path
The public key to use for the --sign option. Forwarded to the tix-repository(8) sign invocation.
--randomize
Build the ports in a random order while still respecting the build dependencies.
--release=release
The name of the release. Forwarded to the tix-repository(8) release invocation.
--release-directory=release
Place the binary package inside the $release/repository/$host directory, if the --destination and --repository options are not set.
--release-key=file
Copy the release public key from the file, forwarded to the tix-create(8) invocation.
--release-info
Generate the top-level release information by invoking tix-repository(8) release. Implies the --metadata option and requires the --build-id, --release, and --version options to be set.
--release-url=url
The url to the location where the release being built will be published, file, forwarded to the tix-create(8) invocation.
--repository=repository
Place the binary package inside the $repository/$host directory, if the --destination option is not set.
--secret-key=path
The secret key to use for the --sign option. Forwarded to the tix-repository(8) sign invocation.
--sign
Sign the top-level release information by invoking tix-repository(8) sign. Implies the --metadata and --release-info option and requires the --build-id, --public-key, --release, --secret-key, and --version options to be set.
--start=step
Start the build at this step (see --end). (Default: start)
--sysroot=directory
The system root to use while building and installing the port. The toolchain is wrapped to transparently use this sysroot during the build.
--sysroot-download-packages=packages
Create a collection with tix-create(8) inside the system root if needed by importing the configuration from the / collection, and then download and install the packages in the space-separated packages list along with their runtime dependencies. The system package is useful to get the headers and libraries for the base system.
--sysroots=directory
In combination with --hosts, use system roots named after the triplets in the directory for cross-compilation.
--tar=path
Which tar(1) to use during the build. (Default: tar(1))
--target=triplet
The port's outputs targets this platform triplet. (Default: --host)
--tmp=directory
Place temporary files in this directory. (Default: TMPDIR if set otherwise /tmp)
--version=version
The version number of the release. Forwarded to the tix-repository(8) release invocation.

EXIT STATUS

tix-metabuild will exit 0 on success and non-zero otherwise.

EXAMPLES

Create a new tix release

First create a signing key either to be reused across releases, or a per-release signing key to be rotated:
mkdir -p keys 
signify -G -c 'local repository signing key' -p keys/local.pub -s keys/local.sec
Use the signify(1) -n option to omit the password for unattended signing.
Create a tix release with custom port(5) packages from the ports directory, meant to be installed into /local, cross-compiling to multiple hosts using downloaded system roots containing the base system, and create it as the 1.0 release signed with the secret key:
tix-metabuild \ 
  --build-id=$(git rev-parse HEAD) \ 
  --hosts='i686-sortix x86_64-sortix' \ 
  --prefix=/local \ 
  --public-key=keys/local.pub \ 
  --release=1.0 \ 
  --release-directory=release/1.0 \ 
  --secret-key=keys/local.sec \ 
  --sign \ 
  --sysroot-download-packages=minimal \ 
  --sysroots=sysroots \ 
  --version=1.0 \ 
  ports
The release directory can published after signing.
Next use the tix-release(8) channel command to provide a layer of indirection with dynamic data such as available upgrades and available mirrors. The release directory is meant to be immutable whereas the channel is modified and re-signed as needed. See tix-repository(8) for more information.

SEE ALSO

signify(1), port(5), development(7), porting(7), tix(8), tix-create(8), tix-install(8), tix-list-packages(8), tix-port(8), tix-release(8), tix-repository(8), tix-uninstall(8)

HISTORY

tix-metabuild originally appeared in Sortix 1.1.
Copyright 2011-2025 Jonas 'Sortie' Termansen and contributors.
Sortix's source code is free software under the ISC license.
#sortix on irc.sortix.org
@sortix_org