Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.
На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.
Ну и в-четвёртых, мне просто было жаль их выбрасывать. Консьюмеризм в наше время предписывает каждый год-два покупать новые смартфоны, производители блокируют возможности железа, которые им невыгодны, прекращают поддержку старых моделей, оставляя людей беспомощными. Миллионы смартфонов отправляются на свалку истории каждый год, хотя каждый из них это мощный компьютер.
TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.
Сразу хочу оговориться — я понимаю, что есть типовые решения, например Termux или UserLAnd, и спектр поддерживаемых устройств у них шире. Но все они работают как надстройки над основной системой, Android, и подвержены её ограничениям, таким как агрессивное сокращение энергопотребления или перенос задач на LITTLE-ядра при выключении экрана. Будущее Termux, например, вообще неясно из-за всё более жёстких гаек безопасности в Android 11. UserLAnd, помимо этого, работает через PRoot, который при всей своей пользе ощутимо замедляет процессы с большим количеством системных вызовов. В этой статье мы разбираем именно создание сервера на железе без Android.
Часть первая. Прошивка
Проект PostmarketOS был создан именно ради этой цели — сохранение вычислительных устройств после прекращения их поддержки производителями. Список поддерживаемых устройств можно найти здесь.
Для установки требуется телефон с разблокированным загрузчиком. В качестве примера буду использовать OnePlus One из-за простоты разлочки со стороны производителя. Для каждого производителя список шагов разный, ниже привожу обобщённые действия для смартфона 2018-2021 года выпуска:
$ sudo apt install adb fastboot
$ # подключаем телефон к USB
$ adb devices
$ # должен показать устройство в статусе unauthorized
Далее авторизуем подключение на самом телефоне
$ adb devices
$ # теперь должен показать нормальный статус "device"
$ 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 автоматически создаст дополнительную сеть:
После чего к телефону можно будет подключиться с именем и паролем пользователя, который вы указывали при 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
Настройка 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-адрес-телефона>
и смотрим, что получилось:
Часть третья. Заключение
Какие выводы я сделал, проведя такой опыт переноса своих сервисов на телефон? Самое главное — делайте это только убедившись, что точно хотите окунуться в неизвестное и сможете потратить на это 2-4 дня, а может и больше. Сильно поможет, если устройство хорошо поддерживается сообществом, ну и конечно если идеи свободного ПО и переиспользования вам близки :)
В моём случае оказалось, что таким устройством, как у меня, никто из разработчиков не обладает, и пришлось добавлять драйверы производителя, поддержку батареи и её зарядки в ядре и следить за обновлениями, чтобы изменения не потерялись. Тем не менее, после настройки телефон работает как полноценный сервер NextCloud, синхронизируя календарь, файлы и задачи, и потребляя при этом всего 2.5 Вт энергии.
Я выкладываю эту инструкцию в надежде, что она окажется полезной, но не предоставляю никаких гарантий работоспособности результата. Если вы столкнулись с проблемами, пишите в комментарии или в Matrix-каналы разработчиков PostmarketOS, будем разбираться.
Ресурсы, использованные для написания этой статьи
Комментарии (97)
Alexsey
25.07.2021 02:04+4Больше всего в таких проектах меня беспокоит вопрос батареи - не вздуется ли она от постоянного нахождения девайса на зарядке и не перестанет ли девайс включатся когда батарея неминуемо помрет опять же от постоянного нахождения на зарядке.
Utopia
25.07.2021 02:07Думаю все зависит от контроллера батареи и производителя аккумулятора. Только практика покажет правду. И это будет лишь частный случай. По идее не должна. Вздутие обычно означает повреждение от удара. В ноутбуках например стоят годами… но бывает и вздуваются.
Ark1774
25.07.2021 12:55В ноутах это часто предусмотрено штатным софтом. Батарея заряжается до 100% и отключается, ноут работает чисто за счёт зарядки, а батарея постепенно саморазряжается, как достигнет 90%(или другого указанного значения), опять заряжается. Либо не заряжается до 100% при каждом цикле, что так же продлевает её ресурс.
Но куча современных ноутов имеют зарядку слабее чем его потребление на полной производительности и соотв. батарея постоянно участвует в поддержании работы, что значительно сокращает срок её жизни, даже если ноут никогда не снимается с зарядки.Z2K
25.07.2021 14:57+2Теперь уже даже есть режим стационарной работы, аку заряжается до 80-85% и ждет разрядки до 50-55%
Anrikigai
25.07.2021 22:06+1Это эффективно. Для смартфонов тоже рекомендуется заряжать до 80%.
Но вопрос не в продлении жизни батареи, а не вздуется ли она. Раньше у ноутов таких умных режимов частичной зарядки не было, при этом работали годами будучи значительное время подключенными к сети.
У меня вон до сих еще IBMовский ноут живет 15-летней давности. Кроме Debian 32 bit и не знаю, что поставить. Правда батрейку держит только из комнаты в комнату перейти, но не "взбухает" же.
Другое дело, что там и элементы питания были другие, нежели в смартфонах. И это не дает мне спокойно экстраполировать опыт ноутбуков на смартфоны (как старые десятилетней давности типа LG Nexus 4, так и более новые)
zuek
06.08.2021 10:48У меня до сих пор жив ноут, списанный в 2003 году - RoverBook, PIII 1000. Акк родной, но заряд держит минут 5. А у смартфонов всех лет через 5 аккумуляторы вздуваются, независимо от нахождения на зарядке или в ящике стола, но некоторые (увы, меньшинство) умеют работать просто от зарядки.
trimtomato
25.07.2021 23:10Хочу себе такой режим, как мне больше узнать о нём? Как называется? На Винде доступен, драйвер может какой-то специальный надо или где-то включается? Или такое только на уровне железа бывает и если производитель не дал, то и ничего не поделать? В общем, вопросов много.
iROOT
26.07.2021 21:23Знаю два производителя у которых есть софт для ограничения заряда. Это ASUS Battery Health Charging и Lenovo Vantage (отдельная функция).
nikodll
27.07.2021 17:12У Dell такой тоже есть. Включается в биосе, поддержка софта/драйверов нужна только если хотите без перезагрузки настройки менять, например командой:
/opt/dell/dcc/cctk --PrimaryBattChargeCfg=Custom:50-80
az0ff
30.07.2021 11:34Не знаю, есть ли специальные софтины для такого. Но у некоторых новых буков уже есть по дефолту такая функция. У меня MSI Modern 14, в штатной утилите Creator Center есть возможность настроить несколько режимов заряда батареи: до 100%, до 80% и до 60%. У меня стоят две системы, винда и линукс. Здорово то, что если под виндой выставил режим заряда до 60%, то это работет и под линуксом, т.е. ноут заряжается до 60% и дальше работает от сети, пока батарея не разрядится до 49%, потом он снова заряжает её до 60%. Скорее всего это реализовано на уровне железа и управляется через специальные софтины от производителя.
arthuriantech
25.07.2021 02:37+7У меня аккумуляторы от Nokia E51 и Redmi Note 3 вздувались спустя несколько месяцев при 100% на зарядке. Чтобы этого не было, надо ограничивать зарядку в пределах 55 - 60%. Сейчас на Redmi работает Battery Charge Limit и спустя 7 месяцев висения на проводе аккумулятор не вздулся и вполне живой.
Kanedias Автор
25.07.2021 02:46+1У меня заряженный Oneplus One лежит уже довольно долго, отключал я его за три месяца только раз или два. Пока что батарея в порядке.
По моим наблюдениям, при достижении 100% заряда ядро переключает контроллер в режим "trickle-charge". Если CPU телефона начинает активно использоваться и батарея тратится, через некоторое время ядро переключает контроллер обратно в "fast-charge", и так пока заряд снова не станет 100%.
Отпишу здесь доп. комментарий, если начнутся проблемы
Number7
25.07.2021 10:42+2по опыту скажу: через год постоянной подзарядки ощутимо вздувается. через полтора - выпирает так что гнется задняя стенка.
мобила самсунг. работала как 4g модем нон-стоп 3 года. два раза менял батареи.
LynXzp
25.07.2021 12:29+6O_o Даже не знал что некоторые телефоны могут такое сделать. У меня все телефоны (кроме первых кнопочных) постоянно лежат на зарядке. Ну как минимум 90% времени.
Motorola Droid 4 (батарея в принципе вздулась, но ей было точно больше 5 лет)
Xiaomi Redmi Note 8 (год полет нормальный, пока не разбирал)
Jellyfish Pro (прямо сейчас разобрал — батарея немного выпуклая)
Да ну к черту, как пользоваться этими смартфонами если они быстро разряжаются и их нельзя держать на зарядке. Если я ими пользуюсь реже чем раз в день и работаю дома. Ничтожества, а не телефоны.
Nikeware
25.07.2021 22:08+1Подтверждаю. У меня старый Самсунг в качестве дверного глазка. Изначально был постоянно подключен к зарядке. Через несколько месяцев батарея вздулась так, что выперло крышку. Проблема в том, что он у меня постоянно транслирует по rtsp во внутреннюю сеть по Wi-Fi и соответственно "кушает" много.
Я поступил немного по другому: самодельный БП, контролирующий уровень заряда телефона, чтобы при достижении 85% зарядки, БП отключался, а ниже 15% - включался. Почти год так работает, вроде пока нормально. Хотя во время зарядки греется заметно больше, чем при работе от аккума.Оно и понятно: аккум заряжается, а телефон в это время ещё и в режиме повышенного потребления (видео по rtsp транслирует).
Меня другое удивляет: все производимые телефоны не хотят работать без аккумулятора! Для меня это было открытием, когда я делал этот дверной глазок! Первым делом вытащил аккумулятор и думаю: "Щас я его запитаю от зарядки и дело в шляпе!". А фиг там :-(
Все аккумуляторы телефонные идут с контроллером на борту. Я даже пробовал выдрать его из старого аккума и "обмануть" телефон, подведя к контроллеру питание (около 3.6 В по-моему) . Но не "срослось". Телефон вроде загружается, а потом всё равно говорит, что очень низкий заряд и уходит в shutdown.
Z2K
25.07.2021 22:58Так Вы к контактам для батареи подключались или к юсб? Надо питать через БП вместо батареи и чтоб БП хотя бы в импульсе 1-2 сек твердо отдавал 4А без проседания напряжения. И напряжение строго 3.6-3.7В, хотя от батареи работает и при расширеном диапазоне више и ниже этого напряжения.
Nikeware
26.07.2021 15:49К контактам батареи. Точнее к контактам контроллера, к которому подсоединяется сам аккум (Если аккуратно отодрать плашку с контактами от самого аккума, то там обнаружится небольной "контроллер"). К контроллеру вместо самой батареи было подведено напряжение в районе 3.6В с блока питания (5В, 3А) через понижающий DC преобразователь. Ну и сам контроллер контактами к телефону, имитирую тем самым как бы наличие батареи в нём самом.
Да, я потом где-то читал про ток в 4А, но уже не стал эксперементировать, т.к. к этому времени сделал по схеме, что описал выше. Может попробую потом. Спасибо за подсказку!
Dabbuger
30.07.2021 16:27а почему так мало, 3.6 В это прям считается разряженным АКБ, 3.8 или 4 В было бы нормально, телефон бы не ругался
rogoz
25.07.2021 23:18самодельный БП, контролирующий уровень заряда телефона, чтобы при достижении 85% зарядки, БП отключался, а ниже 15% — включался.
4pda.to/forum/index.php?showtopic=997661Все аккумуляторы телефонные идут с контроллером на борту. Я даже пробовал выдрать его из старого аккума и «обмануть» телефон, подведя к контроллеру питание (около 3.6 В по-моему).
У меня получалось вместо аккума сразу ~4.0 В подавать и запустить телефон, но это была Xperia Ray 2011 года :)
ybeltukov
26.07.2021 18:23Я старенький htc 500 запитал от сети. На место аккумулятора поставил mini360 с али, выставив на нем около 4 в. Это напряжение надо очень аккуратно подбирать -- от него зависит процент заряда, который покажет телефон при включении.
Но дальше началось самое интересное -- телефон считал "потраченные" ампер-часы и через несколько дней телефон "разряжался" и выключался. После включения все повторялось заново. Поэтому пришлось прокинуть проводок к юсб-порту для фиктивной зарядки. При этом еще оказалось, что батарея соединена с портом не минусовым, а плюсовым контактом.
Nikeware
27.07.2021 16:00пришлось прокинуть проводок к юсб-порту для фиктивной зарядки
А можно подробнее, что здесь имеется ввиду? Небольшая схема бы была кстати. Если Вас не затруднит.
Заранее спасибо!
CrashLogger
26.07.2021 12:40У меня то же самое произошло с аккумулятором в китайской action камере, которая использовалась для видеонаблюдения за двором и работала 24x7 в течение года.
LSiazsaHrd
25.07.2021 11:11У меня Pixel так работал какое-то время airplay-приёмником, постоянно на зарядке. Через месяц заряд упал до каких-то совсем минимальным процентов (хотя зарядка была воткнута и устройство работало). Через какое-то время потребность в приёмнике отпала, и я перевёл телефон в обычный режим (лежит, редко пользуется, со старой симкой) -- и вроде никаких серьёзных последствий не обнаружено (я разрядил полностью телефон и зарядил его в выключенном состоянии).
Andy_Big
26.07.2021 00:39У меня 4G-модем, подключенный к роутеру (фактически на постоянной зарядке), работает уже лет 5. Батарея модема, скорее всего, уже деградировала по емкости, но не вздулась и до сих пор способна 2-3 часа поддерживать работу модема.
maledog
26.07.2021 12:24Тут много комментариев, но почти все не учли, что телефон до того как его поставили в режим 'постоянно от сети" эксплуатировался. Так что к производителю и батарее добавьте еще фактор использования. Я бы еще добавил "бюджетность" телефона, которая не позволяет поставить хороший контроллер питания ...
slonpts
30.07.2021 04:45Тестил несколько древних телефонов (Android 2.3.1 и около того) — они отлично работали, если вытащить аккумулятор и вставить зарядку.
zuek
06.08.2021 11:00Скорее соглашусь - все модели смартфонов, которые у меня "соглашались" работать без аккумулятора - довольно старые, без обновления до андроида 4.х
Возможно, в самом ядре впилили проверку наличия аккумулятора.
Ark1774
06.08.2021 12:05Всё проще. Раньше возможности зарядки с запасом превышали возможности энергопотребления смартфона/планшета/ноутбука. Сейчас зачастую даже фирменная зарядка слабее чем пиковая производительность техники(особенно актуально для игровых ноутбуков и флагманской линейки смартфонов). Из за чего если на ней к примеру играть во что то тяжёлое во время зарядки, то батарея или не заряжается или вовсе садится.
А на старте что у смартфона, что у ноута на несколько секунд как минимум ток потребления превышает возможности зарядки, а после первичной/полной загрузки частоты ЦП/ГП срезаются софтом до минимально необходимых(для экономии заряда очевидно). Вот техника и не стартует.
romancelover
25.07.2021 02:55A ethernet подключение работать будет? Для серверного применения провод всегда лучше. Я пробовал ради интереса Ethernet на Андроиде, работает, но не на всех типах адаптеров USB Ethernet, и скорость не 1000, а где-то 350 мегабит в секунду максимум. Но на Андроиде телефон умеет только принимать интернет по проводу. А если захочется раздавать? Можно ли сделать из смартфона продвинутый роутер, например, с функциями поддержания резервного канала по мобильной сети, а основного через Ethernet, или даже SIP-GSM шлюза (принимает звонки на симку, и перенаправляет по SIP)?
Kanedias Автор
25.07.2021 03:07Проблема в том, что USB-to-Ethernet переходник займёт единственный порт телефона, и заряжаться будет неоткуда.
Тут есть два варианта. Первый - держать телефон воткнутым в USB-порт роутера, а на роутере настроить форвардинг, как в пункте настройка сети. Тогда будет и заряд, и быстрая сеть. По крайней мере с ПК у меня это сработало.
Второй вариант - купить док-станцию c Power-Delivery например, такую. Там, по идее, есть и порт для Ethernet, и PD-порт, через который заряжается телефон. Но такую конфигурацию я проверить уже не могу, так как у OnePlus One только Micro-USB порт, а не Type-C.
Alexsey
25.07.2021 03:26Мне кажется что OTG кабель с питанием (по типу https://aliexpress.ru/item/32824528102.html) вполне должен решить проблему одновременной зарядки и подключения внешних устройств.
lv333
25.07.2021 09:31Проблема в том что сам телефон это не поддерживает, а кабель можно какой угодно сделать. Максимум чего вы этим добьетесь, устройство подключенное будет брать энергию не с телефона, а с зарядки. А телефон умеет или принимать заряд, или работать в режиме otg и отдавать.
LynXzp
25.07.2021 12:32Моя древняя Motorola Droid 4 2012 и работает с устройством и подзаряжается. Хотя это не значит что все телефоны такие, но скорее означает что «уметь» тут нечего. Просто производители так любят заморачиваться с зарядкой от неизвестных устройств, что запрещают зарядку при любом чихе в их сторону.
blind_oracle
25.07.2021 13:51Все самсунги прекрасно заряжаются и работают с девайсом.
Да те же пульты от DJI всегда работали как OTG девайс и как зарядник, проблем не было.
Z2K
25.07.2021 15:10В списке поддержки работы функций совместимых телефонов для PostmarketOS почти у всех функция ОТГ работает.
riky
25.07.2021 17:00а нельзя вместо батареи подключить источник питания например 4В ?
тогда и батарею мучать не надо и отг свободно.
основноая проблема мне кажется только в том что до батареи сложно добраться и сложные/мелкие коннекторы, не как раньше 2-3 контакта.
lv333
27.07.2021 09:12Да почему нельзя, вполне можно, но придется телефон курочить, можно даже я думаю поставить дешманскую платку с али и заряжать штатную батарейку в обход контроллера в телефоне. От батарейки к телефону вроде как и раньше идёт ровно 3 провода: "+", "-" и 3 подключен к терморезистору(аналоговый датчик температуры).
Соответственно, обмануть телефон и сделать "эмулятор" батарейки не так уж и сложно, измеряем тестером сопротивление между минусом и 3-м проводом, ставим туда обычный резистор на нужный номинал перемычкой и подаём питание, главное не перепутать полярность и не превысить напряжение ну и ток источник питание должен обеспечить необходимым, собственно все.
Другой вопрос в том что там все мелкое и лезть туда с дедушкины паяльником на 100+ ватт, точно не стоит. :)
Leon010203
25.07.2021 10:46На xiaomi mi2 с таким подключением только как OTG работал, зарядка не шла. На samsung должно работать
SADKO
25.07.2021 13:45Эти кабели работают только там, где разработчики устройства прямо об этом позаботились.Что весьма не тривиально.
Muzzy0
30.07.2021 22:19Второй вариант — купить док-станцию c Power-Delivery например, такую. Там, по идее, есть и порт для Ethernet, и PD-порт, через который заряжается телефон
Я подобной пользуюсь на Galaxy S9. Нужно только зарядное именно с Power Delivery. Всякие QuickCharge не катят.
dcoder_mm
31.07.2021 06:18Третий вариант — выкинуть аккум и питать телефон от стаба на ~3.7V.
Четвертый вариант — взять телефон с разъемом для док-станции (sony xperia 2013-2015 года), и заряжать через него
mrguardian
25.07.2021 04:50+1Это очень круто! Спасибо за статью!
Kanedias Автор
25.07.2021 13:45+1Уже долго пылилась в черновиках, но когда в PmOS добавили докер из коробки, понял что пора публиковать, а то со временем и на статью-то не наберётся. Рад что вам понравилось.
lv333
27.07.2021 09:44Termux тоже в докер умеет: https://gist.github.com/oofnikj/e79aef095cd08756f7f26ed244355d62
И поставить все это можно на любой телефон, без регистрации и смс:)
Kanedias Автор
27.07.2021 11:54Я в посте упоминал, почему не остановился на Termux. Да и как бы... в вашем примере QEMU работает без гипервизора KVM, то есть в режиме TCG. Даже когда я пробовал его для эмуляции x86_64 на x86_64 это уже было мучительно медленно.
AcidVenom
25.07.2021 11:34Осталось кластер из них поднять.
Kanedias Автор
25.07.2021 13:58Из Raspberry Pi как раз недавно делали и всё сетовали на недостаток места.
Xadok
25.07.2021 12:27+1В первую очередь большое спасибо за статью и популяризацию PostmarketOS! Но хочется заметить, что в статье пропущена вероятно самая большая боль. Установить Postmarket просто если ваше устройство поддерживается. Но! Если ваше устройство не поддерживается или его поддержка в зачаточном состоянии (привет драйвера в виде бинарных блобов из андроида) то поднять там хотя бы wi-fi будет делом нетривиальным. Просидел месяц в попытках заставить адекватно всё это работать на mi-2s но не вышло. С энергопотреблением там тоже какие-то проблемы. У меня телефон всё время был как печка, даже с выключенным экраном. До докера не дошел так как даже wi-fi не завел, а без этого смысла нет.
P.S. Установить мобильный линукс может быть сильно сложнее чем раче/генту, но необычный опыт гарантирован.
Kanedias Автор
25.07.2021 13:33+2Вы совершенно правы, я упоминаю об этом в заключении. И, в таком случае, я бы хотел ещё раз это подчеркнуть. Я немного разбираюсь в железе и линуксе, но и в моём случае это заняло совершенно нетривиальное количество времени. На внесение изменений для поддержки моего устройства ушло порядка месяца, пришлось по крупицам собирать информацию из исходников downstream-ядра производителя, и ещё месяц я ждал ревью предложенных патчей в PostmarketOS.
Пробуйте PostmarketOS только если у вас хорошо поддерживаемый им телефон, или есть немалый запас свободного времени.
Xadok
25.07.2021 15:10Как-то пропустил ссылки на mr при первом чтении. Времени вы потратили изрядно, т.е. даже рядовому пользователю линукса будет непросто запустить рабочий postmarket на своем устройстве если нет поддержки.
sbanger3000
25.07.2021 14:55Отличное замечание по поводу wi-fi. По моему опыта запуска чистого линукса на смартфонах, наиболее универсальный путь получения начального ssh - установка usb контроллера в режим девайса и загрузка драйвера гаджета rndis. Таким образом можно сходу получить ssh на полумертвом линуксе, и далее, на реальном железе, запускать прочую периферию.
Нередко на старых китайских ноунеймах для создания wifi девайса требуется заслать андоковый ioctl в комбочип, и в статике эту штуку разреверсить нереально.
riky
25.07.2021 17:04+1а через отг нельзя сделать сеть? лично я бы выбрал провод. и надежнее как то и эфир не забивается и со специфическими драйверами не надо лишний раз мучаться.
а для питания, вместо батареи подключить просто 4В.
Xadok
25.07.2021 19:30Если подключить 4В вместо батареи, то можно и через отг сделать сеть да. Но таким макаром теряем простое резервное питание.
nlykl
26.07.2021 00:07+1По идее, можно включить в телефоне режим USB-модема и подключить его к роутеру, имеющему USB-порт. Тогда и не нужно ничего придумывать с питанием.
usa_habro_user
25.07.2021 13:35в качестве альтернативы покупке Raspberry Pi
А как быть, если вам нужны GPIO для подключения сенсоров и дополнительных устройств? Наверное, все-таки, не "альтернативы"?
Я как-то собрал домашние интеркомы на основе TalkiePi - и выгодно получилось, и "open source"-во, и, что самое главное, работает out of the box. Любопытно, получилось бы у вас собрать что-то подобное по функциональности на старых телефонах?
Ну и в-четвёртых, мне просто было жаль их выбрасывать.
Можно и не выбрасывать; например, я свои старые телефоны donate US army - для солдат "модность" телефона не играет никакой роли, а вот бесплатность и доступность (в полевых-то условиях!) весьма полезны.
Kanedias Автор
25.07.2021 13:42С GPIO я знаю только один телефон, и это Pinephone (см. "six pogo pins" в описании), но вряд ли он у кого-то пылится на полке.
Любопытно, получилось бы у вас собрать что-то подобное по функциональности на старых телефонах?
Наверное, если бы я подключал через USB-OTG к ним что-то вроде Lime SDR, что-то и вышло бы, но это уже больше похоже на троллейбус из буханки.
Нет, если нужна именно функциональность GPIO, нужно смело брать RPi.
usa_habro_user
27.07.2021 07:06Нет, если нужна именно функциональность GPIO, нужно смело брать RPi.
Даже не столько, как "функциональность GPIO", я бы заметил, сколь "стандартная реализация без бубна". BTW, мне RPi Zero W обошлись когда-то по $10 (да и сейчас они не дороже), потому интересная, но экзотическая идея данного поста проходит мимо меня (но плюс автору за white hat hack!)
usa_habro_user
27.07.2021 08:10но плюс автору за white hat hack!
Сорри, не заметил, что вы @Kanedias - и есть автор :) Значит, плюс в карму (реальную, не тутошную) именно вам!
sbanger3000
25.07.2021 15:04С GPIO зачастую вопрос решаемый. Все зависит от конкретного девайса, а если к нему удается нагуглить boardview - все становится в разы проще. Зачастую на платах имеются тестпойнты с различными интерфейсами вроде usb, uart или i2c. Также, например, физические кнопки типа vol+/- можно реюзать как GPIO in, а статус лед как GPIO out.
Это, конечно, не для всех подойдет, но мне например всегда интересно покопаться в плате и что-то такое захачить.
CrashLogger
26.07.2021 12:54Подключить arduino или любой другой микроконтроллер и работать с ним через libusb.
ne555
25.07.2021 14:24+2Будущее Termux, например, вообще неясно
На сколько я могу судить по комментам в GP, многие пользователи все еще не понимают почему у них сбоит Termux. А Termux не может в описании указать, что они окончательно перешли с GP (политика GP не одобряет) на F-droid и там продолжают развивать проект на прежних щах, реализовав уже новые, недостающие функции, например, прокрутка в cli > 2k строк...
dreesh
25.07.2021 16:53+2А что за клавиатура на фото?
igorsd
25.07.2021 19:30+1Гугл подсказывает что «Fosmon Mini Bluetooth Keyboard».
Или вот вроде оно же на Али aliexpress.ru/item/33021242524.htmldreesh
25.07.2021 20:43Странно, но я не смог найти в гугле. Может мой инфо-пузырь мешает...
ЗЫ в режиме инкогнито нашлось.
Kanedias Автор
26.07.2021 12:49Верно, это она. Но хотел предупредить, что она не полноразмерная, поэтому комфортно печатать на ней не получится, пальцы будут болеть уже после часа такой работы.
MikeVC
26.07.2021 06:42+1И что тут народ переживает по поводу вздутой АКБ ?
Если телефон больше не мобильный, то можно вобще родную батарею выкинуть и приделать внешнюю со своем зарядником. Припаять провода к плате и вывести за корпус...
tmin10
26.07.2021 16:07А встроенный контроллер батареи в телефоне с ума сходить не будет от такого? Поменяется ёмкость и прочее…
Ark1774
26.07.2021 16:42Если батарея(однобаночная) подсоединяется более чем двумя проводами, то у неё встроенный контролёр и контролёра в телефоне нет. Если подсоединится напрямую вместо батареи, то будет просто показывать 0%(или прочерк, смотря как реализовали) заряда, но работать будет в большинстве случаев.
MikeVC
26.07.2021 20:40От внешнего БП телефоны очень даже работают. Контроллер в АКБ это только у дорогих, навороченных. У обычных телефонов в АКБ только защита. Так что проблем не будет. А верность отображения емкость и уровень при таким применении не имеют значения.
Loki3000
26.07.2021 12:38А какую работу можно поручить такому серверу так, чтобы это было комфортно? На скриншоте - Nextcloud, который весьма прожорлив. Неужели с ним комфортно работать или это просто демонстрация возможностей?
Kanedias Автор
26.07.2021 12:48Я почти не использую веб-интерфейс Nextcloud, чаще захожу через Android-приложение стянуть/загрузить пару файлов и синхронизирую контакты и календари через CardDav/CalDav. Вполне себе тянет.
Помимо этого делал на нём бэкапы через rsnapshot и различные ежедневные/еженедельные cron-задачи, пока это не переехало на отдельный NAS.
v1000
26.07.2021 19:29Чисто теоретически, может-ли андроид телефон работать без батареи? Потому что по-идее, если телефон обнаруживает, что у него заряд только от зарядного устройства, он может понизить частоту процессора и яркость экрана, и ему в принципе должно хватить тока от зарядки. Но все телефоны, на которых я это пробовал, ругались на то, что нет батареи и не включались.
Kristaller486
27.07.2021 03:13Один из моих телефонов так умел, правда от более-менее серьезных нагрузок вырубался, но это прямо совсем старый и бюджетный телефон.
lv333
27.07.2021 09:29Возможно наличие батареи они как раз определяли по отсутствию сопротивления на том самом терморезисторе о котором я писал чуть выше и если его туда впиндюрить, вполне бы работали от зарядки, разумеется если зарядка вообще способна выдать нужный ток.
Grikdotnet
27.07.2021 11:50-3В статье удивила категоричность выбора между "выкинуть" и "сделать сервер". Реальный выбор - выкинуть или продать. Недавно я продал свой Galaxy A7 2017 за $70 - просто запостил объявление, телефону больше 3 лет, и его продолжат использовать по назначению. Сколько стоит удобный мини-компьютер? :)
Статью можно назвать "запускаем линукс на телефоне, когда ничего придумать не можем, а написать хочется".
lv333
28.07.2021 14:56Ну можно ведь еще подарить!
А по поводу статьи, так надо еще уточнять "на поддерживаемых моделях телефонов", иначе у читателя сложится неверное впечатление от заголовка, подумает вот он способ запустить линукс на любом телефоне, а на самом деле все не настолько радужно!
usa_habro_user
29.07.2021 04:48иначе у читателя сложится неверное впечатление от заголовка, подумает вот он способ запустить линукс на любом телефоне, а на самом деле все не настолько радужно!
Ну, автор же пишет (правда, я бы выделил это bold-ом):
Для установки требуется телефон с разблокированным загрузчиком.
lv333
31.07.2021 11:10-1Загрузчик ерунда, тут наоборот найти телефон с намертво заблокированным еще постараться нужно, как правило производители дают возможность его разблокировать кто то проще кто то сложнее. Тут скорее вопрос будет ли периферия поддерживается, в том числе критически нужная даже для работы в режиме сервера?
vol123
29.07.2021 19:22+1Для информации: существует версия Ubuntu для смартфонов - Ubuntu Touch (https://ubuntu-touch.io/ru/) и список совместимых смартфонов практически совпадает с указанной выше ОС.
Zero_Dark_Thirty
01.08.2021 23:16Интересная и познавательная статья, благодарю. Как раз лежит куча Moto G5S, есть на чем потестировать.
XO490
03.08.2021 21:24Благодарю. Давно валяется стопка старых аппаратов. Пора давать им вторую жизнь.
raamid
Супер! Спасибо, это круто! А я как раз подумывал железку для домашнего сервера покупать, а тут такая статья :)