metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-10-20 08:18 pm

Разработка под Линукс. Просто?

Вот ощутил, так сказать, на собственной шкуре чо такое разработка под Линукс.

Простая задача: собрать чужой проект, чтобы можно было отладить мою дотнет-часть, с ним взаимодействующую.

Проект состоит из аддона к rdesktop, который вытаскивает виртуальный канал с виндового терминального сервера в виде двух fifo и работающей с этими fifo проги на питоне.
У авторов вся последовательность сборки и запуска задокументирована. Там множество вуду-действий, типа "настроить правила для udev, чтобы пользователь мог видеть подключаемые устройства", но б-г с ним.

Значит, rdesktop собирается нормально. Зачем они его собирают - не знаю, но так написано. Аддон к rdesktop собирается тоже нормально. fifo делаются вручную. Затем надо запустить питоновую прогу, для чего они делают EXPORT PYTHONPATH=$PWD/src:$PYTHONPATH и затем запускают питон с именем проги. Этот этап уже не работает. Если запустить питон и сделать import sys и print sys.path - в путях нужный путь есть. strace тем не менее показывает что скрипт питон открывает без путей вообще.

Ладно, думаю, разберемся позже, запускаю с полным путем. И тут начинается. Во первых, требуется google.protobuf, в инструкции не упомянутый. Качаем. Собираем бинарник. Запускаем питоном setup.py, вроде инсталлируется. Запускаем. Начинает требовать питоновые модули, упомянутые в инструкции.
Первый модуль python-pyaudio. В репозитории нет. Ищем гуглом. Есть deb. Качаем, ставим.
Второй модуль python-pyinotify. В репозитории есть. Ставим.
Третий модуль python-pyspeex. Нету. Ищем. Качаем исходники. Пытаемся ставить. Требует pyrex (какой-то модуль для интеграции C и Python). Ищем в репозитории. Есть. Ставим. Тянет за собой питон 2.4 (текущий используемый - 2.5.2). Запускаем опять билд pyspeex - ебубух, "cannot assign float to short" и получается на выходе только файл speex.c с содержимым типа "#error не используйте этот файл, в нем жабы черви и змеи"
В общем, уже как бэ и поздно, и мозг уже не соображает - потом буду разбираться дальше, или же напишу авторам, чтобы сами собирали свой шрот и не компостировали мозг.

В итоге мы имеем несколько часов потраченных на билд только одного мелкого куска системы.
И пример к чему приводит любимая методика "слепить из <говнаповторно использовать наработки сообщества".

Кстати, прототип этой хрени, без питонов, на чистом С, собрался и условно "заработал". Но судя по исходному коду, авторам надо безжалостно отрывать жопу (полное отсутствие обработки ошибок). То что это прототип - не оправдание, нормальный программист физически не может писать код, не обрабатывающий все мыслимые и немыслимые ошибки.

Re: Reply to your comment...

[identity profile] beliashou.livejournal.com 2009-10-21 05:32 am (UTC)(link)
Ага. Типа подключение всех библиотек KDE только для того, что бы переводить числа в строковые числительные... Ага. Понимаю.

[identity profile] nicka-startcev.livejournal.com 2009-10-21 05:36 am (UTC)(link)
Противоположная религия тоже забавна: всё пишем сами, включая парсер командной строки. В результате, то падаем от незнакомых опций, то тащим десяточек своих библиотечек плюс рантайм плюс ещё какой каркас. Итого, в системе десяток похожих каркасов с разными и иногда несовместимыми глюками типа несовместимости флеш-плеер-аддона с суспендом/гибернейтом.

[identity profile] dmzlj.livejournal.com 2009-10-21 05:40 am (UTC)(link)
C питоном, боюсь, было бы не так. Мне, конечно, и в кошмаре не могло бы присниться разрабатывать на питоне под винду, но насколько я себе представляю, под виндой в плане питона совершенно таже история, что и под линуксом. Это у джавистов есть привычка класть в контроль версий даже сторонние jar-ы, а в питоне менталитет другой. Так удобного способа делать какие-нибудь бандлы пакетов, соответственно решение этого вопроса требует серьезной силы воли, которой не у всех есть в нужном количестве. А вот проблема волатильности окружения там, наоборот, в полный рост. Это было самым большим гимором всегда, пока мы использовали питон.

[identity profile] dmzlj.livejournal.com 2009-10-21 05:40 am (UTC)(link)
s/Так удобного способа делать какие-нибудь бандлы пакетов/Так как удобного способа делать какие-нибудь бандлы пакетов нет,/g

блин, гримаса редактирования и копи-паста.

[identity profile] dmzlj.livejournal.com 2009-10-21 05:43 am (UTC)(link)
вообще, задача поставщика сделать так, что бы пакет везде собирался путем

./configure
make


или лучше
make


Если для этого надо положить в репозитории сторонние пакеты - я бы это сделал. И линковал по большей части статически. Если бы поставлял продукт на коммерческой основе и в исходниках. Религии --- регилиями, а ответственность перед заказчиком --- ответственностью, знаете ли. Хотите линковать с чем-то другим --- делайте на свой страх и риск.

[identity profile] metaclass.livejournal.com 2009-10-21 05:50 am (UTC)(link)
Не, противоположная религия обычно:
а) использовать только проверенные библиотеки
б) стараться не ставить их в систему, чтобы не поломать юзеру другой софт и чтобы при установке другого софта не поломался наш.
в) писать самим то, что или является ядром системы, или сторонние реализации и их API страшное говно.

в моем случае на линуксе ВСЕ сделано наоборот. взяты либы, у которых на сайте прямо написано "дикая альфа", установлены они в питон, требуется штук 10 дополнительных пакетов, своего кода кот наплакал.

[identity profile] kiryl.livejournal.com 2009-10-21 06:04 am (UTC)(link)
Ещё раз: не пользуйтесь тем, в качестве чего есть большие сомнения. Я, например, виндой не пользуюсь ;)

Ой, ребе, и не гойворите!

[identity profile] a-sure.livejournal.com 2009-10-21 06:09 am (UTC)(link)

Тока что запустил некий супер-пупер софт для медицины. Наши тестят.
Он ащета на жабе писяный, но оторвать девелоперам хочется много что:
- зачем-то покоцали сам jboss, и ставить нужно только с их "редакцией"
- генерят ключи для LDAP так, что без ручного ввода пароля ldap (SERVCE !!!!) не стартует, т.е. всякие heartbeat и прочие HA фенечки ушли лесом
- процесс установки такой же - "танцы по красиво разложенным граблям"


Но поскольку оно у них под вендой такое же, я таки думаю, что лялих тут непричем - просто выросло новое поколение программистов. Бля...

[identity profile] spushnyakov.livejournal.com 2009-10-21 06:21 am (UTC)(link)
Ну давайте расскажите нам, как питоновские черви плодятся на благородной почве Windows....
И вся проблема в том, что черви Питона скрещиваются с червями разработчиков на Питоне и усугубляются генами фанатов "целевой ОС". И получается то что получается....

P.S. А есть еще продукты(!) на Huskel, Erlang и прочих "суперязыках" владение которыми несомненно повышает ЧСВ разработчика, но напрямую ведет к невозможности нормальной поддержки продукта, его развития и зачастую просто нормальной работы.

[identity profile] vp.livejournal.com 2009-10-21 06:32 am (UTC)(link)
Вот о чем и речь. Под Win в подобной постановке задачи для такого применения ни у кого в кошмарном бреду не появится идеи притянуть сюда за уши питон. А в линуксе это норма, потому что на другом писать не умеют, не модно, комьюнити не велит (нужное подчеркнуть). Короче, традиции изначально заточены на такие вот гроздья.

[identity profile] sheep2k.livejournal.com 2009-10-21 06:34 am (UTC)(link)
А вообще я тут с утра подумал и понял, что претензии к линуксу всё же есть.

Вот пример. Почти из реальной жизни :-)
Поставляем мы софт, скажем, на си и питоне и куче разных сторонних либах. Что мы делаем под виндой: складываем всё наше хозяйство в один пакет (архив) вместе с нашими либами, сторонними либами, с которыми надо собирать, паченым нами питоном (у нас было дело, только с руби) и всем-всем, что необходимо для правильной сборки нашего продукта.
Заказчик, согласно нашей доке, минимально правит конфиг, настраивает пути, если надо и гарантировано собирает наш продукт. Всё локально, ничего в системе не ломается, ничего искать в гугле и доставлять не надо. Красота, за исключением размера всего этого, но размер - это мелочи.

Как сделать такое под линуксом я себе представляю довольно смутно. Хотя, подозреваю, что тоже можно. Хотя это будет уже совсем не linux-way :-)

[identity profile] vp.livejournal.com 2009-10-21 06:35 am (UTC)(link)
Ну и что? Да пусть они хоть половину ОС себе в дистрибутив поставят. Главно чтобы это деплоилось ровно, штатно, везде и без бубна. Тут надо определиться - или работа ради работы, или работа ради результата.

[identity profile] vp.livejournal.com 2009-10-21 06:36 am (UTC)(link)
Речь о том что это разработка профессионалов, которые делали это за деньги для конкретного заказчика. У них не было сомнения в том, что они не знают, что делают.

[identity profile] vp.livejournal.com 2009-10-21 06:38 am (UTC)(link)
Вот о чем и речь!

Как сделать такое под линуксом?

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-10-21 07:20 am (UTC)(link)
Ровно так же.
Нужно перед передачей заказчику попробовать поставить всё по своей же инструкции на чистую систему. :)
И лучше, если это будут делать не разрабы а кто-то другой.

