pkgsrc/mk/install/install
jlam f28a0a731b In order to solve the following problems:
(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.
2002-06-20 20:15:46 +00:00

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