Внимание! Это продолжение предыдущей статьи, хотя для понимания текущего материала не обязательно вникать в прошлую часть. Для краткой справки: в прошлой части был переработан и доработан исходный код проекта Installer-SH. Суть проделанной работы заключалась не в погоне за новыми функциями, а в устранении ошибок и закреплении уже существующего функционала.
Переработанная версия Installer-SH 2.8 пока ещё не выпущена окончательно, потому что ещё не проведено всестороннее тестирование в разнообразных условиях. Почему для тестирования я выделил аж целую статью? Да потому, что Installer-SH настолько технически развит, что может понадобиться не одна, а даже две статьи только для тестирования. Надеюсь, я уложусь в пределы одной статьи.
Прежде всего, мне нужно найти подходящего кандидата для экспериментов. Я бы мог устанавливать непосредственно сам Installer-SH в разных операционных системах и таким образом проводить тестирование на разных платформах и архитектурах. Но это показалось мне слишком скучным.
Можно было продолжить эксперименты с игрой «2048»: скомпилировать под 32-разрядные операционные системы исполняемые файлы, потому что в официальных репозиториях доступна только 64-битная версия игры, да ещё и с зависимостями от libc 2.34, что сразу ставит крест на любых системах старее 2021 года. Ещё нашлась Flatpak-версия игры, но там совсем всё плохо.
Проблема в том, что Flatpak — крайне несостоятельный формат распространения софта, поэтому невозможно скачать автономный установочный пакет с игрой для развёртывания где захочу я, а не где разрешат мне. Более того, хоть репозиторий Flatpak и заявляет размер скачивания всего около трёх мегабайт, в реальности же придётся установить гигабайты зависимостей ради такой простенькой игры. И этот нефункциональный, лукавый, перегруженный и неудобный ужас, только усугубляющий давние проблемы пакетных менеджеров, разработчики Flatpak официально называют будущим распространения программного обеспечения...
Впрочем, если подумать, у меня уже есть мультиплатформенная версия игры «2048» в самодостаточном формате Installer-SH. Да, версия инсталлера уже старая, но она есть и отлично работает, в отличие от всяких репозиториев Flatpak. С одной стороны, не хотелось бы плодить лишние установочные пакеты одной и той же игры, но, с другой стороны, там игра скомпилирована только для 64-битных ОС.
К сожалению, у меня нет ARM-платформы для сборки и тестирования нового, ещё не созданного пакета. Да и под «Эльбрус» было бы интересно собрать что-нибудь. Но, увы, эти платформы мне пока недоступны, так что будем работать с тем, что есть.
У меня насобралось довольно много всяких дистрибутивов Linux для тестирования действительно удобного и рабочего метода распространения софта под названием Installer-SH. Там и Debian в чистом виде, и Fedora, и Arch, и Gentoo, и всякого прочего полно.
|
|
|
|
До кучи ещё скачаю несколько других дистрибутивов FreeBSD помимо GhostBSD. Хотя не уверен, что они будут пригодны для использования, ибо даже ранние версии GhostBSD были крайне поломанными и кривыми. А тут мы имеем дело с одним заброшенным дистрибутивом и одним в виде образа файловой системы. Хотя, учитывая дату выпуска последних версий дистрибутивов и отсутствие какой-либо активности, оба можно назвать заброшенными.
Для интереса запустил 32-битную NomadBSD, а туда засунул старый установочный пакет с игрой, предназначенный для 64-битных операционных систем. Я буквально совершаю глупость, используя старый пакет, не предназначенный для архитектуры операционной системы. Разумеется, установилось неправильно, так как старая версия инсталлера ещё не была адаптирована для работы с разными архитектурами. Но даже если бы всё установилось правильно, ничего не запустилось бы, потому что исполняемые файлы игры скомпилированы для 64-битных операционных систем.
|
|
|
Главная проблема не в том, что старый пакет ожидаемо плохо отработал, а в том, что в дистрибутиве отсутствует базовый компилятор GCC. Так и хочется десятиэтажным матерным словом обнести разработчиков дистрибутивов, которые не заботятся о том, чтобы из коробки работал компилятор GCC. Казалось бы, установи несчастный компилятор и забудь! Но вот проблема: 32-битные репозитории FreeBSD 14 уже мертвы.
Как пользователь, я не могу достать установочный пакет с компилятором GCC, потому что репозитории недоступны. Разумеется, я не могу скомпилировать простенькую игру из исходного кода без компилятора. Похоже, придётся изрядно потанцевать с бубном, чтобы скомпилировать 32-битную версию игры под названием «2048» для FreeBSD.
Даже старая версия моего Installer-SH оказалась намного надёжнее репозиториев. Пусть она отработала с ошибками, но отработала и программу доставила пользователю, а репозитории просто оказались непригодными для использования, ибо, несмотря на подключённый сетевой кабель, система не имеет доступа к сети.
Похоже, тестированием новой версии Installer-SH я буду заниматься в следующей статье, потому что текущая уйдёт на всевозможные косяки и проблемы дистрибутивов Linux/FreeBSD. Настолько ужасна ситуация с распространением софта в этих операционных системах.
В поисках компилятора GCC весом всего пять килобайт я принялся скачивать DVD-образы FreeBSD подходящей версии. Вдруг там завалялся исполняемый файл компилятора, необходимый для сборки игры из исходного кода. Параллельно веду поиски в интернете. Это ли не сущий кошмар для пользователя, которому просто нужна была одна маленькая утилита для компиляции программы из исходников?
Казалось бы, что такого сложного в поиске компилятора GCC под 32-битную FreeBSD? А вот сложно: репозитории недоступны из операционной системы, а в иных источниках пакеты только под 64-битную архитектуру встречаются. Нельзя просто скачать и подкинуть флешкой нужный пакет. Его даже просто найти — та ещё проблема.
Казалось бы, подсмотри адрес репозитория, зайди и скачай что надо. Но в репозиториях валяется лишь горсть пакетов подозрительно маленького размера, а нужного GCC просто нет. Не зря говорят: чёрт ногу сломает в репозиториях и пакетных менеджерах.
|
|
|
|
Поиски в DVD-образе FreeBSD тоже ни к чему хорошему не привели. У меня даже архиватор вылетел от общей неорганизованности структуры локальной версии репозитория, когда набросали десятки тысяч каталогов в одном месте. Да и что толку, если там всё равно нет компилятора GCC в пригодном для использования бинарном формате. Только патчи для компиляции из исходников, и компилируйте компилятор как хотите.
Раз я не могу найти компилятор GCC, то попробую использовать C++ и C99, благо это есть в наличии. Правда, результатом я недоволен: пусть и удалось скомпилировать игру, она собралась с массой динамических зависимостей и непригодна для распространения.
|
|
|
|
Впрочем, выход нашёлся в забытом компиляторе Clang. Если бы только разработчики напоминали про альтернативы компилятору GCC, может, я и не забыл бы про Clang. В любом случае 32-битную независимую версию игры я скомпилировал под платформу FreeBSD. Осталось это сделать под 32-битную платформу Linux.
В случае Linux компилирую игру, используя 32-битный Debian 7, ещё не обделённый компилятором GCC. Разумеется, собираю бинарный файл статически, без лишних зависимостей.
Таким образом, было собрано 4 исполняемых файла под разные платформы и архитектуры в одном каталоге.
Ну а так как игра распространяется вместе с исходным кодом, я добавил второй вариант компиляции в краткую справку на случай, если вдруг в каком-то дистрибутиве Linux/FreeBSD не будет стандартного компилятора GCC.
Я не хотел создавать с нуля установочный пакет, поэтому распаковал старый пакет формата Installer-SH 2.7, подкинул новые файлы под 32-битную архитектуру и закинул лаунчер от версии Installer-SH 2.8. Разумеется, вписал имена подходящих исполняемых файлов под конкретную архитектуру.
Так как я стараюсь сохранять блок информации о программе нетронутым на протяжении десятков версий установочного пакета, можно было написать простенький скрипт для миграции данных из старой версии инсталлера в новую. Но в данном случае гораздо проще будет скопировать вручную кусок кода из старого инсталлера и просто вставить его в новый.
Упаковку архива с программой провожу командой "-apk", удаляю лишнее и сразу же устанавливаю на свою основную операционную систему игру. Фраза "mpa" в версии игры означает не просто поддержку разных платформ, но и разных архитектур (Multi Platform & Architecture).
|
|
|
|
Как можно заметить, свежеустановленная игра не конфликтует с той, что была установлена ранее. Ну а благодаря совершенству Installer-SH я могу легко удалить лишнюю версию игры, оставив лишь ту, которой буду пользоваться.
Теперь у меня есть универсальный установочный пакет с игрой 2048 под Linux / FreeBSD разных архитектур (x86 / x86_64 / amd64). Я не указываю конкретные имена дистрибутивов по той простой причине, что игра скомпилирована статически под каждую платформу и архитектуру и не страдает от характерного ада зависимостей. Теоретически она может заработать даже в очень старых дистрибутивах.
Именно это мы и будем проверять в разнообразных дистрибутивах Linux/FreeBSD. Неприятно, конечно, что размер распространяемого пакета в формате Installer-SH увеличился до 2.1 МБ из-за поддержки разных платформ и архитектур. Но это несравнимо мизерный объём по сравнению с гигабайтами зависимостей в формате пакетного менеджера.
Как и ожидалось, само тестирование и сравнение с другими форматами установки приложений придётся провести в следующей статье, ибо здесь уже не влезет весь материал. Не знаю, найдётся ли упакованная мною в этой статье консольная версия игры «2048» во всех репозиториях, которые хотелось бы сравнить с новым и действительно перспективным форматом распространения софта под названием Installer-SH. Но выбором форматов для сравнения займёмся уже в следующей статье. Следите за обновлениями, чтобы не пропустить следующую часть.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.