Files
obsidian-vault/personal/tech/samsung-clx-216x.md
T

78 lines
8.0 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: tech
topic: print
tags: [print, printer, samsung, cups, truenas, novosibirsk]
updated: "2026-11-07"
---
# Samsung CLX-216x — Новосибирск
## Подключение и сервисы
- Принтер подключён по USB к TrueNAS в Новосибирске:
`usb://Samsung/CLX-216x%20Series?serial=9566BAGQ213134Z.&interface=1`.
- `192.168.2.197` — адрес TrueNAS, не принтера.
- Контейнер `cups-splix` обслуживает очередь `Samsung_CLX-216x_Series` через CUPS и драйвер splix.
- В контейнере работают `cupsd`, `dbus-daemon`, `avahi-daemon`; Avahi публикует `_ipp._tcp` / mDNS для Android.
## История проблем и решений
1. После пересоздания пула исчез локально собранный образ `cups-splix`; контейнер не работал, CUPS на `:631` не было, принтер оказался недоступен.
2. Образ пересобрали из `/mnt/RED_2TB/docker/cups/`, контейнер подняли. USB-очередь восстановилась из сохранённого CUPS-конфига.
3. Штатная Android-служба считала доступную по IPP очередь недоступной: не было mDNS-анонса.
4. В контейнер добавили `avahi-daemon` и `dbus-daemon`, включили CUPS browsing. После этого Android обнаруживает принтер.
## Эксплуатация
- Конфигурация: `/mnt/RED_2TB/docker/cups/` на TrueNAS.
- После изменения Dockerfile или скриптов пересобрать образ и пересоздать контейнер:
```bash
cd /mnt/RED_2TB/docker/cups
docker compose up -d --build --force-recreate cups-splix
```
- С 2026-11-07 обычный `docker restart cups-splix` поддерживается и проверен. Старый запрет относился к ошибке прежнего entrypoint; причина устранена (см. ниже).
- Из внешней сети печать идёт через SSH в контейнер; порт `631` наружу не опубликован.
## Печать PDF извне
Загрузить PDF на TrueNAS, скопировать в контейнер и поставить в очередь:
```bash
scp -i ~/.ssh/id_rsa file.pdf truenas_admin@mallexxx.duckdns.org:/tmp/evrika_print.pdf
ssh -i ~/.ssh/id_rsa truenas_admin@mallexxx.duckdns.org \
'docker cp /tmp/evrika_print.pdf cups-splix:/tmp/evrika_print.pdf'
ssh -i ~/.ssh/id_rsa truenas_admin@mallexxx.duckdns.org \
'docker exec cups-splix lp -d Samsung_CLX-216x_Series -o media=A4 /tmp/evrika_print.pdf'
```
Проверка: `lpstat -W completed` внутри контейнера. CUPS сам конвертирует PDF для splix. После печати удалить временные файлы в `/tmp` на TrueNAS и в контейнере.
## Контейнер и сохранность конфигурации
- `docker-compose.yml` использует `network_mode: host`, USB `/dev/bus/usb`, а `/etc/cups`, кэш и spool хранятся в `/mnt/RED_2TB/docker/cups/{data,cache,spool}`.
- Образ основан на Debian 12; в нём CUPS, splix, Avahi, D-Bus и USB-утилиты. Точка входа запускает D-Bus, затем Avahi, затем `cupsd`.
- Каталоги `data`, `cache`, `spool` принадлежат `root:lp` и имеют права `0700`. Бэкап делать внутри контейнера через `docker exec … tar`, затем забирать `docker cp`.
- Локально собранный образ не переживает потерю docker data-root; конфигурация и USB-очередь сохраняются в `/mnt/RED_2TB/docker/cups/`, образ нужно пересобрать.
## Исправление повторного сбоя 2026-11-07
- Проверка по SSH: USB `04e8:3425` присутствовал, очередь была idle/enabled/accepting, но D-Bus отсутствовал, его socket от 31 августа возвращал `Connection refused`, Avahi был defunct. Контейнер повторно запустился 1 ноября после перезапуска TrueNAS.
- Причина: прежний entrypoint проверял только существование socket, запускал Avahi в фоне с подавлением ошибок и не контролировал дочерние процессы. Пересоздание контейнера обходило ошибку, но следующий старт существующего контейнера воспроизводил её.
- Дополнительная причина, обнаруженная проверкой mDNS после восстановления D-Bus: Avahi присоединялся ко всем виртуальным интерфейсам Docker и на физическом `enp3s0.IPv4` получал `IP_ADD_MEMBERSHIP failed: No buffer space available`. Из-за исчерпания multicast memberships оставалась лишь IPv6-публикация на LAN. В Dockerfile установлен `allow-interfaces=enp3s0`: mDNS печати работает только в домашней сети, новые сети Docker не расходуют его multicast memberships.
- Исправлены `/mnt/RED_2TB/docker/cups/{Dockerfile,entrypoint.sh}`, добавлен `healthcheck.sh`. При старте удаляются старые container-local socket/PID-файлы; D-Bus, Avahi и CUPS запускаются последовательно с проверкой готовности. PID 1 контролирует все три процесса и каждые 5 секунд проверяет Avahi по D-Bus и очередь по IPP. После трёх неудачных проверок или выхода процесса контейнер завершается; Docker автоматически поднимает его согласно сохранённому `restart: unless-stopped`. Завершение зависших процессов ограничено по времени. Ошибки Avahi видны в `docker logs`.
- В образ добавлен Docker HEALTHCHECK (15 секунд, timeout 12 секунд, start-period 30 секунд, retries 3). `healthcheck.sh` проверяет также фактический IPv4 mDNS-анонс очереди на `enp3s0`, а не только доступность процессов. Самовосстановление обеспечивает entrypoint: один HEALTHCHECK сам по себе контейнеры не перезапускает.
- Проверка: два `docker restart`; SIGKILL отдельно Avahi, D-Bus и CUPS; SIGSTOP Avahi для имитации зависания. После каждого теста контейнер healthy, IPP отвечает, `_ipp._tcp` разрешается на физическом `enp3s0` в `192.168.2.197:631` с правильным `rp=printers/Samsung_CLX-216x_Series`. Полный reboot TrueNAS не выполнялся.
- Одностраничное тестовое задание отправлено через LAN IPP; результат CUPS — completed. Печать именно с телефона удалённо не проверялась.
- Бэкап исходных Dockerfile/entrypoint/compose: `/mnt/RED_2TB/docker/cups/backup-startup-20261107T133009Z/`; прежний образ: `cups-splix:before-startup-20261107T133009Z`. Очередь, spool и USB-настройки сохранены.
Проверка состояния:
```bash
docker inspect cups-splix --format '{{.State.Health.Status}}'
docker exec cups-splix /healthcheck.sh
docker exec cups-splix avahi-browse -rtp _ipp._tcp
docker logs --tail 60 cups-splix
```