Вопрос или проблема
Я завершаю настройку своего 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. Рекомендации по решению проблемы
-
Проверка конфигурации службы:
- Вы уже начали правильный процесс, редактируя файл
/usr/lib/systemd/system/org.cups.cupsd.service
. Если вы еще не сделали этого, убедитесь, что команда запуска (ExecStart
) указана как/usr/bin/cupsd -f
. Это позволяет запускать CUPS в фоновом режиме с возможностью логирования ошибок.
- Вы уже начали правильный процесс, редактируя файл
-
Проверка зависимостей сервиса:
- Убедитесь, что перед запуском CUPS сервис avahi-daemon доступен. Можно добавить зависимость, внесите изменения в секцию
[Unit]
и упомянитеRequires=avahi-daemon.service
. Это гарантирует, что CUPS не запустится, пока avahi-daemon не будет активен.
- Убедитесь, что перед запуском CUPS сервис avahi-daemon доступен. Можно добавить зависимость, внесите изменения в секцию
-
Проверка прав доступа и владельца файлов:
- Убедитесь, что права на директорию
/var/run/cups/
установлены правильно и что служба CUPS имеет доступ к указанным сокетам. С помощью командыls -l /var/run/cups/
вы можете проверить права.
- Убедитесь, что права на директорию
-
Перезагрузка демонов:
- После внесения изменений в конфигурацию системы, не забудьте выполнить команды:
sudo systemctl daemon-reload sudo systemctl restart org.cups.cupsd
- После внесения изменений в конфигурацию системы, не забудьте выполнить команды:
-
Логирование и отладка:
- Запускайте CUPS вручную (
/usr/sbin/cupsd -f
) для устранения ошибок и исследования логов, чтобы понять, какие именно модули или конфигурации могут вызывать сбои, когда служба запускается как системный сервис.
- Запускайте CUPS вручную (
Заключение
Если после применения рекомендаций проблема не будет решена, рекомендуется проверить более детализированные логи как CUPS, так и avahi-daemon для выявления дополнительных проблем.ंभ Проблемы с взаимодействием между службой CUPS и avahi-daemon могут быть многофакторными, и комплексный подход к их устранению может дать положительный результат.