Билд-ферма на CentOS (Опыт и вопросы)

Cent OS, Scientific Linux

Модераторы: broom, Модераторы разделов

zenitur
Сообщения: 594
Статус: Одмин
ОС: openSuSE 10.2

Билд-ферма на CentOS

Сообщение zenitur » 06.05.2016 04:34

Всем привет!

Введение

Задался я вопросом: почему бинари для 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! И несколько вопросов умным людям
А йа Ктулху! А йа - Медве-ед! А где Путин? Путина не-ет! Если встретишь - зохавай моск! А вернёшься - скажи ПРЕВЕД! Превед, Ктулху! Превед, Медвед!
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1489
ОС: Fedora 30

Re: Билд-ферма на CentOS

Сообщение Vascom » 06.05.2016 10:20

И зачем это тут?
Линукс как раз и прелестен динамической линковкой и открытыми исходниками.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15749
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Билд-ферма на CentOS

Сообщение Bizdelnick » 06.05.2016 10:29

Дай виндузятнику нормальную ОС — он и из неё помойку сделает.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

zenitur
Сообщения: 594
Статус: Одмин
ОС: openSuSE 10.2

Re: Билд-ферма на CentOS

Сообщение zenitur » 08.05.2016 05:00

Vascom писал(а):
06.05.2016 10:20
И зачем это тут?
Линукс как раз и прелестен динамической линковкой и открытыми исходниками.

Ну вот смотри, допустим есть 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-совместимым репо с популярным десктопным софтом, чтобы такой проблемы не было.
А йа Ктулху! А йа - Медве-ед! А где Путин? Путина не-ет! Если встретишь - зохавай моск! А вернёшься - скажи ПРЕВЕД! Превед, Ктулху! Превед, Медвед!
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Билд-ферма на CentOS

Сообщение Olej » 08.05.2016 10:18

zenitur писал(а):
06.05.2016 04:34
Задался я вопросом: почему бинари для Windows работают на ВСЕХ виндах, а бинари для Linux не то чтобы на линуксах 2-3 летней давности - а вовсе в пределах одного релиза?

Что за глупость написана!? :console:
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15749
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Билд-ферма на CentOS

Сообщение Bizdelnick » 08.05.2016 10:53

zenitur писал(а):
08.05.2016 05:00
Получается, мы имеем 300 пакетов, сделанных из ОДНОГО tar.gz с исходниками? Да ну, бред.

Нет, это не бред. В C изначально заложена переносимость на уровне исходного кода, но не бинарников. Это же относится к большинству компилируемых в нативный код ЯП за исключением тех, которые в принципе не переносимы. Если Вы любитель пописать против ветра, то учтите, что это будет иметь ряд неприятных последствий.
Из очевидного:
  • Как ни старайтесь, невозможно без обстоятельного тестирования предсказать, будет ли бинарь полноценно работать в том или ином дистрибутиве.
  • Невозможно обновить библиотеку отдельно от программы, если в первой исправлен баг или вовсе уязвимость.
  • Многократно увеличивается место, требующееся для установки программы.

P. S. Кстати, в винде бинари (по крайней мере нативные, всякие .NET, для работы которых нужно поставить фреймворк размером с ОС, в расчёт не берём) тоже работают не во всех версиях. Попробуйте запустить какую-нибудь программу (сложнее hello world) из 1990-х в актуальных виндах, а лучше — свежую программу в какой-нибудь win2k (или даже xp).
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Билд-ферма на CentOS

Сообщение Olej » 08.05.2016 11:25

zenitur писал(а):
08.05.2016 05:00
От теории к практике. У меня в Ubuntu 11.04 прекрасно работала игра, а в Ubuntu 16.04 я решил её перепройти, и под вайном она не запустилась. И хрен я установлю Wine от Ubuntu 11.04 - что из бинаря, что из исходников! Зато я могу взять Crossover 11.3, и он прекрасно встанет и запустится! Потому что Crossover это тот же Wine, только собранный под LSB.

От теории к практике! :drinks:
Всё, что касается виндаунс-помойки, их приложений, сред исполнение .exe под Linux, всякие Wine и прочая вся дрянь подобная ... - это всё к серьёзным вопросам изготовления, запуска, оптимизации, способа использования и т.д. программ в Linux и любых других POSIX-системах не относится.
И вообще не подлежит обсуждению.
Это проблемы виндаунов, и пусть они их разрешают на свой страх и риск ... и я скорблю вместе с ними. :drinks:

P.S. А "билд-ферма" ...? - так это GCC. :laugh:
Спасибо сказали: