213 lines
5.0 KiB
Bash
Executable File
213 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# cygserver-config, Copyright 2003 Red Hat Inc.
|
|
#
|
|
# This file is part of the Cygwin DLL.
|
|
|
|
# Directory where the config files are stored
|
|
SYSCONFDIR=/etc
|
|
LOCALSTATEDIR=/var
|
|
|
|
progname=$0
|
|
auto_answer=""
|
|
|
|
request()
|
|
{
|
|
if [ "${auto_answer}" = "yes" ]
|
|
then
|
|
echo "$1 (yes/no) yes"
|
|
return 0
|
|
elif [ "${auto_answer}" = "no" ]
|
|
then
|
|
echo "$1 (yes/no) no"
|
|
return 1
|
|
fi
|
|
|
|
answer=""
|
|
while [ "X${answer}" != "Xyes" -a "X${answer}" != "Xno" ]
|
|
do
|
|
echo -n "$1 (yes/no) "
|
|
read -e answer
|
|
done
|
|
if [ "X${answer}" = "Xyes" ]
|
|
then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Check options
|
|
|
|
while :
|
|
do
|
|
case $# in
|
|
0)
|
|
break
|
|
;;
|
|
esac
|
|
|
|
option=$1
|
|
shift
|
|
|
|
case "${option}" in
|
|
-d | --debug )
|
|
set -x
|
|
;;
|
|
|
|
-y | --yes )
|
|
auto_answer=yes
|
|
;;
|
|
|
|
-n | --no )
|
|
auto_answer=no
|
|
;;
|
|
|
|
*)
|
|
echo "usage: ${progname} [OPTION]..."
|
|
echo
|
|
echo "This script creates an Cygserver service configuration."
|
|
echo
|
|
echo "Options:"
|
|
echo " --debug -d Enable shell's debug output."
|
|
echo " --yes -y Answer all questions with \"yes\" automatically."
|
|
echo " --no -n Answer all questions with \"no\" automatically."
|
|
echo
|
|
exit 1
|
|
;;
|
|
|
|
esac
|
|
done
|
|
|
|
# Check if running on NT
|
|
_sys="`uname`"
|
|
_nt=`expr "${_sys}" : "CYGWIN_NT"`
|
|
|
|
# Check for running cygserver processes first.
|
|
if ps -ef | grep -v grep | grep -q cygserver
|
|
then
|
|
echo
|
|
echo "There is a cygserver already running. Nothing to do, apparently."
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
# Check for ${SYSCONFDIR} directory
|
|
if [ -e "${SYSCONFDIR}" -a ! -d "${SYSCONFDIR}" ]
|
|
then
|
|
echo
|
|
echo "${SYSCONFDIR} is existant but not a directory."
|
|
echo "Cannot create global configuration file."
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
# Create it if necessary
|
|
if [ ! -e "${SYSCONFDIR}" ]
|
|
then
|
|
mkdir "${SYSCONFDIR}"
|
|
if [ ! -e "${SYSCONFDIR}" ]
|
|
then
|
|
echo
|
|
echo "Creating ${SYSCONFDIR} directory failed"
|
|
echo
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Create /var/log if not already existing
|
|
if [ -f ${LOCALSTATEDIR}/log ]
|
|
then
|
|
echo "Creating ${LOCALSTATEDIR}/log failed!"
|
|
else
|
|
if [ ! -d ${LOCALSTATEDIR}/log ]
|
|
then
|
|
mkdir -p ${LOCALSTATEDIR}/log
|
|
fi
|
|
fi
|
|
|
|
# Check if cygserver.conf exists. If yes, ask for overwriting
|
|
if [ -f "${SYSCONFDIR}/cygserver.conf" ]
|
|
then
|
|
if request "Overwrite existing ${SYSCONFDIR}/cygserver.conf file?"
|
|
then
|
|
rm -f "${SYSCONFDIR}/cygserver.conf"
|
|
if [ -f "${SYSCONFDIR}/cygserver.conf" ]
|
|
then
|
|
echo
|
|
echo "Can't overwrite. ${SYSCONFDIR}/cygserver.conf is write protected."
|
|
echo
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Create default cygserver.conf from skeleton files in /etc/defaults/etc
|
|
if [ ! -f "${SYSCONFDIR}/cygserver.conf" ]
|
|
then
|
|
echo "Generating ${SYSCONFDIR}/cygserver.conf file"
|
|
cp "${SYSCONFDIR}/defaults/etc/cygserver.conf" "${SYSCONFDIR}/cygserver.conf"
|
|
if [ ! -f "${SYSCONFDIR}/cygserver.conf" ]
|
|
then
|
|
echo
|
|
echo "Couldn't create ${SYSCONFDIR}/cygserver.conf."
|
|
echo "Perhaps there's no default file in ${SYSCONFDIR}/defaults/etc?"
|
|
echo "Reinstalling Cygwin might help."
|
|
echo
|
|
exit 1
|
|
fi
|
|
chmod 664 "${SYSCONFDIR}/cygserver.conf"
|
|
chown system.544 "${SYSCONFDIR}/cygserver.conf"
|
|
fi
|
|
|
|
# On NT ask if cygserver should be installed as service
|
|
if [ ${_nt} -gt 0 ]
|
|
then
|
|
# But only if it is not already installed
|
|
if ! cygrunsrv -Q cygserver > /dev/null 2>&1
|
|
then
|
|
echo
|
|
echo
|
|
echo "Warning: The following function requires administrator privileges!"
|
|
echo
|
|
echo "Do you want to install cygserver as service?"
|
|
if request "(Say \"no\" if it's already installed as service)"
|
|
then
|
|
if ! cygrunsrv -I cygserver -d "CYGWIN cygserver" -p /usr/sbin/cygserver
|
|
then
|
|
echo
|
|
echo "Installation of cygserver as service failed. Please check the"
|
|
echo "error messages you got. They might give a clue why it failed."
|
|
echo
|
|
echo "A good start is either you don't have administrator privileges"
|
|
echo "or a missing cygrunsrv binary. Please check for both."
|
|
echo
|
|
exit 1
|
|
fi
|
|
echo
|
|
echo "The service has been installed under LocalSystem account."
|
|
echo "To start it, call \`net start cygserver' or \`cygrunsrv -S cygserver'."
|
|
fi
|
|
touch "${LOCALSTATEDIR}/log/cygserver.log"
|
|
chown system.544 "${LOCALSTATEDIR}/log/cygserver.log"
|
|
fi
|
|
fi
|
|
|
|
echo
|
|
echo "Further configuration options are available by editing the configuration"
|
|
echo "file ${SYSCONFDIR}/cygserver.conf. Please read the inline information in that"
|
|
echo "file carefully. The best option for the start is to just leave it alone."
|
|
echo
|
|
echo "Please keep in mind, that a client application which wants to use"
|
|
echo "the services provided by cygserver *must* have the environment variable"
|
|
echo "CYGWIN set so that it contains the word \"server\". So, if you don't"
|
|
echo "need any other special CYGWIN setting, just set it to \"server\"".
|
|
echo "You can do this in the Windows system environment or in the local"
|
|
echo "shell profiles like this:"
|
|
echo
|
|
echo " export CYGWIN=server in sh/bash/ksh/zsh or"
|
|
echo " setenv CYGWIN server in tcsh."
|
|
echo
|
|
echo "Basic Cygserver configuration finished. Have fun!"
|
|
echo
|