| #!/bin/bash |
| # |
| # This file is part of the Cygwin DLL. |
| |
| # Directory where the config files are stored |
| SYSCONFDIR=/etc |
| LOCALSTATEDIR=/var |
| |
| progname=$0 |
| auto_answer="" |
| service_name=cygserver |
| |
| 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 |
| ;; |
| |
| -N | --name ) |
| service_name=$1 |
| shift |
| ;; |
| |
| *) |
| 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 " --name -N <name> cygserver windows service name." |
| 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 ${service_name} |
| then |
| echo |
| echo "There is a cygserver (${service_name}) 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 18.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 ${service_name} > /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 ${service_name} -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 ${service_name}' or \`cygrunsrv -S ${service_name}'." |
| fi |
| touch "${LOCALSTATEDIR}/log/cygserver.log" |
| chown 18.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 "Basic Cygserver configuration finished. Have fun!" |
| echo |