Add tix-repository(8).
Support renaming, splitting, and deleting ports via RENAMES. Unify on RUNTIME_DEPS for runtime dependencies.
This commit is contained in:
parent
4f2f3e720b
commit
5236589d81
7 changed files with 151 additions and 4 deletions
1
Makefile
1
Makefile
|
@ -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: \
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -31,6 +31,7 @@ tix-iso-add \
|
|||
tix-iso-bootconfig \
|
||||
tix-iso-liveconfig \
|
||||
tix-port \
|
||||
tix-repository \
|
||||
|
||||
MANPAGES8=\
|
||||
tix-build.8 \
|
||||
|
|
|
@ -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
98
tix/tix-repository
Executable 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
|
Loading…
Reference in a new issue