Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.


image


На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.


Ну и в-четвёртых, мне просто было жаль их выбрасывать. Консьюмеризм в наше время предписывает каждый год-два покупать новые смартфоны, производители блокируют возможности железа, которые им невыгодны, прекращают поддержку старых моделей, оставляя людей беспомощными. Миллионы смартфонов отправляются на свалку истории каждый год, хотя каждый из них это мощный компьютер.


TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.


Сразу хочу оговориться — я понимаю, что есть типовые решения, например Termux или UserLAnd, и спектр поддерживаемых устройств у них шире. Но все они работают как надстройки над основной системой, Android, и подвержены её ограничениям, таким как агрессивное сокращение энергопотребления или перенос задач на LITTLE-ядра при выключении экрана. Будущее Termux, например, вообще неясно из-за всё более жёстких гаек безопасности в Android 11. UserLAnd, помимо этого, работает через PRoot, который при всей своей пользе ощутимо замедляет процессы с большим количеством системных вызовов. В этой статье мы разбираем именно создание сервера на железе без Android.


Часть первая. Прошивка


Проект PostmarketOS был создан именно ради этой цели — сохранение вычислительных устройств после прекращения их поддержки производителями. Список поддерживаемых устройств можно найти здесь.


Для установки требуется телефон с разблокированным загрузчиком. В качестве примера буду использовать OnePlus One из-за простоты разлочки со стороны производителя. Для каждого производителя список шагов разный, ниже привожу обобщённые действия для смартфона 2018-2021 года выпуска:


Шаг 1

image


Шаг 2

image


Шаг 3
$ sudo apt install adb fastboot
$ # подключаем телефон к USB
$ adb devices
$ # должен показать устройство в статусе unauthorized

Далее авторизуем подключение на самом телефоне
image


$ adb devices
$ # теперь должен показать нормальный статус "device"

Шаг 4
$ adb reboot bootloader
$ # смартфон перезагружается в режим fastboot
$ # команда может отличаться от oem unlock, уточняйте шаги для вашего производителя
$ fastboot oem unlock
$ # теперь должен показать дисклеймер и уточнить намерения, подтверждаем...

После разблокировки телефон сбросит данные снова перезагрузится в Android, перезапустите его в режим fastboot комбинацией клавиш или повторите релевантные для этого шаги 3 и 4.


Если разблокировка прошла успешно, далее можно следовать стандартной процедуре установки PmOS:


$ sudo apt install python3-pip git
$ python3 -m pip install --user pmbootstrap
$ export PATH="$HOME/.local/bin:$PATH"
$ pmbootstrap init

На этом этапе pmbootstrap запросит пароль и задаст довольно много вопросов о том, как сконфигурировать систему и целевое устройство. Итоговый результат будет записан в ~/.config/pmbootstrap.cfg.


Пару слов по поводу разных конфигураций. Здесь есть несколько важных пунктов — ядро mainline или downstream, графическая среда mate, weston и т.д., канал обновлений edge или stable. Интуиция при выборе значений должна быть такой:


  • Если планируете пользоваться графикой, ставьте пароль из цифр. Некоторые графические среды поддерживают только цифровую клавиатуру на экране ввода пин-кода.
  • Выбирайте edge в качестве канала обновлений. PostmarketOS разрабатывается быстро, и много опакеченного ПО ещё долго не будет в stable.
  • Выбирайте ядро downstream если хотите максимум работающей "из коробки" второстепенной периферии после установки. Выбирайте ядро mainline если вам нужен OpenGL/OpenCL и современные возможности ядра, такие как контейнеризация и cgroups.
  • Выбирайте графическую систему phosh, sway или plasma-mobile если у ваc ядро mainline и имеется графическое ускорение. В противном случае остановитесь на mate или xfce4. Внимательно смотрите страницу вики для вашего устройства.

Пример того, что получилось у меня
[pmbootstrap]
aports = /home/kanedias/.local/var/pmbootstrap/cache_git/pmaports
ccache_size = 5G
is_default_channel = False
device = oneplus-bacon
extra_packages = rsync,vim,networkmanager,bluez
hostname = lab-of-maker
build_pkgs_on_install = True
jobs = 17
kernel = mainline
keymap = 
locale = en_US.UTF-8
nonfree_firmware = True
nonfree_userland = False
ssh_keys = True
timezone = Europe/Moscow
ui = sway
ui_extras = False
user = kanedias
work = /home/kanedias/.local/var/pmbootstrap
boot_size = 128
extra_space = 0
sudo_timer = False

Затем с помощью pmbootstrap install сразу же начинаем сборку образа целевой системы. После сборки её предлагается установить самому, так как механизм установки варьируется от модели к модели. Пример того, как это делается стандартно, и как вышло у меня, ниже.


Пример из инструкции
$ # прошиваем основную систему, библиотеки, модули ядра
$ pmbootstrap flasher flash_rootfs
$ # прошиваем ядро и initramfs
$ # можно использовать pmbootstrap flasher boot для проверки загрузки перед этим
$ pmbootstrap flasher flash_kernel

Есть хорошие шансы, что всё сработает как надо с первого раза. К сожалению, загрузчики и реализацию fastboot каждый производитель телефонов пишет по-своему, отчего попытки установки превращаются в смерть от тысячи иголок. В моём случае fastboot наотрез отказывался прошивать образы такого размера. Пришлось воспользоваться сторонним recovery, чтобы продвинуться дальше:


Пример из жизни
$ # собираем образ для установки напрямую на устройстве через TWRP
$ pmbootstrap install --android-recovery-zip
$ # скачиваем TWRP для нужного устройства, см. https://twrp.me/Devices/
$ fastboot boot twrp-3.5.2_9-0-bacon.img
$ # на экране телефона выбираем Advanced -> ADB Sideload -> Start sideload
$ pmbootstrap flasher --method=adb sideload

