f28a0a731b
(1) Admins want to create users/groups on their own (pkg/17183). (2) Admins don't want packages to setup an initial configuration. The bsd.pkg.install.mk-generated INSTALL/DEINSTALL scripts have been modified to check certain PKG_* environment variables to tune their behaviour. This works whether installing from "make install" or from a binary package. PKG_CREATE_USERGROUP indicates whether the INSTALL script should automatically add any needed users/groups to the system using useradd/groupadd. It is either YES or NO, and defaults to YES. PKG_CONFIG indicates whether the INSTALL/DEINSTALL scripts should do automatic config file and directory handling, or if it should merely inform the admin of the list of required files and directories needed to use the package. It is either YES or NO, and defaults to YES. The make(1) variable INSTALL_RCD_SCRIPTS is removed. The package rc.d script is now handled like other config files for the package, and is copied into place if PKG_CONFIG=YES. The default values above reflect the current behaviour. Setting PKG_CREATE_USERGROUP=NO solves problem (1), and setting PKG_CONFIG=NO solves problem (2). To simply matters for users installing directly from pkgsrc, these variables may also be defined in /etc/mk.conf, but behaviour at deinstall time may be surprising. It is *HIGHLY* recommended that these values be set in the shell environment instead.
369 lines
8.9 KiB
Text
369 lines
8.9 KiB
Text
# start of install
|
|
#
|
|
# $NetBSD: install,v 1.9 2002/06/20 20:15:50 jlam Exp $
|
|
|
|
case ${STAGE} in
|
|
PRE-INSTALL)
|
|
_pkg_exit=0
|
|
_print_line=1
|
|
_print_group=1
|
|
if [ -n "${PKG_GROUPS}" ]; then
|
|
eval set -- ${PKG_GROUPS}
|
|
for groupset; do
|
|
save_IFS="${IFS}"; IFS=":"
|
|
set -- ${groupset}
|
|
group="$1"; groupid="$2"
|
|
IFS="${save_IFS}"
|
|
|
|
# We need to check that ${PKG_GROUP} exists before
|
|
# adding the user. Do it with chgrp to be able to
|
|
# use NIS.
|
|
#
|
|
${TOUCH} /tmp/grouptest.$$
|
|
if ${CHGRP} ${group} /tmp/grouptest.$$ >/dev/null 2>&1; then
|
|
${ECHO} "Group '${group}' already exists."
|
|
elif [ "${_PKG_CREATE_USERGROUP}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
if [ ${_print_group} -gt 0 ]; then
|
|
_print_group=0
|
|
${CAT} << EOF
|
|
The following groups need to be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
fi
|
|
if [ -z "${groupid}" ]; then
|
|
groupid_str=
|
|
else
|
|
groupid_str=" (${groupid})"
|
|
fi
|
|
${ECHO} " ${group}${groupid_str}"
|
|
_pkg_exit=1
|
|
else
|
|
groupid_option=
|
|
if [ -n "${groupid}" ]; then
|
|
groupid_option="-g"
|
|
fi
|
|
${ECHO} "Creating group: ${group}"
|
|
${GROUPADD} ${groupid_option} ${groupid} "${group}"
|
|
fi
|
|
${RM} -f /tmp/grouptest.$$
|
|
done
|
|
fi
|
|
_print_user=1
|
|
if [ -n "${PKG_USERS}" ]; then
|
|
eval set -- ${PKG_USERS}
|
|
for userset; do
|
|
save_IFS="${IFS}"; IFS=":"
|
|
set -- ${userset}
|
|
user="$1"; group="$2"; userid="$3"
|
|
descr="${4:-${PKGBASE} ${user} user}"
|
|
home="${5:-@PKG_USER_HOME@}"
|
|
shell="${6:-@PKG_USER_SHELL@}"
|
|
IFS="${save_IFS}"
|
|
|
|
# Use `id' to be able to use NIS.
|
|
if ${ID} "${user}" >/dev/null 2>&1; then
|
|
${ECHO} "User '${user}' already exists."
|
|
elif [ "${_PKG_CREATE_USERGROUP}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
elif [ ${_print_group} -eq 0 ]; then
|
|
_print_group=1
|
|
${ECHO} "";
|
|
fi
|
|
if [ ${_print_user} -gt 0 ]; then
|
|
_print_user=0
|
|
${CAT} << EOF
|
|
The following users need to be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
if [ -z "${userid}" ]; then
|
|
userid_str=
|
|
else
|
|
userid_str=" (${userid})"
|
|
fi
|
|
${ECHO} " ${user}${userid_str}: ${group}, ${home}, ${shell}"
|
|
_pkg_exit=1
|
|
else
|
|
userid_option=
|
|
if [ -n "${userid}" ]; then
|
|
userid_option="-u"
|
|
fi
|
|
${ECHO} "Creating user: ${user}"
|
|
${USERADD} -c "${descr}" \
|
|
${userid_option} ${userid} \
|
|
-g "${group}" \
|
|
-d "${home}" \
|
|
-s "${shell}" \
|
|
"${user}"
|
|
fi
|
|
done
|
|
fi
|
|
if [ ${_print_line} -eq 0 ]; then
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
fi
|
|
if [ ${_pkg_exit} -gt 0 ]; then
|
|
exit ${_pkg_exit}
|
|
fi
|
|
;;
|
|
|
|
POST-INSTALL)
|
|
# Create package directories.
|
|
_print_line=1
|
|
_print_dirs=1
|
|
if [ -n "${MAKE_DIRS}" -o -n "${OWN_DIRS}" -o \
|
|
-n "${MAKE_DIRS_PERMS}" -o -n "${OWN_DIRS_PERMS}" ]; then
|
|
eval set -- ${MAKE_DIRS} ${OWN_DIRS}
|
|
for dir; do
|
|
if [ "${_PKG_CONFIG}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
if [ ${_print_dirs} -gt 0 ]; then
|
|
_print_dirs=0
|
|
${CAT} << EOF
|
|
The following directories should be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
fi
|
|
${ECHO} " ${dir}"
|
|
else
|
|
${MKDIR} "${dir}"
|
|
fi
|
|
done
|
|
eval set -- ${MAKE_DIRS_PERMS} ${OWN_DIRS_PERMS}
|
|
while [ $# -gt 0 ]; do
|
|
dir="$1"; owner="$2"; group="$3"; mode="$4"
|
|
shift; shift; shift; shift
|
|
if [ "${_PKG_CONFIG}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
if [ ${_print_dirs} -gt 0 ]; then
|
|
_print_dirs=0
|
|
${CAT} << EOF
|
|
The following directories should be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
fi
|
|
${ECHO} " ${dir} (o=${owner}, g=${group}, m=${mode})"
|
|
else
|
|
${MKDIR} "${dir}"
|
|
${CHOWN} "${owner}" "${dir}"
|
|
${CHGRP} "${group}" "${dir}"
|
|
${CHMOD} "${mode}" "${dir}"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
_print_files=1
|
|
if [ "${_PKG_CONFIG}" = "YES" ]; then
|
|
if [ -n "${CONF_FILES}" -o \
|
|
-n "${CONF_FILES_PERMS}" -o \
|
|
-n "${SUPPORT_FILES}" -o \
|
|
-n "${SUPPORT_FILES_PERMS}" -o \
|
|
-n "${RCD_SCRIPTS}" ]; then
|
|
${CAT} << EOF
|
|
Installing configuration files for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
fi
|
|
eval set -- ${CONF_FILES}
|
|
while [ $# -gt 0 ]; do
|
|
samplefile="$1"; file="$2"
|
|
shift; shift
|
|
|
|
if [ "${_PKG_CONFIG}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
elif [ ${_print_dirs} -eq 0 ]; then
|
|
_print_dirs=1
|
|
${ECHO} "";
|
|
fi
|
|
if [ ${_print_files} -gt 0 ]; then
|
|
_print_files=0
|
|
${CAT} << EOF
|
|
The following files should be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
${ECHO} " ${file} (m=@CONF_FILES_MODE@)"
|
|
elif [ -e "${file}" ]; then
|
|
${ECHO} " ${file} already exists, example file is"
|
|
${ECHO} " ${samplefile}"
|
|
else
|
|
if [ -e "${samplefile}" ]; then
|
|
${ECHO} " ${file}"
|
|
${CP} "${samplefile}" "${file}"
|
|
${CHMOD} @CONF_FILES_MODE@ "${file}"
|
|
fi
|
|
fi
|
|
done
|
|
eval set -- ${SUPPORT_FILES}
|
|
while [ $# -gt 0 ]; do
|
|
samplefile="$1"; file="$2"
|
|
shift; shift
|
|
|
|
if [ "${_PKG_CONFIG}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
elif [ ${_print_dirs} -eq 0 ]; then
|
|
_print_dirs=1
|
|
${ECHO} "";
|
|
fi
|
|
if [ ${_print_files} -gt 0 ]; then
|
|
_print_files=0
|
|
${CAT} << EOF
|
|
The following files should be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
${ECHO} " ${file} (m=@SUPPORT_FILES_MODE@)"
|
|
elif [ -e "${file}" ]; then
|
|
${ECHO} " ${file} already exists, example file is"
|
|
${ECHO} " ${samplefile}"
|
|
else
|
|
if [ -e "${samplefile}" ]; then
|
|
${ECHO} " ${file}"
|
|
${CP} "${samplefile}" "${file}"
|
|
${CHMOD} @SUPPORT_FILES_MODE@ "${file}"
|
|
fi
|
|
fi
|
|
done
|
|
eval set -- ${CONF_FILES_PERMS} ${SUPPORT_FILES_PERMS}
|
|
while [ $# -gt 0 ]; do
|
|
samplefile="$1"; file="$2"
|
|
owner="$3"; group="$4"; mode="$5"
|
|
shift; shift; shift; shift; shift
|
|
|
|
if [ "${_PKG_CONFIG}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
elif [ ${_print_dirs} -eq 0 ]; then
|
|
_print_dirs=1
|
|
${ECHO} "";
|
|
fi
|
|
if [ ${_print_files} -gt 0 ]; then
|
|
_print_files=0
|
|
${CAT} << EOF
|
|
The following files should be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
${ECHO} " ${file} (o=${owner}, g=${group}, m=${mode})"
|
|
elif [ -e ${file} ]; then
|
|
${ECHO} " ${file} already exists, example file is"
|
|
${ECHO} " ${samplefile}"
|
|
else
|
|
if [ -e "${samplefile}" ]; then
|
|
${ECHO} " ${file}"
|
|
${CP} "${samplefile}" "${file}"
|
|
${CHOWN} "${owner}" "${file}"
|
|
${CHGRP} "${group}" "${file}"
|
|
${CHMOD} ${mode} "${file}"
|
|
fi
|
|
fi
|
|
done
|
|
eval set -- ${RCD_SCRIPTS}
|
|
for script; do
|
|
samplefile="${PKG_PREFIX}/etc/rc.d/${script}"
|
|
file="${RCD_SCRIPTS_DIR}/${script}"
|
|
|
|
if [ "${_PKG_CONFIG}" = "NO" ]; then
|
|
if [ ${_print_line} -gt 0 ]; then
|
|
_print_line=0
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
elif [ ${_print_dirs} -eq 0 ]; then
|
|
_print_dirs=1
|
|
${ECHO} "";
|
|
fi
|
|
if [ ${_print_files} -gt 0 ]; then
|
|
_print_files=0
|
|
${CAT} << EOF
|
|
The following files should be created for ${PKGNAME}:
|
|
|
|
EOF
|
|
fi
|
|
${ECHO} " ${file} (m=@RCD_SCRIPTS_MODE@)"
|
|
elif [ -e "${file}" ]; then
|
|
${ECHO} " ${file} already exists, example file is"
|
|
${ECHO} " ${samplefile}"
|
|
else
|
|
if [ -e "${samplefile}" ]; then
|
|
${ECHO} " ${file}"
|
|
${CP} "${samplefile}" "${file}"
|
|
${CHMOD} @RCD_SCRIPTS_MODE@ "${file}"
|
|
fi
|
|
fi
|
|
done
|
|
if [ ${_print_line} -eq 0 ]; then
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
fi
|
|
if [ "${_PKG_CONFIG}" = "YES" ]; then
|
|
if [ -n "${CONF_FILES}" -o -n "${CONF_FILES_PERMS}" ]; then
|
|
${CAT} << EOF
|
|
|
|
===========================================================================
|
|
You may wish to customize the following files for ${PKGNAME}:
|
|
|
|
EOF
|
|
eval set -- ${CONF_FILES}
|
|
while [ $# -gt 0 ]; do
|
|
samplefile="$1"; file="$2"
|
|
shift; shift
|
|
|
|
${ECHO} " ${file}"
|
|
done
|
|
eval set -- ${CONF_FILES_PERMS}
|
|
while [ $# -gt 0 ]; do
|
|
samplefile="$1"; file="$2"
|
|
owner="$3"; group="$4"; mode="$5"
|
|
shift; shift; shift; shift; shift
|
|
|
|
${ECHO} " ${file}"
|
|
done
|
|
${CAT} << EOF
|
|
===========================================================================
|
|
EOF
|
|
fi
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
${ECHO} "Unexpected argument: ${STAGE}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# end of install
|