Allow preseeding with binary packages.

This commit is contained in:
Andrius Štikonas 2022-05-24 23:00:47 +01:00
parent 9bc2ca1726
commit 0b3782d61b
3 changed files with 54 additions and 17 deletions

View File

@ -73,6 +73,47 @@ _grep() {
fi fi
} }
get_revision() {
local pkg=$1
cd "${SRCDIR}/repo"
# Get revision (n time this package has been built)
revision="$(echo "${pkg}"*)"
# Different versions of bash
if [ "${revision}" = "${pkg}*" ] || [ -z "${revision}" ]; then
revision=0
else
revision="${revision##*_}"
revision="${revision%%.*}"
revision=$((++revision))
fi
}
# Installs binary packages from an earlier run
# This is useful to speed up development cycle
bin_preseed() {
if [ -d "${SRCDIR}/repo-preseeded" ]; then
get_revision "${pkg}"
cd "${SRCDIR}/repo-preseeded"
if src_checksum "${pkg}" $((revision)); then
echo "${pkg}: installing prebuilt package."
if [[ "${pkg}" == bash-* ]]; then
# tar does not like overwriting running bash
# shellcheck disable=SC2153
rm -f "${PREFIX}/bin/bash" "${PREFIX}/bin/sh"
fi
mv "${pkg}_${revision}"* ../repo
# shellcheck disable=SC2144
if [ -f *-repodata ]; then
mv -- *-repodata ../repo
fi
cd "${SRCDIR}/repo"
src_apply "${pkg}" $((revision))
cd "${SOURCES}"
return
fi
fi
}
# Common build steps # Common build steps
# Build function provides a few common stages with default implementation # Build function provides a few common stages with default implementation
# that can be overridden on per package basis in the build script. # that can be overridden on per package basis in the build script.
@ -86,6 +127,8 @@ build() {
script_name=${2:-${pkg}.sh} script_name=${2:-${pkg}.sh}
dirname=${4:-${pkg}} dirname=${4:-${pkg}}
bin_preseed
cd "${SOURCES}/${pkg}" || (echo "Cannot cd into ${pkg}!"; kill $$) cd "${SOURCES}/${pkg}" || (echo "Cannot cd into ${pkg}!"; kill $$)
echo "${pkg}: beginning build using script ${script_name}" echo "${pkg}: beginning build using script ${script_name}"
base_dir="${PWD}" base_dir="${PWD}"
@ -126,23 +169,12 @@ build() {
build_stage=src_install build_stage=src_install
call $build_stage call $build_stage
cd /usr/src/repo
# Get revision (n time this package has been built)
revision="$(echo "${pkg}"*)"
# Different versions of bash
if [ "${revision}" = "${pkg}*" ] || [ -z "${revision}" ]; then
revision=0
else
revision="${revision##*_}"
revision="${revision%%.*}"
revision=$((++revision))
fi
echo "${pkg}: creating package." echo "${pkg}: creating package."
get_revision "${pkg}"
cd "${DESTDIR}" cd "${DESTDIR}"
src_pkg src_pkg
src_checksum src_checksum "${pkg}" "${revision}"
echo "${pkg}: cleaning up." echo "${pkg}: cleaning up."
rm -rf "${SOURCES}/${pkg}/build" rm -rf "${SOURCES}/${pkg}/build"
@ -150,7 +182,7 @@ build() {
mkdir -p "${DESTDIR}" mkdir -p "${DESTDIR}"
echo "${pkg}: installing package." echo "${pkg}: installing package."
src_apply src_apply "${pkg}" "${revision}"
echo "${pkg}: build successful" echo "${pkg}: build successful"
@ -271,17 +303,21 @@ src_pkg() {
} }
src_checksum() { src_checksum() {
local pkg=$1 revision=$2
local rval=0
if ! [ "$UPDATE_CHECKSUMS" = True ] ; then if ! [ "$UPDATE_CHECKSUMS" = True ] ; then
echo "${pkg}: checksumming created package."
# We avoid using pipes as that is not supported by initial sha256sum from mescc-tools-extra # We avoid using pipes as that is not supported by initial sha256sum from mescc-tools-extra
local checksum_file=/tmp/checksum local checksum_file=/tmp/checksum
_grep "${pkg}_${revision}" "${SOURCES}/SHA256SUMS.pkgs" > "${checksum_file}" _grep "${pkg}_${revision}" "${SOURCES}/SHA256SUMS.pkgs" > "${checksum_file}"
sha256sum -c "${checksum_file}" echo "${pkg}: checksumming created package."
sha256sum -c "${checksum_file}" || rval=$?
rm "${checksum_file}" rm "${checksum_file}"
fi fi
return "${rval}"
} }
src_apply() { src_apply() {
local pkg="${1}" revision="${2}"
if command -v xbps-install >/dev/null 2>&1; then if command -v xbps-install >/dev/null 2>&1; then
xbps-install -y -R /usr/src/repo "${pkg%%-[0-9]*}" xbps-install -y -R /usr/src/repo "${pkg%%-[0-9]*}"
else else

View File

@ -14,6 +14,7 @@ export PREFIX=/usr
export SOURCES=/usr/src export SOURCES=/usr/src
export DESTDIR=/tmp/destdir export DESTDIR=/tmp/destdir
export DISTFILES=/distfiles export DISTFILES=/distfiles
export SRCDIR="${SOURCES}"
echo echo
echo "Installing packages into sysc" echo "Installing packages into sysc"

View File

@ -31,4 +31,4 @@ create_fhs
build bash-5.1 build bash-5.1
exec env -i PATH="${PATH}" PREFIX="${PREFIX}" SOURCES="${SOURCES}" DESTDIR="${DESTDIR}" DISTFILES="${DISTFILES}" bash run2.sh exec env -i PATH="${PATH}" PREFIX="${PREFIX}" SOURCES="${SOURCES}" DESTDIR="${DESTDIR}" DISTFILES="${DISTFILES}" SRCDIR="${SRCDIR}" bash run2.sh