Обновление 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 комментариев: |высказаться!| RSS-лента дискуссии.|
Tigro комментирует...

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

virens комментирует...

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

Tigro комментирует...

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

GQ комментирует...

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

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

virens комментирует...

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

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

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

Ivan A-R комментирует...

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

Tigro комментирует...

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

Igor комментирует...

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

virens комментирует...

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

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

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

kmmbvnr комментирует...

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

GQ комментирует...

Значит как я сбэкпортил этот пакет:
#вытаскиваем исходники
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.

GQ комментирует...

Получайте.

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

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

virens комментирует...

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

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

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

GQ комментирует...

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

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

Анонимный комментирует...

У меня была несколько другая ситуация.
Есть фотоаппарат 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, да и правильней кажется.)

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

virens комментирует...

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

Анонимный комментирует...

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

Dormestmass комментирует...

Вопрос к автору собственно по самому dcraw.

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

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

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

dcraw -v -o1 -T

virens комментирует...

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.

Dormestmass комментирует...

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

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.