Сразу всплывёт какие пакеты недавно ставили и что пропатчивали.
После нескольких итераций - когда по имеющейся инструкции систему ставит первая отловленная уборщица - можно отправлять. :)

[identity profile] avr-forever.livejournal.com 2009-10-21 07:21 am (UTC)(link)
ребе, это всё не ляликс, это пытонь виноват
у меня считанные программы на питоне работали сразу без пинков. то оно не с тем питоном запустится (в системе уже давно default 2.5, а оно ожидает 2.4, а в шебанге прописано просто /usr/bin/python), то запустится, но не заимпортирует модуль (да, пути все есть!), то упадёт где-то на середине
а всё от того, что народ прототипирует на питоне, а потом как к прототипу к своей программе и относится. не отлавливают баги должным образом, не обрабатывают исключения и тэдэ.

[identity profile] fas-tm.livejournal.com 2009-10-21 07:26 am (UTC)(link)
Я для Unix делаю по другому поставку на комплекс заказчика.
Собираю готовую рабочую систему со всеми плюшками... тещу ее.
Потом снимаю полный дамп и заливаю его на LiveDVD.
Туда же пихаю скрипт который разворачивает дамп системы на голые веники сервака.
Впихнуть LiveCD, запустить скрипт, поправить конфиги значительно более проще чем рассказывать как собирать и отдавать на волю случая.

[identity profile] g-rub.livejournal.com 2009-10-21 07:43 am (UTC)(link)
Ребе, описанная ситуация -- откровенно кривая халтура, которую разработчики впихнули заказчику.

Про то, что все это якобы "поощряется архитектурой ОС" -- исключительно домыслы.

Если нужно иметь кучки заведомого говна в изолированном окружении, не ломающие систему, то нужно их и разрабатывать так, чтобы все складывалось в /opt/govnosoft, и все библиотеки смотрело и брало исключительно оттуда. Если говно сложено правильно и в полном наборе, то Linux даже позволит запустить его в chroot jail, чтоб уж точно ничего не поломалось.

Тут вся проблема в том, что разработчики предпочли пойти путем, которым ходить откровенно не умеют. И убедили заказчика в собственной компетенции.

Архитектура не виновата.

[identity profile] g-rub.livejournal.com 2009-10-21 07:45 am (UTC)(link)
См. мой коммент ниже. Они могли упаковать свою кучу говна, чтобы она работала ровно, штатно и без бубна.

Они этого не сделали, т.к. переоценили свою квалификацию.

[identity profile] metaclass.livejournal.com 2009-10-21 07:57 am (UTC)(link)
Haskell и Erlang это же лютый фетиш, круче даже чем линукс. Для пользования линуксом не нужно знать теорию категорий и лямбда-исчисление :)

[identity profile] metaclass.livejournal.com 2009-10-21 08:02 am (UTC)(link)
Ясно, придется отрывать им жопу и итеративно вправлять мозги.

[identity profile] g-rub.livejournal.com 2009-10-21 08:42 am (UTC)(link)
Единственное уточнение: если решите трахать им мозг в сторону chroot (http://ru.wikipedia.org/wiki/Chroot), то лучше предварительно составить о нем общее представление.

Так как между chroot jail и простой добровольной работой какашек в пределах /opt/govnosoft есть некоторая разница. Как в организации кода, так и в действиях админа на целевой системе.

Re: Reply to your comment...

[identity profile] beliashou.livejournal.com 2009-10-21 08:43 am (UTC)(link)
Вот ещё бы к этому добавить возможность установления всех пакетов через apt-get install ...

Re: Как сделать такое под линуксом?

[identity profile] sheep2k.livejournal.com 2009-10-21 09:16 am (UTC)(link)
Перед передачей заказчику всё тестируется на "голой" либо виртуальной машине, либо на нормальной, если таковая имеется, это само собой.
Кстати этим часто пренебрегают многие разработчики, а потом и всплывает, ой, а OpenSSH оказывается в системе у заказчика не установлен... и т.д. :-)

Речь о том, что я слабо представляю, как в линуксе может быть две разных версии libc6 к примеру. Бывает, что софт из официального репозитория начинает конфликтовать с версиями библиотек. Впрочем, скорее всего это решается, тут лично у меня просто пробел в знаниях.

[identity profile] sheep2k.livejournal.com 2009-10-21 09:36 am (UTC)(link)
Постулат "все можно слепить из чего-то" - называется интеграция :-)

Я со старой работы уволился именно из-за того, что обилие батничков, экзешничков, подпорочек и прочего мусора написанного на 5-6 разных языках меня повергало в глухое отчаяние. Хотя и называлось "интеграция".

Page 2 of 3