Add tix-repository(8).

Support renaming, splitting, and deleting ports via RENAMES.

Unify on RUNTIME_DEPS for runtime dependencies.
This commit is contained in:
Jonas 'Sortie' Termansen 2023-12-25 16:09:51 +01:00
parent 382e3a501d
commit 1623063a72
7 changed files with 151 additions and 4 deletions

View File

@ -618,6 +618,7 @@ release-repository: sysroot $(SYSTEM_INITRD) $(SORTIX_RELEASE_DIR)/$(RELEASE)/re
cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.tix.tar.xz $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST) && \
cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.version $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST); \
done
tix-repository --generation=3 $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST)
.PHONY: release-scripts
release-scripts: \

View File

@ -7,7 +7,7 @@ ARCHIVE=$DISTNAME.$COMPRESSION
SHA256SUM=8ca680399df5ee8846a509c8a67c10ee1d5fc1a94456806a0ff9dd913b961db3
UPSTREAM_SITE=https://geoff.greer.fm/ag/releases
UPSTREAM_ARCHIVE=$ARCHIVE
RUNTIME_PROGRAMS=git
RUNTIME_DEPS=git
BUILD_SYSTEM=configure
CONFIGURE_ARGS=
MAKE_VARS='V=1'

View File

@ -178,6 +178,18 @@ number matched in the first subexpression.
.Sy ARCHIVE
and
.Sy VERSION_REGEX )
.It Sy EDITION
An increasing number used to distinguish this edition of the package from any previous packages by
the same name.
A new pacckage with the same name and a different edition will considered a different package.
Upgrades will uninstall the old package and will not upgrade to the new edition as if the package
has stopped existing.
The
.Sy RENAMES
variable can be used in combination with
.Sy EDITION
to rename and split packages.
The default edition is 1.
.It Sy LICENSE
Primary license identifier for the installed files from the
.Lk https://spdx.org/licenses/ "SPDX License List" .
@ -253,12 +265,22 @@ Locate new upstream versions of the port by searching
.Sy RELEASE_SEARCH_PAGE
using this regular expression matching the new version number in the first
subexpression.
.It Sy RENAMES
Comma-separated list of package renames.
Each rename is expressed as the name of a package followed by a
.Sq "@"
and its
.Sy EDITION ,
followed by a
.Sq ":"
and then a potentially-empty space separated list of replacement packages, each
taking the form of a replacement package name followed by
.Sq "@"
and then the replacement package
.Sy EDITION .
.It Sy RUNTIME_DEPS
Space delimited list of libraries (ports) needed at run time.
Unsupported.
.It Sy RUNTIME_PROGRAMS
Space delimited list of programs (ports) needed at run time.
Unsupported.
.It Sy SHA256SUM
.Xr sha256sum 1
of the upstream release.

View File

@ -69,6 +69,25 @@ releasing Sortix x.y, foo." to allow the maintainer to easily
.Xr grep 1
for it after a release.
.Sh CHANGES
.Ss Add tix-repository(8)
The new
.Xr tix-repository 8
program is used to generate repository metadata in releases.
The new
.Sy EDITION
and
.Sy RENAMES
variables in
.Xr port 5
are used to rename and split packages and requires a new
.Xr tix-build 8 .
.Pp
Tix must be upgraded:
.Bd -literal
cd /src/tix &&
make clean &&
make install
.Ed
.Ss Support system upgrades and configuration in GRUB
The GRUB configuration now implements the
.Pa /etc

View File

@ -31,6 +31,7 @@ tix-iso-add \
tix-iso-bootconfig \
tix-iso-liveconfig \
tix-port \
tix-repository \
MANPAGES8=\
tix-build.8 \

View File

@ -811,6 +811,9 @@ static void TixInfo(struct metainfo* minfo)
// TODO: Shell escape the values if needed.
fwrite_variable(tixinfo_fp, "TIX_VERSION", "3");
fwrite_variable(tixinfo_fp, "NAME", minfo->package_name);
const char* edition = metainfo_get(minfo, "EDITION", "pkg.edition");
if ( edition )
fwrite_variable(tixinfo_fp, "EDITION", edition);
const char* version = metainfo_get(minfo, "VERSION", "VERSION");
if ( version )
fwrite_variable(tixinfo_fp, "VERSION", version);
@ -829,6 +832,9 @@ static void TixInfo(struct metainfo* minfo)
else
fwrite_variable(tixinfo_fp, "PREFIX", minfo->prefix);
}
const char* renames = metainfo_get(minfo, "RENAMES", "pkg.renames");
if ( renames )
fwrite_variable(tixinfo_fp, "RENAMES", renames);
}
// TODO: After releasing Sortix 1.1, remove generation 2 compatibility.
else

98
tix/tix-repository Executable file
View File

@ -0,0 +1,98 @@
#!/bin/sh
# Copyright (c) 2023, 2024 Jonas 'Sortie' Termansen.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# tix-repository
# Generate repository metadata.
set -e
generation=3
unset repository
operand=1
dashdash=
previous_option=
for argument do
if [ -n "$previous_option" ]; then
eval $previous_option=\$argument
previous_option=
continue
fi
case $argument in
*=?*) parameter=$(expr "X$argument" : '[^=]*=\(.*\)' || true) ;;
*=) parameter= ;;
*) parameter=yes ;;
esac
case $dashdash$argument in
--) dashdash=yes ;;
--generation=*) generation=$parameter ;;
--generation) previous_option=generation ;;
-*) echo "$0: unrecognized option $argument" >&2
exit 1 ;;
*)
if [ $operand = 1 ]; then
repository="$argument"
operand=2
else
echo "$0: unexpected extra operand $argument" >&2
exit 1
fi
;;
esac
done
if [ -n "$previous_option" ]; then
echo "$0: option '$argument' requires an argument" >&2
exit 1
fi
if [ -z "$repository" ]; then
echo "$0: error: No repository was specified" >&2
exit 1
fi
if [ "$generation" != 3 ]; then
echo "$0: error: --generation=$generation is not supported by this version" >&2
exit 1
fi
cd "$repository"
ls |
grep -E '\.tix.tar.xz$' |
grep -Eo '^[^.]*' |
LC_ALL=C sort -o packages.list
true > dependencies.list
true > renames.list
true > manifest.list
for package in $(cat packages.list); do
tar -xOf "$package.tix.tar.xz" "tix/tixinfo/$package" > "$package.info"
tar -xOf "$package.tix.tar.xz" "tix/manifest/$package" > "$package.manifest"
sha256sum "$package.tix.tar.xz" > "$package.tix.tar.xz.sha256sum"
tix-vars -d '' "$package.info" RENAMES | tr , '\n' | sed -E '/^$/d' >> renames.list
(printf "%s: " "$package" && tix-vars -d '' "$package.info" RUNTIME_DEPS | sed -E 's/ +$//') >> dependencies.list
sed -E "s/$/:$package/" "$package.manifest" >> manifest.list
done
LC_ALL=C sort -t: -k1,1 manifest.list -o manifest.list
find -type f '!' -name 'sha256sum' '!' -name '*.sha256sum' -exec sha256sum '{}' '+' |
sed -E 's, \./, ,' |
LC_ALL=C sort -k 2 > sha256sum