CouchDB

Всем привет, такая проблема установил couchdb, после установки стартует все нормально, записал в rc.conf запуск при загрузке системы, но при загрузке вылетает ошибка
Apache CouchDB needs write permission on the PID file: /var/run/couchdb/couchdb.pid
смотрю в /var/run/
0 drwxr-xr-x  2 root    root      40 дек.  23 21:12 couchdb
делаю
chown -R couchdb:root /var/run/couchdb

стартует без проблем, но после перезагрузки все опять повторяется. Никто не сталкивался с подобной проблемой?
надо думать, что это не проблема, а просто /var/run/couchdb/ создаётся при запуске демона. а сам /var/run вроде как живёт только до перезагрузки.
посмотрите /etc/rc.d/couchdb (или как там он зовётся)
такие дела.
cucullus
надо думать, что это не проблема, а просто /var/run/couchdb/ создаётся при запуске демона. а сам /var/run вроде как живёт только до перезагрузки.
посмотрите /etc/rc.d/couchdb (или как там он зовётся)

Спасибо за ответ. В общем вот он /etc/rc.d/couchdb
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
### BEGIN INIT INFO
# Provides:          couchdb
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Apache CouchDB init script
# Description:       Apache CouchDB init script for the database server.
### END INIT INFO
SCRIPT_OK=0
SCRIPT_ERROR=1
DESCRIPTION="database server"
NAME=couchdb
SCRIPT_NAME=`basename $0`
COUCHDB=/usr/bin/couchdb
CONFIGURATION_FILE=/etc/conf.d/couchdb
RUN_DIR=/var/run/couchdb
LSB_LIBRARY=/lib/lsb/init-functions
if test ! -x $COUCHDB; then
    exit $SCRIPT_ERROR
fi
if test -r $CONFIGURATION_FILE; then
    . $CONFIGURATION_FILE
fi
log_daemon_msg () {
    stat_busy [email protected]
}
log_end_msg () {
    if test "$1" != "0"; then
      stat_fail
    else
      stat_done
    fi
    return $1
}
if test -r $LSB_LIBRARY; then
    . $LSB_LIBRARY
fi
run_command () {
    command="$1"
    if test -n "$COUCHDB_OPTIONS"; then
        command="$command $COUCHDB_OPTIONS"
    fi
    if test -n "$COUCHDB_USER"; then
        if su $COUCHDB_USER -s /bin/bash -c "$command"; then
            return $SCRIPT_OK
        else
            return $SCRIPT_ERROR
        fi
    else
        if $command; then
            return $SCRIPT_OK
        else
            return $SCRIPT_ERROR
        fi
    fi
}
start_couchdb () {
    # Start Apache CouchDB as a background process.
    mkdir -p "$RUN_DIR"
    command="$COUCHDB -b"
    if test -n "$COUCHDB_STDOUT_FILE"; then
        command="$command -o $COUCHDB_STDOUT_FILE"
    fi
    if test -n "$COUCHDB_STDERR_FILE"; then
        command="$command -e $COUCHDB_STDERR_FILE"
    fi
    if test -n "$COUCHDB_RESPAWN_TIMEOUT"; then
        command="$command -r $COUCHDB_RESPAWN_TIMEOUT"
    fi
    run_command "$command" > /dev/null
}
stop_couchdb () {
    # Stop the running Apache CouchDB process.
    run_command "$COUCHDB -d" > /dev/null
}
display_status () {
    # Display the status of the running Apache CouchDB process.
    run_command "$COUCHDB -s"
}
parse_script_option_list () {
    # Parse arguments passed to the script and take appropriate action.
    case "$1" in
        start)
            log_daemon_msg "Starting $DESCRIPTION" $NAME
            if start_couchdb; then
                log_end_msg $SCRIPT_OK
            else
                log_end_msg $SCRIPT_ERROR
            fi
            ;;
        stop)
            log_daemon_msg "Stopping $DESCRIPTION" $NAME
            if stop_couchdb; then
                log_end_msg $SCRIPT_OK
            else
                log_end_msg $SCRIPT_ERROR
            fi
            ;;
        restart)
            log_daemon_msg "Restarting $DESCRIPTION" $NAME
            if stop_couchdb; then
                if start_couchdb; then
                    log_end_msg $SCRIPT_OK
                else
                    log_end_msg $SCRIPT_ERROR
                fi
            else
                log_end_msg $SCRIPT_ERROR
            fi
            ;;
        status)
            display_status
            ;;
        *)
            cat << EOF >&2
Usage: $SCRIPT_NAME {start|stop|restart|status}
EOF
            exit $SCRIPT_ERROR
            ;;
    esac
}
parse_script_option_list [email protected]

не придумал ничего толкового кроме как изменить
start_couchdb () {
    # Start Apache CouchDB as a background process.
    #mkdir -p "$RUN_DIR"  <---- изменил это 
    mkdir -p "$RUN_DIR" -m 0777    <----- на это
    command="$COUCHDB -b"
теперь couchdb стартует, но блин это костыль и данный костыль 100% слетит при последующем обновлении couchdb.
1. Попробуйте создать каталог перед запуском демона
mkdir /var/run/couchdb
chown couchdb /var/run/couchdb
а потом посмотрите, сохранится ли он после остановки демона. Если сохранится, то проблема решена. Если нет, то
2. Попробуйте добавить создание каталога в файл /etc/conf.d/couchdb, дописав в конец
mkdir "$RUN_DIR"
chown couchdb "$RUN_DIR"
Тогда, по идее, если при обновлении этот файл должен будет измениться, то вместо замены будет создан /etc/conf.d/couchdb.pacnew с новым содержимым, о чем pacman предупредит.
3. Можно пожаловаться мейнтейнерам пакета, что бы они подправили скрипт запуска.
На самом деле, в скрипте запуска есть странность:
run_command () {
    command="$1"
    if test -n "$COUCHDB_OPTIONS"; then
        command="$command $COUCHDB_OPTIONS"
    fi
    if test -n "$COUCHDB_USER"; then
        if su $COUCHDB_USER -s /bin/bash -c "$command"; then
            return $SCRIPT_OK
        else
            return $SCRIPT_ERROR
        fi
...
Если не пустая переменная COUCHDB_OPTIONS и не пустая COUCHDB_USER, то будет запущено два экземпляра couchdb, один от root, второй от пользователя $COUCHDB_USER. Это вообще нормально? Я просто с этой базой не встречался раньше. Может, так и надо…
kurych
1. Попробуйте создать каталог перед запуском демона
mkdir /var/run/couchdb
chown couchdb /var/run/couchdb
а потом посмотрите, сохранится ли он после остановки демона. Если сохранится, то проблема решена. Если нет, то

Пробовал этот вариант изначально, но каталог каждый раз создается при загрузке системы и владелец у него root
kurych
3. Можно пожаловаться мейнтейнерам пакета, что бы они подправили скрипт запуска.
А куда жаловаться то?
@rtem
kurych
3. Можно пожаловаться мейнтейнерам пакета, что бы они подправили скрипт запуска.
А куда жаловаться то?
Идти на страницу пакета. Там справа можно сначала посмотреть, не создано ли аналогичного багрепорта, выбрав ссылку “Bug Reports”, а потом “Add New Bug” для описания новой проблемы.
Обновился, все проблему исправили. посмотрел /etc/rc.d/couchdb исправили баг
 83 start_couchdb () {
 84     # Start Apache CouchDB as a background process.
 85
 86     mkdir -p "$RUN_DIR"
 87     chown -R $COUCHDB_USER "$RUN_DIR"
теперь так ))).
 
Зарегистрироваться или войдите чтобы оставить сообщение.