#!/sbin/runscript # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License, v2 or later # $Header: $ [ -n "${PIDFILE}" ] || PIDFILE=/var/run/slimserver.pid depend() { after net } start() { ebegin "Starting SlimServer" # This are settings that got a default value from the ebuild SLIM_INSTALL_DIR="${SLIM_INSTALL_DIR:-}" SLIM_HOME_DIR="${SLIM_HOME_DIR:-}" SLIM_LOG_FILE="${SLIM_LOG_FILE:-}" SLIM_CONFIG_FILE="${SLIM_CONFIG_FILE:-}" SLIM_USER="${SLIM_USER:-}" SLIM_GROUP="${SLIM_GROUP:-}" SLIM_CACHE_DIR="${SLIM_CACHE_DIR:-}" if [ ! -f "${SLIM_CONFIG_FILE}" ] ; then # Use default only if slimserver has never been configured, # otherwise it would make the web config useless. SLIM_MUSIC_DIR="${SLIM_MUSIC_DIR:-}" SLIM_PLAYLISTS_DIR="${SLIM_PLAYLISTS_DIR:-}" fi local var_names_list="SLIM_INSTALL_DIR SLIM_HOME_DIR SLIM_CACHE_DIR \ SLIM_MUSIC_DIR SLIM_PLAYLISTS_DIR SLIM_LOG_FILE SLIM_CONFIG_FILE \ SLIM_USER SLIM_GROUP" local var_name var_value for var_name in ${var_names_list} ; do eval var_value="\${${var_name}}" [ -z "${var_value}" ] || [ "${var_value}" = "unset" ] \ && unset "${var_name}" done # Check $SLIM_USER grep -q "^${SLIM_USER:-root}\\>" /etc/passwd \ || eend 1 "User \"${SLIM_USER:-root}\" does not exists." \ || return 1 # Check $SLIM_GROUP grep -q "\\<${SLIM_GROUP:-root}\\>" <( groups ${SLIM_USER:-root} ) \ || eend 1 "User \"${SLIM_USER:-root}\" is not in group \"${SLIM_GROUP:-root}\"." \ || return 1 # Directories check/creation local mydir for mydir in "${SLIM_HOME_DIR}" "${SLIM_MUSIC_DIR}" \ "${SLIM_PLAYLISTS_DIR}" "${SLIM_CACHE_DIR}" do if [ -n "${mydir}" ] && [ ! -d "${mydir}" ] ; then einfo "Directory ${mydir} missing, creating..." mkdir -p "${mydir}" chown ${SLIM_USER:-root}:${SLIM_GROUP:-root} "${mydir}" fi done # Config file check/creation if [ -n "${SLIM_CONFIG_FILE}" ] ; then touch "${SLIM_CONFIG_FILE}" \ || eend 1 "Can't write config file ${SLIM_CONFIG_FILE}" \ || return 1 chown ${SLIM_USER:-root}:${SLIM_GROUP:-root} "${SLIM_CONFIG_FILE}" chmod 644 "${SLIM_CONFIG_FILE}" fi # Log file check/creation if [ -n "${SLIM_LOG_FILE}" ] && [ "${SLIM_LOG_FILE}" != "/dev/null" ] ; then touch "${SLIM_LOG_FILE}" \ || eend 1 "Can't write log file ${SLIM_LOG_FILE}" \ || return 1 chown ${SLIM_USER:-root}:${SLIM_GROUP:-root} "${SLIM_LOG_FILE}" chmod 644 "${SLIM_LOG_FILE}" fi # Minimal command line options set local SLIM_OPTIONS="--daemon --pidfile=${PIDFILE}" # To avoid bugs with spaces in paths, use a double quoting and then eval [ -n "${SLIM_CONFIG_FILE}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --prefsfile=\"\${SLIM_CONFIG_FILE}\"" [ -n "${SLIM_MUSIC_DIR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --audiodir=\"\${SLIM_MUSIC_DIR}\"" [ -n "${SLIM_PLAYLISTS_DIR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --playlistdir=\"\${SLIM_PLAYLISTS_DIR}\"" [ -n "${SLIM_CACHE_DIR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --cachedir=\"\${SLIM_CACHE_DIR}\"" [ -n "${SLIM_LOG_FILE}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --logfile=\"\${SLIM_LOG_FILE}\"" [ -n "${SLIM_USER}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --user=${SLIM_USER}" [ -n "${SLIM_GROUP}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --group=${SLIM_GROUP}" [ -n "${SLIM_HTTP_PORT}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --httpport=${SLIM_HTTP_PORT}" [ -n "${SLIM_HTTP_ADDR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --httpaddr=${SLIM_HTTP_ADDR}" [ -n "${SLIM_CLI_PORT}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --cliport=${SLIM_CLI_PORT}" [ -n "${SLIM_CLI_ADDR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --cliaddr=${SLIM_CLI_ADDR}" [ -n "${SLIM_PLAYER_ADDR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --playeraddr=${SLIM_PLAYER_ADDR}" [ -n "${SLIM_STREAM_ADDR}" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --streamaddr=${SLIM_STREAM_ADDR}" [ "${SLIM_DISABLE_SERVER_SETUP}" = "yes" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --noserver" [ "${SLIM_DISABLE_SETUP}" = "yes" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --nosetup" [ "${SLIM_DEBUG}" = "yes" ] && \ SLIM_OPTIONS="${SLIM_OPTIONS} --diag" [ "${SLIM_QUIET}" = "no" ] || \ SLIM_OPTIONS="${SLIM_OPTIONS} --quiet" if [ -n "${SLIM_PRIORITY}" ] ; then [ ${SLIM_PRIORITY} -ge -20 -a ${SLIM_PRIORITY} -le 20 ] \ || eend 1 "Invalid priority: ${SLIM_PRIORITY}" \ || return 1 SLIM_OPTIONS="${SLIM_OPTIONS} --priority=${SLIM_PRIORITY}" fi eval start-stop-daemon --start --quiet \ --exec="${SLIM_INSTALL_DIR}/slimserver.pl" -- ${SLIM_OPTIONS} eend $? "Failed to start SlimServer" } stop() { ebegin "Stopping SlimServer" start-stop-daemon --stop --quiet --pidfile=${PIDFILE} local status=$? # For some reason, the pid file remains on exit (because of non-root?) [ -f ${PIDFILE} ] && rm -f ${PIDFILE} eend ${status} "Failed to stop SlimServer" }