не заводится DNS bind после бекапа (не заводится DNS bind после бекапа на новой системе)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

maxlen
Сообщения: 6

не заводится DNS bind после бекапа

Сообщение maxlen »

Доброго времени суток.
Такая ситуация:
Работал себе сервер (являлся web сервером, почтовым и DNS) до поры до времени. Но есть с него бекапы в формате tar.gz. Настал час попробовать восстановить с бекапов сервера новый сервер. После долгих манипуляций, сервер завёлся, но сервис named не хочет подниматься и всё. Ругается на то что не может найти pid файл. Насколько я понял, он его при запуске то и создать не может, смотрел может что с правами на каталоги есть, так нет, всё вроде нормально.
Не могу понять в чем проблемма.
Если кто может подскажите плиз.
И ещё одинн нюанс - изначальный сервак был серверной платформы (железо), а восстанавливаю на персоналку. Естественно перекомпилив ядро.
Спасибо сказали:
Kam
Сообщения: 67
ОС: Fedora, CentOS

Re: не заводится DNS bind после бекапа

Сообщение Kam »

Что в options-ах про pid-file написано (named.conf) и от кого запускаете намед ?
Спасибо сказали:
maxlen
Сообщения: 6

Re: не заводится DNS bind после бекапа

Сообщение maxlen »

В named.conf:

options {


directory "/var/lib/named";

listen-on port 53 { 193.17.75.133; };

listen-on-v6 { none; };

notify yes;
};
Спасибо сказали:
maxlen
Сообщения: 6

Re: не заводится DNS bind после бекапа

Сообщение maxlen »

Стартовый скрипт /etc/init.d/named :

Код: Выделить всё

. /etc/rc.status
rc_reset

PATH="/sbin:/usr/sbin:/bin:/usr/bin"
SYSCONFIG_FILE="/etc/sysconfig/named"
NAMED_CONF="/etc/named.conf"

if [ "$1" != "stop" ]; then
    for configfile in ${SYSCONFIG_FILE} ${NAMED_CONF}; do
        if [ ! -f ${configfile} ]; then
            echo -n "Name server configuration file ${configfile} does not exist. "
            # Tell the user this has skipped
            rc_status -s
            exit 6
        fi
    done
    . /etc/sysconfig/named
    # Ensure to work always with absolut filenames.
    temp_file_list=""
    for configfile in ${NAMED_CONF_INCLUDE_FILES}; do
        # prepend the default include directory if the filename is
        # relative
        test "${configfile:0:1}" = "/" || configfile="/etc/named.d/${configfile}"
        temp_file_list="${temp_file_list} ${configfile}"
    done
    NAMED_CONF_INCLUDE_FILES=${temp_file_list}
    # Add include files from named.conf.
    NAMED_CONF_INCLUDE_LINES=$( grep -e '^[[:space:]]*include' "${NAMED_CONF}" | cut -f 2 -d '"')
    for file in ${NAMED_CONF_INCLUDE_LINES}; do
        test "${file}" = "${NAMED_CONF_META_INCLUDE_FILE}" && continue
        case "${NAMED_CONF_INCLUDE_FILES}" in
            *${file}*);;
            *) NAMED_CONF_INCLUDE_FILES="${NAMED_CONF_INCLUDE_FILES} ${file}";;
        esac
    done
fi

if [ "${NAMED_RUN_CHROOTED}" = "yes" ]; then
    CHROOT_PREFIX="/var/lib/named"
    NAMED_ARGS="${NAMED_ARGS} -t ${CHROOT_PREFIX}"
    NAMED_CHECKCONF_ARGS="-t ${CHROOT_PREFIX}"
else
    CHROOT_PREFIX=""
fi

NAMED_BIN="/usr/sbin/named"
NAMED_CHECKCONF_BIN="/usr/sbin/named-checkconf"
NAMED_CONF_META_INCLUDE_FILE_SCRIPT="/usr/share/bind/createNamedConfInclude"
NAMED_PID="${CHROOT_PREFIX}/var/run/named/named.pid"
RNDC_BIN="/usr/sbin/rndc"

if [ ! -x ${NAMED_BIN} -a "$1" != "stop" ]; then
    echo -n "Name server, ${NAMED_BIN} not installed! "
    # Tell the user this has skipped
    rc_status -s
    exit 5
