Всем привет!
Введение
Задался я вопросом: почему бинари для Windows работают на ВСЕХ виндах, а бинари для Linux не то чтобы на линуксах 2-3 летней давности - а вовсе в пределах одного релиза? Задался и нашёл ответ. Способ сделать бинарник универсальным есть. Нужно только очень захотеть.
Показателен опыт Icculus. Когда он ушёл из Loki Games, он портировал несколько игр и на 3 года куда-то делся. В 2010-м произошёл триумфальный возврат: Humble Bundle, DRM-free, Windows, Mac OS X, Linux!
Эта идея мне страшно понравилась!
Когда начался Steam для Linux, Icculus бросил идею собирать "по фен-шую" и стал собирать под убунту. Ubuntu 12.04 стала стандартом де-факто для сборки игр. И это неплохо: в эпоху Steam, собирать несвободные игры стал не один лишь Icculus, а целая толпа людей. Им сложности не нужны.
Первый опыт
Ну что ж, установил я CentOS 5 в ритуалку. Обновил. Попробовал собрать что-нибудь несложное - Neko Mario.
1). Зависимость одна - libSDL. На официальном сайте внезапно нашлись RPM-ки! SDL, SDL Mixer, SDL Image, SDL ttf и SDL_gfx. Выяснилось, что 32-битные RPM-ки собраны в CentOS 5, а 64-битные - в CentOS 6 - в связи с чем 64-битные выдают ошибку "хочу GLIBC 2.12, а у вас 2.4". Пришлось пересобрать.
В процессе пересборки то ли image, то ли gfx слинковался с libpng.so.3 вместо libpng12.so.0. Это был первый "подводный камень", с которым я столкнулся. Решилось пересборкой RPM-ки libpng без флага --compat
А ещё оказалось, что libSDL с сайта невероятно гибок! ldd выдаёт отсутствие зависимостей от иксовых либ, хотя зависимость есть! Просто используется не static и не shared линковка, а dlopen(). Типа "есть у тебя иксы в системе? Нет? Ну и пофиг - через directFB отрендерю". То же самое и со звуком: поддерживается всё: OSS, ALSA, ESD, ARTS и PULSEAUDIO. Но если в системе нет каких-то из этих либ, то SDL всё равно работает! Я не преминул возможностью пересобрать 32-битную RPM-ку, которую собрали без пульсы.
Моя сборка Neko Mario
Пробуем что-нибудь посложнее
Эмулятор PCSX2 раньше работал в линуксе этих лет. Осталось только отследить коммиты, ломающие совместимость, и откатить их.
(о том, что откатывал, допишу позже)
Понадобилось скачать: самый новый cmake, NVIDIA Cg, wxWidgets, SoundTouch и GLEW. И SDL, но он уже есть.
Официальные сборки cmake работают в CentOS 5 - использовал их. Для поиска готовых пакетов с SoundTouch и wxWidgets я воспользовался сервисом http://pkgs.org/. Например, wxWidgets нашёлся в репозитории EPEL - почти официальном. Для NVIDIA Cg есть RPM-ка. В итоге собрал сам только GLEW.
PCSX2 1.4.0 хочет минимум GCC 4.8. На моё счастье, существует Red Hat Toolset - GCC 4.8 для CentOS 5. Причём он волшебный: готовые бинари не просят самый новый C++ Runtime в виде libstdc++.so.6, который вы наверняка видели в архивах с играми.
В общем, основная работа была с откатом назад коммитов, повышающих требования к GTK, и всё. Кроме того, в один момент я пошёл не туда, и чтобы получить libEGL.so, обновил Mesa с 6.5.1 (системный) до 6.5.3. Но потом нашёл ключ cmake, отключающий эту зависимость, и понял что потратил время зря.
Моя сборка PCSX2 1.4.0
В следующей части: как я патчил PCSX2? Возможно ли использовать CentOS 5 не только в качестве билд-фермы? Мега-сложность: Qt 5. Архисложность: GTK 3, wxGTK 3, и поддержка Wayland! И несколько вопросов умным людям
Билд-ферма на CentOS (Опыт и вопросы)
Модератор: Модераторы разделов
Билд-ферма на CentOS
А йа Ктулху! А йа - Медве-ед! А где Путин? Путина не-ет! Если встретишь - зохавай моск! А вернёшься - скажи ПРЕВЕД! Превед, Ктулху! Превед, Медвед!
Re: Билд-ферма на CentOS
И зачем это тут?
Линукс как раз и прелестен динамической линковкой и открытыми исходниками.
Линукс как раз и прелестен динамической линковкой и открытыми исходниками.
Спасибо сказали:
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Билд-ферма на CentOS
Дай виндузятнику нормальную ОС — он и из неё помойку сделает.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Билд-ферма на CentOS
Ну вот смотри, допустим есть 15 самых ходовых дистров. У них вышло по 10 версий. И наконец, 2 архитектуры CPU, под которые собирают бинарники.
И вот есть например прога, которой все пользуются, но которая давно не обновлялась, с не совсем стандартными зависимостями: ffmpeg, OpenCV, tbb. Бинарь для дистра XXX 10 не запускается в XXX 9, потому что GLIBC, и наоборот, потому что сменились мажорные либы ffmpeg. В других дистрах не запускается тем более.
Получается, мы имеем 300 пакетов, сделанных из ОДНОГО tar.gz с исходниками? Да ну, бред. Если для тебя это достоинство, то это очень странное достоинство.
---
От теории к практике. У меня в Ubuntu 11.04 прекрасно работала игра, а в Ubuntu 16.04 я решил её перепройти, и под вайном она не запустилась. И хрен я установлю Wine от Ubuntu 11.04 - что из бинаря, что из исходников! Зато я могу взять Crossover 11.3, и он прекрасно встанет и запустится! Потому что Crossover это тот же Wine, только собранный под LSB.
И это. Все ноют "да, дистр многообещающий и я бы попробовал, если бы не репо из 4000 позиций". Тот же CentOS 7 - многие ли готовы перейти на него прямо сейчас? При всех его достоинствах! Я работаю над LSB-совместимым репо с популярным десктопным софтом, чтобы такой проблемы не было.
А йа Ктулху! А йа - Медве-ед! А где Путин? Путина не-ет! Если встретишь - зохавай моск! А вернёшься - скажи ПРЕВЕД! Превед, Ктулху! Превед, Медвед!
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Билд-ферма на CentOS
Нет, это не бред. В C изначально заложена переносимость на уровне исходного кода, но не бинарников. Это же относится к большинству компилируемых в нативный код ЯП за исключением тех, которые в принципе не переносимы. Если Вы любитель пописать против ветра, то учтите, что это будет иметь ряд неприятных последствий.
Из очевидного:
- Как ни старайтесь, невозможно без обстоятельного тестирования предсказать, будет ли бинарь полноценно работать в том или ином дистрибутиве.
- Невозможно обновить библиотеку отдельно от программы, если в первой исправлен баг или вовсе уязвимость.
- Многократно увеличивается место, требующееся для установки программы.
P. S. Кстати, в винде бинари (по крайней мере нативные, всякие .NET, для работы которых нужно поставить фреймворк размером с ОС, в расчёт не берём) тоже работают не во всех версиях. Попробуйте запустить какую-нибудь программу (сложнее hello world) из 1990-х в актуальных виндах, а лучше — свежую программу в какой-нибудь win2k (или даже xp).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Билд-ферма на CentOS
zenitur писал(а): ↑08.05.2016 05:00От теории к практике. У меня в Ubuntu 11.04 прекрасно работала игра, а в Ubuntu 16.04 я решил её перепройти, и под вайном она не запустилась. И хрен я установлю Wine от Ubuntu 11.04 - что из бинаря, что из исходников! Зато я могу взять Crossover 11.3, и он прекрасно встанет и запустится! Потому что Crossover это тот же Wine, только собранный под LSB.
От теории к практике!
Всё, что касается виндаунс-помойки, их приложений, сред исполнение .exe под Linux, всякие Wine и прочая вся дрянь подобная ... - это всё к серьёзным вопросам изготовления, запуска, оптимизации, способа использования и т.д. программ в Linux и любых других POSIX-системах не относится.
И вообще не подлежит обсуждению.
Это проблемы виндаунов, и пусть они их разрешают на свой страх и риск ... и я скорблю вместе с ними.
P.S. А "билд-ферма" ...? - так это GCC.