kisslinux / kiss

KISS Linux - Package Manager
https://kisslinux.github.io
MIT License
464 stars 62 forks source link

Inherit KISS_HOOK in children #283

Closed ioraff closed 5 months ago

ioraff commented 2 years ago

Description

The user-definable hooks in pkg_install(), pre-install and post-install do not run.

Verbose log

env KISS_PROMPT=0 sh -x ./kiss i nasm

+ main i nasm
+ set -ef
+ equ  0
+ return 1
+ [ -t 2 ]
+ ppwd=/home/omr/repo/kiss
+ newline=

+ : gz
+ : 3082
+ : omr
+ command -v ssu
+ cmd_su=/usr/bin/ssu
+ command -v readelf
+ cmd_elf=/usr/bin/readelf
+ command -v openssl
+ cmd_sha=/usr/bin/openssl
+ command -v aria2c
+ command -v axel
+ command -v curl
+ cmd_get=/usr/bin/curl
+ date +%Y-%m-%d-%H:%M
+ time=2021-10-21-16:50
+ create_tmp_dirs
+ KISS_ROOT=
+ mkdir -p /
+ sys_db=/var/db/kiss/installed
+ sys_ch=/var/db/kiss/choices
+ cac_dir=/home/omr/.cache
+ cac_dir=/home/omr/.cache/kiss
+ src_dir=/home/omr/.cache/kiss/sources
+ log_dir=/home/omr/.cache/kiss/logs/2021-10-21
+ bin_dir=/home/omr/.cache/kiss/bin
+ proc=/home/omr/.cache/kiss/proc
+ proc=/home/omr/.cache/kiss/proc/3082
+ mak_dir=/home/omr/.cache/kiss/proc/3082/build
+ pkg_dir=/home/omr/.cache/kiss/proc/3082/pkg
+ tar_dir=/home/omr/.cache/kiss/proc/3082/extract
+ tmp_dir=/home/omr/.cache/kiss/proc/3082/tmp
+ mkdir -p /home/omr/.cache/kiss/sources /home/omr/.cache/kiss/logs/2021-10-21 /home/omr/.cache/kiss/bin /home/omr/.cache/kiss/proc/3082/build /home/omr/.cache/kiss/proc/3082/pkg /home/omr/.cache/kiss/proc/3082/extract /home/omr/.cache/kiss/proc/3082/tmp
+ trap_on
+ trap trap_INT INT
+ trap trap_EXIT EXIT
+ args i nasm
+ action=i
+ shift 1
+ pkg_order nasm
+ unset order redro deps
+ pkg_depends nasm raw
+ contains  nasm
+ return 1
+ null 
+ return 0
+ _pkg_find nasm
+ set -- nasm   /home/omr/.local/share/kiss/repo-personal/modified:/home/omr/.local/share/kiss/repo/core:/home/omr/.local/share/kiss/repo-tex/extra:/home/omr/.local/share/kiss/repo-tex/texlive:/home/omr/.local/share/kiss/repo-xorg/extra:/home/omr/.local/share/kiss/repo-xorg/xorg:/home/omr/.local/share/kiss/repo/extra:/home/omr/.local/share/kiss/repo-xorg/community:/home/omr/.local/share/kiss/repo-community/community:/home/omr/.local/share/kiss/repo-personal/extra:/home/omr/.local/share/kiss/repo-personal/flatpak:/home/omr/.local/share/kiss/repo-personal/dbus
+ IFS=:
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-personal/modified/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo/core/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-tex/extra/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-tex/texlive/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-xorg/extra/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-xorg/xorg/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo/extra/nasm
+ set -f -- nasm   /home/omr/.local/share/kiss/repo-personal/modified:/home/omr/.local/share/kiss/repo/core:/home/omr/.local/share/kiss/repo-tex/extra:/home/omr/.local/share/kiss/repo-tex/texlive:/home/omr/.local/share/kiss/repo-xorg/extra:/home/omr/.local/share/kiss/repo-xorg/xorg:/home/omr/.local/share/kiss/repo/extra:/home/omr/.local/share/kiss/repo-xorg/community:/home/omr/.local/share/kiss/repo-community/community:/home/omr/.local/share/kiss/repo-personal/extra:/home/omr/.local/share/kiss/repo-personal/flatpak:/home/omr/.local/share/kiss/repo-personal/dbus /home/omr/.local/share/kiss/repo/extra/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-xorg/community/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-community/community/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-personal/extra/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-personal/flatpak/nasm
+ set +f
+ test -d /home/omr/.local/share/kiss/repo-personal/dbus/nasm
+ set +f
+ test -d /var/db/kiss/installed/nasm
+ unset IFS
+ repo_dir=/home/omr/.local/share/kiss/repo/extra/nasm
+ repo_name=nasm
+ [ -e /home/omr/.local/share/kiss/repo/extra/nasm/depends ]
+ equ raw expl
+ return 1
+ deps= nasm
+ order= nasm
+ redro=nasm 
+ unset deps
+ set -- nasm
+ export _KISS_LVL=1
+ ok nasm
+ return 0
+ am_owner /
+ ls -ld /
+ inf=drwxr-xr-x   17 root     root          4096 Oct 19 21:13 /
+ read -r _ _ user _
+ equ omr/root root/omr
+ return 1
+ trap_off
+ trap  INT EXIT
+ as_user env LOGNAME=root HOME=/home/omr XDG_CACHE_HOME=/home/omr/.cache KISS_COMPRESS=gz KISS_PATH=/home/omr/.local/share/kiss/repo-personal/modified:/home/omr/.local/share/kiss/repo/core:/home/omr/.local/share/kiss/repo-tex/extra:/home/omr/.local/share/kiss/repo-tex/texlive:/home/omr/.local/share/kiss/repo-xorg/extra:/home/omr/.local/share/kiss/repo-xorg/xorg:/home/omr/.local/share/kiss/repo/extra:/home/omr/.local/share/kiss/repo-xorg/community:/home/omr/.local/share/kiss/repo-community/community:/home/omr/.local/share/kiss/repo-personal/extra:/home/omr/.local/share/kiss/repo-personal/flatpak:/home/omr/.local/share/kiss/repo-personal/dbus KISS_FORCE= KISS_ROOT= KISS_CHOICE= KISS_COLOR= KISS_TMPDIR=/home/omr/.cache/kiss/proc KISS_PID=3082 _KISS_LVL=1 ./kiss i nasm
+ printf Using %s (to become %s)\n /usr/bin/ssu root
Using /usr/bin/ssu (to become root)
+ /usr/bin/ssu -u root -- env LOGNAME=root HOME=/home/omr XDG_CACHE_HOME=/home/omr/.cache KISS_COMPRESS=gz KISS_PATH=/home/omr/.local/share/kiss/repo-personal/modified:/home/omr/.local/share/kiss/repo/core:/home/omr/.local/share/kiss/repo-tex/extra:/home/omr/.local/share/kiss/repo-tex/texlive:/home/omr/.local/share/kiss/repo-xorg/extra:/home/omr/.local/share/kiss/repo-xorg/xorg:/home/omr/.local/share/kiss/repo/extra:/home/omr/.local/share/kiss/repo-xorg/community:/home/omr/.local/share/kiss/repo-community/community:/home/omr/.local/share/kiss/repo-personal/extra:/home/omr/.local/share/kiss/repo-personal/flatpak:/home/omr/.local/share/kiss/repo-personal/dbus KISS_FORCE= KISS_ROOT= KISS_CHOICE= KISS_COLOR= KISS_TMPDIR=/home/omr/.cache/kiss/proc KISS_PID=3082 _KISS_LVL=1 ./kiss i nasm
-> nasm Checking if manifest valid
-> nasm Checking if package installable
-> nasm Checking for package conflicts
-> nasm Installing package (nasm@2.15.05-1.tar.gz)
-> nasm Installed successfully
+ trap_on
+ trap trap_INT INT
+ trap trap_EXIT EXIT
+ return
+ trap_EXIT
+ pkg_clean
+ rm -rf /home/omr/.cache/kiss/proc/3082
+ run_hook SIGEXIT
+ IFS=:
+ /home/omr/.local/bin/kh SIGEXIT
+ unset IFS
dylanaraps commented 2 years ago