fi

# Check for NAMED_CONF_META_INCLUDE_FILE or set it to our default if we use
# the NAMED_CONF_META_INCLUDE_FILE_SCRIPT script.
if [ -z "${NAMED_CONF_META_INCLUDE_FILE}" ]; then
    BASENAME_NAMED_CONF_META_INCLUDE_FILE_SCRIPT=$( basename ${NAMED_CONF_META_INCLUDE_FILE_SCRIPT})
    for script in ${NAMED_INITIALIZE_SCRIPTS}; do
        if [ "${script}" = "${BASENAME_NAMED_CONF_META_INCLUDE_FILE_SCRIPT}" -o \
        "${script}" = "${NAMED_CONF_META_INCLUDE_FILE_SCRIPT}" ]; then
            NAMED_CONF_META_INCLUDE_FILE="/etc/named.conf.include"
            break
        fi
    done
fi

function warnMessage()
{
    tput bold
    echo -en "\nWarning: "
    tput sgr0
    echo -e "$1 "
}

function initializeNamed
{
    rc=0
    test "${initializeNamedCalled}" = "yes" && return
    for script in ${NAMED_INITIALIZE_SCRIPTS}; do
        test "${script:0:1}" = "/" || script="/usr/share/bind/${script}"
        ${script}
        test $? -ne 0 && rc=$?
    done
    # We want to start each script one time only
    export initializeNamedCalled="yes"
    return ${rc}
}

# Create destination directory in the chroot.
function makeDestDir
{
    if [ ! -d "${CHROOT_PREFIX}/${configfile%/*}" ]; then
        umask 0022
        mkdir -p "${CHROOT_PREFIX}/${configfile%/*}"
    fi
}

