cups не могут связаться с avahi-daemon при запуске как службы

Вопрос или проблема

Я завершаю настройку своего Raspberry Pi в режиме только для чтения, и служба cups, похоже, является последним источником проблем.

Поскольку cups записывает конфигурацию в /etc, я решил смонтировать /etc/cups как систему наложения:

$ mount
...
overlay на /etc/cups тип overlay (rw,relatime,lowerdir=/etc/cups_org,upperdir=/etc/cups_rw/upper,workdir=/etc/cups_rw/work)
...

Служба cups запускается успешно, я могу получить доступ к странице localhost:631, однако при переходе на подп страницу /admin возникает ошибка “Внутренняя ошибка сервера”, а подп страница /printer показывает: Невозможно получить список принтеров: Некорректный дескриптор файла.

Во время запуска службы я вижу в журнале:

E [03/Sep/2016:17:17:13 +0200] Невозможно установить связь с avahi-daemon: Демон не запущен

в то время как демон avahi активен и работает

При доступе к подп странице /admin журнал показывает:

D [03/Sep/2016:18:22:39 +0200] [CGI] Запущен /usr/lib/cups/cgi-bin/admin.cgi (PID 5367)
I [03/Sep/2016:18:22:39 +0200] [Клиент 13] Запущен "/usr/lib/cups/cgi-bin/admin.cgi" (pid=5367)
D [03/Sep/2016:18:22:39 +0200] [Клиент 13] file=14
D [03/Sep/2016:18:22:39 +0200] [Клиент 13] Ожидание данных CGI.
D [03/Sep/2016:18:22:39 +0200] Отчет: клиенты=1
D [03/Sep/2016:18:22:39 +0200] Отчет: задания=0
D [03/Sep/2016:18:22:39 +0200] Отчет: активные-задания=0
D [03/Sep/2016:18:22:39 +0200] Отчет: принтеры=1
D [03/Sep/2016:18:22:39 +0200] Отчет: stringpool-string-count=654
D [03/Sep/2016:18:22:39 +0200] Отчет: stringpool-alloc-bytes=6392
D [03/Sep/2016:18:22:39 +0200] Отчет: stringpool-total-bytes=11720
D [03/Sep/2016:18:22:39 +0200] cupsd больше не в состоянии ожидания, отмена завершения.
D [03/Sep/2016:18:22:39 +0200] [CGI] admin.cgi запущен...
D [03/Sep/2016:18:22:39 +0200] cupsd больше не в состоянии ожидания, отмена завершения.
E [03/Sep/2016:18:22:39 +0200] [CGI] Невозможно подключиться к cupsd: Некорректный дескриптор файла
E [03/Sep/2016:18:22:39 +0200] [CGI] Невозможно подключиться к cupsd: Некорректный дескриптор файла
D [03/Sep/2016:18:22:39 +0200] [CGI] cupsServer()="/var/run/cups/cups.sock"
D [03/Sep/2016:18:22:39 +0200] [CGI] ippPort()=631
D [03/Sep/2016:18:22:39 +0200] cupsd больше не в состоянии ожидания, отмена завершения.
D [03/Sep/2016:18:22:39 +0200] [CGI] cupsEncryption()=0
D [03/Sep/2016:18:22:39 +0200] cupsd больше не в состоянии ожидания, отмена завершения.
D [03/Sep/2016:18:22:39 +0200] [Клиент 13] Данные CGI готовы к отправке.
D [03/Sep/2016:18:22:39 +0200] PID 5367 (/usr/lib/cups/cgi-bin/admin.cgi) остановлен с кодом 1.

Однако, когда я останавливаю службу и запускаю программу вручную:

/usr/sbin/cupsd -f

проблема вообще не возникает. Журнал показывает:

D [03/Sep/2016:18:25:33 +0200] Соединение с сервером Avahi теперь доступно, регистрирую принтеры для Bonjour трансляции.

И я могу получить доступ к /admin (и всем другим подп страницам):

D [03/Sep/2016:18:25:36 +0200] [CGI] Запущен /usr/lib/cups/cgi-bin/admin.cgi (PID 6269)
I [03/Sep/2016:18:25:36 +0200] [Клиент 17] Запущен "/usr/lib/cups/cgi-bin/admin.cgi" (pid=6269)
D [03/Sep/2016:18:25:36 +0200] [Клиент 17] file=18
D [03/Sep/2016:18:25:36 +0200] [Клиент 17] Ожидание запроса.
D [03/Sep/2016:18:25:36 +0200] [CGI] http=0x554e9db8
D [03/Sep/2016:18:25:36 +0200] [CGI] cgiSetVariable: SECTION="admin"
D [03/Sep/2016:18:25:36 +0200] [CGI] cgiSetVariable: REFRESH_PAGE=""
D [03/Sep/2016:18:25:36 +0200] cupsd больше не в состоянии ожидания, отмена завершения.
D [03/Sep/2016:18:25:36 +0200] [CGI] куки org.cups.sid равны "72b5efbcd72416115613b87b329ce911"
D [03/Sep/2016:18:25:36 +0200] [CGI] Нет данных формы, показываю Главное меню...

