[2026-08-31] eagle: family/how-to/truenas-infrastructure.md personal/tech/mac-print-shared-services.md

This commit is contained in:
Alexey Martemyanov
2026-08-31 13:58:43 +06:00
parent 2ae4de034a
commit af9a0bd9c9
2 changed files with 26 additions and 18 deletions
+15 -9
View File
@@ -3,6 +3,7 @@ type: tech
topic: print
tags: [print, printer, samsung, cups, macos]
created: 2026-08-26
updated: 2026-08-31
---
# Печать и общие сервисы (Mac + сеть)
@@ -122,21 +123,26 @@ TrueNAS ушла из локальной сети и доступна **толь
**Механика:** Samsung Mobile Print — вендорское приложение, ходит на CUPS **напрямую по IPP** (POST Print-Job по IP) → работает даже без mDNS. **Android штатная служба печати** (Mopria/Default) даже при ручном добавлении по IP затем делает **mDNS/AirPrint-проверку** принтера (`_ipp._tcp` / `_ipps._tcp.local`), чтобы получить `printer-uuid` и capabilities. Если mDNS-анонса нет (`printer-dns-sd-name = no-value`, avahi не запущен) — Android помечает принтер **«недоступен»**, даже если IPP по-IP физически отвечает. Полный ответ CUPS на Get-Printer-Attributes — `successful-ok [PASS]`, принтер idle/accepting/shared — подтверждает: CUPS здоров, всё дело в отсутствии mDNS-анонса.
## PLAN + ПРАВКИ (2026-08-31, частично выполнено): поднять mDNS через avahi-daemon
## ✅ РЕЗУЛЬТАТ (2026-08-31, выполнен полностью): mDNS поднят через avahi-daemon
**Место:** папка `/mnt/RED_2TB/docker/cups/`.
**Выполнено:**
**Выполнено и проверено (все шаги):**
-**Бэкап** конфига: `/mnt/RED_2TB/docker/cups/backup_20260831-003619.tar.gz` (создан внутри контейнера `tar``docker cp`; md5 `0e303a6a57ae767d1e14cd72c8039fe4`). Внутри: `/etc/cups`, `/var/spool/cups`, `/var/cache/cups`. Дубль в `/tmp/cups_backup_<ts>.tar.gz` на хосте.
-**Новый `Dockerfile`** (в cups/, заменил старый): в apt добавлен **`avahi-daemon`** + `procps`; убран `useradd`-ку только не трогал; добавлен `COPY entrypoint.sh /entrypoint.sh`; `ENTRYPOINT ["/entrypoint.sh"]` вместо пустого `CMD ["cupsd","-f"]`.
-**Новый `Dockerfile`** (в cups/, заменил старый): в apt добавлен **`avahi-daemon`** + `procps`; добавлен `COPY entrypoint.sh /entrypoint.sh`; `ENTRYPOINT ["/entrypoint.sh"]` вместо `CMD ["cupsd","-f"]`.
-**`entrypoint.sh`** (в cups/): стартует `dbus-daemon --system --fork`, затем `avahi-daemon --no-drop-root --syslog` в фоне, затем `exec cupsd -f`.
-**Образ `cups-splix-new` собран** на TrueNAS (`docker build -t cups-splix-new .`, ~108s, без ошибок).
-**`cupsd.conf`**: `Browsing Off``Browsing On` + `BrowseLocalProtocols dnssd` (бэкап `cupsd.conf.pre-avahi`). Валидность: `/usr/sbin/cupsd -t` → OK.
-**Образ**: собрал `cups-splix-new`, затем пометил **старый образ как `cups-splix-old`** (откат), а новый — как `cups-splix`.
-**Контейнер пересоздан**: `docker stop cups-splix && docker rm cups-splix && docker compose up -d`.
**НЕ выполнено (ждёт OK Alex на пересоздание работающего контейнера):**
- `docker stop cups-splix && docker rm cups-splix` (данные в volumes на хосте `data/cache/spool` НЕ теряются)
- `docker tag cups-splix-new cups-splix && docker rmi <старый>`
- `docker compose up -d` → проверка: `ps aux | grep avahi`, `ipptool` даёт `printer-dns-sd-name` не `no-value`, `ippfind` находит принтер по mDNS.
**Проверка mDNS (всё сошлось):**
- `ps aux`: запущены `cupsd` (PID1), `dbus-daemon --system`, `avahi-daemon: running [truenas.local]`.
- `ipptool` Get-Printer-Attributes: `printer-dns-sd-name` больше не `no-value` → теперь анонс зарегистрирован.
- `avahi-browse -rt -p _ipp._tcp`: на физическом интерфейсе **`;enp3s0;IPv4;`** по адресу **`192.168.2.197;631`** с TXT **`mopria-certified=1.3`**, `pdl=application/pdf,...`, `rp=printers/Samsung_CLX-216x_Series`, `UUID=68e3b8c6-...`.
- CUPS по-прежнему слушает `0.0.0.0:631`, принтер `idle/enabled/accepting`.
**Pitfall (обнаружен):** `docker-compose.yml` в cups/ — `-rw------- root:root` (600), **truenas_admin перезаписать не может** (Permission denied) → compose НЕ менял. Это ок: ENTRYPOINT переопределяет `command`, лишний cupsd не стартует (скрипт сам делает `exec cupsd -f`, аргументы `$@` игнорирует). Если потребуется убрать `command` из compose — править через root/UI.
**Pitfall (важно):** НЕ использовать **`docker restart cups-splix`** после правки конфига — он убивает avahi-daemon (становится `<defunct>`), dbus тоже пропадает. Подъём ТОЛЬКО полным пересозданием: **`docker stop cups-splix && docker rm cups-splix && docker compose up -d`**, чтобы `entrypoint.sh` выполнился с нуля.
**Pitfall (compose):** `docker-compose.yml` в cups/ — `-rw------- root:root` (600), **truenas_admin перезаписать не может** (Permission denied) → compose НЕ менял. Это ок: ENTRYPOINT переопределяет `command`, лишний cupsd не стартует (скрипт сам делает `exec cupsd -f`, аргументы `$@` игнорирует). Если потребуется убрать `command` из compose — править через root/UI.
**Pitfall (бэкап):** `data/ cache/ spool/` под TrueNAS — `drwx------ root:lp` (0700), truenas_admin их напрямую не читает → **бэкап делать ТОЛЬКО через контейнер** (`docker exec ... tar``docker cp`), либо через /admin (root).