# $NetBSD: INSTALL.ELF,v 1.4 2023/10/03 14:53:52 abs Exp $ # Generate a +ROOT_ACTIONS script that runs certain actions that require # superuser privileges. # case "${STAGE},$1" in UNPACK,|UNPACK,+ROOT_ACTIONS) ${CAT} > ./+ROOT_ACTIONS << 'EOF' #!@SH@ # # +ROOT_ACTIONS - run actions requiring superuser privileges # # Usage: ./+ROOT_ACTIONS ADD|REMOVE [metadatadir] # # This script runs certain actions that require superuser privileges. # If such privileges are not available, then simply output a message # asking the user to run this script with the appropriate elevated # privileges. # # Lines starting with "# SYMLINK: " are data read by this script that # name the source paths and corresponding symlink that is managed by # this script. If the symlink path is relative, then it is taken to be # relative to ${PKG_PREFIX}. The source path is always unchanged. # # # SYMLINK: /dev/rcd0a ${EMULSUBDIR}/dev/cdrom # CAT="@CAT@" CHMOD="@CHMOD@" DIRNAME="@DIRNAME@" ECHO="@ECHO@" ID="@ID@" LN="@LN@" MKDIR="@MKDIR@" PWD_CMD="@PWD_CMD@" RM="@RM@" SED="@SED@" TEST="@TEST@" SELF=$0 ACTION=$1 CURDIR=`${PWD_CMD}` PKG_METADATA_DIR="${2-${CURDIR}}" : ${PKGNAME=${PKG_METADATA_DIR##*/}} : ${PKG_PREFIX=@PREFIX@} ROOT_ACTIONS_COOKIE="./+ROOT_ACTIONS_done" EUID=`${ID} -u` exitcode=0 case $ACTION,$EUID in ADD,0) ${ECHO} "" > ${ROOT_ACTIONS_COOKIE} ${CHMOD} g+w ${ROOT_ACTIONS_COOKIE} ${SED} -n "/^\# SYMLINK: /{s/^\# SYMLINK: //;p;}" ${SELF} | while read src dst; do case $src in "") continue ;; [!/]*) src="${PKG_PREFIX}/$src" ;; esac case $dst in "") continue ;; [!/]*) dst="${PKG_PREFIX}/$dst" ;; esac if ${TEST} ! -f "$dst"; then ${ECHO} "${PKGNAME}: linking $dst -> $src" # Could be needed for /usr/lib/lua/5.3/foo.so ${MKDIR} -p "$(${DIRNAME} "$dst")" ${LN} -fs "$src" "$dst" else ${ECHO} "${PKGNAME}: $dst already exists" fi done ;; REMOVE,0) ${SED} -n "/^\# SYMLINK: /{s/^\# SYMLINK: //;p;}" ${SELF} | while read src dst; do case $src in "") continue ;; esac case $dst in "") continue ;; [!/]*) dst="${PKG_PREFIX}/$dst" ;; esac if ${TEST} -h "$dst"; then lsrc=$(readlink $dst) if [ "$lsrc" = ${PKG_PREFIX}/$src -o \ "$lsrc" = $src ] then ${ECHO} "${PKGNAME}: removing $dst" ${RM} -f "$dst" else ${ECHO} "${PKGNAME}: mismatched symlink, skipping removal of $dst" fi fi done ${RM} -f ${ROOT_ACTIONS_COOKIE} ;; ADD,*) if ${TEST} ! -f ${ROOT_ACTIONS_COOKIE}; then ${CAT} << EOM ============================================================================== Please run the following command with superuser privileges to complete the installation of ${PKGNAME}: cd ${PKG_METADATA_DIR} && ${SELF} ADD ============================================================================== EOM fi ;; REMOVE,*) if ${TEST} -f ${ROOT_ACTIONS_COOKIE}; then ${CAT} << EOM ============================================================================== Please run the following command with superuser privileges to begin the removal of ${PKGNAME}: cd ${PKG_METADATA_DIR} && ${SELF} REMOVE Then, please run pkg_delete(1) again to complete the removal of this package. ============================================================================== EOM exitcode=1 fi ;; esac exit $exitcode EOF ${SED} -n "/^\# SYMLINK: /p" ${SELF} >> ./+ROOT_ACTIONS ${CHMOD} +x ./+ROOT_ACTIONS ;; esac case "${STAGE}" in POST-INSTALL) ${TEST} ! -x ./+ROOT_ACTIONS || ./+ROOT_ACTIONS ADD ${PKG_METADATA_DIR} ;; esac