Есть ли какие-либо подсказки, что может быть причиной такого поведения и как решить проблему (изменить конфигурацию в файле cups.service?) или хотя бы как продвинуться в устранении неисправностей дальше?

У меня была похожая проблема, и мне помогло то, что я отредактировал файл: /usr/lib/systemd/system/org.cups.cupsd.service

[Unit]
Description=CUPS Планировщик
Documentation=man:cupsd(8)
After=network.target

[Service]
ExecStart=/usr/bin/cupsd -f

[Install]
Also=org.cups.cupsd.socket org.cups.cupsd.path
WantedBy=printer.target

И перезапустил службу как root или с sudo:

# systemctl daemon-reload
# systemctl restart org.cups.cupsd

Ответ или решение

Ваш запрос касается проблемы с невозможностью CUPS (Common UNIX Printing System) установить связь с avahi-daemon, когда служба CUPS запущена как сервис на Raspberry Pi. Данная ситуация может быть обусловлена несколькими факторами. Рассмотрим их в деталях и предложим возможные пути решения.

1. Общее описание проблемы

Вы настраиваете Raspberry Pi в режиме "только для чтения", и для предотвращения изменений конфигурации CUPS вы решили использовать наложенную файловую систему для директории /etc/cups. После настройки вы успешно запускаете службу CUPS, однако возникают ошибки при доступе к веб-интерфейсу CUPS, в частности на странице администрирования и страничке принтеров.

2. Анализ журналов

В журнале CUPS при старте службы появляется сообщение:

E [03/Sep/2016:17:17:13 +0200] Unable to communicate with avahi-daemon: Daemon not running

Это указывает на то, что CUPS не может взаимодействовать с avahi-daemon, даже если сам демон активно работает.

Дополнительно, ошибки, возникающие на страницах /admin и /printer, говорят о проблемах с файловыми дескрипторами при попытке обратиться к серверу CUPS, который устанавливает соединение через сокет, обычно расположенный по адресу /var/run/cups/cups.sock.

3. Причины возникновения проблемы

  • Наложенная файловая система: Использование overlay для документации CUPS может вызывать конфликты. Если права на записи в директорию /etc/cups ограничены, это может препятствовать правильной записи конфигурации и взаимодействию с другими системными сервисами, такими как avahi-daemon.

  • Конфигурация системы: Запуск CUPS в режиме сервиса через systemd может не соответствовать ожиданиям самой службы из-за параметров или пропусков в конфигурации.

4. Рекомендации по решению проблемы

  1. Проверка конфигурации службы:

    • Вы уже начали правильный процесс, редактируя файл /usr/lib/systemd/system/org.cups.cupsd.service. Если вы еще не сделали этого, убедитесь, что команда запуска (ExecStart) указана как /usr/bin/cupsd -f. Это позволяет запускать CUPS в фоновом режиме с возможностью логирования ошибок.
  2. Проверка зависимостей сервиса:

    • Убедитесь, что перед запуском CUPS сервис avahi-daemon доступен. Можно добавить зависимость, внесите изменения в секцию [Unit] и упомяните Requires=avahi-daemon.service. Это гарантирует, что CUPS не запустится, пока avahi-daemon не будет активен.
  3. Проверка прав доступа и владельца файлов:

    • Убедитесь, что права на директорию /var/run/cups/ установлены правильно и что служба CUPS имеет доступ к указанным сокетам. С помощью команды ls -l /var/run/cups/ вы можете проверить права.
  4. Перезагрузка демонов:

    • После внесения изменений в конфигурацию системы, не забудьте выполнить команды:
      sudo systemctl daemon-reload
      sudo systemctl restart org.cups.cupsd
  5. Логирование и отладка:

    • Запускайте CUPS вручную (/usr/sbin/cupsd -f) для устранения ошибок и исследования логов, чтобы понять, какие именно модули или конфигурации могут вызывать сбои, когда служба запускается как системный сервис.

Заключение

Если после применения рекомендаций проблема не будет решена, рекомендуется проверить более детализированные логи как CUPS, так и avahi-daemon для выявления дополнительных проблем.ंभ Проблемы с взаимодействием между службой CUPS и avahi-daemon могут быть многофакторными, и комплексный подход к их устранению может дать положительный результат.

Оцените материал
Добавить комментарий

Капча загружается...