forked from kiss-community/kiss
kiss: clean up install
This commit is contained in:
parent
0d475206ff
commit
a9fd59bfa0
72
kiss
72
kiss
@ -234,6 +234,10 @@ EOF
|
||||
}
|
||||
|
||||
pkg_find() {
|
||||
_pkg_find "$@" || die "'$1' not found"
|
||||
}
|
||||
|
||||
_pkg_find() {
|
||||
# Figure out which repository a package belongs to by searching for
|
||||
# directories matching the package name in $KISS_PATH/*.
|
||||
set -- "$1" "$2" "$3" "${4:-"$KISS_PATH"}"
|
||||
@ -253,7 +257,7 @@ pkg_find() {
|
||||
# Show all search results if called from 'kiss search', else store the
|
||||
# values in variables. If there are 4 arguments, no package has been found.
|
||||
case $2-$# in
|
||||
*-4) die "'$1' not found" ;;
|
||||
*-4) return 1 ;;
|
||||
-*) repo_dir=$5 repo_name=${5##*/} ;;
|
||||
*) shift 4; printf '%s\n' "$@"
|
||||
esac
|
||||
@ -488,7 +492,7 @@ pkg_depends() {
|
||||
die "Circular dependency detected $1 <> ${4##* }"
|
||||
esac
|
||||
|
||||
! "${6:-pkg_find}" "$1" || ! [ -e "$repo_dir/depends" ] ||
|
||||
! "${6:-_pkg_find}" "$1" || ! [ -e "$repo_dir/depends" ] ||
|
||||
|
||||
# Recurse through the dependencies of the child packages.
|
||||
while read -r dep dep_type || [ "$dep" ]; do
|
||||
@ -1180,7 +1184,7 @@ pkg_install_files() {
|
||||
else
|
||||
# Construct a temporary filename which is a) unique and
|
||||
# b) identifiable as related to the package manager.
|
||||
__tmp=${_file%/*}/__kiss-tmp-$pkg_name-${file##*/}-$KISS_PID
|
||||
__tmp=${_file%/*}/__kiss-tmp-$_pkg-${file##*/}-$KISS_PID
|
||||
|
||||
# Copy the file to the destination directory with the
|
||||
# temporary name created above.
|
||||
@ -1349,17 +1353,11 @@ pkg_installable() {
|
||||
! [ -f "$2" ] ||
|
||||
|
||||
while read -r dep dep_type || [ "$dep" ]; do
|
||||
case $dep-$dep_type in
|
||||
\#*-*)
|
||||
continue
|
||||
;;
|
||||
|
||||
*-)
|
||||
[ -d "$sys_db/$dep" ] || {
|
||||
printf '%s %s\n' "$dep" "$dep_type"
|
||||
set -- "$1" "$2" "$(($3 + 1))"
|
||||
}
|
||||
;;
|
||||
case $dep-$dep_type in [!\#]?*)
|
||||
[ -d "$sys_db/$dep" ] || {
|
||||
printf '%s %s\n' "$dep" "$dep_type"
|
||||
set -- "$1" "$2" "$(($3 + 1))"
|
||||
}
|
||||
esac
|
||||
done < "$2"
|
||||
|
||||
@ -1402,17 +1400,17 @@ pkg_install() {
|
||||
[ -f "$1" ] || die "File '$1' does not exist"
|
||||
|
||||
tar_file=$1
|
||||
pkg_name=${1##*/}
|
||||
pkg_name=${pkg_name%@*}
|
||||
_pkg=${1##*/}
|
||||
_pkg=${_pkg%@*}
|
||||
;;
|
||||
|
||||
*)
|
||||
pkg_cache "$1" || die "$1" "Not yet built"
|
||||
pkg_name=$1
|
||||
_pkg=$1
|
||||
;;
|
||||
esac
|
||||
|
||||
mkcd "$tar_dir/$pkg_name"
|
||||
mkcd "$tar_dir/$_pkg"
|
||||
|
||||
# The tarball is extracted to a temporary directory where its contents are
|
||||
# then "installed" to the filesystem. Running this step as soon as possible
|
||||
@ -1423,29 +1421,29 @@ pkg_install() {
|
||||
# Naively assume that the existence of a manifest file is all that
|
||||
# determines a valid KISS package from an invalid one. This should be a
|
||||
# fine assumption to make in 99.99% of cases.
|
||||
[ -f "./$pkg_db/$pkg_name/manifest" ] || die "Not a valid KISS package"
|
||||
[ -f "$PWD/$pkg_db/$_pkg/manifest" ] || die "Not a valid KISS package"
|
||||
|
||||
[ "$KISS_FORCE" = 1 ] || {
|
||||
pkg_manifest_validate "$pkg_name"
|
||||
pkg_installable "$pkg_name" "$tar_dir/$pkg_name/$pkg_db/$pkg_name/depends"
|
||||
pkg_manifest_validate "$_pkg"
|
||||
pkg_installable "$_pkg" "$PWD/$pkg_db/$_pkg/depends"
|
||||
}
|
||||
|
||||
# arg1: pre-install
|
||||
# arg2: package name
|
||||
# arg3: path to extracted package
|
||||
run_hook pre-install "$pkg_name" "$tar_dir/$pkg_name"
|
||||
run_hook pre-install "$_pkg" "$PWD"
|
||||
|
||||
pkg_conflicts "$pkg_name"
|
||||
pkg_conflicts "$_pkg"
|
||||
|
||||
log "$pkg_name" "Installing package (${tar_file##*/})"
|
||||
log "$_pkg" "Installing package (${tar_file##*/})"
|
||||
|
||||
# If the package is already installed (and this is an upgrade) make a
|
||||
# backup of the manifest and etcsums files.
|
||||
tmp_file_copy "$pkg_name" manifest-copy "$sys_db/$pkg_name/manifest"
|
||||
tmp_file_copy "$pkg_name" etcsums-copy "$sys_db/$pkg_name/etcsums"
|
||||
tmp_file "$pkg_name" manifest-diff
|
||||
tmp_file_copy "$_pkg" manifest-copy "$sys_db/$_pkg/manifest"
|
||||
tmp_file_copy "$_pkg" etcsums-copy "$sys_db/$_pkg/etcsums"
|
||||
tmp_file "$_pkg" manifest-diff
|
||||
|
||||
tar_man=$tar_dir/$pkg_name/$pkg_db/$pkg_name/manifest
|
||||
tar_man=$PWD/$pkg_db/$_pkg/manifest
|
||||
|
||||
# Generate a list of files which exist in the currently installed manifest
|
||||
# but not in the newer (to be installed) manifest.
|
||||
@ -1454,7 +1452,7 @@ pkg_install() {
|
||||
# Reverse the manifest file so that we start shallow and go deeper as we
|
||||
# iterate over each item. This is needed so that directories are created
|
||||
# going down the tree.
|
||||
tmp_file "$pkg_name" manifest-reverse
|
||||
tmp_file "$_pkg" manifest-reverse
|
||||
sort "$tar_man" > "$_tmp_file"
|
||||
|
||||
# Block being able to abort the script with Ctrl+C during installation.
|
||||
@ -1464,7 +1462,7 @@ pkg_install() {
|
||||
|
||||
if
|
||||
# Install the package's files by iterating over its manifest.
|
||||
pkg_install_files -z "$tar_dir/$pkg_name" < "$_tmp_file" &&
|
||||
pkg_install_files -z "$PWD" < "$_tmp_file" &&
|
||||
|
||||
# Handle /etc/ files in a special way (via a 3-way checksum) to
|
||||
# determine how these files should be installed. Do we overwrite the
|
||||
@ -1473,7 +1471,7 @@ pkg_install() {
|
||||
#
|
||||
# This is more or less similar to Arch Linux's Pacman with the user
|
||||
# manually handling the .new files when and if they appear.
|
||||
pkg_etc "$pkg_name" "$_tmp_file_pre_pre" &&
|
||||
pkg_etc "$_pkg" "$_tmp_file_pre_pre" &&
|
||||
|
||||
# This is the aforementioned step removing any files from the old
|
||||
# version of the package if the installation is an update. Each file
|
||||
@ -1482,7 +1480,7 @@ pkg_install() {
|
||||
|
||||
# Install the package's files a second time to fix any mess caused by
|
||||
# the above removal of the previous version of the package.
|
||||
pkg_install_files -e "$tar_dir/$pkg_name" < "$_tmp_file"
|
||||
pkg_install_files -e "$PWD" < "$_tmp_file"
|
||||
|
||||
then
|
||||
# Reset 'trap' to its original value. Installation is done so we no longer
|
||||
@ -1492,15 +1490,15 @@ pkg_install() {
|
||||
# arg1: post-install
|
||||
# arg2: package name
|
||||
# arg3: path to installed package database
|
||||
run_hook_pkg post-install "$pkg_name"
|
||||
run_hook post-install "$pkg_name" "$sys_db/$pkg_name"
|
||||
run_hook_pkg post-install "$_pkg"
|
||||
run_hook post-install "$_pkg" "$sys_db/$_pkg"
|
||||
|
||||
log "$pkg_name" "Installed successfully"
|
||||
log "$_pkg" "Installed successfully"
|
||||
|
||||
else
|
||||
pkg_clean
|
||||
log "$pkg_name" "Failed to install package." ERROR
|
||||
die "$pkg_name" "Filesystem now dirty, manual repair needed."
|
||||
log "$_pkg" "Failed to install package." ERROR
|
||||
die "$_pkg" "Filesystem now dirty, manual repair needed."
|
||||
fi
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user