forked from kiss-community/kiss
kiss: Configurable and dynamic tarball compression.
This allows you to swap between gzip and xz compression via the new environment variable ('KISS_COMPRESS'). As of this commit, new builds will use xz compression (making use of all cores on the machine). Other compression methods can easily be added by adding two simple lines to the script. Your existing package cache will continue to be used as the package manager will use whatever tarball is available (for the package and version it is looking for).
This commit is contained in:
parent
1c3ede992e
commit
ad9cda2e34
52
kiss
52
kiss
@ -172,6 +172,15 @@ pkg_list() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pkg_cache() {
|
||||||
|
read -r version release < "$(pkg_find "$1")/version"
|
||||||
|
|
||||||
|
set +f; set -f -- "$bin_dir/$1#$version-$release.tar."*
|
||||||
|
tar_file=$1
|
||||||
|
|
||||||
|
[ -f "$tar_file" ]
|
||||||
|
}
|
||||||
|
|
||||||
pkg_sources() {
|
pkg_sources() {
|
||||||
# Download any remote package sources. The existence of local
|
# Download any remote package sources. The existence of local
|
||||||
# files is also checked.
|
# files is also checked.
|
||||||
@ -339,7 +348,7 @@ pkg_order() {
|
|||||||
|
|
||||||
for pkg; do
|
for pkg; do
|
||||||
case $pkg in
|
case $pkg in
|
||||||
*.tar.gz) deps="$deps $pkg " ;;
|
*.tar.*) deps="$deps $pkg " ;;
|
||||||
*) pkg_depends "$pkg" raw
|
*) pkg_depends "$pkg" raw
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@ -493,8 +502,12 @@ pkg_tar() {
|
|||||||
read -r version release < "$(pkg_find "$1")/version"
|
read -r version release < "$(pkg_find "$1")/version"
|
||||||
|
|
||||||
# Create a tar-ball from the contents of the built package.
|
# Create a tar-ball from the contents of the built package.
|
||||||
"$tar" zpcf "$bin_dir/$1#$version-$release.tar.gz" -C "$pkg_dir/$1" . ||
|
"$tar" cf - -C "$pkg_dir/$1" . |
|
||||||
die "$1" "Failed to create tar-ball"
|
case ${KISS_COMPRESS:=xz} in
|
||||||
|
xz) xz -zT 0 ;;
|
||||||
|
gz) gzip -6 ;;
|
||||||
|
esac \
|
||||||
|
> "$bin_dir/$1#$version-$release.tar.${KISS_COMPRESS:=xz}"
|
||||||
|
|
||||||
log "$1" "Successfully created tar-ball"
|
log "$1" "Successfully created tar-ball"
|
||||||
}
|
}
|
||||||
@ -543,24 +556,17 @@ pkg_build() {
|
|||||||
# directory and are up to date.
|
# directory and are up to date.
|
||||||
for pkg; do
|
for pkg; do
|
||||||
# Don't check for a pre-built package if it was passed
|
# Don't check for a pre-built package if it was passed
|
||||||
# to KISS directly.
|
# to KISS directly and install any pre-built binaries if
|
||||||
contains "$explicit_build" "$pkg" || {
|
# they exist.
|
||||||
# Figure out the version and release.
|
! contains "$explicit_build" "$pkg" && pkg_cache "$pkg" && {
|
||||||
read -r version release < "$(pkg_find "$pkg")/version"
|
|
||||||
|
|
||||||
# Install any pre-built binaries if they exist.
|
|
||||||
# This calls 'args' to inherit a root check
|
|
||||||
# to 'su' to elevate permissions.
|
|
||||||
[ -f "$bin_dir/$pkg#$version-$release.tar.gz" ] && {
|
|
||||||
log "$pkg" "Found pre-built binary, installing"
|
log "$pkg" "Found pre-built binary, installing"
|
||||||
(KISS_FORCE=1 args i "$bin_dir/$pkg#$version-$release.tar.gz")
|
(KISS_FORCE=1 args i "$tar_file")
|
||||||
|
|
||||||
# Remove the now installed package from the build list.
|
# Remove the now installed package from the build list.
|
||||||
# See [1] at top of script.
|
# See [1] at top of script.
|
||||||
# shellcheck disable=2046,2086
|
# shellcheck disable=2046,2086
|
||||||
set -- $(pop "$pkg" "$@")
|
set -- $(pop "$pkg" "$@")
|
||||||
}
|
}
|
||||||
}
|
|
||||||
done
|
done
|
||||||
|
|
||||||
for pkg; do pkg_lint "$pkg"; done
|
for pkg; do pkg_lint "$pkg"; done
|
||||||
@ -898,18 +904,11 @@ pkg_install() {
|
|||||||
|
|
||||||
# Install can also take the full path to a tar-ball.
|
# Install can also take the full path to a tar-ball.
|
||||||
# We don't need to check the repository if this is the case.
|
# We don't need to check the repository if this is the case.
|
||||||
if [ -f "$1" ] && [ -z "${1%%*.tar.gz}" ] ; then
|
if [ -f "$1" ] && [ -z "${1%%*.tar.*}" ] ; then
|
||||||
tar_file=$1
|
tar_file=$1
|
||||||
|
|
||||||
else
|
else
|
||||||
# Read the version information to name the package.
|
pkg_cache "$1" || die "$1" "has not been built, run 'kiss b $1'"
|
||||||
read -r version release < "$(pkg_find "$1")/version"
|
|
||||||
|
|
||||||
# Construct the name of the package tarball.
|
|
||||||
tar_file=$bin_dir/$1\#$version-$release.tar.gz
|
|
||||||
|
|
||||||
[ -f "$tar_file" ] ||
|
|
||||||
die "Package '$1' has not been built, run 'kiss build $1'"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Figure out which package the tar-ball installs by checking for
|
# Figure out which package the tar-ball installs by checking for
|
||||||
@ -922,10 +921,13 @@ pkg_install() {
|
|||||||
pkg_name=${pkg_name##*/}
|
pkg_name=${pkg_name##*/}
|
||||||
|
|
||||||
mkdir -p "$tar_dir/$pkg_name"
|
mkdir -p "$tar_dir/$pkg_name"
|
||||||
|
log "$pkg_name" "Extracting $tar_file"
|
||||||
|
|
||||||
# Extract the tar-ball to catch any errors before installation begins.
|
# Extract the tar-ball to catch any errors before installation begins.
|
||||||
"$tar" pxf "$tar_file" -C "$tar_dir/$pkg_name" ||
|
case $tar_file in
|
||||||
die "$pkg_name" "Failed to extract tar-ball"
|
*.xz) xz -dcT 0 ;;
|
||||||
|
*.gz) gzip -d ;;
|
||||||
|
esac < "$tar_file" | "$tar" pxf - -C "$tar_dir/$pkg_name"
|
||||||
|
|
||||||
log "$pkg_name" "Checking that all dependencies are installed"
|
log "$pkg_name" "Checking that all dependencies are installed"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user