This is by design. What is happening is that when the package manager creates a second instance of itself (as another user) it drops KISS_HOOK (and does not carry its value down). Basically, KISS_HOOK must be set for each user the package manager will run as. The idea is to prevent hooks set for one user from running as another (especially non-root to root).

For now, you can apply this patch to keep the parent KISS_HOOK value.

diff --git a/kiss b/kiss
index 405d78d..e04e8c8 100755
--- a/kiss
+++ b/kiss
@@ -1837,6 +1837,7 @@ args() {
                 HOME="$HOME" \
                 XDG_CACHE_HOME="$XDG_CACHE_HOME" \
                 KISS_COMPRESS="$KISS_COMPRESS" \
+                KISS_HOOK="$KISS_HOOK" \
                 KISS_PATH="$KISS_PATH" \
                 KISS_FORCE="$KISS_FORCE" \
                 KISS_ROOT="$KISS_ROOT" \

Let me know if setting KISS_HOOK in the way I described is unworkable and I will either apply the above patch or come up with some other solution. My concerns over hooks not crossing user boundaries may be unfounded in the first place.

ioraff commented 2 years ago

I understand why you'd do this, but, since the sudo-like programs the package manager uses don't source the new user's .profile, I don't see how it'd be possible for, for example, root to have its own KISS_HOOK without actually logging in as root. Maybe this is your intention, but this is obviously rather inconvenient.

dylanaraps commented 2 years ago

This will be fixed when hooks are redone. Right now everything in KISS_HOOK is executed every time. If the above patch is applied all hooks will run as root despite not using the installation hooks.