Sortix nightly manual
This manual documents Sortix nightly, a development build that has not been officially released. You can instead view this document in the latest official manual.
| TIX-RELEASE(8) | System Manager's Manual | TIX-RELEASE(8) |
NAME
tix-release —
create and sign tix releases and channels
SYNOPSIS
tix-release |
[--authoritative=url]
[--build-id=build-id]
[--channel=name]
[--dev-releases]
[--extra-releases=releases]
[--generation=level]
[--key-search=path-prefix]
[--mirrors=urls]
[--public-key=file]
[--release=name]
[--release-directories=directory]
[--release-filter=extended-regex]
[--releases=list]
[--same-signing]
[--secret-key=file]
[--sign]
[--unskippable=[all |
major | minor |
last-patch | patch |
none]]
[--upgrade-release=new-release]
[--upgrade-release-key=public-key]
[--upgrade-release-url=url]
[--version=version]
[--which-public-key]
[--which-secret-key] [channel |
channel-entry | channels |
release | sign]
directory |
DESCRIPTION
tix-release creates tix releases and
channels, and signs their information for publication.
A tix-create(8) installation has the collection.conf(5) RELEASE_URL variable that specifies what is installed, pointing to a release or a channel:
- A release is a particular static versioned build.
- A channel dynamically redirects each version to the appropriate release, optionally offering an upgrade to a newer version.
Installations typically point to a channel in order to receive upgrades. The signed release.info.sig metadata file format is used for both releases and channels.
A top-level distribution site conventionally contains a directory named channel (containing the channels) and a directory named release (containing the releases).
A tix release is prepared for publication by running
the tix-metabuild(8)
command. To make the release, the command creates the release directory
structure, populates the per-platform
repository/$platform subdirectories with the
.tix.tar.xz and .version
files produced by
tix-port(8), runs the
tix-repository(8)
metadata command
on each platform repository, runs the tix-release
release command on the release directory, and then signs
the release with the tix-release
sign command.
A tix channel is prepared for publication using the channel command. A channel contains subdirectories named after each version, each containing a release.info.sig file with metadata. The channel redirects to a release on the mirrors. The channel version directories are chained together, with each version offering an upgrade to the next version (if any).
The first operand selects a command to execute:
- channel
- Generate a channel inside the top-level channel
directory named per the
--channeloption using the releases from the--release-directoriesoption.The releases can be selected using the
--releasesoption, otherwise the--release-directoriesdirectory is read and filtered using the--release-filteroption. The--extra-releasesoption can select additional releases.The channel's release upgrade graph is built per the
--unskippableupgrade rules, ordered per semantic versioning rules. Every entry on the channel will indicate where to find the release and where upgrades are available per the--authoritativeand--mirrorsoptions.Channels must be signed in order to be valid, e.g. by using the
--signoption that will sign every entry on the channel.The
--authoritative,--channel, and--release-directoriesoptions must be set. - channel-entry
- Generate an entry for a single version on a channel. This low-level
command allows manually constructing the channel upgrade graph.
The ${directory}/${channel}/${version}/release.info file is generated per the top-level channel directory, the options supplied, and the release information.
An upgrade path to a new release can be specified in the
--upgrade-releaseoption. If the new release is signed, then the upgrade will trust the new key, on the authority of the signed channel entry.The
--channel,--release, and--release-directoriesoptions must be set. - channels
- Generate common channels inside the top-level channel
directory:
- A stable channel with stable releases.
- A ${major}.${minor} channel for every major/minor version pair, containing all the patch releases.
- A
${extra_release}
channel for every specified
--extra-releasescontaining the normal releases and that extra release.
The
--release-directoriesoption must be set. - release
- Generate the top-level release metadata files in the output release
directory:
- release.info
- sha256sum
The
--build-id,--release, and--versionmust be set. - sign
- Sign release.info and
sha256sum (if it exists) in the
directory as a separate step from creating the
files. The
--signoption can be used with any of the other commands to sign the files as a single step at creation time.The
--public-keyand--secret-keyoptions must be set to the signify(1) key pair, or the--key-searchoption to search for the appropriate key.
The options are as follows:
- The url to the top-level authoritative distribution
site, in which the channel directory will be
published.
This option is required for upgrades to point to the new release and must be used for the channel and channels commands. If the
--mirrorsoption is not set, then it defaults to url as well. --build-id=build-id- Set the
BUILD_ID
to build-id, a unique identifier of what was built,
allowing installations to know if they are up to date.
This option is required for the release command.
--channel=name- The name of the channel being created.
This option is required for the channels, channel, and channel-entry commands.
--dev-releases- When searching for releases, implicitly add releases ending in -dev for every version found. This option ensures that all dev releases that might have existed (but no longer do) still have an upgrade path.
--extra-releases=releases- Additional releases to include for the channel command. For the channels command, each such extra release has its own channel made with itself as the only extra release.
--generation=generation- Select tix metadata generation level (Default: 3)
--key-search=path-prefix- Search for the public and secret keys in the file paths starting with this
path-prefix, an optional middle section, and ending
in .pub for the public key and
.sec for the secret key.
The middle section is searched in this order:
- The release.
- The version.
- The major, minor, and patch version numbers.
- The major and minor version numbers.
- The major version number.
- The empty string.
--mirrors=urls- The space-separated urls to the mirrors. The first
mirror is the primary and default mirror.
If unset, the default is
--authoritativeif set. --public-key=file- Sign the release or channel with the signify(1) public key file.
--release=name- The name of the release.
This option must be used with the release and channel-entry commands. For the channel command, it optionally specifies the current release of a channel, and excludes any newer releases.
--release-directories=directory- Find releases inside this directory.
This option is required for the channels, channel, and channel-entry commands.
--release-filter=extended-regex- Find the list of releases by searching the
--release-directoriesdirectory for entries matching this extended-regex given to grep(1)-E. --releases=list- Override the
--release-filtersearch by manually specifying the space-separated list of releases. --same-signing- When signing a channel using
--key-search, try to sign the channel using the same keys as the underlying release, by searching for an identical public key. --secret-key=file- Sign the release or channel with the signify(1) secret key file.
--sign- Sign the output release.info files per the
--public-key,--secret-key,--key-search, and--same-signingoptions. This option can be used with any command and has the same effect as the sign command. --unskippable=[all|major|minor|last-patch|patch|none]- Build the channel upgrade paths according to this rule:
- all
- Don't allow skipping any release (including prerelease).
- patch
- Don't allow skipping patch releases.
- last-patch
- Don't allow skipping the last patch of a minor release.
- minor
- Don't allow skipping minor releases.
- major
- Don't allow skipping major releases.
- none
- Allow skipping any release.
The default is last-patch.
--upgrade-release=new-release- Offer an upgrade to the new-release when using the channel-entry command.
--upgrade-release-key=public-key- Override which public-key to trust when offering an
upgrade in the channel-entry command.
The default is to use the public key from
--upgrade-releaseif--same-signingis set, otherwise attempting a key search if--key-searchis set, and otherwise using--public-keyif set. --upgrade-release-url=url- Override the url to the new release when offering an upgrade in the channel-entry command.
--version=version- The version of the release.
This option must be used with the release and channel-entry commands.
--which-public-key- Output the path to the chosen public key.
--which-secret-key- Output the path to the chosen secret key.
ENVIRONMENT
SOURCE_DATE_EPOCH- Use this timestamp for the DATETIME field in the release information.
EXIT STATUS
tix-release will exit 0 on success and
non-zero otherwise.
EXAMPLES
Create a new tix release
See tix-metabuild(8) for an example of how to make a new tix release.
Sign a tix release
First create a signing key, either a general signing key 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.
Sign the release:
tix-release \ --secret-key=keys/local.sec \ --public-key=keys/local.pub \ sign release/1.0
Create a stable channel with the tix release
Publish the newly signed release on the authoritative site and mirrors:
tar -c release/1.0 | ssh example.com 'tar -C /var/www/example.com/local -x' tar -c release/1.0 | ssh cdn.example.net 'tar -C /var/www/cdn.example.net/local -x'
Create or regenerate the stable channel and sign it:
tix-release \ --authoritative=https://example.com/local \ --channel=stable \ --mirrors='https://example.com/local https://cdn.example.net/local' \ --public-key=keys/local.pub \ --release-directories=release \ --secret-key=keys/local.sec \ --sign \ channel channel/
Finally, publish the new channel on the authoritative site to provide upgrades to installations:
tar -c channel/stable | \ ssh example.com 'tar -C /var/www/example.com/local -x'
Generate multiple channels
The channels command is useful for generating multiple channels in one invocation. It creates a stable channel, and channel for every major and minor version pair, as well channels for any extra releases (such as nightly development releases).
tix-release \ --authoritative=https://example.com/local \ --dev-releases \ --extra-releases='nightly cross-nightly' \ --key-search=keys/local \ --mirrors='https://example.com/local https://cdn.example.net/local' \ --release-directories=release \ --sign \ channels channel/
The --dev-releases option is useful to
implicitly include dev versions on channels that might have existed at one
point but don't anymore. The --key-search option is
useful to search for per-release signing keys.
Install the custom ports in a local tix collection
The custom ports can now be installed from any installation by creating a tix collection pointed to the stable channel:
tix-create -C /local -u https://example.com/local/channel/stable/1.0 tix-install -C /local foo bar
The local ports can be updated to any new versions published on the channel:
tix-upgrade -C /local
SEE ALSO
signify(1), port(5), tix(8), tix-create(8), tix-install(8), tix-metabuild(8), tix-repository(8), tix-upgrade(8)
HISTORY
tix-release originally appeared in Sortix
1.1.
| February 8, 2025 | Sortix 1.1.0-dev |