Содержание статьи
INFO
Описанные шаги производились на смартфоне возрастом пять лет с Android 4.4. Если твой смартфон еще старше — будь готов к тому, что гайд для него не подойдет (например, из-за отсутствия поддержки LineageOS или использованных в статье утилит). Да, жизнь жестока.
Подготовка
Для начала выполним несколько подготовительных шагов.
Чистим смартфон
Первое, что нам необходимо сделать, — это очистить аппарат от мусора. Удаляем все файлы с карты памяти (внутренней и съемной), а затем делаем сброс до заводских настроек (Настройки → Восстановление и сброс → Сброс настроек). Это нужно, чтобы избавиться от установленных приложений, которые тоже могут висеть в памяти и жрать оперативку.
Также настоятельно рекомендую установить на смартфон LineageOS, а поверх нее пакет gapps-pico. Так ты получишь смартфон с доступом к маркету, но без огромного количества блоата, который так любят предустанавливать производители и Google.
После регистрации в Google сразу отключи все виды синхронизации, перейдя в «Настройки → Аккаунты → Google». На сервере от этой синхронизации никакого прока, она будет только мешать. Функции пробуждения при получении уведомления и always on display, а также светодиодный индикатор тоже не нужны. Перейди в «Настройки → Приложения» и отключи весь софт, который возможно отключить. Email, браузер, службы Exchange — все это нам не нужно.
В результате у тебя окажется система, которая по минимуму использует оперативку и не держит в памяти ненужные приложения и службы, — голый и урезанный со всех сторон смартфон. Нелишним будет получить права root. Большинство описанных в статье серверов их не требуют, но они понадобятся, если ты захочешь иметь нормальную командную строку с набором утилит Linux и полный контроль над сервером.
SSH и BusyBox
Android построен на ядре Linux, что для нас большой плюс: Linux прекрасно оптимизирован для серверов. Однако вся остальная часть системы сильно отличается от типичных дистрибутивов Linux. Здесь нет многих стандартных для Linux команд, к Android нельзя подключиться по SSH, системы контроля сетевых служб тоже как бы нет (есть местный init, но это вещь в себе).
Чтобы это исправить, установим BusyBox и SSH-сервер. Первый представляет собой минималистичный комплект стандартных утилит командной строки Linux, второй понятно что. Для установки BusyBox воспользуемся приложением BusyBox On Rails. Все предельно просто: запускаем приложение, кликаем несколько кнопок, соглашаемся предоставить права root — готово.
На роль SSH-сервера отлично подойдет SimpleSSHD. Внутри это SSH-сервер Dropbear для встраиваемых устройств, снабженный графическим интерфейсом. Устанавливаем, запускаем, переходим в настройки, отмечаем галочкой опцию Start on Boot, возвращаемся назад и нажимаем кнопку Start.
SimpleSSHD выведет на экран IP-адрес, порт по умолчанию 2222. Подключиться к нему из Linux можно так:
$ ssh IP-адрес -p 2222
При подключении на экране смартфона появится одноразовый пароль, который следует указать в приглашении клиента. Это очень безопасный, но не очень удобный способ аутентификации, поэтому рекомендую использовать аутентификацию по ключам. Просто переименуй свой открытый ключ (id_rsa.pub
) в authorized_keys
и положи в каталог ssh на карте памяти.
Сразу после подключения к серверу выполни команду su
, чтобы SimpleSSHD запросил права root на смартфоне. Подтверди права и не забудь поставить галочку «Больше не спрашивать» (в LineageOS) или сними галочку «Спросить снова» (SuperSU). Это нужно, чтобы в будущем ты мог в любой момент получить root без всяких запросов со стороны Android.
Bash, nano, tmux, mc
BusyBox содержит только базовый набор утилит командной строки, многие из которых к тому же имеют сильно урезанную функциональность. В BusyBox нет ни bash, ни вменяемых консольных редакторов (Vi в расчет не берем, это не Vim), ни mc и tmux, без которых многие админы не представляют себе жизни.
Если тебе все это нужно, придется установить утилиты самостоятельно. Правильный способ это сделать — скачать компилятор Linaro, исходники утилит и собрать их самому. Быстрый способ — выдрать из уже имеющегося приложения, например из Terminal IDE.
Скачиваем Terminal IDE, переименовываем пакет APK в ZIP, распаковываем, находим файл assets/system-2.0.tar.gz.mp3
, переименовываем, убирая расширение mp3, и вновь распаковываем. Внутри будет множество каталогов и файлов, из которых нас интересуют только system/bin
и system/etc/terminfo
. Первый содержит нужные нам утилиты; просто скопируй те, что тебе пригодятся, в отдельный каталог. Второй необходим для их корректного функционирования.
Выбранные утилиты и каталог terminfo скинь на карту памяти смартфона. Затем подключись к нему по SSH и введи следующие команды, чтобы получить возможность модификации системного каталога:
$ su
# mount -o remount,rw /system
Далее скопируй все нужные утилиты в /system/xbin/
и установи на них бит исполнения (на примере bash):
# cp bash /system/xbin/
# chmod 755 /system/xbin/bash
Затем создай файл /sdcard/ssh/.bashrc
, помести в него следующие строки:
export TERMINFO=/sdcard/terminfo
export TMPDIR=/data/local/tmp
export PS1="u@h:w $ "
Открой настройки SimpleSSHD на смартфоне и в опции Login Shell укажи /system/xbin/bash
, останови и вновь запусти сервер. При следующем входе по SSH откроется bash и будут доступны скопированные тобой утилиты.
Чтобы добиться корректной работы Vim и mc, скопируй на карту памяти также каталоги etc/mc
и etc/vim
, а в файл /sdcard/ssh/.bashrc
добавь строки
export MC_DATADIR=/sdcard/mc
export VIMRUNTIME=/sdcard/vim
WARNING
Если сразу после логина вместо имени пользователя и хоста ты видишь -bash-4.2$
, запусти bash повторно. Такая ошибка возникает из-за проблем с автоматическим определением домашнего каталога.
Отключаем энергосбережение
Как и любая другая мобильная ОС, Android всеми силами старается сберечь энергию. Поэтому сразу после отключения экрана он как можно скорее переводит смартфон в режим suspend, при котором прекращается/снижается подача питания не только на экран, но и на сам процессор (аналог suspend to ram в компах).
Нам такое поведение будет только мешать, поэтому его следует отключить. Для этого активируем так называемый wakelock, который заставит систему не переходить в режим suspend:
$ su
# echo mylock > /sys/power/wake_lock
Wakelock будет оставаться активным, пока жива система, но после перезагрузки его придется активировать снова. В прошивках, основанных на LineageOS/CyanogenMod, это можно автоматизировать. Создай файл со следующим содержимым:
#!/system/bin/sh
echo mylock > /sys/power/wake_lock
И скопируй его в каталог /system/etc/init.d
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»