Generally installation of a skelpkg is just an unpacking of the bin
archive to skelbins directory and creating a symbolic links to files
inside it. But there is ability to run "pre install" (preinst), "post
install" (postinst), "pre remove" (prerm) and "post remove" (postrm)
hooks.
Hook is a directory with at least one executable file. All executable
files in that directory are called in a lexicographical order. Each hook
is placed in $NAME-$hsh/skelpkg/$NAME-$hsh/hooks/$hook directory.
Hook is executed inside the directory we performing skelpkg
installation, directory with the local/ subdirectory. It expects to get
following environmental variables:
* $DST
Path to directory where we perform installation of the skelpkg.
* $PKG
Name of the skelpkg user entered. As a rule it is more-or-less human
readable name without any hashes.
* $NAMENHASH
$NAME-$hsh name of the package.
* $BASS_ROOT, $BASS_RC, ...
One of the frequent uses of preinst hook is installation of runtime
dependencies. For example cURL depends on OpenSSL, so let's see its
hook:
$ tar xfO $SKELPKGS/$ARCH/curl-8.6.0 name | read namenhash
$ tar xfO $SKELPKGS/$ARCH/curl-8.6.0 bin |
tar tf - $namenhash/skelpkg/$namenhash/hooks/preinst
$namenhash/skelpkg/$namenhash/hooks/preinst/010-rdeps
$ tar xfO $SKELPKGS/$ARCH/curl-8.6.0 bin |
tar xfO - $namenhash/skelpkg/$namenhash/hooks/preinst/010-rdeps
#!/bin/sh -e
exec "$BASS_ROOT"/build/bin/pkg-inst openssl-1.1.1w
postinst hook can be used to alter $DST's rc file, like pkgconf skelpkg does:
$ tar xfO $SKELPKGS/$ARCH/pkgconf-2.1.1 name | read namenhash
$ tar xfO $SKELPKGS/$ARCH/pkgconf-2.1.1 bin |
tar xfO - $namenhash/skelpkg/$namenhash/hooks/postinst/01rc-add
#!/bin/sh -e
_localpath="$(realpath local)"
cat >>rc <<EOF
PKG_CONFIG_PATH="$_localpath/lib/pkgconfig:\$PKG_CONFIG_PATH"
PKG_CONFIG_PATH="$_localpath/libdata/pkgconfig:\$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH
EOF