tiff2pdf на ReadyNAS Duo

Автор: | 19.12.2013

Сразу оговорюсь, что речь идёт о стареньком ReadyNAS Duo. Это который RND2000 и SPARC, а не RND2000v2 и ARM.

Некие властелины CAD-ов купили себе чудо прибор по цене отечественного автопрома — мультифункциональный принтер формата А0 (36″). Машина — зверь! Печатает, копирует, сканирует и аккуратно складывает файлы в папку на сервере. Вот только есть маленькая проблема — не умеет сканировать в PDF, а только в TIFF, а последний никто не умеет правильно готовить. Конечно же, можно было докинуть до цены иномарки и взять то же самое (в прямом смысле слова, т.к. аппараты отличаются только наличием или отсутствием поддержки PostScript), но с функцией сканирования в PDF. Но мы же в России 🙂

ReadyNAS DuoЭто небольшая рабочая группа и для текущего хранения файлов используется Netgear ReadyNAS Duo. А раз этот малыш уже замешан в процессе сканирования (на него складируются файлы), то почему бы не попросить его конвертировать TIFF в PDF? Делать это будем с помощью утилиты tiff2pdf из пакета libtiff-tools.

На устройстве установлена последняя доступная на текущий момент операционная система Netgear RAIDiator 4.1.12 от 02.07.2013. RAIDiator основана на Debian, т.е. это обычный Linux, а раз это Linux, то можно рассчитывать на root-доступ. На самом деле здесь и далее всё просто до безобразия, за что ставлю плюс в карму Netgear.

Для получения root-доступа через SSH есть специальный модуль расширения, который так и называется — Enable Root SSH Access. Качаем версию для SPARC. Открываем web-интерфейс ReadyNAS, переходим в «Система» → «Обновить» → «Локально», выбираем скачанный ранее файл EnableRootSSH_1.0.bin и нажимаем «Загрузить и проверить код». Через несколько секунд видим результат проверки:

Обновить локально

Нажимаем «Выполнить обновление системы» и через очередные несколько секунд нас попросят перезагрузить устройство и автоматически перекинут в «Система» → «Выключение». Выбираем «Остановить все службы и перезагрузить устройство» и нажимаем «Применить»:

Выключение

Через пару минут, когда устройство успешно перезагрузится, можно подключаться через SSH. Что мы и сделаем (имя пользователя «root», а пароль от пользователя «admin»):

login as: root
root@192.168.0.2's password:
Linux readynas-name 2.6.17.14ReadyNAS #1 Wed Jun 20 20:08:20 PDT 2012 padre unknown
readynas-name:~#

Видно, что версия ядра довольно старая, а значит и необходимые нам библиотеки того же возраста. Поэтому будем использоваться архивные пакеты от Debian Lenny. Скачать их можно с archive.debian.org. Нам потребуются файлы libtiff4_3.7.2-7_sparc.deb (archive.debian.org или onlyfriends.name) и libtiff-tools_3.7.2-7_sparc.deb (archive.debian.org или onlyfriends.name).

# wget -q http://archive.debian.org/debian/pool/main/t/tiff/libtiff4_3.7.2-7_sparc.deb

# wget -q http://archive.debian.org/debian/pool/main/t/tiff/libtiff-tools_3.7.2-7_sparc.deb

# dpkg -i libtiff4_3.7.2-7_sparc.deb libtiff-tools_3.7.2-7_sparc.deb
Selecting previously deselected package libtiff4.
(Reading database ... 10152 files and directories currently installed.)
Unpacking libtiff4 (from libtiff4_3.7.2-7_sparc.deb) ...
Selecting previously deselected package libtiff-tools.
Unpacking libtiff-tools (from libtiff-tools_3.7.2-7_sparc.deb) ...
Setting up libtiff4 (3.7.2-7) ...
Setting up libtiff-tools (3.7.2-7) ...

# tiff2pdf -h
LIBTIFF, Version 3.7.2
Copyright (c) 1988-1996 Sam Leffler
Copyright (c) 1991-1996 Silicon Graphics, Inc.

usage:  tiff2pdf [options] input.tiff
options:
 -o: output to file name
 -j  compress with JPEG
 -z  compress with Zip/Deflate
 -q: compression quality
 -n  no compressed data passthrough
 -d  do not compress (decompress)
 -u: set distance unit, 'i' for inch, 'm' for centimeter
 -x: set x resolution default in dots per unit
 -y: set y resolution default in dots per unit
 -w: width in units
 -l: length in units
 -r: 'd' for resolution default, 'o' for resolution override
 -p: paper size, eg "letter", "legal", "A4"
 -f  set PDF "Fit Window" user preference
 -e: date, overrides image or current date/time default, YYYYMMDDHHMMSS
 -c: sets document creator, overrides image software default
 -a: sets document author, overrides image artist default
 -t: sets document title, overrides image document name default
 -s: sets document subject, overrides image image description default
 -k: sets document keywords
 -h  usage

Теперь всё готово к автоматизации. Для этого я написал quick and dirty скрипт:

#!/bin/bash

SCANDIR="/c/data/scan"

find $SCANDIR -mmin +1 -regex '.*\.[tT][iI][fF]+$' | while read IN; do
    OUT=`echo "$IN" | sed 's/[tT][iI][fF]\+$/pdf/'`
    [ ! -f "$OUT" ] && tiff2pdf -o "$OUT" -j "$IN" && rm "$IN"
done

Что происходит:

  1. Переменной $SCANDIR присваиваем путь, по которому сохраняются файлы TIFF с принтера.
  2. Находим по указанному пути все файлы, удовлетворяющие регулярному выражению (-regex), и с момента модификации которых прошло больше 1 минуты (-mmin). Задержка в 1 минуту сделана для того, чтобы принтер полностью успел сохранить файл на сервере. А регулярное выражение написано с той целью, чтобы можно было использовать папку на сервере как автоматический конвертор файлов из TIFF в PDF (приятный побочный бонус).
  3. Если подходящий файл найден, то присваиваем переменной $OUT новое имя для файла — меняем расширение с tif/tiff на pdf.
  4. Далее следует связка команд, где выполнение следующей зависит от успешного завершения предыдущей. Для начала проверяем, что файла $OUT не существует, после чего запускаем конвертацию, и если всё прошло успешно — удаляем оригинальный файл $IN.
  5. Если файлов несколько, то пункты 3 и 4 последовательно повторяются для каждого файла.

Осталось наладить автоматический запуск этого скрипта:

# echo "*/5 * * * * root /usr/bin/topdf" > /etc/cron.d/topdf

Здесь всё просто: «*/5» — интервал запуска скрипта, в данном случае каждые 5 минут, а «/usr/bin/topdf» — путь до скрипта. Собственно на этом всё, перезапуск демона crond не требуется.

UPD1 Опытным путём установлено, что штатное обновление RAIDiator не ломает схему.
UPD2 Для ReadyNAS 2120 смысл тот же. Пакеты для архитектуры armel можно взять с packages.debian.org.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *