pkgsrc/mk/install/install

417 lines
11 KiB
Text
Raw Normal View History

# start of install
#
# $NetBSD: install,v 1.31 2004/07/10 20:42:37 salo Exp $
if [ -z "${CONF_FILES}" -a -z "${CONF_FILES_PERMS}" -a \
-z "${SUPPORT_FILES}" -a -z "${SUPPORT_FILES_PERMS}" -o \
"${_PKG_CONFIG}" = "NO" ]; then
:
else
MAKE_DIRS="${MAKE_DIRS} \"${PKG_SYSCONFDIR}\""
fi
if [ -z "${RCD_SCRIPTS}" -o "${_PKG_RCD_SCRIPTS}" = "NO" ]; then
:
else
MAKE_DIRS="${MAKE_DIRS} \"${RCD_SCRIPTS_DIR}\""
fi
case ${STAGE} in
PRE-INSTALL)
msginit
_pkg_exit=0
if [ -n "${PKG_GROUPS}" ]; then
_print_group_header=1
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_group_header} -gt 0 ]; then
_print_group_header=0
msgadd ""
msgadd "The following groups need to be created for ${PKGNAME}:"
msgadd ""
fi
if [ -z "${groupid}" ]; then
groupid_str=
else
groupid_str=" (${groupid})"
fi
msgadd "#${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
if [ -n "${PKG_USERS}" ]; then
_print_user_header=1
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_user_header} -gt 0 ]; then
_print_user_header=0
msgadd ""
msgadd "The following users need to be created for ${PKGNAME}:"
msgadd ""
fi
if [ -z "${userid}" ]; then
userid_str=
else
userid_str=" (${userid})"
fi
msgadd "#${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
# Create package directories at pre-install time.
#
if [ "${PKG_INSTALLATION_TYPE}" = "pkgviews" -a \
"${_PKG_CONFIG}" = "YES" -a -n "${CONF_DEPENDS}" ]; then
pkg=`${PKG_ADMIN} -b -d ${DEPOTBASE} -s "" lsbest "${CONF_DEPENDS}"`
sysconfdir=`${PKG_INFO} -B -K ${DEPOTBASE} $pkg | \
${AWK} '/^PKG_SYSCONFDIR=/ { \
gsub("^PKG_SYSCONFDIR=[ ]*", ""); \
print; \
}' \
`
if [ -d $sysconfdir -a ! -d ${PKG_SYSCONFDIR} ]; then
${MKDIR} -p `${DIRNAME} ${PKG_SYSCONFDIR}`
${LN} -sf $sysconfdir ${PKG_SYSCONFDIR}
fi
fi
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 [ -d "${dir}" ]; then
continue
fi
if [ "${_PKG_CONFIG}" = "YES" ]; then
${MKDIR} "${dir}"
if [ "${PKG_INSTALLATION_TYPE}" = "pkgviews" ]; then
case "${dir}" in
${PKG_PREFIX}|${PKG_PREFIX}/*) ;;
*) ${ECHO} "${PKGBASE}" > "${dir}/.pkgsrc" ;;
esac
else
${ECHO} "${PKGBASE}" > "${dir}/.pkgsrc"
fi
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}" = "YES" ]; then
if [ ! -d "${dir}" ]; then
${MKDIR} "${dir}"
if [ "${PKG_INSTALLATION_TYPE}" = "pkgviews" ]; then
case "${dir}" in
${PKG_PREFIX}|${PKG_PREFIX}/*) ;;
*) ${ECHO} "${PKGBASE}" > "${dir}/.pkgsrc" ;;
esac
else
${ECHO} "${PKGBASE}" > "${dir}/.pkgsrc"
fi
${CHOWN} -R "${owner}" "${dir}"
${CHGRP} -R "${group}" "${dir}"
${CHMOD} -R "${mode}" "${dir}"
fi
fi
done
fi
if ! msgempty; then
${ECHO} "==========================================================================="
msgprint
${ECHO} ""
${ECHO} "==========================================================================="
fi
if [ ${_pkg_exit} -gt 0 ]; then
exit ${_pkg_exit}
fi
;;
POST-INSTALL)
#
# Note any missing package directories.
#
msginit
if [ -n "${MAKE_DIRS}" -o -n "${OWN_DIRS}" -o \
-n "${MAKE_DIRS_PERMS}" -o -n "${OWN_DIRS_PERMS}" ]; then
_print_dir_header=1
eval set -- ${MAKE_DIRS} ${OWN_DIRS}
for dir; do
if [ -d "${dir}" ]; then
continue
fi
if [ "${_PKG_CONFIG}" = "NO" ]; then
if [ ${_print_dir_header} -gt 0 ]; then
_print_dir_header=0
msgadd ""
msgadd "The following directories should be created for ${PKGNAME}:"
msgadd ""
fi
msgadd "#${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_dir_header} -gt 0 ]; then
_print_dir_header=0
msgadd ""
msgadd "The following directories should be created for ${PKGNAME}:"
msgadd ""
fi
msgadd "#${dir} (o=${owner}, g=${group}, m=${mode})"
fi
done
fi
if [ "${_PKG_CONFIG}" = "YES" ]; then
if [ -n "${CONF_FILES}" -o \
-n "${CONF_FILES_PERMS}" -o \
-n "${SUPPORT_FILES}" -o \
-n "${SUPPORT_FILES_PERMS}" ] || \
[ "${_PKG_RCD_SCRIPTS}" = "YES" -a \
-n "${RCD_SCRIPTS}" ]; then
${CAT} << EOF
2003-12-21 02:21:52 +01:00
===> Installing configuration/support files for ${PKGNAME}
EOF
fi
fi
_print_file_header=1
eval set -- ${CONF_FILES}
while [ $# -gt 0 ]; do
samplefile="$1"; file="$2"
shift; shift
if [ "${_PKG_CONFIG}" = "NO" ]; then
if [ ${_print_file_header} -gt 0 ]; then
_print_file_header=0
msgadd ""
msgadd "The following files should be created for ${PKGNAME}:"
msgadd ""
fi
msgadd "#${file} (m=@CONF_FILES_MODE@)"
elif [ -f "${file}" ]; then
if [ ! "${file}" -ef "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${ECHO} " ${file} already exists, example file is"
${ECHO} " ${samplefile}"
fi
else
if [ -f "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${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_file_header} -gt 0 ]; then
_print_file_header=0
msgadd ""
msgadd "The following files should be created for ${PKGNAME}:"
msgadd ""
fi
msgadd "#${file} (m=@SUPPORT_FILES_MODE@)"
elif [ -f "${file}" ]; then
if [ ! "${file}" -ef "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${ECHO} " ${file} already exists, example file is"
${ECHO} " ${samplefile}"
fi
else
if [ -f "${samplefile}" ]; then
2004-01-08 15:19:29 +01:00
${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_file_header} -gt 0 ]; then
_print_file_header=0
msgadd ""
msgadd "The following files should be created for ${PKGNAME}:"
msgadd ""
fi
msgadd "#${file} (o=${owner}, g=${group}, m=${mode})"
elif [ -f ${file} ]; then
if [ ! "${file}" -ef "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${ECHO} " ${file} already exists, example file is"
${ECHO} " ${samplefile}"
fi
else
if [ -f "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${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="${RCD_SCRIPTS_EXAMPLEDIR}/${script}"
file="${RCD_SCRIPTS_DIR}/${script}"
if [ "${_PKG_CONFIG}" = "NO" -o \
"${_PKG_RCD_SCRIPTS}" = "NO" ]; then
if [ ${_print_file_header} -gt 0 ]; then
_print_file_header=0
msgadd ""
msgadd "The following files should be created for ${PKGNAME}:"
msgadd ""
fi
msgadd "#${file} (m=@RCD_SCRIPTS_MODE@)"
elif [ -f "${file}" ]; then
if [ ! "${file}" -ef "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${ECHO} " ${file} already exists, example file is"
${ECHO} " ${samplefile}"
fi
else
if [ -f "${samplefile}" ]; then
2003-12-21 02:21:52 +01:00
${ECHO} " ${file}"
${CP} "${samplefile}" "${file}"
${CHMOD} @RCD_SCRIPTS_MODE@ "${file}"
fi
fi
done
_print_special_header=1
eval set -- ${SPECIAL_PERMS}
while [ $# -gt 0 ]; do
file="$1"; owner="$2"; group="$3"; mode="$4"
shift; shift; shift; shift
if [ ${_print_special_header} -gt 0 ]; then
_print_special_header=0
msgadd ""
msgadd "The following files and directories have special permissions:"
msgadd ""
fi
msgadd "#${file} (o=${owner}, g=${group}, m=${mode})"
${CHOWN} "${owner}" "${file}"
${CHGRP} "${group}" "${file}"
${CHMOD} ${mode} "${file}"
done
if ! msgempty; then
${ECHO} "==========================================================================="
msgprint
${ECHO} ""
${ECHO} "==========================================================================="
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
;;
VIEW-INSTALL)
if [ -n "${PKG_SHELL}" -a "${PKG_REGISTER_SHELLS}" = "YES" ]; then
${ECHO} "===> Updating /etc/shells"
${TOUCH} /etc/shells
${CP} /etc/shells /etc/shells.pkgsrc."$$"
(${GREP} -v "^${PKG_SHELL}" /etc/shells.pkgsrc."$$" || ${TRUE}; ${ECHO} ${PKG_SHELL}) > /etc/shells
${RM} /etc/shells.pkgsrc."$$"
fi
#
# If ${PKG_SYSCONFBASE} points outside of ${PREFIX}, then add the
# package config files to the proper view.
#
if [ "${_PKG_CONFIG}" = "YES" -a -n "${PKG_SYSCONFDEPOTBASE}" ]; then
if [ -n "${CONF_FILES}" -o \
-n "${CONF_FILES_PERMS}" -o \
-n "${SUPPORT_FILES}" -o \
-n "${SUPPORT_FILES_PERMS}" ]; then
${SETENV} PLIST_IGNORE_FILES="${CONF_IGNORE_FILES}" \
${LINKFARM} -t ${PKG_SYSCONFVIEWBASE} -d ${PKG_SYSCONFDEPOTBASE} ${PKGNAME}
fi
fi
;;
esac
# end of install