Назад | Перейти на главную страницу

Почему мне нужно вручную копировать / etc / services и /etc/resolv.conf в / var / spool / postfix / etc?

Я столкнулся с этой проблемой при установке Postfix:

https://www.virtualmin.com/node/23909

т.е. я получал ошибку:

postfix/smtp[130]: fatal: unknown service: smtp/tcp

и, как и в URL-адресе выше, решение заключалось в том, чтобы вручную скопировать /etc/services и /etc/resolv.conf в /var/spool/postfix/etc

У меня сложилось впечатление, что это «только начало происходить» и раньше не было проблемой, однако я вносил лишь незначительные, казалось бы, не связанные изменения в postfix main.cf, поэтому я не понимаю, почему.

В руководствах по установке Postfix, за которыми я следил, ничего не упоминается о необходимости вручную копировать эти файлы ... это похоже на то, что Postfix должен делать сам по себе, а не по какой-то причине.

Есть ли какая-то основная неправильная конфигурация, которая могла бы вызвать это?

Некоторые процессы Postfix по умолчанию работают в среде chroot. Поэтому обычно есть что-то, чтобы предоставить им необходимые файлы при запуске.

В моей системе Debian 7 файл /etc/init.d/postfix содержит следующие строки, которые копируют все необходимые файлы внутри chroot:

FILES="etc/localtime etc/services etc/resolv.conf etc/hosts \
        etc/nsswitch.conf etc/nss_mdns.config"
for file in $FILES; do
     [ -d ${file%/*} ] || mkdir -p ${file%/*}
     if [ -f /${file} ]; then rm -f ${file} && cp /${file} ${file}; fi
     if [ -f  ${file} ]; then chmod a+rX ${file}; fi
done

Странно, что в вашей установке этого нет; здесь не нужно ничего делать в одиночку.

Как вы устанавливали postfix и в какой системе?

Похоже, Postfix хочет работать в режиме chrooted. Видеть Вот для получения дополнительной информации о том, что это значит.

Вы можете изменить это с помощью Chroot вариант конфигурации в /etc/postfix/master.cf.

Это может быть проблема с синхронизацией с NetworkManager. Сделайте загрузку постфикса позже в процессе загрузки, изменив имя файла постфикса в /etc/rc{x}.d

Например:

sudo mv /etc/rc5.d/S20postfix /etc/rc5.d/S92postfix

Возможно, вам придется изменить это во всех ваших каталогах /etc/rc{x}.d. Не забудьте перезагрузиться, чтобы проверить это.

Если файл содержит только одну строку с текстом «# Создано resolvconf», скорее всего, проблема с порядком загрузки.

Сначала проверьте, содержит ли "/etc/resolv.conf" сервер имен. Если это так, ваша сеть правильно настроена и работает.

Даже в современных дистрибутивах с systemd postfix в настоящее время по-прежнему загружается с помощью сценариев init.d, которые обрабатываются во время загрузки systemd. Чтобы понять, что происходит во время загрузки, просто прочтите эту статью: https://unix.stackexchange.com/questions/233468/how-does-systemd-use-etc-init-d-scripts

Postfix запускается при выполнении "/etc/rc1.d/K01postfix". Этот сценарий содержит следующую строку для проверки сети:

# Required-Start:    $local_fs $remote_fs $syslog $named $network $time

И вот в чем проблема. Мы должны убедиться, что сеть не только работает, но и находится в режиме онлайн. В противном случае resolv.conf копируется из "/etc/resolv.conf" до того, как он будет полностью создан.

Это можно сделать, выполнив:

systemctl enable systemd-networkd-wait-online.service

См. Также эту статью для хорошего описания: https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

Я обнаружил, что самым простым решением этой проблемы для меня было добавить перезапуск постфиксного рестарта в /etc/rc.local