# Check if all needed configuration files exist and copy these files relativly
# to the chroot directory if 'named' runs chrooted.
function checkAndCopyConfigFiles
{
    test "${checkAndCopyConfigFilesCalled}" = "yes" && return
    # check for /etc/rndc.key
    if [ ! -f /etc/rndc.key ]; then
        warnMessage "File /etc/rndc.key not found. Creating it."
        /usr/sbin/rndc-confgen -a -b 512 -r /dev/urandom
        chmod 0640 /etc/rndc.key
        chown root:named /etc/rndc.key
    fi
    # Handle all include files.
    for configfile in "${NAMED_CONF_META_INCLUDE_FILE}" ${NAMED_CONF_INCLUDE_FILES}; do
        if [ ! -f "${configfile}" ]; then
            case "${configfile}" in
                "${NAMED_CONF_META_INCLUDE_FILE}")
                    warnMessage "File, ${configfile} not found.  Creating it."
                    initializeNamed
                ;;
                *)
                    test -z "${NAMED_CONF_META_INCLUDE_FILE}" && continue
                    grep -qe "^[[:space:]]*include[[:space:]]*\"${configfile}\"" "${NAMED_CONF_META_INCLUDE_FILE}" && \
                        initializeNamed || \
                        warnMessage "File, ${configfile} not found.  Skipping.\nPlease check the setting of NAMED_CONF_INCLUDE_FILES in /etc/sysconfig/named."
                    continue
                ;;
            esac
        fi
        if [ "${NAMED_RUN_CHROOTED}" = "yes" ]; then
            makeDestDir
            cp -a ${configfile} ${CHROOT_PREFIX}/${configfile%/*}
        fi
    done
    # Handle known configuration files.
    if [ "${NAMED_RUN_CHROOTED}" = "yes" ]; then
        for configfile in ${NAMED_CONF} /etc/{localtime,rndc.key}; do
            if [ ! -e ${configfile} ]; then
                warnMessage "File ${configfile} not found. Skipping."
                continue
            fi
            makeDestDir
            cp -a ${configfile} ${CHROOT_PREFIX}/${configfile%/*}
        done
    fi
    export checkAndCopyConfigFilesCalled="yes"
}

# Check the syntax of our 'named' configuration.
function namedCheckConf
{
    test "${namedConfChecked}" = "yes" && return
    if ! ${NAMED_CHECKCONF_BIN} ${NAMED_CHECKCONF_ARGS} >/dev/null; then
        checkAndCopyConfigFiles
        if ! ${NAMED_CHECKCONF_BIN} ${NAMED_CHECKCONF_ARGS}; then
            rc_status -s
            rc_failed 6
            rc_exit
        fi
    fi
    export namedConfChecked="yes"
}

case "$1" in
    start)
    echo -n "Starting name server BIND "
    checkproc -p ${NAMED_PID} ${NAMED_BIN}
    case $? in
        0) echo -n "- Warning: named already running! ";;
        1) echo -n "- Warning: ${NAMED_PID} exists! ";;
    esac
    checkAndCopyConfigFiles
    namedCheckConf
    initializeNamed
    startproc -p ${NAMED_PID} ${NAMED_BIN} ${NAMED_ARGS} -u named
    rc_status -v
;;
    stop)
    echo -n "Shutting down name server BIND "
    checkproc -p ${NAMED_PID} ${NAMED_BIN} || echo -n "- Warning: named not running! "
    if ${RNDC_BIN} status &>/dev/null; then
        ${RNDC_BIN} stop
    else
        killproc -p ${NAMED_PID} -TERM ${NAMED_BIN}
    fi
    rc=$?

    # let's wait, because
    # 1) trying to start named before it has terminated can leave
    #    us without a running named...
    # 2) making sure that pending updates are written to zone files is good
    #    before trying to modify them externally
    info="no"; timeout=30; rc=0; startDate=$( date +%s)
    while [ ${rc} -eq 0 ]; do
        checkproc -p ${NAMED_PID} ${NAMED_BIN}
        rc=$?
        if [ ${rc} -ne 0 ]; then
            test "${info}" = "yes" && rc_timer_off
            break
        elif [ ${info} = "no" ]; then
            echo -n >&2 " waiting for named to shut down "
            rc_timer_on ${timeout} 63
            info="yes"
        fi
        if [ $(( $( date +%s) - ${startDate} )) -gt $timeout ]; then
            echo -en >&2 "\nNamed still appears to be running after $timeout seconds, sending SIGTERM"
            rc=1
            killproc -p ${NAMED_PID} -TERM ${NAMED_BIN}
        else
            sleep 2
        fi
    done

    rc_status -v
;;
    try-restart|condrestart)
    if test "$1" = "condrestart"; then
        echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
    fi
    namedCheckConf
    $0 status
    if test $? = 0; then
        $0 restart
    else
        rc_reset
    fi
    rc_status
;;
    restart)
    namedCheckConf
    # Some of the scripts need a running named.
    $0 status >/dev/null && initializeNamed
    $0 stop
    $0 start
    rc_status
;;
    force-reload|reload)
    echo -n "Reloading name server BIND "
    checkproc -p ${NAMED_PID} ${NAMED_BIN} || echo "- Warning: named not running! "
    rc=$?
    if [ ${rc} -ne 0 ]; then
        echo "- Warning: named not running! "
    else
        checkAndCopyConfigFiles
        namedCheckConf
        initializeNamed
        ${RNDC_BIN} status &>/dev/null
        if [ $? -ne 0 ]; then
            killproc -p ${NAMED_PID} -HUP ${NAMED_BIN}
        else
            ${RNDC_BIN} reload
        fi
        rc=$?
    fi
    ( exit ${rc} )
    rc_status -v
;;
    status)
    echo -n "Checking for nameserver BIND "
    checkproc -p ${NAMED_PID} ${NAMED_BIN}
    if [ $? -ne 0 ]; then
        false
    else
        test "${RNDC_BIN}" && echo && ${RNDC_BIN} status && echo -en "${esc}[1A"
        true
    fi
    rc_status -v
;;
    probe)
    rc=0
    for configfile in ${NAMED_CONF} /etc/{localtime,rndc.key} "${NAMED_CONF_META_INCLUDE_FILE}" ${NAMED_CONF_INCLUDE_FILES}; do
        if [ "${configfile}" -nt ${NAMED_PID} ]; then
            rc=1
            break
        fi
    done
    test ${rc} -ne 0 && echo reload
;;
    *)
    echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
    exit 1
;;
esac
rc_exit
Спасибо сказали:
Abigor
Сообщения: 100

Re: не заводится DNS bind после бекапа

Сообщение Abigor »

ни версию бинда не написал, ни версию ОС, вообще никако информации. Только то, то бэкапы в формат tar.gz. А что в этих бэкапах, угодай сам.
Спасибо сказали:
maxlen
Сообщения: 6

Re: не заводится DNS bind после бекапа

Сообщение maxlen »

Abigor писал(а):
24.06.2009 09:25
ни версию бинда не написал, ни версию ОС, вообще никако информации. Только то, то бэкапы в формат tar.gz. А что в этих бэкапах, угодай сам.


Операционка старенькая SuSE Linux 9.3 (i586), версия bind 9.3.1

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 1015M 323M 672M 33% /
/dev/sda6 2.5G 1.9G 578M 77% /home
/dev/sda7 9.9G 1.8G 8.1G 18% /srv
/dev/sda5 5.0G 1.4G 3.5G 29% /usr
/dev/sda8 15G 7.9G 6.2G 57% /var
/dev/sdb1 34G 28G 5.9G 83% /local

Бекапятся грубо говоря всё(почти всё) с каждого устройства.
То есть home в файл home.дата.tar.gz и тд
и ложится все в /local/backup.fill/

Скрипт который это делает запускается по крону /etc/crontab

Но суть не в создании бекапа, все остальные сервисы стартуют.
Спасибо сказали:
maxlen
Сообщения: 6

Re: не заводится DNS bind после бекапа

Сообщение maxlen »

а в его восстановлении
Спасибо сказали:
Kam
Сообщения: 67
ОС: Fedora, CentOS

Re: не заводится DNS bind после бекапа

Сообщение Kam »

Ты бы еще исходники ядра выложил.

Пропиши место хранения пида:

Код: Выделить всё

options
{
.....
     pid-file "/var/run/named/named.pid";
.....
Спасибо сказали:
maxlen
Сообщения: 6

Re: не заводится DNS bind после бекапа

Сообщение maxlen »

Kam писал(а):
24.06.2009 12:09
Ты бы еще исходники ядра выложил.

Пропиши место хранения пида:

Код: Выделить всё

options
{
.....
     pid-file "/var/run/named/named.pid";
.....


в named.conf не нашёл

он прописан в /etc/init.d/named но не совсем явно:
На сколько я понял, если он уже запущен то путь - /var/lib/named/var/run/named/named.pid
если нет, то - var/run/named/named.pid

Привожу часть скрипта /etc/init.d/named

if [ "${NAMED_RUN_CHROOTED}" = "yes" ]; then
CHROOT_PREFIX="/var/lib/named"
NAMED_ARGS="${NAMED_ARGS} -t ${CHROOT_PREFIX}"
NAMED_CHECKCONF_ARGS="-t ${CHROOT_PREFIX}"
else
CHROOT_PREFIX=""
fi

NAMED_BIN="/usr/sbin/named"
NAMED_CHECKCONF_BIN="/usr/sbin/named-checkconf"
NAMED_CONF_META_INCLUDE_FILE_SCRIPT="/usr/share/bind/createNamedConfInclude"
NAMED_PID="${CHROOT_PREFIX}/var/run/named/named.pid"
Спасибо сказали:
Abigor
Сообщения: 100

Re: не заводится DNS bind после бекапа

Сообщение Abigor »

maxlen писал(а):
24.06.2009 14:50
Kam писал(а):
24.06.2009 12:09
Ты бы еще исходники ядра выложил.
Пропиши место хранения пида:

Код: Выделить всё

options
{
.....
     pid-file "/var/run/named/named.pid";
.....

в named.conf не нашёл

ясно дело что не нашел, потому тебе и сказали добавить в named.conf строку

Код: Выделить всё

 pid-file "/var/run/named/named.pid";

в разделе options.

Kam писал(а):
24.06.2009 12:09
На сколько я понял, если он уже запущен то путь - /var/lib/named/var/run/named/named.pid
если нет, то - var/run/named/named.pid

Для демона named корнем является /var/lib/named. Описывается в named.conf строкой

Код: Выделить всё

directory "/var/lib/named";

все пути определяются относительно этого каталога.


Kam писал(а):
24.06.2009 12:09
Привожу часть скрипта /etc/init.d/named

нафига?
Спасибо сказали: