forked from kiss-community/kiss
KISS_ROOT: fix bugs
This commit is contained in:
parent
5a7447b3e8
commit
d89de876d9
48
kiss
48
kiss
@ -63,7 +63,7 @@ pkg_find() {
|
|||||||
# Find the repository containing a package.
|
# Find the repository containing a package.
|
||||||
# Searches installed packages if the package is absent
|
# Searches installed packages if the package is absent
|
||||||
# from the repositories.
|
# from the repositories.
|
||||||
set -- "$1" $(IFS=:; find $KISS_PATH "$pkg_db" -maxdepth 1 -name "$1")
|
set -- "$1" $(IFS=:; find $KISS_PATH "$sys_db" -maxdepth 1 -name "$1")
|
||||||
|
|
||||||
# A package may also not be found due to a repository not being
|
# A package may also not be found due to a repository not being
|
||||||
# readable by the current user. Either way, we need to die here.
|
# readable by the current user. Either way, we need to die here.
|
||||||
@ -81,7 +81,7 @@ pkg_list() {
|
|||||||
# avoid having to 'basename' each path. If this fails,
|
# avoid having to 'basename' each path. If this fails,
|
||||||
# set '$1' to mimic a failed glob which indicates that
|
# set '$1' to mimic a failed glob which indicates that
|
||||||
# nothing is installed.
|
# nothing is installed.
|
||||||
cd "$pkg_db" 2>/dev/null || set -- "$pkg_db/"\*
|
cd "$sys_db" 2>/dev/null || set -- "$sys_db/"\*
|
||||||
|
|
||||||
# Optional arguments can be passed to check for specific
|
# Optional arguments can be passed to check for specific
|
||||||
# packages. If no arguments are passed, list all. As we
|
# packages. If no arguments are passed, list all. As we
|
||||||
@ -91,7 +91,7 @@ pkg_list() {
|
|||||||
|
|
||||||
# If the 'glob' above failed, exit early as there are no
|
# If the 'glob' above failed, exit early as there are no
|
||||||
# packages installed.
|
# packages installed.
|
||||||
[ "$1" = "$pkg_db/"\* ] && return 1
|
[ "$1" = "$sys_db/"\* ] && return 1
|
||||||
|
|
||||||
# Loop over each package and print its name and version.
|
# Loop over each package and print its name and version.
|
||||||
for pkg; do
|
for pkg; do
|
||||||
@ -285,10 +285,10 @@ pkg_fixdeps() {
|
|||||||
dep=${dep% *}
|
dep=${dep% *}
|
||||||
|
|
||||||
# Traverse symlinks to get the true path to the file.
|
# Traverse symlinks to get the true path to the file.
|
||||||
dep=$(readlink -f "/$dep")
|
dep=$(readlink -f "$KISS_ROOT/${dep##$KISS_ROOT}")
|
||||||
|
|
||||||
# Figure out which package owns the file.
|
# Figure out which package owns the file.
|
||||||
dep=$(set +f; grep -lFx "$dep" "$pkg_db/"*/manifest)
|
dep=$(set +f; grep -lFx "${dep##$KISS_ROOT}" "$sys_db/"*/manifest)
|
||||||
|
|
||||||
# Extract package name from 'grep' match.
|
# Extract package name from 'grep' match.
|
||||||
dep=${dep%/*}
|
dep=${dep%/*}
|
||||||
@ -556,7 +556,7 @@ pkg_conflicts() {
|
|||||||
set +f
|
set +f
|
||||||
|
|
||||||
# Generate a list of all installed package manifests.
|
# Generate a list of all installed package manifests.
|
||||||
set -f -- "$pkg_db/"*/manifest
|
set -f -- "$sys_db/"*/manifest
|
||||||
|
|
||||||
# Go through the manifest list and filter out the
|
# Go through the manifest list and filter out the
|
||||||
# package which will be installed.
|
# package which will be installed.
|
||||||
@ -599,7 +599,7 @@ pkg_remove() {
|
|||||||
set +f
|
set +f
|
||||||
|
|
||||||
# Make sure that nothing depends on this package.
|
# Make sure that nothing depends on this package.
|
||||||
[ "$2" = check ] && for file in "$pkg_db/"*; do
|
[ "$2" = check ] && for file in "$sys_db/"*; do
|
||||||
# Check each depends file for the package and if it's
|
# Check each depends file for the package and if it's
|
||||||
# a run-time dependency, append to the $required_by string.
|
# a run-time dependency, append to the $required_by string.
|
||||||
grep -qFx "$1" "$file/depends" 2>/dev/null &&
|
grep -qFx "$1" "$file/depends" 2>/dev/null &&
|
||||||
@ -623,12 +623,12 @@ pkg_remove() {
|
|||||||
# manager from removing user edited configuration files.
|
# manager from removing user edited configuration files.
|
||||||
[ "${file##/etc/*}" ] || continue
|
[ "${file##/etc/*}" ] || continue
|
||||||
|
|
||||||
if [ -d "/$file" ]; then
|
if [ -d "$KISS_ROOT/$file" ]; then
|
||||||
rmdir "/$file" 2>/dev/null || continue
|
rmdir "$KISS_ROOT/$file" 2>/dev/null || continue
|
||||||
else
|
else
|
||||||
rm -f -- "/$file"
|
rm -f -- "$KISS_ROOT/$file"
|
||||||
fi
|
fi
|
||||||
done < "$pkg_db/$1/manifest"
|
done < "$sys_db/$1/manifest"
|
||||||
|
|
||||||
# Reset 'trap' to its original value. Removal is done so
|
# Reset 'trap' to its original value. Removal is done so
|
||||||
# we no longer need to block 'Ctrl+C'.
|
# we no longer need to block 'Ctrl+C'.
|
||||||
@ -699,15 +699,16 @@ pkg_install() {
|
|||||||
|
|
||||||
# If the package is already installed (and this is an upgrade) make a
|
# If the package is already installed (and this is an upgrade) make a
|
||||||
# backup of the manifest file.
|
# backup of the manifest file.
|
||||||
if [ -f "$pkg_db/$pkg_name/manifest" ]; then
|
if [ -f "$sys_db/$pkg_name/manifest" ]; then
|
||||||
old_manifest=$(cat "$pkg_db/$pkg_name/manifest")
|
old_manifest=$(cat "$sys_db/$pkg_name/manifest")
|
||||||
else
|
else
|
||||||
old_manifest=
|
old_manifest=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# This is repeated multiple times. Better to make it a function.
|
# This is repeated multiple times. Better to make it a function.
|
||||||
pkg_rsync() {
|
pkg_rsync() {
|
||||||
rsync --chown=root:root -HKav --exclude etc "$tar_dir/$pkg_name/" /
|
rsync --chown=root:root -HKav --exclude etc -- \
|
||||||
|
"$tar_dir/$pkg_name/" "$KISS_ROOT/"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Install the package by using 'rsync' and overwrite any existing files
|
# Install the package by using 'rsync' and overwrite any existing files
|
||||||
@ -717,12 +718,12 @@ pkg_install() {
|
|||||||
# If '/etc/' exists in the package, install it but don't overwrite.
|
# If '/etc/' exists in the package, install it but don't overwrite.
|
||||||
[ -d "$tar_dir/$pkg_name/etc" ] &&
|
[ -d "$tar_dir/$pkg_name/etc" ] &&
|
||||||
rsync --chown=root:root -HKav --ignore-existing \
|
rsync --chown=root:root -HKav --ignore-existing \
|
||||||
"$tar_dir/$pkg_name/etc" /
|
"$tar_dir/$pkg_name/etc" "$KISS_ROOT/"
|
||||||
|
|
||||||
# Remove any leftover files if this is an upgrade.
|
# Remove any leftover files if this is an upgrade.
|
||||||
[ "$old_manifest" ] && {
|
[ "$old_manifest" ] && {
|
||||||
printf '%s\n' "$old_manifest" |
|
printf '%s\n' "$old_manifest" |
|
||||||
grep -vFxf "$pkg_db/$pkg_name/manifest" - |
|
grep -vFxf "$sys_db/$pkg_name/manifest" - |
|
||||||
|
|
||||||
while read -r file; do
|
while read -r file; do
|
||||||
# Skip deleting some leftover files.
|
# Skip deleting some leftover files.
|
||||||
@ -730,6 +731,8 @@ pkg_install() {
|
|||||||
/etc/*|*bin/rm|*bin/busybox|*bin/rsync) continue ;;
|
/etc/*|*bin/rm|*bin/busybox|*bin/rsync) continue ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
file=$KISS_ROOT/$file
|
||||||
|
|
||||||
# Remove files.
|
# Remove files.
|
||||||
if [ -f "$file" ] && [ ! -L "$file" ]; then
|
if [ -f "$file" ] && [ ! -L "$file" ]; then
|
||||||
rm -f "$file"
|
rm -f "$file"
|
||||||
@ -758,9 +761,9 @@ pkg_install() {
|
|||||||
# we no longer need to block 'Ctrl+C'.
|
# we no longer need to block 'Ctrl+C'.
|
||||||
trap pkg_clean EXIT INT
|
trap pkg_clean EXIT INT
|
||||||
|
|
||||||
[ -x "$pkg_db/$pkg_name/post-install" ] && {
|
[ -x "$sys_db/$pkg_name/post-install" ] && {
|
||||||
log "[$pkg_name] Running post-install script"
|
log "[$pkg_name] Running post-install script"
|
||||||
"$pkg_db/$pkg_name/post-install" ||:
|
"$sys_db/$pkg_name/post-install" ||:
|
||||||
}
|
}
|
||||||
|
|
||||||
log "[$pkg_name] Installed successfully"
|
log "[$pkg_name] Installed successfully"
|
||||||
@ -813,7 +816,7 @@ pkg_updates() {
|
|||||||
# Enable globbing.
|
# Enable globbing.
|
||||||
set +f
|
set +f
|
||||||
|
|
||||||
for pkg in "$pkg_db/"*; do
|
for pkg in "$sys_db/"*; do
|
||||||
pkg_name=${pkg##*/}
|
pkg_name=${pkg##*/}
|
||||||
|
|
||||||
# Read version and release information from the installed packages
|
# Read version and release information from the installed packages
|
||||||
@ -910,7 +913,7 @@ args() {
|
|||||||
b|build)
|
b|build)
|
||||||
# If no arguments were passed, rebuild all packages.
|
# If no arguments were passed, rebuild all packages.
|
||||||
[ "$1" ] || {
|
[ "$1" ] || {
|
||||||
cd "$pkg_db" || die "Failed to find package db"
|
cd "$sys_db" || die "Failed to find package db"
|
||||||
|
|
||||||
# Use a glob after 'cd' to generate a list of all installed
|
# Use a glob after 'cd' to generate a list of all installed
|
||||||
# packages based on directory names.
|
# packages based on directory names.
|
||||||
@ -1008,7 +1011,7 @@ args() {
|
|||||||
|
|
||||||
main() {
|
main() {
|
||||||
# Set the location to the repository and package database.
|
# Set the location to the repository and package database.
|
||||||
pkg_db=/var/db/kiss/installed
|
pkg_db=var/db/kiss/installed
|
||||||
|
|
||||||
# The PID of the current shell process is used to isolate directories
|
# The PID of the current shell process is used to isolate directories
|
||||||
# to each specific KISS instance. This allows multiple package manager
|
# to each specific KISS instance. This allows multiple package manager
|
||||||
@ -1026,12 +1029,13 @@ main() {
|
|||||||
|
|
||||||
# Create the required temporary directories and set the variables
|
# Create the required temporary directories and set the variables
|
||||||
# which point to them.
|
# which point to them.
|
||||||
mkdir -p "${cac_dir:=${XDG_CACHE_HOME:-$HOME/.cache}/kiss}" \
|
mkdir -p "${cac_dir:=$KISS_ROOT${XDG_CACHE_HOME:-$HOME/.cache}/kiss}" \
|
||||||
"${mak_dir:=$cac_dir/build-$pid}" \
|
"${mak_dir:=$cac_dir/build-$pid}" \
|
||||||
"${pkg_dir:=$cac_dir/pkg-$pid}" \
|
"${pkg_dir:=$cac_dir/pkg-$pid}" \
|
||||||
"${tar_dir:=$cac_dir/extract-$pid}" \
|
"${tar_dir:=$cac_dir/extract-$pid}" \
|
||||||
"${src_dir:=$cac_dir/sources}" \
|
"${src_dir:=$cac_dir/sources}" \
|
||||||
"${bin_dir:=$cac_dir/bin}" \
|
"${bin_dir:=$cac_dir/bin}" \
|
||||||
|
"${sys_db:=$KISS_ROOT/$pkg_db}" \
|
||||||
|| die "Couldn't create cache directories"
|
|| die "Couldn't create cache directories"
|
||||||
|
|
||||||
args "$@"
|
args "$@"
|
||||||
|
Loading…
Reference in New Issue
Block a user