Міжнародная канферэнцыя распрацоўнікаў і карыстальнікаў свабодных праграм

Превращение Android-устройств в мобильные серверы при помощи FOSS

Виталий Сороко, Minsk, Belarus

LVEE 2017

Modern mobile devices such as smartphones and tablets now have powerful processors and sometime large amount of memory inside. So these devices can be suitable for standard server tasks, for example data warehousing and HTTP request handling. However, since the architecture of mobiles is different from standard PCs and servers, it is necessary to recompile open source server software for further usage. This is not very simple process and here is the description of key points and main ways of that.

Современные мобильные устройства, такие как смартфоны, планшеты и даже «умные» часы, с каждым годом становятся всё мощнее и мощнее. Благодаря увеличивающемуся объему памяти, многоядерным процессорам и наличию встроенной батареи они вполне могут работать в качестве маленького переносного сервера, ведь у них внутри есть все что для этого нужно – вычислительные мощности и резервный источник питания на случай сбоя в энергосети. Однако, процесс превращения мобильного устройства в маленький переносной сервер не так прост как может показаться на первый взгляд. Для того чтобы сделать это, вам придётся пройти через следующие основные шаги:

  1. Покупка и подготовка оборудования.
  2. Выбор набора необходимого серверного ПО
  3. Компиляция, установка и настройка серверного ПО
  4. Проверка работоспособности системы
  5. Оптимизация

Итак первым этапом является покупка и подготовка оборудования. Как известно, для работы серверного ПО вам понадобиться сам сервер и сетевое соединения, а также оборудование для обеспечения работы сетевого соединения. В качестве сервера мы будем использовать мобильное устройство. Поэтому, вам понадобиться смартфон, планшет или какой либо другой гаджет на базе Android. Кроме этого, необходимо также определиться будет ли вам достаточно только соединения по WiFi или 3G/4G/LTE. Для того чтобы это сделать, нужно чётко понимать в каких целях будет использоваться ваш сервер. Если это будет простой веб-сервер, предназначенный для выполнения задач, которым не требуется постоянное, надёжное и безопасное соединение, то вполне будет достаточно 3G/4G/LTE соединения со статическим IP-адресом или обмена данными через WiFi-маршрутизатор. Совсем другое дело если вы захотите сделать максимально приближённый аналог обычного сервера, работающий по проводному соединению. Для этого вам понадобится либо устройство изначально оборудованное Ethernet-портом (а таких сейчас продаётся не очень много), либо переходник OTG и USB-сетевой адаптер (перед покупкой вам необходимо проверить поддерживает ли ваше устройство работу в качестве USB-хоста при подключении данного переходника). Кроме этого, в случае OTG-переходника и внешней USB сетевой карты вам необходимо будет также настроить проводную сеть, а это в зависимости от устройства может представлять собой не очень простой процесс.

На втором этапе вам необходимо определиться с серверным программным обеспечением, то есть выбрать подходящий веб-сервер, СУБД, а также другие вспомогательные компоненты. После этого, вам нужно будет загрузить их на ваше устройство. Тут к слову, как и в обычных Linux системах способы могут быть разные. Самый легкий способ это конечно поиск и установка готового набора через Google Play. Главный недостаток данного способа – это зависимость от поставщика набора серверных компонентов, а именно вы будет пользоваться серверными компонентами только тех версий, которые доступны в данном наборе, а обновления будут приходит только вместе с обновлением Android приложения, содержащего данный набор. К слову, из личного опыта, могу с уверенностью сказать что многие приложения содержащие такие наборы очень часто не обновляются. Кроме этого, за Android приложения содержащие внутри себя набор серверных компонентов вам скорее всего придётся заплатить тем или иным образом (либо путём покупки приложения, либо путём просмотра содержащейся в нём рекламы). Поэтому, этим способом я рекомендую пользоваться только если вы совсем не понимаете что такое Linux и как на нём можно устанавливать приложения из исходных кодов. Кроме первого способа на просторах интернета вы можете найти статьи про то, что установить серверные компоненты на Android вам поможет приложение BotBrew (или аналогичное). В целом могу сказать, что данный способ вполне работоспособен, но есть несколько «но». Во первых эта BotBrew совместим далеко не со всеми устройствами. Во вторых он сильно грузит мобильное устройство. И в третьих эта штука по сути представляет собой что-то среднее, а именно после её установки вы получите некое подобие Debian репозитория из которого можно устанавливать приложения таким же способом как и в Debian. С одной стороны это хорошо, а с другой проблемы не самых свежих версий серверных компонентов никуда не исчезнут. В общем это способ могу рекомендовать только в тех случаях когда вам лень возиться с компиляцией из исходных кодов, вы хорошо знаете что такое Debian и на сто процентов уверены что на вашем устройстве это будет работать, а также если снижение производительности устройства вас не сильно беспокоит. И на всякий случай поделюсь своим опытом использования данной программы: после её установки планшет на базе Android 4 стал медленно работать и регулярно делать оптимизацию установленных приложений. После того как я понял в чём дело, удалить BotBrew позволил только сброс устройства на заводские настройки (Hard reset). Итого, если после прочитанного вы поняли что первых два способа вам не подойдут, то скорее всего мне удалось вас убедить что наиболее правильный и хороший способ установки серверных компонентов – это их сборка, компиляция и установка из исходных кодов. Ведь только так вы получите у себя на устройстве самые свежие версии компонентов, которые к тому же будут относительно быстро работать и безо всякой рекламы.

