Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.  На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера. Ну и в-четвёртых, мне просто было жаль их выбрасывать. Консьюмеризм в наше время предписывает каждый год-два покупать новые смартфоны, производители блокируют возможности железа, которые им невыгодны, прекращают поддержку старых моделей, оставляя людей беспомощными. Миллионы смартфонов отправляются на свалку истории каждый год, хотя каждый из них это мощный компьютер. TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём. Сразу хочу оговориться — я понимаю, что есть типовые решения, например Termux или UserLAnd, и спектр поддерживаемых устройств у них шире. Но все они работают как надстройки над основной системой, Android, и подвержены её ограничениям, таким как агрессивное сокращение энергопотребления или перенос задач на LITTLE-ядра при выключении экрана. Будущее Termux, например, вообще неясно из-за всё более жёстких гаек безопасности в Android 11. UserLAnd, помимо этого, работает через PRoot, который при всей своей пользе ощутимо замедляет процессы с большим количеством системных вызовов. В этой статье мы разбираем именно создание сервера на железе без Android. Проект PostmarketOS был создан именно ради этой цели — сохранение вычислительных устройств после прекращения их поддержки производителями. Список поддерживаемых устройств можно найти здесь. Для установки требуется телефон с разблокированным загрузчиком. В качестве примера буду использовать OnePlus One из-за простоты разлочки со стороны производителя. Для каждого производителя список шагов разный, ниже привожу обобщённые действия для смартфона 2018-2021 года выпуска:   Далее авторизуем подключение на самом телефоне
 После разблокировки телефон сбросит данные снова перезагрузится в Android, перезапустите его в режим fastboot комбинацией клавиш или повторите релевантные для этого шаги 3 и 4. Если разблокировка прошла успешно, далее можно следовать стандартной процедуре установки PmOS: На этом этапе pmbootstrap запросит пароль и задаст довольно много вопросов о том, как сконфигурировать систему и целевое устройство. Итоговый результат будет записан в ~/.config/pmbootstrap.cfg. Пару слов по поводу разных конфигураций. Здесь есть несколько важных пунктов — ядро mainline или downstream, графическая среда mate, weston и т.д., канал обновлений edge или stable. Интуиция при выборе значений должна быть такой:  Затем с помощью pmbootstrap install сразу же начинаем сборку образа целевой системы. После сборки её предлагается установить самому, так как механизм установки варьируется от модели к модели. Пример того, как это делается стандартно, и как вышло у меня, ниже. Есть хорошие шансы, что всё сработает как надо с первого раза. К сожалению, загрузчики и реализацию fastboot каждый производитель телефонов пишет по-своему, отчего попытки установки превращаются в смерть от тысячи иголок. В моём случае fastboot наотрез отказывался прошивать образы такого размера. Пришлось воспользоваться сторонним recovery, чтобы продвинуться дальше: После завершения процесса sideload жмём "Reboot to system". Должен пойти процесс загрузки ядра и далее самой PostmarketOS. По сути своей, PostmarketOS построена на основе дистрибутива Linux под названием Alpine. Это позволяет создать работающую систему минимального размера, что для большого количества старых устройств с ограниченной внутренней памятью критично. Однако, есть и подводные камни. О них ниже: Итак, после загрузки телефона с PostmarketOS нам необходимо каким-то образом с ним взаимодействовать. Если вы ставили оболочку Phosh или Plasma Mobile, скорее всего вы сможете это сделать напрямую с тачскрина телефона. Если по каким-то причинам графический интерфейс не сработал, подключайте телефон к компьютеру USB-кабелем, PostmarketOS автоматически создаст дополнительную сеть:  После чего к телефону можно будет подключиться с именем и паролем пользователя, который вы указывали при pmbootstrap install: Если вы видите эти строчки — значит PostmarketOS установлена верно. В противном случае попробуйте посмотреть секцию Troubleshooting для вашего устройства на вики PmOS, измените конфигурацию для pmbootstrap install или спросите мейнтейнеров в IRC или Matrix чате (все три пункта ваш покорный слуга в итоге и сделал). Если не получилось настроить WiFi сеть через графическую оболочку, ниже пример как сделать это через консоль. Предварительно подключите телефон к USB-интерфейсу вашего ПК. Выполните на ПК: Выполните на телефоне: Далее, снова на телефоне:  Если на вики указана поддержка bluetooth, пробуем так: Если всё прошло как надо, на графическом интерфейсе увидите мышку и/или пропадёт экранная клавиатура. PostmarketOS как правило устанавливает себя в раздел system, то место, где Андроид обычно хранит системные библиотеки, настройки и приложения. Размер этого раздела ограничен, и для каталогов /home или /var/lib/docker имеет смысл выбрать раздел побольше. На Андроиде это, как правило, userdata: Готово, теперь будущий докер не съест всё системное место за секунды. Здесь должен был быть большой раздел про пересборку ядра и быстрый экскурс в pmbootstrap kconfig Благодаря недавним изменениям в конфигурации ядра PostmarketOS, докер и другие системы контейнеризации должны работать из коробки на любом устройстве, достаточно установить (apk add docker) и запустить (/etc/init.d/docker start) сервис. На PostmarketOS действует рудиментарный фаервол в виде правил nftables, сперва разрешаем трафик с интерфейса WiFi. Создайте файл /etc/nftables.d/52_wlan_inet.nft с таким содержимым: Затем выполняем: Далее на локальном компьютере открываем http://<ip-адрес-телефона> и смотрим, что получилось:  Какие выводы я сделал, проведя такой опыт переноса своих сервисов на телефон? Самое главное — делайте это только убедившись, что точно хотите окунуться в неизвестное и сможете потратить на это 2-4 дня, а может и больше. Сильно поможет, если устройство хорошо поддерживается сообществом, ну и конечно если идеи свободного ПО и переиспользования вам близки :) В моём случае оказалось, что таким устройством, как у меня, никто из разработчиков не обладает, и пришлось добавлять драйверы производителя, поддержку батареи и её зарядки в ядре и следить за обновлениями, чтобы изменения не потерялись. Тем не менее, после настройки телефон работает как полноценный сервер NextCloud, синхронизируя календарь, файлы и задачи, и потребляя при этом всего 2.5 Вт энергии. Я выкладываю эту инструкцию в надежде, что она окажется полезной, но не предоставляю никаких гарантий работоспособности результата. Если вы столкнулись с проблемами, пишите в комментарии или в Matrix-каналы разработчиков PostmarketOS, будем разбираться. Battle Programmer