После завершения процесса sideload жмём "Reboot to system". Должен пойти процесс загрузки ядра и далее самой PostmarketOS.


Часть вторая. Настройка PostmarketOS


По сути своей, PostmarketOS построена на основе дистрибутива Linux под названием Alpine. Это позволяет создать работающую систему минимального размера, что для большого количества старых устройств с ограниченной внутренней памятью критично.


Однако, есть и подводные камни. О них ниже:


  • Alpine построен на основе лаконичного libc под названием Musl. Плохая новость тут в том, что большинство других дистрибутивов работает на основе glibc, что означает невозможность установки ПО простым переносом бинарников с Raspbian или Ubuntu ARM, как позволяет, например, Golang или Rust.
  • Система инициализации в дистрибутиве — OpenRC. Если вы знакомы с Gentoo, это для вас не будет озарением, но OpenRC куда ближе к прародителю sysvinit, чем к общепринятому в индустрии systemd. Имейте в виду.
  • Для уменьшения размера используется Busybox, поэтому команды grep/sed/find и т.д. имеют ограниченный набор опций по умолчанию. Устанавливайте их GNU-версии и стандартный Bash-шелл отдельно, чтобы получить полный набор.

Итак, после загрузки телефона с PostmarketOS нам необходимо каким-то образом с ним взаимодействовать. Если вы ставили оболочку Phosh или Plasma Mobile, скорее всего вы сможете это сделать напрямую с тачскрина телефона. Если по каким-то причинам графический интерфейс не сработал, подключайте телефон к компьютеру USB-кабелем, PostmarketOS автоматически создаст дополнительную сеть:


image


После чего к телефону можно будет подключиться с именем и паролем пользователя, который вы указывали при pmbootstrap install:


$ ssh pmos@172.16.42.1
pmos@172.16.42.1 password:
$ sudo cat /etc/os-release | head -3
PRETTY_NAME="postmarketOS edge"
NAME="postmarketOS"
VERSION_ID="edge"

Если вы видите эти строчки — значит PostmarketOS установлена верно. В противном случае попробуйте посмотреть секцию Troubleshooting для вашего устройства на вики PmOS, измените конфигурацию для pmbootstrap install или спросите мейнтейнеров в IRC или Matrix чате (все три пункта ваш покорный слуга в итоге и сделал).


Настройка сети


Если не получилось настроить WiFi сеть через графическую оболочку, ниже пример как сделать это через консоль. Предварительно подключите телефон к USB-интерфейсу вашего ПК.


Выполните на ПК:


# разрешаем интерфейсам, подключённым по USB, ходить в интернет через нас
$ sudo sysctl net.ipv4.ip_forward=1
$ sudo iptables -P FORWARD ACCEPT
$ sudo iptables -A POSTROUTING -t nat -j MASQUERADE -s 172.16.42.0/24

Выполните на телефоне:


$ # делаем наш подключённый по USB ПК основным сетевым шлюзом для телефона
$ sudo route add default gw 172.16.42.2
$ echo nameserver 1.1.1.1 | sudo tee /etc/resolv.conf
$ # теперь у нас есть интернет на телефоне, правда пока только через USB-кабель

Далее, снова на телефоне:


$ # обычно если ip link show показывает беспроводной интерфейс, этого достаточно
$ # если нет, убедитесь, что firmware-пакеты для вашего устройства установлены
$ sudo apk add networkmanager
$ sudo rc-update add networkmanager
$ sudo /etc/init.d/networkmanager start
$ nmtui
$ # далее подключаемся к WiFi через интерфейс NM

Как это выглядит

image


Настройка Bluetooth


Если на вики указана поддержка bluetooth, пробуем так:


$ sudo apk add bluez
$ sudo rc-update add bluetooth
$ sudo /etc/init.d/bluetooth start
$ # далее подключаемся к мыши/клавиатуре/наушникам (должно быть в режиме pairing)
$ bluetoothctl
Agent registered
[CHG] Controller 00:00:00:00:5A:AD Pairable: yes
[bluetooth]$ power on
Changing power on succeeded
[CHG] Controller 00:00:00:00:5A:AD Powered: yes
[bluetooth]$ scan on
Discovery started
[CHG] Controller 00:00:00:00:5A:AD Discovering: yes
[NEW] Device D6:3B:32:01:3D:DD TEST-DEVICE
[bluetooth]$ pair D6:3B:32:01:3D:DD
Attempting to pair with D6:3B:32:01:3D:DD
[CHG] Device D6:3B:32:01:3D:DD Connected: yes

Если всё прошло как надо, на графическом интерфейсе увидите мышку и/или пропадёт экранная клавиатура.


Настройка диска


PostmarketOS как правило устанавливает себя в раздел system, то место, где Андроид обычно хранит системные библиотеки, настройки и приложения. Размер этого раздела ограничен, и для каталогов /home или /var/lib/docker имеет смысл выбрать раздел побольше. На Андроиде это, как правило, userdata:


$ ls -lh /dev/disk/by-partlabel/ | grep userdata
lrwxrwxrwx 1 root root 16 May  5  1970 userdata -> ../../mmcblk0p28
$ sudo mkfs.ext4 /dev/mmcblk0p28
$ sudo mkdir -p /var/lib/docker
$ sudo mount /dev/mmcblk0p28 /var/lib/docker

Готово, теперь будущий докер не съест всё системное место за секунды.


Настройка Docker


Здесь должен был быть большой раздел про пересборку ядра и быстрый экскурс в pmbootstrap kconfig


Благодаря недавним изменениям в конфигурации ядра PostmarketOS, докер и другие системы контейнеризации должны работать из коробки на любом устройстве, достаточно установить (apk add docker) и запустить (/etc/init.d/docker start) сервис.