Итак, теперь чуть больше конкретики про процесс сборки, компиляции и установки приложений из исходных кодов под Android. В целом он полностью аналогичен таковому в обычном линуксе. Вам нужно будет скачать исходные коды с официальных сайтов (репозиториев) выбранных компонентов и приступить к компиляции и установке. Для этого , как и в Linux, вам надо будет использовать команду ./configure и make. Тем не менее есть и отличия. Так, например, в общем случае вам необходимо будет скачать и установить на ваш компьютер Eclipse с CDT, Android SDK, NDK и прочие необходимые компоненты и библиотеки. Сама сборка и компиляция для Android устройства будет осуществляться на вашем персональном компьютере. Далее после сборки и компиляции вам необходимо будет поместить полученный результат на Android устройство и немного «поколдовать» для его настройки и запуска. Для этого нужно будет проверить сетевые настройки, конфигурационные файла каждого из серверных компонентов, ну и конечно проверить работает всё это или нет при помощи браузера (в случае веб сервера) или клиента (в случае СУБД и других сервисов). По сути это и есть этап проверки работоспособности. После завершения данного этапа можно будет смело попробовать сделать своё собственное приложение с набором серверных компонентов, но это не очень простой процесс, который имеет свои особенности и поэтому выходит за рамки данной темы, так как заслуживает отдельного рассмотрения.

Ну и в завершении, хочу сказать пару слов про оптимизацию. Если честно то без неё можно обойтись, но всё-таки лучше этим заняться. На мой взгляд оптимизировать надо всё, но в меру. Начинать оптимизацию я рекомендую с измерения производительности выбранных вами серверных компонентов и их влияния на систему в целом. Сейчас существует огромное множество различных программ-мониторов на любой вкус и цвет, поэтому мне даже сложно порекомендовать что-то конкретное. Ваша главная задача – это проверить при помощи таких программ не появилось ли у вас на мобильном устройстве какого либо серверного компонента который перегружает ваше устройство. Если случилось именно так, то вам необходимо либо произвести оптимизацию серверного компонента за счёт изменения настроек в конфигурационном файле или файлах данного компонента, либо, если первое не помогло, самое время задуматься о выборе другого компонента выполняющего данные функции. Как известно в мире Opensource обычно существует немалое число различных веб-сереверов, СУБД и прочих серверных приложений с отрытыми исходными кодами и вы всегда можете выбрать какую либо более легковесную замену с аналогичным функционалом. Кроме такого рода оптимизаций, в некоторых случаях могут быть также полезны архитектурные и аппаратные оптимизации. Например если мобильное устройство не тянет нужный вам набор серверных компонентов, то можно либо купить более мощное устройство взамен прежнего, либо разнести серверные компоненты на несколько устройств, тем самым поменяв архитектуру.

И последнее: в качестве подведения итогов я решил написать пару слов про то, зачем это всё нужно и почему вообще я решил этим заняться. Превращение мобильного устройства в сервер даёт целый ряд преимуществ: меньшее энергопотребление по сравнению со стандартными серверами, высокая мобильность (вы можете всегда взять сервер с собой куда угодно), ну и конечно мобильные устройства занимают гораздо меньше физического пространства чем, например, их братья в модульном исполнении (серверы типоразмера 1U). У мобильных устройств, превращенных в серверы, есть конечно и недостатки, один из которых производительность, но тут всё зависит от того что и с чем сравнивать.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад