3/14/2007

Обновление dcraw в Дебиане

В дистрибутиве есть dcraw, но старый. В backports новой версии нет, из Etch ставить - просит снести и обновить несколько системных пакетов. Ниже - маленькая заметка о сборке dcraw. Не debian way, но что поделать....

Против Истинного Пути Дебиан
При попытке установить новую версию из пакетов получил от APT такое вот предложение:
# apt-get install dcraw
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Будут установлены следующие дополнительные пакеты:
libc6 libc6-dev locales tzdata
Настойчиво рекомендуемые пакеты:
gphoto2 glibc-doc manpages-dev
Пакеты, которые будут УДАЛЕНЫ:
base-config initrd-tools kernel-image-2.6.8-2-386
НОВЫЕ пакеты, которые будут установлены:
tzdata
Пакеты, которые будут обновлены:
dcraw libc6 libc6-dev locales
обновлено 4, установлено 1 новых пакетов, для удаления отмечено 3 пакетов, и 588 пакетов не обновлено.
Необходимо скачать 11,9MБ архивов.
После распаковки объем занятого дискового пространства уменьшится на 41,1MB.
Хотите продолжить? [Д/н] n
Как говорил почтальон Печкин: "и не надо меня из фоторужья щёлкать: я, может, только жить начинаю - на пенсию перехожу!" :-)
Поэтому скачал dcraw.c с сайта Дэйва Коффина и попытался собрать. На сайте есть несколько рекомендаций относительно сборки - для не особо искушённых. При попытке собрать так:
gcc -o dcraw -O4 dcraw.c -lm -ljpeg -llcms
посыпалась ругань вида:
dcraw.c:45:21: jpeglib.h: No such file or directory
dcraw.c:48:18: lcms.h: No such file or directory
dcraw.c:1920: error: syntax error before "fill_input_buffer"
dcraw.c:1920: error: syntax error before "cinfo"
dcraw.c: In function `fill_input_buffer':
dcraw.c:1927: error: `cinfo' undeclared (first use in this function)
dcraw.c:1927: error: (Each undeclared identifier is reported only once
dcraw.c:1927: error: for each function it appears in.)
dcraw.c:1929: error: `TRUE' undeclared (first use in this function)
dcraw.c: In function `kodak_jpeg_load_raw':
dcraw.c:1934: error: storage size of `cinfo' isn't known
dcraw.c:1935: error: storage size of `jerr' isn't known
dcraw.c:1936: error: `JSAMPARRAY' undeclared (first use in this function)
dcraw.c:1936: error: syntax error before "buf"
dcraw.c:1937: error: `pixel' undeclared (first use in this function)
dcraw.c:1937: error: subscripted value is neither array nor pointer
dcraw.c:1944: error: `TRUE' undeclared (first use in this function)
dcraw.c:1953: error: `buf' undeclared (first use in this function)
dcraw.c:1954: error: `j_common_ptr' undeclared (first use in this function)
dcraw.c:1954: error: `JPOOL_IMAGE' undeclared (first use in this function)
dcraw.c:1959: error: syntax error before ')' token
dcraw.c:1959: error: syntax error before ')' token
dcraw.c: In function `apply_profile':
dcraw.c:6746: error: `cmsHPROFILE' undeclared (first use in this function)
dcraw.c:6746: error: syntax error before "hInProfile"
dcraw.c:6747: error: `cmsHTRANSFORM' undeclared (first use in this function)
dcraw.c:6751: error: `LCMS_ERROR_SHOW' undeclared (first use in this function)
dcraw.c:6753: error: `hInProfile' undeclared (first use in this function)
dcraw.c:6765: error: `hOutProfile' undeclared (first use in this function)
dcraw.c:6782: error: `hTransform' undeclared (first use in this function)
dcraw.c:6782: error: `TYPE_RGBA_16' undeclared (first use in this function)
dcraw.c:6783: error: `INTENT_PERCEPTUAL' undeclared (first use in this function)

Сборка с параметрами
gcc -o dcraw -O4 dcraw.c -lm -DNO_JPEG -DNO_LCMS
прошла куда успешнее: всё собралось и в том же каталоге появился dcraw. После этого я скопировал его в /usr/bin от sudo и теперь в системе стоит последняя версия этого замечательного конвертора raw-формата.

20 комментариев:

  1. Но ведь это же не правильный подход так пакеты собирать.

    ОтветитьУдалить
  2. А что делать? Сносить базовый пакет и ставить этчевский, в котором к том уже release-critical bug? Это лучше?
    За это я часто ненавижу пакетную систему...

    ОтветитьУдалить
  3. Лучше этот пакет пересобрать, пофиксив эти страшные баги. Это будет правильный подход.

    ОтветитьУдалить
  4. Правильно - сбэкпортить пакет самому.
    Тем более, что он ни от чего не зависит:
    делается 3мя командами.

    Получается вот такая штука:
    http://vice.gq.net.ru/dcraw_8.39-1~backport_i386.deb

    ОтветитьУдалить
  5. 2 Tigro said...
    Лучше этот пакет пересобрать, пофиксив эти страшные баги.
    Баги фиксить не умею :-) Я не мейнтейнер, в конце концов. Мне просто программку поставвить...

    2 GQ
    Правильно - сбэкпортить пакет самому.
    Да, но мне вот с камерой надо было работать. Меня вообще добивают такие зависимости - боже мой, ну соберите пакет пользовательской программы статически, неужели для этого ведро мозгов нужно!?

    Если не сильно напрягает - киньте в меня этими тремя командами. :-) Собирал в пакет только Mplayer, на остальное пока времени нет. А dcraw был нужен позарез - не до манов было...

    ОтветитьУдалить
  6. Кстати, мне тоже часто леняво собирать по взрослому. Но я обычно кидаю либо в /usr/local/bin либо в ~/bin/

    ОтветитьУдалить
  7. Возникла у меня сегодня идея написать большую статью о том как собирать DEB/RPM пакеты. На выходных займусь.

    ОтветитьУдалить
  8. "За это я часто ненавижу пакетную систему..."
    дополнение: в Debian =)
    В полупакетных дистрибутивах (ArchLinux, Slackware) такого нет...

    ОтветитьУдалить
  9. 2 Tigro
    Возникла у меня сегодня идея написать большую статью о том как собирать DEB/RPM пакеты.
    Буду хлопать в ладоши стоя :-)Без шуток, очень полезный был бы пост. Не всё же мне маны читать ;-)

    2 Igor
    "За это я часто ненавижу пакетную систему..."
    дополнение: в Debian =)
    В полупакетных дистрибутивах (ArchLinux, Slackware) такого нет...

    Нет, слаку нам не надо :-) Патрик нам не бог. Лучше пару программ из исходников соберу.

    ОтветитьУдалить
  10. я вместо прямого копирования воспользовался бы xstow

    ОтветитьУдалить
  11. Значит как я сбэкпортил этот пакет:
    #вытаскиваем исходники
    apt-get source dcraw
    cd dcraw-8.39-1
    #создаем новую версию отличающуюся ~backport на конце
    vi debian/changelog
    #или что проще dch -i

    #собираем сурцовый пакет
    dpkg-buildpackage -S -rfakeroot

    #собираем бинарный относительно саржа
    cd ..
    pbuild --dist sarge dcraw_8.39-1~backport.dsc

    pbuild - моя обертка вокруг pbuilder
    вместо этого можно просто сразу собрать пакет на текущей системе
    dpkg-buildpackage -rfakeroot
    просто у меня стоит etch и если я буду собирать бинарный пакет на своей системе - то получим зависимости от etch

    Меня вообще добивают такие зависимости - боже мой, ну соберите пакет пользовательской программы статически, неужели для этого ведро мозгов нужно!?
    А вот это крайне неправильно.
    Хотя бы потому, что с libc нельзя линковаться статически, иначе это приведет к серьезным проблемам у людей, которые используют отличный от используемого при сборке nsswitch

    PS На самом деле при сборке этого пакета пришлось поправить руками еще 2 файла: в debian/control было указано, что для сборки нужет debhelper версии > 5 а вполне хватает саржевского 4счем-то. и в debian/compat понизить аналогично "уровень совместимости" с 5 до 4.

    Щас выложу у себя в блоге скриптик pbuild.

    ОтветитьУдалить
  12. Получайте.

    http://gq.net.ru/2007/03/16/building-deb-packages/

    На самом деле есть куча таких небольших debian-tricks которые знаю и которыми хочу поделиться, но черт возьми, сколько времени занимает набрать статью и разметить ее нормально. Кошмар.

    ОтветитьУдалить
  13. 2 GQ
    Значит как я сбэкпортил этот пакет:
    Спасибо. Но знаете, когда у вас за спиной стоят люди и говорят "Миш, ну как там с dcraw" - не до этого. И вообще, часто бесит, что ради установки какой-то маленькой утилиты надо полсистемы обновить. Вот ставил себе Skype - и что? dpkg -i и без проблем...

    PS На самом деле при сборке этого пакета пришлось поправить руками еще 2 файла
    Во-во-во, замечательно... через 10 минут съёмка эксперимента, а мне руками пакетные скрипты править...

    Давно читал у Яна Мёрдока на блоге статью "Software installation in Linux: today it sucks..."
    Только теперь её прочувствовал :-)

    ОтветитьУдалить
  14. Во-во-во, замечательно... через 10 минут съёмка эксперимента, а мне руками пакетные скрипты править...
    Это все равно быстрее, чем искать, откуда скачать исходники апстрима %)

    Кстати Ian читается как Иан. Иначе бы Дебиан назывался бы Дебьян %)

    ОтветитьУдалить
  15. У меня была несколько другая ситуация.
    Есть фотоаппарат Canon PowerShot A610 с неофициальной прошивкой, позволяющей вытянуть из него RAW и есть Debian Etch. Старый dcraw 8.39-1 из репозитария ещё не умел работать с A610.
    Собирать из исходников полагаю некошерным, а собирать пакеты не умею. По-хорошему надо бы научиться (благо даже повод есть), но было очень лениво. Оказалось, что в /usr/share/doc/dcraw/examples/ присутствовал скрипт getsource.
    Я его скопировал в /tmp, снёс старый dcraw с потрохами после чего в этом /tmp под рутом запустил getsource.
    getsource сам скачал из Инета последнюю версию, забрал apt-get'ом сырцы (чтобы было откуда брать патчи), сам всё пропатчил и создал пакет dcraw_8.69-1_i386.deb.

    Сей пакет был засунут в отдельный локальный репозитарий после чего установлен посредством aptitude. (Ну это мне привычней как-то, чем dpkg -i, да и правильней кажется.)

    Не знаю, подойдёт ли такое для бекпортов, но тоже -- простой путь, если нет времени (или лениво) разбираться со сборкой пакетов.

    ОтветитьУдалить
  16. 2 Анонимный
    У меня была несколько другая ситуация.
    Ситуация, насколько я понял, успешно разрешилась? :-) Да, и в бэкпортсах, и в дистрибутиве устаревшая версия. Мне тоже было лень, я плюнул на дебиан-вей и собрал из сырцов, грубо затерев старый бинарник. Работает и каши не просит - у меня тоже был исключительный случай.

    ОтветитьУдалить
  17. Ситуация, насколько я понял, успешно разрешилась?
    Да, я просто описал, как я решил для себя аналогичную проблему.
    И не нужно шаманить с параметрами при сборке: скрипт, входящий в комплект к dcraw -- сам всё сделает как надо. Его нужно просто тупо запустить.

    ОтветитьУдалить
  18. Вопрос к автору собственно по самому dcraw.

    Используете ли Вы его для обработки цифровых фотографий, и если да, то каковы сравнения с Виндовыми конверторами, например с Adobe Camera Raw?

    Просто вчера купил цифромыльницу с RAW, ради интереса решил испробовать dcraw. От результата чуть не упал в обморок, похоже что ни sharp, ни noise reduction в dcraw нет напрочь?

    P.S. запускал конвертор с параметрами практически по умолчанию:

    dcraw -v -o1 -T

    ОтветитьУдалить
  19. 2 Dormestmass пишет...
    Используете ли Вы его для обработки цифровых фотографий
    Конечно использую, раз пишу :-)
    Для обработки RAW-файлов с оптической установки dcraw незаменим. Для художественной обработки есть UFraw - может быть в виде плагина к гимпу. Там ползунки и кнопочки, а тут только конвертер. И это очень правильно.

    каковы сравнения с Виндовыми конверторами, например с Adobe Camera Raw?
    Все виндовые конверторы сливают по полной программе dcraw как по функционалу, так и по количеству поддерживаемых камер. Хвалёный Adobe Camera Raw не смог открыть RAW-файл моей Casio QV4000, в то время как dcraw справляется с задачей на ура.

    От результата чуть не упал в обморок, похоже что ни sharp, ни noise reduction в dcraw нет напрочь?
    Noise reduction там есть, на вейвлет-алгоритме. Поднятием резкости должен заниматься графический редактор.

    Автор программы, Дэйв Коффин, твёрдо держится UNIX-way - программа должна делать одну вещь и очень хорошо. И это очень правильно: избавляет от комбайнов типа Nero, который умеет всё, кроме прожигания дисков.

    Короче: dcraw это мощный конвертор, но консольный. К нему есть графические оболочки - типа UFRaw. Результат очень хороший.

    запускал конвертор с параметрами практически по умолчанию: dcraw -v -o1 -T
    А чего ж вы хотели? Он поставил баланс белого, выданный камерой (если он записан - иначе автоматический). 8-битный вывод в TIFF...

    DCRAW в консольном виде больше подходит для научных применений - собственно, за это мы его и любим :-)

    Фотографам лучше пользоваться UFRaw.

    ОтветитьУдалить
  20. Просто огромнейшее спасибо за информацию!
    Будем посмотреть на UFraw :)

    ОтветитьУдалить