На PostmarketOS действует рудиментарный фаервол в виде правил nftables, сперва разрешаем трафик с интерфейса WiFi. Создайте файл /etc/nftables.d/52_wlan_inet.nft с таким содержимым:


table inet filter {
    chain input {
        iifname "wlan*" accept comment "Allow incoming network traffic from WLAN"
    }
    chain forward {
        iifname "wlan*" accept comment "Allow outgoing network traffic from WLAN through us"
        ct state {established, related} counter accept comment "accept established connections"
    }
}

Затем выполняем:


$ # сперва перезагружаем фаервол
$ /etc/init.d/nftables restart
 * Caching service dependencies ...                  [ ok ]
 * Stopping firewall ...                             [ ok ]
 * Loading nftables state and starting firewall ...  [ ok ]
$ # запускаем сервис, для примера возьмём персональное облако NextCloud
$ docker run --rm -d -p 80:80 nextcloud

Далее на локальном компьютере открываем http://<ip-адрес-телефона> и смотрим, что получилось:


image


Часть третья. Заключение


Какие выводы я сделал, проведя такой опыт переноса своих сервисов на телефон? Самое главное — делайте это только убедившись, что точно хотите окунуться в неизвестное и сможете потратить на это 2-4 дня, а может и больше. Сильно поможет, если устройство хорошо поддерживается сообществом, ну и конечно если идеи свободного ПО и переиспользования вам близки :)


В моём случае оказалось, что таким устройством, как у меня, никто из разработчиков не обладает, и пришлось добавлять драйверы производителя, поддержку батареи и её зарядки в ядре и следить за обновлениями, чтобы изменения не потерялись. Тем не менее, после настройки телефон работает как полноценный сервер NextCloud, синхронизируя календарь, файлы и задачи, и потребляя при этом всего 2.5 Вт энергии.


Я выкладываю эту инструкцию в надежде, что она окажется полезной, но не предоставляю никаких гарантий работоспособности результата. Если вы столкнулись с проблемами, пишите в комментарии или в Matrix-каналы разработчиков PostmarketOS, будем разбираться.


Ресурсы, использованные для написания этой статьи


