freebsd-ports/net/cvsup-mirror/pkg-install
John Polstra 7c45758b34 DEINSTALL: Offer to kill all running cvsupd processes. Remind
the user to remove the client's home directory and the mirrored
files.

INSTALL:  Create a home directory for the client user, since one
is needed to hold the authentication key file.  Also create an
empty "auth" file so that its permissions will be right.  Set the
gcos fields more appropriately.
2000-02-11 04:26:59 +00:00

254 lines
6.2 KiB
Bash

#! /bin/sh
base=${PREFIX}/etc/cvsup
prefixes=${base}/prefixes
chmods_done=" "
ask() {
local question default answer
question=$1
default=$2
if [ -z "${PACKAGE_BUILDING}" ]; then
read -p "${question} [${default}]? " answer
fi
if [ x${answer} = x ]; then
answer=${default}
fi
echo ${answer}
}
yesno() {
local dflt question answer
question=$1
dflt=$2
while :; do
answer=$(ask "${question}" "${dflt}")
case "${answer}" in
[Yy]*) return 0;;
[Nn]*) return 1;;
esac
echo "Please answer yes or no."
done
}
install_links() {
local link dir subdir path
while [ $# -ge 3 ]; do
link=$1
dir=$2
subdir=$3
echo " Linking ${link} -> ${dir}"
ln -sf ${dir} ${prefixes}/${link} || exit
if [ "x${dir}" != "xSKIP" -a "x${dir}" != "x.." ]; then
if [ "x${subdir}" = "x." ]; then
path=${dir}
else
path=${dir}/${subdir}
fi
( cd ${prefixes} || exit
if [ "x${subdir}" != "x." -a -h ${path} ]; then
cat <<EOF
"${subdir}" must be a true subdirectory of "${dir}", not a symbolic link.
Please remove the symbolic link and/or configure again using the true
directory path to "${subdir}".
EOF
exit 1
fi
test -d ${path} || mkdir -p ${path} || exit ) || exit
if ! expr "${chmods_done}" : ".* ${path} " >/dev/null 2>&1; then
echo -n " Fixing ownerships and modes in ${path} ..."
( chdir ${prefixes} && \
chown -R ${cuser}:${cgroup} ${path} && \
chmod -R a+rX ${path} ) || exit
echo " done."
chmods_done="${chmods_done}${path} "
fi
fi
shift 3
done
}
make_account() {
local u g gcos homeopt home
u=$1
g=$2
gcos=$3
homeopt=${4:+"-d $4"}
if pw group show "${g}" >/dev/null 2>&1; then
echo "You already have a group \"${g}\", so I will use it."
else
echo "You need a group \"${g}\"."
if which -s pw && yesno "Would you like me to create it" y; then
pw groupadd ${g} || exit
echo "Done."
else
echo "Please create it, and try again."
if ! grep -q "^${u}:" /etc/passwd; then
echo "While you're at it, please create a user \"${u}\" too,"
echo "with a default group of \"${g}\"."
fi
exit 1
fi
fi
if pw user show "${u}" >/dev/null 2>&1; then
echo "You already have a user \"${u}\", so I will use it."
else
echo "You need a user \"${u}\"."
if which -s pw && yesno "Would you like me to create it" y; then
pw useradd ${u} -g ${g} -h - ${homeopt} \
-s /nonexistent -c "${gcos}" || exit
echo "Done."
else
echo "Please create it, and try again."
exit 1
fi
fi
if [ x"$homeopt" = x ]; then
eval home=~${u}
if [ ! -d "${home}" ]; then
if yesno \
"Would you like me to create ${u}'s home directory (${home})" y
then
(umask 77 && \
mkdir -p ${home}/.cvsup && \
touch ${home}/.cvsup/auth) || exit
chown -R ${u}:${g} ${home} || exit
else
echo "Please create it, and try again."
exit 1
fi
fi
fi
}
case $2 in
POST-INSTALL)
. ${base}/config.sh || exit
if which -s pw && which -s lockf; then
:
else
cat <<EOF
This system looks like a pre-2.2 version of FreeBSD. I see that it
is missing the "lockf" and/or "pw" utilities. I need these utilities.
Please get them and install them, and try again. You can get the
sources from:
ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/usr.bin/lockf.tar.gz
ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/pw.tar.gz
EOF
exit 1
fi
echo ""
make_account ${user} ${group} "CVSup Daemon" "/nonexistent"
make_account ${cuser} ${cgroup} "CVSup Client"
echo "Fixing ownerships and modes in \"${base}\"."
chown -R root:wheel ${base}
test -d ${base}/sup || mkdir -p ${base}/sup
test -d ${base}/sup.client || mkdir -p ${base}/sup.client
chown -R ${cuser}:${cgroup} ${base}/sup ${base}/sup.client
chmod -R go=u-w ${base}
echo "Setting up links and directories for distributions."
test -d ${prefixes} || mkdir ${prefixes} || exit
install_links ${distribs}
echo ""
if grep -q "^[^#]*${facility}.*/var/log/cvsupd.log" /etc/syslog.conf; then
echo -n "It looks like you already have some logging set up, so I "
echo "will use it."
else
if yesno "Would you like me to set up the syslog logging" y; then
echo "Setting up server logging in \"/etc/syslog.conf\"."
cat <<EOF >>/etc/syslog.conf
!cvsupd
${facility}.info /var/log/cvsupd.log
EOF
if [ ! -f /var/log/cvsupd.log ]; then
echo "Creating \"/var/log/cvsupd.log\"."
cp /dev/null /var/log/cvsupd.log
fi
if [ -f /var/run/syslog.pid ]; then
echo "Giving syslogd a kick in the pants."
kill -HUP $(cat /var/run/syslog.pid)
fi
echo "Adding cvsupd log entry to \"/etc/newsyslog.conf\"."
cat <<EOF >>/etc/newsyslog.conf
/var/log/cvsupd.log 664 7 * 24 Z
EOF
echo "Done."
else
cat <<EOF
OK, please remember to do it yourself. You should log "${facility}.info"
to "/var/log/cvsupd.log". Don't forget to add an entry to
"/etc/newsyslog.conf".
EOF
fi
fi
echo ""
if grep -q "^[^#]*${base}/update\.sh" /etc/crontab; then
echo "It looks like your crontab is already set up, so I'll use that."
else
if [ ${interval} -eq 1 ]; then
updstr="hourly updates"
else
updstr="updates every ${interval} hours"
fi
if yesno "Would you like me to set up your crontab for ${updstr}" y
then
echo "Scheduling ${updstr} in \"/etc/crontab\"."
delay=5
now=$(date "+%s")
start=$((${now} + ${delay}*60))
hh=$(date -r ${start} "+%H")
mm=$(date -r ${start} "+%M")
h=$((${hh}))
m=$((${mm}))
if [ ${interval} -eq 1 ]; then
hstr="*"
else
h0=$((${h} % ${interval}))
if [ ${interval} -eq 24 ]; then
hstr=${h0}
else
h1=$((${h0} + 24 - ${interval}))
hstr=${h0}-${h1}/${interval}
fi
fi
cat <<EOF >>/etc/crontab
${m} ${hstr} * * * root ${base}/update.sh
EOF
cat <<EOF
Done. The first update will be ${delay} minutes from now, at ${hh}:${mm}.
The cvsupd server will be started automatically after the first update,
and whenever you reboot.
EOF
else
cat <<EOF
OK, please remember to do it yourself. The crontab entry should run
"${base}/update.sh" as root.
EOF
fi
fi
echo ""
echo "You are now a FreeBSD mirror site."
;;
esac