Довольно часто владельцы игровых серверов SAMP сталкиваются с такой ошибкой при запуске сервера. Наиболее популярная причина такой ошибки, озвучиваемая клиентами в обращениях, как правило звучит как «У вас старые библиотеки!». В данном материале мы хотели бы понятно и доступно объяснить, почему это не так, что делать и кто виноват.
Что такое GLIBCXX
GLIBCXX - это библиотека языка C++ операционной системы Linux. На C++ в свою очередь написаны многие системные вызовы операционной системы Linux, и всё сопутствующее дистрибутиву ПО. Таким образом, GLIBCXX является неотъемлемой частью ОС, и отдельно от операционной системы не обновляется. Существует только один вариант «обновить GLIBCXX» - обновить операционную систему.
Всем известно, что Ru-hoster это качественный хостинг. Мы вкладываем много сил и средств для в для поддержания этого статуса. Можно перечислить много факторов, влияющих на качество услуг, но один их них, безусловно стабильность. И для стабильности ваших игровых серверов мы выбрали CentOS, самую лучшую операционную систему из существующих. Кодовая база данной операционной системы принадлежит семейству Red Hat Enterprise Linux, которое в свою очередь позиционируется как операционная система для корпоративных решений. Это значит, что каждая строчка кода, каждый пакет и каждая библиотека проходит тщательное тестирование перед включением в основную ветку ОС. Таким образом, игровые серверы на базе данной системы получают прочный «фундамент» для надежной работы в виде стабильной операционной системы и библиотек без багов.
На сегодняшний день последняя актуальная версия CentOS 7.5.1804, которая вышла 10 мая 2018. Посмотрим, какая библиотека GLIBCXX в этой надежной, современной, а главное самой новой версии ОС:
[root@nishikata ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@nishikata ~]# strings /lib/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
...
GLIBCXX_3.4.18
GLIBCXX_3.4.19 ...
Таким образом, самая свежая версия GLIBCXX в CentOS 7 – это 3.4.19. А, например, в Ubuntu 16.04, которая вышла в 2016 году, уже была версия поддержка версии GLIBCXX_3.4.23. Так почему свежий, стабильный дистрибутив CentOS снабжен такой старой библиотекой?
Кто виноват
Ответ на этот вопрос уже звучал ранее в нашей статье. CentOS это серьезный дистрибутив. Созданный для больших серьезных проектов. Именно поэтому разработчики ОС намеренно не включают туда более свежие версии библиотеки, так как в них все еще есть баги, они все еще недостаточно стабильны для такого дистрибутива, как CentOS, который мы используем на всех наших серверах.
Однако, разработчики плагинов для SAMP как правило более беспечны. Более продвинутые из них собирают свои плагины на Ubuntu Server. Но есть и уникумы, которые используют для этого домашнюю версию Ubuntu, которая содержит самые свежие библиотеки, только с конвеера, со всеми багами и ошибками. Естественно, плагин, собранный на такой ОС, будет требовать более новую версию GLIBCXX, и на нашем хостинге запускаться откажется. Значит ли это, что у нас старые библиотеки и операционная система? Определенно нет. Ведь вы же не хотите, чтобы Ru-hoster установил ваш сервер на машину с «домашней» версией операционной системы?
Что делать в данной ситуации?
К счастью, подавляющее большенство разработчиков выкладывает исходный код плагинов на github. И, не смотря на манию «больших чисел», их почти всегда можно собрать под CentOS 7. Манией «больших цифр» мы называем гонку за самыми свежими версиями: взять самую свежую Ubuntu, самые свежие зависимости, самый свежий cmake, и так далее и тому подобное. Почему именно мания? Потому что, на наш взгляд, это бестолковое занятие. Например, плагин log-plugin: по умолчанию собран на Ubuntu и требует свежий GLIBCXX, для сборки требует cmake больше 3 (по умолчанию на CentOS 7 идет 2.8), зависимостью требует самый свежий tinydir. Но, другая зависимость fmt в самой свежей версии 5.2.1 с ним несовместима. Для сборки требуется fmt 4.1.0, которая вышла в декабре 2017. Спрашивается, почему в этом случае мания «больших цифр» не сработала? Ответ простой – в версиях начиная с 4.1.0 убрали ряд устаревших функций (устаревшую функцию как правило убирают, когда она считается старой более 5-10 лет). Вероятно, разработчик решил не усложнять себе жизнь, обновляя код, а просто оставил старую библиотеку с устаревшими функциями. Но зато остальные компоненты, которые можно «обновить» не меняя код, использовал самые новые. Спрашивается, в чем тогда смысл всего самого нового, если в плагине используются функции, которые настолько стары, что их даже удалили из библиотеки fmt? Смысла во всем этом, конечно, нет.
Итак, если вы видите ошибку GLIBCXX, есть два варианта решения
- Найти версию плагина для CentOS 7. Многие разработчики понимают, что свет клином не сошелся на Ubuntu, и собирают свои плагины в том числе и для нормальных дистрибутивов (тут вы должны понять, что Ubuntu мы за нормальный дистрибутив не считаем, но это личное мнение администраторов хостинга);
- Если специальной версии для CentOS 7 найти не удается, всегда можно обратиться в поддержку. Мы постараемся найти исходный код, и собрать его с нужными библиотеками. Как правило, это занимает некоторое время.
С любовью,
команда Ru-hoster ❤