Комментарии (97)


  1. raamid
    25.07.2021 02:03

    Супер! Спасибо, это круто! А я как раз подумывал железку для домашнего сервера покупать, а тут такая статья :)


  1. Alexsey
    25.07.2021 02:04
    +4

    Больше всего в таких проектах меня беспокоит вопрос батареи - не вздуется ли она от постоянного нахождения девайса на зарядке и не перестанет ли девайс включатся когда батарея неминуемо помрет опять же от постоянного нахождения на зарядке.


    1. Utopia
      25.07.2021 02:07

      Думаю все зависит от контроллера батареи и производителя аккумулятора. Только практика покажет правду. И это будет лишь частный случай. По идее не должна. Вздутие обычно означает повреждение от удара. В ноутбуках например стоят годами… но бывает и вздуваются.


      1. Ark1774
        25.07.2021 12:55

        В ноутах это часто предусмотрено штатным софтом. Батарея заряжается до 100% и отключается, ноут работает чисто за счёт зарядки, а батарея постепенно саморазряжается, как достигнет 90%(или другого указанного значения), опять заряжается. Либо не заряжается до 100% при каждом цикле, что так же продлевает её ресурс.
        Но куча современных ноутов имеют зарядку слабее чем его потребление на полной производительности и соотв. батарея постоянно участвует в поддержании работы, что значительно сокращает срок её жизни, даже если ноут никогда не снимается с зарядки.


        1. Z2K
          25.07.2021 14:57
          +2

          Теперь уже даже есть режим стационарной работы, аку заряжается до 80-85% и ждет разрядки до 50-55%


          1. Anrikigai
            25.07.2021 22:06
            +1

            Это эффективно. Для смартфонов тоже рекомендуется заряжать до 80%.

            Но вопрос не в продлении жизни батареи, а не вздуется ли она. Раньше у ноутов таких умных режимов частичной зарядки не было, при этом работали годами будучи значительное время подключенными к сети.

            У меня вон до сих еще IBMовский ноут живет 15-летней давности. Кроме Debian 32 bit и не знаю, что поставить. Правда батрейку держит только из комнаты в комнату перейти, но не "взбухает" же.

            Другое дело, что там и элементы питания были другие, нежели в смартфонах. И это не дает мне спокойно экстраполировать опыт ноутбуков на смартфоны (как старые десятилетней давности типа LG Nexus 4, так и более новые)


            1. Z2K
              25.07.2021 22:47
              +1

              Там 18650, даже незнаю что надо сделать чтоб они "взбухли" :)


              1. isden
                30.07.2021 15:02

                У них же вроде есть клапан для сброса газов. А те что "взбухают" — герметичные.


            1. zuek
              06.08.2021 10:48

              У меня до сих пор жив ноут, списанный в 2003 году - RoverBook, PIII 1000. Акк родной, но заряд держит минут 5. А у смартфонов всех лет через 5 аккумуляторы вздуваются, независимо от нахождения на зарядке или в ящике стола, но некоторые (увы, меньшинство) умеют работать просто от зарядки.


          1. trimtomato
            25.07.2021 23:10

            Хочу себе такой режим, как мне больше узнать о нём? Как называется? На Винде доступен, драйвер может какой-то специальный надо или где-то включается? Или такое только на уровне железа бывает и если производитель не дал, то и ничего не поделать? В общем, вопросов много.


            1. iROOT
              26.07.2021 21:23

              Знаю два производителя у которых есть софт для ограничения заряда. Это ASUS Battery Health Charging и Lenovo Vantage (отдельная функция).


            1. nikodll
              27.07.2021 17:12

              У Dell такой тоже есть. Включается в биосе, поддержка софта/драйверов нужна только если хотите без перезагрузки настройки менять, например командой:

              /opt/dell/dcc/cctk --PrimaryBattChargeCfg=Custom:50-80


            1. az0ff
              30.07.2021 11:34

              Не знаю, есть ли специальные софтины для такого. Но у некоторых новых буков уже есть по дефолту такая функция. У меня MSI Modern 14, в штатной утилите Creator Center есть возможность настроить несколько режимов заряда батареи: до 100%, до 80% и до 60%. У меня стоят две системы, винда и линукс. Здорово то, что если под виндой выставил режим заряда до 60%, то это работет и под линуксом, т.е. ноут заряжается до 60% и дальше работает от сети, пока батарея не разрядится до 49%, потом он снова заряжает её до 60%. Скорее всего это реализовано на уровне железа и управляется через специальные софтины от производителя.


    1. arthuriantech
      25.07.2021 02:37
      +7

      У меня аккумуляторы от Nokia E51 и Redmi Note 3 вздувались спустя несколько месяцев при 100% на зарядке. Чтобы этого не было, надо ограничивать зарядку в пределах 55 - 60%. Сейчас на Redmi работает Battery Charge Limit и спустя 7 месяцев висения на проводе аккумулятор не вздулся и вполне живой.


    1. Kanedias Автор
      25.07.2021 02:46
      +1

      У меня заряженный Oneplus One лежит уже довольно долго, отключал я его за три месяца только раз или два. Пока что батарея в порядке.

      По моим наблюдениям, при достижении 100% заряда ядро переключает контроллер в режим "trickle-charge". Если CPU телефона начинает активно использоваться и батарея тратится, через некоторое время ядро переключает контроллер обратно в "fast-charge", и так пока заряд снова не станет 100%.

      Отпишу здесь доп. комментарий, если начнутся проблемы


    1. Number7
      25.07.2021 10:42
      +2

      по опыту скажу: через год постоянной подзарядки ощутимо вздувается. через полтора - выпирает так что гнется задняя стенка.

      мобила самсунг. работала как 4g модем нон-стоп 3 года. два раза менял батареи.


      1. LynXzp
        25.07.2021 12:29
        +6

        O_o Даже не знал что некоторые телефоны могут такое сделать. У меня все телефоны (кроме первых кнопочных) постоянно лежат на зарядке. Ну как минимум 90% времени.
        Motorola Droid 4 (батарея в принципе вздулась, но ей было точно больше 5 лет)
        Xiaomi Redmi Note 8 (год полет нормальный, пока не разбирал)
        Jellyfish Pro (прямо сейчас разобрал — батарея немного выпуклая)

        Да ну к черту, как пользоваться этими смартфонами если они быстро разряжаются и их нельзя держать на зарядке. Если я ими пользуюсь реже чем раз в день и работаю дома. Ничтожества, а не телефоны.


      1. Nikeware
        25.07.2021 22:08
        +1

        Подтверждаю. У меня старый Самсунг в качестве дверного глазка. Изначально был постоянно подключен к зарядке. Через несколько месяцев батарея вздулась так, что выперло крышку. Проблема в том, что он у меня постоянно транслирует по rtsp во внутреннюю сеть по Wi-Fi и соответственно "кушает" много.

        Я поступил немного по другому: самодельный БП, контролирующий уровень заряда телефона, чтобы при достижении 85% зарядки, БП отключался, а ниже 15% - включался. Почти год так работает, вроде пока нормально. Хотя во время зарядки греется заметно больше, чем при работе от аккума.Оно и понятно: аккум заряжается, а телефон в это время ещё и в режиме повышенного потребления (видео по rtsp транслирует).

        Меня другое удивляет: все производимые телефоны не хотят работать без аккумулятора! Для меня это было открытием, когда я делал этот дверной глазок! Первым делом вытащил аккумулятор и думаю: "Щас я его запитаю от зарядки и дело в шляпе!". А фиг там :-(

        Все аккумуляторы телефонные идут с контроллером на борту. Я даже пробовал выдрать его из старого аккума и "обмануть" телефон, подведя к контроллеру питание (около 3.6 В по-моему) . Но не "срослось". Телефон вроде загружается, а потом всё равно говорит, что очень низкий заряд и уходит в shutdown.


        1. Z2K
          25.07.2021 22:58

          Так Вы к контактам для батареи подключались или к юсб? Надо питать через БП вместо батареи и чтоб БП хотя бы в импульсе 1-2 сек твердо отдавал 4А без проседания напряжения. И напряжение строго 3.6-3.7В, хотя от батареи работает и при расширеном диапазоне више и ниже этого напряжения.


          1. Nikeware
            26.07.2021 15:49

            К контактам батареи. Точнее к контактам контроллера, к которому подсоединяется сам аккум (Если аккуратно отодрать плашку с контактами от самого аккума, то там обнаружится небольной "контроллер"). К контроллеру вместо самой батареи было подведено напряжение в районе 3.6В с блока питания (5В, 3А) через понижающий DC преобразователь. Ну и сам контроллер контактами к телефону, имитирую тем самым как бы наличие батареи в нём самом.

            Да, я потом где-то читал про ток в 4А, но уже не стал эксперементировать, т.к. к этому времени сделал по схеме, что описал выше. Может попробую потом. Спасибо за подсказку!


            1. Dabbuger
              30.07.2021 16:27

              а почему так мало, 3.6 В это прям считается разряженным АКБ, 3.8 или 4 В было бы нормально, телефон бы не ругался


        1. rogoz
          25.07.2021 23:18

          самодельный БП, контролирующий уровень заряда телефона, чтобы при достижении 85% зарядки, БП отключался, а ниже 15% — включался.
          4pda.to/forum/index.php?showtopic=997661
          Все аккумуляторы телефонные идут с контроллером на борту. Я даже пробовал выдрать его из старого аккума и «обмануть» телефон, подведя к контроллеру питание (около 3.6 В по-моему).
          У меня получалось вместо аккума сразу ~4.0 В подавать и запустить телефон, но это была Xperia Ray 2011 года :)


        1. ybeltukov
          26.07.2021 18:23

          Я старенький htc 500 запитал от сети. На место аккумулятора поставил mini360 с али, выставив на нем около 4 в. Это напряжение надо очень аккуратно подбирать -- от него зависит процент заряда, который покажет телефон при включении.

          Но дальше началось самое интересное -- телефон считал "потраченные" ампер-часы и через несколько дней телефон "разряжался" и выключался. После включения все повторялось заново. Поэтому пришлось прокинуть проводок к юсб-порту для фиктивной зарядки. При этом еще оказалось, что батарея соединена с портом не минусовым, а плюсовым контактом.


          1. Nikeware
            27.07.2021 16:00

            пришлось прокинуть проводок к юсб-порту для фиктивной зарядки

            А можно подробнее, что здесь имеется ввиду? Небольшая схема бы была кстати. Если Вас не затруднит.
            Заранее спасибо!


      1. CrashLogger
        26.07.2021 12:40

        У меня то же самое произошло с аккумулятором в китайской action камере, которая использовалась для видеонаблюдения за двором и работала 24x7 в течение года.


    1. LSiazsaHrd
      25.07.2021 11:11

      У меня Pixel так работал какое-то время airplay-приёмником, постоянно на зарядке. Через месяц заряд упал до каких-то совсем минимальным процентов (хотя зарядка была воткнута и устройство работало). Через какое-то время потребность в приёмнике отпала, и я перевёл телефон в обычный режим (лежит, редко пользуется, со старой симкой) -- и вроде никаких серьёзных последствий не обнаружено (я разрядил полностью телефон и зарядил его в выключенном состоянии).


    1. Andy_Big
      26.07.2021 00:39

      У меня 4G-модем, подключенный к роутеру (фактически на постоянной зарядке), работает уже лет 5. Батарея модема, скорее всего, уже деградировала по емкости, но не вздулась и до сих пор способна 2-3 часа поддерживать работу модема.


    1. maledog
      26.07.2021 12:24

      Тут много комментариев, но почти все не учли, что телефон до того как его поставили в режим 'постоянно от сети" эксплуатировался. Так что к производителю и батарее добавьте еще фактор использования. Я бы еще добавил "бюджетность" телефона, которая не позволяет поставить хороший контроллер питания ...


    1. slonpts
      30.07.2021 04:45

      Тестил несколько древних телефонов (Android 2.3.1 и около того) — они отлично работали, если вытащить аккумулятор и вставить зарядку.


      1. zuek
        06.08.2021 11:00

        Скорее соглашусь - все модели смартфонов, которые у меня "соглашались" работать без аккумулятора - довольно старые, без обновления до андроида 4.х

        Возможно, в самом ядре впилили проверку наличия аккумулятора.


        1. Ark1774
          06.08.2021 12:05

          Всё проще. Раньше возможности зарядки с запасом превышали возможности энергопотребления смартфона/планшета/ноутбука. Сейчас зачастую даже фирменная зарядка слабее чем пиковая производительность техники(особенно актуально для игровых ноутбуков и флагманской линейки смартфонов). Из за чего если на ней к примеру играть во что то тяжёлое во время зарядки, то батарея или не заряжается или вовсе садится.
          А на старте что у смартфона, что у ноута на несколько секунд как минимум ток потребления превышает возможности зарядки, а после первичной/полной загрузки частоты ЦП/ГП срезаются софтом до минимально необходимых(для экономии заряда очевидно). Вот техника и не стартует.


  1. romancelover
    25.07.2021 02:55

    A ethernet подключение работать будет? Для серверного применения провод всегда лучше. Я пробовал ради интереса Ethernet на Андроиде, работает, но не на всех типах адаптеров USB Ethernet, и скорость не 1000, а где-то 350 мегабит в секунду максимум. Но на Андроиде телефон умеет только принимать интернет по проводу. А если захочется раздавать? Можно ли сделать из смартфона продвинутый роутер, например, с функциями поддержания резервного канала по мобильной сети, а основного через Ethernet, или даже SIP-GSM шлюза (принимает звонки на симку, и перенаправляет по SIP)?


    1. Kanedias Автор
      25.07.2021 03:07

      Проблема в том, что USB-to-Ethernet переходник займёт единственный порт телефона, и заряжаться будет неоткуда.

      Тут есть два варианта. Первый - держать телефон воткнутым в USB-порт роутера, а на роутере настроить форвардинг, как в пункте настройка сети. Тогда будет и заряд, и быстрая сеть. По крайней мере с ПК у меня это сработало.

      Второй вариант - купить док-станцию c Power-Delivery например, такую. Там, по идее, есть и порт для Ethernet, и PD-порт, через который заряжается телефон. Но такую конфигурацию я проверить уже не могу, так как у OnePlus One только Micro-USB порт, а не Type-C.


      1. Alexsey
        25.07.2021 03:26

        Мне кажется что OTG кабель с питанием (по типу https://aliexpress.ru/item/32824528102.html) вполне должен решить проблему одновременной зарядки и подключения внешних устройств.


        1. Kanedias Автор
          25.07.2021 03:28

          Выглядит как то, что надо. Поищу такой в городе, отпишусь по результатам эксперимента.


          1. Ark1774
            26.07.2021 10:42

            Ищите магазинчики которые экраны для смартфонов/планшетов продают. Как вариант с доставкой и точкой выдачи. Там много всякого попутного продаётся.


        1. lv333
          25.07.2021 09:31

          Проблема в том что сам телефон это не поддерживает, а кабель можно какой угодно сделать. Максимум чего вы этим добьетесь, устройство подключенное будет брать энергию не с телефона, а с зарядки. А телефон умеет или принимать заряд, или работать в режиме otg и отдавать.


          1. jryj
            25.07.2021 11:25

            К примеру OP3T можно подключить по юсб к компьютеру в режиме модема и он одновременно с этим будет заряжаться.


            1. lv333
              27.07.2021 09:13

              Это немножко не то. Точнее совсем, так вообще любой телефон умеет.


          1. LynXzp
            25.07.2021 12:32

            Моя древняя Motorola Droid 4 2012 и работает с устройством и подзаряжается. Хотя это не значит что все телефоны такие, но скорее означает что «уметь» тут нечего. Просто производители так любят заморачиваться с зарядкой от неизвестных устройств, что запрещают зарядку при любом чихе в их сторону.


          1. blind_oracle
            25.07.2021 13:51

            Все самсунги прекрасно заряжаются и работают с девайсом.

            Да те же пульты от DJI всегда работали как OTG девайс и как зарядник, проблем не было.


          1. Z2K
            25.07.2021 15:10

            В списке поддержки работы функций совместимых телефонов для PostmarketOS почти у всех функция ОТГ работает.


          1. riky
            25.07.2021 17:00

            а нельзя вместо батареи подключить источник питания например 4В ?

            тогда и батарею мучать не надо и отг свободно.

            основноая проблема мне кажется только в том что до батареи сложно добраться и сложные/мелкие коннекторы, не как раньше 2-3 контакта.


            1. lv333
              27.07.2021 09:12

              Да почему нельзя, вполне можно, но придется телефон курочить, можно даже я думаю поставить дешманскую платку с али и заряжать штатную батарейку в обход контроллера в телефоне. От батарейки к телефону вроде как и раньше идёт ровно 3 провода: "+", "-" и 3 подключен к терморезистору(аналоговый датчик температуры).

              Соответственно, обмануть телефон и сделать "эмулятор" батарейки не так уж и сложно, измеряем тестером сопротивление между минусом и 3-м проводом, ставим туда обычный резистор на нужный номинал перемычкой и подаём питание, главное не перепутать полярность и не превысить напряжение ну и ток источник питание должен обеспечить необходимым, собственно все.

              Другой вопрос в том что там все мелкое и лезть туда с дедушкины паяльником на 100+ ватт, точно не стоит. :)


        1. Leon010203
          25.07.2021 10:46

          На xiaomi mi2 с таким подключением только как OTG работал, зарядка не шла. На samsung должно работать


        1. SADKO
          25.07.2021 13:45

          Эти кабели работают только там, где разработчики устройства прямо об этом позаботились.Что весьма не тривиально.


      1. Muzzy0
        30.07.2021 22:19

        Второй вариант — купить док-станцию c Power-Delivery например, такую. Там, по идее, есть и порт для Ethernet, и PD-порт, через который заряжается телефон
        Я подобной пользуюсь на Galaxy S9. Нужно только зарядное именно с Power Delivery. Всякие QuickCharge не катят.


      1. dcoder_mm
        31.07.2021 06:18

        Третий вариант — выкинуть аккум и питать телефон от стаба на ~3.7V.
        Четвертый вариант — взять телефон с разъемом для док-станции (sony xperia 2013-2015 года), и заряжать через него


  1. mrguardian
    25.07.2021 04:50
    +1

    Это очень круто! Спасибо за статью!


    1. Kanedias Автор
      25.07.2021 13:45
      +1

      Уже долго пылилась в черновиках, но когда в PmOS добавили докер из коробки, понял что пора публиковать, а то со временем и на статью-то не наберётся. Рад что вам понравилось.


      1. lv333
        27.07.2021 09:44

        Termux тоже в докер умеет: https://gist.github.com/oofnikj/e79aef095cd08756f7f26ed244355d62

        И поставить все это можно на любой телефон, без регистрации и смс:)


        1. Kanedias Автор
          27.07.2021 11:54

          Я в посте упоминал, почему не остановился на Termux. Да и как бы... в вашем примере QEMU работает без гипервизора KVM, то есть в режиме TCG. Даже когда я пробовал его для эмуляции x86_64 на x86_64 это уже было мучительно медленно.


  1. OmegaM
    25.07.2021 09:51

    Подскажите пожалуйста что за утилита запущена на первой фотографии ?


    1. Detrous
      25.07.2021 10:52
      +1

      Напоминает sampler


    1. Kanedias Автор
      25.07.2021 13:21
      +1

      Утилита bottom. Видимо, название придумано как замена top. Пользуйтесь на здоровье!


  1. AcidVenom
    25.07.2021 11:34

    Осталось кластер из них поднять.


    1. Kanedias Автор
      25.07.2021 13:58

      Из Raspberry Pi как раз недавно делали и всё сетовали на недостаток места.


      1. AcidVenom
        25.07.2021 14:46
        -2

        Это был сарказм. "Кластер из Raspberry" - термин, означающий "сделать что-то бессмысленное".


        1. remzalp
          25.07.2021 16:43

          Для тренировки с чем-то типа k8s вполне себе, немного веселее, чем то же самое делать в виртуалке.


          1. Grikdotnet
            27.07.2021 11:40

            Облако в бесплатном тарифе не подходит потому что слишком обычно? :)


  1. Xadok
    25.07.2021 12:27
    +1

    В первую очередь большое спасибо за статью и популяризацию PostmarketOS! Но хочется заметить, что в статье пропущена вероятно самая большая боль. Установить Postmarket просто если ваше устройство поддерживается. Но! Если ваше устройство не поддерживается или его поддержка в зачаточном состоянии (привет драйвера в виде бинарных блобов из андроида) то поднять там хотя бы wi-fi будет делом нетривиальным. Просидел месяц в попытках заставить адекватно всё это работать на mi-2s но не вышло. С энергопотреблением там тоже какие-то проблемы. У меня телефон всё время был как печка, даже с выключенным экраном. До докера не дошел так как даже wi-fi не завел, а без этого смысла нет.

    P.S. Установить мобильный линукс может быть сильно сложнее чем раче/генту, но необычный опыт гарантирован.


    1. Kanedias Автор
      25.07.2021 13:33
      +2

      Вы совершенно правы, я упоминаю об этом в заключении. И, в таком случае, я бы хотел ещё раз это подчеркнуть. Я немного разбираюсь в железе и линуксе, но и в моём случае это заняло совершенно нетривиальное количество времени. На внесение изменений для поддержки моего устройства ушло порядка месяца, пришлось по крупицам собирать информацию из исходников downstream-ядра производителя, и ещё месяц я ждал ревью предложенных патчей в PostmarketOS.

      Пробуйте PostmarketOS только если у вас хорошо поддерживаемый им телефон, или есть немалый запас свободного времени.


      1. Xadok
        25.07.2021 15:10

        Как-то пропустил ссылки на mr при первом чтении. Времени вы потратили изрядно, т.е. даже рядовому пользователю линукса будет непросто запустить рабочий postmarket на своем устройстве если нет поддержки.


    1. sbanger3000
      25.07.2021 14:55

      Отличное замечание по поводу wi-fi. По моему опыта запуска чистого линукса на смартфонах, наиболее универсальный путь получения начального ssh - установка usb контроллера в режим девайса и загрузка драйвера гаджета rndis. Таким образом можно сходу получить ssh на полумертвом линуксе, и далее, на реальном железе, запускать прочую периферию.

      Нередко на старых китайских ноунеймах для создания wifi девайса требуется заслать андоковый ioctl в комбочип, и в статике эту штуку разреверсить нереально.


    1. riky
      25.07.2021 17:04
      +1

      а через отг нельзя сделать сеть? лично я бы выбрал провод. и надежнее как то и эфир не забивается и со специфическими драйверами не надо лишний раз мучаться.

      а для питания, вместо батареи подключить просто 4В.


      1. Xadok
        25.07.2021 19:30

        Если подключить 4В вместо батареи, то можно и через отг сделать сеть да. Но таким макаром теряем простое резервное питание.


      1. nlykl
        26.07.2021 00:07
        +1

        По идее, можно включить в телефоне режим USB-модема и подключить его к роутеру, имеющему USB-порт. Тогда и не нужно ничего придумывать с питанием.


  1. usa_habro_user
    25.07.2021 13:35

    в качестве альтернативы покупке Raspberry Pi

    А как быть, если вам нужны GPIO для подключения сенсоров и дополнительных устройств? Наверное, все-таки, не "альтернативы"?

    Я как-то собрал домашние интеркомы на основе TalkiePi - и выгодно получилось, и "open source"-во, и, что самое главное, работает out of the box. Любопытно, получилось бы у вас собрать что-то подобное по функциональности на старых телефонах?

    Ну и в-четвёртых, мне просто было жаль их выбрасывать.

    Можно и не выбрасывать; например, я свои старые телефоны donate US army - для солдат "модность" телефона не играет никакой роли, а вот бесплатность и доступность (в полевых-то условиях!) весьма полезны.


    1. Kanedias Автор
      25.07.2021 13:42

      С GPIO я знаю только один телефон, и это Pinephone (см. "six pogo pins" в описании), но вряд ли он у кого-то пылится на полке.

      Любопытно, получилось бы у вас собрать что-то подобное по функциональности на старых телефонах?

      Наверное, если бы я подключал через USB-OTG к ним что-то вроде Lime SDR, что-то и вышло бы, но это уже больше похоже на троллейбус из буханки.

      Нет, если нужна именно функциональность GPIO, нужно смело брать RPi.


      1. usa_habro_user
        27.07.2021 07:06

        Нет, если нужна именно функциональность GPIO, нужно смело брать RPi.

        Даже не столько, как "функциональность GPIO", я бы заметил, сколь "стандартная реализация без бубна". BTW, мне RPi Zero W обошлись когда-то по $10 (да и сейчас они не дороже), потому интересная, но экзотическая идея данного поста проходит мимо меня (но плюс автору за white hat hack!)


      1. usa_habro_user
        27.07.2021 08:10

        но плюс автору за white hat hack!

        Сорри, не заметил, что вы @Kanedias - и есть автор :) Значит, плюс в карму (реальную, не тутошную) именно вам!


    1. sbanger3000
      25.07.2021 15:04

      С GPIO зачастую вопрос решаемый. Все зависит от конкретного девайса, а если к нему удается нагуглить boardview - все становится в разы проще. Зачастую на платах имеются тестпойнты с различными интерфейсами вроде usb, uart или i2c. Также, например, физические кнопки типа vol+/- можно реюзать как GPIO in, а статус лед как GPIO out.

      Это, конечно, не для всех подойдет, но мне например всегда интересно покопаться в плате и что-то такое захачить.


    1. CrashLogger
      26.07.2021 12:54

      Подключить arduino или любой другой микроконтроллер и работать с ним через libusb.


  1. ne555
    25.07.2021 14:24
    +2

    Будущее Termux, например, вообще неясно

    На сколько я могу судить по комментам в GP, многие пользователи все еще не понимают почему у них сбоит Termux. А Termux не может в описании указать, что они окончательно перешли с GP (политика GP не одобряет) на F-droid и там продолжают развивать проект на прежних щах, реализовав уже новые, недостающие функции, например, прокрутка в cli > 2k строк...


  1. charypopper
    25.07.2021 15:09
    -1

    del


  1. dreesh
    25.07.2021 16:53
    +2

    А что за клавиатура на фото?


    1. igorsd
      25.07.2021 19:30
      +1

      Гугл подсказывает что «Fosmon Mini Bluetooth Keyboard».
      Или вот вроде оно же на Али aliexpress.ru/item/33021242524.html


      1. akaAzazello
        25.07.2021 19:37

        Спасибо - очень интересно выглядит:)


      1. dreesh
        25.07.2021 20:43

        Странно, но я не смог найти в гугле. Может мой инфо-пузырь мешает...

        ЗЫ в режиме инкогнито нашлось.


      1. Kanedias Автор
        26.07.2021 12:49

        Верно, это она. Но хотел предупредить, что она не полноразмерная, поэтому комфортно печатать на ней не получится, пальцы будут болеть уже после часа такой работы.


  1. MikeVC
    26.07.2021 06:42
    +1

    И что тут народ переживает по поводу вздутой АКБ ?

    Если телефон больше не мобильный, то можно вобще родную батарею выкинуть и приделать внешнюю со своем зарядником. Припаять провода к плате и вывести за корпус...


    1. tmin10
      26.07.2021 16:07

      А встроенный контроллер батареи в телефоне с ума сходить не будет от такого? Поменяется ёмкость и прочее…


      1. Ark1774
        26.07.2021 16:42

        Если батарея(однобаночная) подсоединяется более чем двумя проводами, то у неё встроенный контролёр и контролёра в телефоне нет. Если подсоединится напрямую вместо батареи, то будет просто показывать 0%(или прочерк, смотря как реализовали) заряда, но работать будет в большинстве случаев.


      1. MikeVC
        26.07.2021 20:40

        От внешнего БП телефоны очень даже работают. Контроллер в АКБ это только у дорогих, навороченных. У обычных телефонов в АКБ только защита. Так что проблем не будет. А верность отображения емкость и уровень при таким применении не имеют значения.


  1. Loki3000
    26.07.2021 12:38

    А какую работу можно поручить такому серверу так, чтобы это было комфортно? На скриншоте - Nextcloud, который весьма прожорлив. Неужели с ним комфортно работать или это просто демонстрация возможностей?


    1. Kanedias Автор
      26.07.2021 12:48

      Я почти не использую веб-интерфейс Nextcloud, чаще захожу через Android-приложение стянуть/загрузить пару файлов и синхронизирую контакты и календари через CardDav/CalDav. Вполне себе тянет.

      Помимо этого делал на нём бэкапы через rsnapshot и различные ежедневные/еженедельные cron-задачи, пока это не переехало на отдельный NAS.


  1. v1000
    26.07.2021 19:29

    Чисто теоретически, может-ли андроид телефон работать без батареи? Потому что по-идее, если телефон обнаруживает, что у него заряд только от зарядного устройства, он может понизить частоту процессора и яркость экрана, и ему в принципе должно хватить тока от зарядки. Но все телефоны, на которых я это пробовал, ругались на то, что нет батареи и не включались.


    1. Kristaller486
      27.07.2021 03:13

      Один из моих телефонов так умел, правда от более-менее серьезных нагрузок вырубался, но это прямо совсем старый и бюджетный телефон.


    1. lv333
      27.07.2021 09:29

      Возможно наличие батареи они как раз определяли по отсутствию сопротивления на том самом терморезисторе о котором я писал чуть выше и если его туда впиндюрить, вполне бы работали от зарядки, разумеется если зарядка вообще способна выдать нужный ток.


  1. Grikdotnet
    27.07.2021 11:50
    -3

    В статье удивила категоричность выбора между "выкинуть" и "сделать сервер". Реальный выбор - выкинуть или продать. Недавно я продал свой Galaxy A7 2017 за $70 - просто запостил объявление, телефону больше 3 лет, и его продолжат использовать по назначению. Сколько стоит удобный мини-компьютер? :)

    Статью можно назвать "запускаем линукс на телефоне, когда ничего придумать не можем, а написать хочется".


    1. lv333
      28.07.2021 14:56

      Ну можно ведь еще подарить!

      А по поводу статьи, так надо еще уточнять "на поддерживаемых моделях телефонов", иначе у читателя сложится неверное впечатление от заголовка, подумает вот он способ запустить линукс на любом телефоне, а на самом деле все не настолько радужно!


      1. usa_habro_user
        29.07.2021 04:48

        иначе у читателя сложится неверное впечатление от заголовка, подумает вот он способ запустить линукс на любом телефоне, а на самом деле все не настолько радужно!

        Ну, автор же пишет (правда, я бы выделил это bold-ом):

        Для установки требуется телефон с разблокированным загрузчиком. 


        1. lv333
          31.07.2021 11:10
          -1

          Загрузчик ерунда, тут наоборот найти телефон с намертво заблокированным еще постараться нужно, как правило производители дают возможность его разблокировать кто то проще кто то сложнее. Тут скорее вопрос будет ли периферия поддерживается, в том числе критически нужная даже для работы в режиме сервера?


  1. vol123
    29.07.2021 19:22
    +1

    Для информации: существует версия Ubuntu для смартфонов - Ubuntu Touch (https://ubuntu-touch.io/ru/) и список совместимых смартфонов практически совпадает с указанной выше ОС.


  1. Zero_Dark_Thirty
    01.08.2021 23:16

    Интересная и познавательная статья, благодарю. Как раз лежит куча Moto G5S, есть на чем потестировать.


  1. XO490
    03.08.2021 21:24

    Благодарю. Давно валяется стопка старых аппаратов. Пора давать им вторую жизнь.


  1. pupich
    13.08.2021 15:03

    А как бы ещё подключить к телефону хранилище в виде массива дисков...