В этой заметке я расскажу как собрать своё Linux-окружение на Android-смартфоне без прав root (рутовать телефон не надо). Можно конечно взять готовые решения в Google Play Store, но можно и пройти этот путь самостоятельно.Если вы решите повторить мой опыт, то вы получите Xfce4-окружение с псевдо пользователем root на своём мобильнрм телефоне с Android. Работает это почти без отличий от реального пользователя root, только конечно модифицировать сам телефон это возможности не даёт. Итак приступим.
++ Termux
Установим в Android приложение [[https://play.google.com/store/apps/details?id=com.termux&hl=... Termux]]. Это наше базовое Linux окружение и отправная точка. Запуская его мы попадаем в шелл с домашним каталогом, который будем называть TERMUX_HOME.
Итак в TERMUX_HOME установим требуемые нам начальные пакеты:
pkg install root-repo
pkg install proot
pkg install debootstrap
pkg install nano
pkg install wget
pkg install man++ Debootstrap
Теперь можно устанавливать Linux окружение.
Проверим нашу архитектуру.uname -ar
Linux localhost 4.9.193-perf-gc285628 #1 SMP PREEMT Fri Aug 6 02:12:50 CST 2021 aarch64 AndroidМоя архитектура 64-битная, значит --arch=arm64. Если у вас архитектура 32-битная, то ваш вариант --arch=armhf
В TERMUX_HOME:
mkdir ./chroot
debootstrap --arch=arm64 bullseye ./chroot http://mirror.yandex.ru/debian
mkdir ./chroot/system
mkdir ./chroot/apex
mkdir ./chroot/home/userВот мы получили базовое окружение. Правда dpkg configure отработает наверное с некоторыми ошибками, но войти в окружение уже можно. Ошибки мы разберём позже.
++ Вход в Linux окружение
Вход под псевдо рутом нам позволяет команда proot, которую мы установили ранее. В TEMUX_HOME создадим скрипт входа start.sh:
#!/data/data/com.termux/files/usr/bin/sh
unset LD_PRELOAD
proot \\
-0 \\
--link2symlink \\
-w /root \\
-r ./chroot \\
-b /sys/ \\
-b /system \\
-b /apex \\
-b /proc/ \\
-b /dev/ \\
-b /dev/pts/ \\
/usr/bin/env \\
-i \\
HOME=/root \\
LD_LIBRARY_PATH=/system/lib64:/system/apex/com.android.runtime.release/lib64 \\
XDG_RUNTIME_DIR=/tmp \\
DISPLAY=127.0.0.1:0 \\
PULSE_SERVER=tcp:127.0.0.1:4713 \\
TERM="xterm-256color" \\
PATH=/bin:/usr/bin:/sbin:/usr/sbin \\
/bin/bash --loginДля входа не под root (опционально) создайте скрипт входа ustart.sh:
#!/data/data/com.termux/files/usr/bin/sh
unset LD_PRELOAD
proot \\
--link2symlink \\
-w /root \\
-r ./chroot \\
-b /sys/ \\
-b /system \\
-b /apex \\
-b /proc/ \\
-b /dev/ \\
-b /dev/pts/ \\
/usr/bin/env \\
-i \\
HOME=/home/user \\
LD_LIBRARY_PATH=/system/lib64:/system/apex/com.android.runtime.release/lib64 \\
XDG_RUNTIME_DIR=/tmp \\
DISPLAY=127.0.0.1:0 \\
PULSE_SERVER=tcp:127.0.0.1:4713 \\
TERM="xterm-256color" \\
PATH=/bin:/usr/bin:/sbin:/usr/sbin \\
/bin/bash --loginДля 32-битного окружение поправьте LD_LIBRARY_PATH
Сделаем скрипты исполняемыми:
chmod a+x start.sh
chmod a+x ustart.shТеперь можно войти в окружение:
./start.sh
root@localhost:~#Вот мы и псевдо root :).
Назовём это ENV_HOME.++ Ошибки dpkg
Ошибки dpkg в основном у меня были связаны с неправильной работой
утилиты adduser при добавлении системных пользователей. Поэтому чтобы избежать их сразу дополним файлы (в ENV_HOME)/etc/passwd:
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
_apt:x:103:65534::/nonexistent:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
statd:x:106:65534::/var/lib/nfs:/usr/sbin/nologin
avahi:x:108:113:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
systemd-coredump:x:996:996:systemd Core Dumper:/:/usr/sbin/nologin
user:x:10264:10264:User:/home/user:/bin.bash/etc/group:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
netdev:x:109:pi
messagebus:x:110:
avahi:x:113:
systemd-coredump:x:996:
user:x:10264:Здесь id 10264 это id моего пользователь в TERMUX_HOME. У вас может быть другое число.
Второй хук для неисправных пакетов заключается в убирании скриптов конфигурирования (в ENV_HOME):
mv /var/lib/dpkg/info/<package>* /tmp/
++ Установка остальных пакетов
В ENV_HOME выполним
apt install xfce4 dbus-x11
Мы готовы запустить графическую оболочку, для этого нам нужен X сервер.
++ X сервер
В Android установите приложение [[https://play.google.com/store/apps/details?id=x.org.server&h... XServer XSDL]]. Этот сервер имеет также звуковую pulseaudio подсистему. Ранее в скриптах входа в окружение в команде proot мы передали переменные DISPLAY и PULSE_SERVER, так что у нас все готово для запуска (в ENV_HOME):
xfce4-session
Должна запуститься графическая оболочка, звук тоже должен работать (звуковой вход не поддерживается только воспроизведение).
Xserver XSDL может показаться сначала не очень красивым, но он хорошо функционален и красоты можно добиться. Мои параметры:
ориентация портретная, разрешение нативное, дурацкие кнопки alt-shift-чего-то скрыты (они у меня всё равно не работают или я не понял как), мышь в режиме телефон-тачпад. Можно еще попробовать поиграться с xrandr если поддерживается для использования виртуального пространства X сервера, я не пробовал.++ Библиотеки Android
В аргументах команды proot мы пробросили в окружение Android каталоги /system и /apex.
Так что нам доступны Android библитеки /system/lib /system/lib64.
Например мне нужно было чтобы правильно отрабатывала командаldd /system/lib64/libOpenSLES.so
(не должно быть "not found").
Если ldd отрабатывает неправильно, то обратите внимание, библиотеки в /system/lib* могут быть симлинками на другие места. Возможно надо подбиндить другие каталоги Android и(или) поправить LD_LIBRARY_PATH.
++ Благодарности
Выражаю свою благодарность Sergii Pylypenko (pelya) за его труд - автору проектов
[[https://play.google.com/store/apps/details?id=x.org.server&h... XServer XSDL]], [[https://github.com/pelya/pulseaudio-android pulse..., [[https://github.com/pelya/xserver-xsdl xserver-xsdl]], [[https://play.google.com/store/apps/details?id=com.cuntubuntu... Debian noroot]]. У него я подсмотрел многое.
URL: http://tinyware.ru
Обсуждается: http://www.opennet.dev/tips/info/3194.shtml
Спасибо.
Теперь можно целую автономную билд-станцию на старом ведроиде замутить без того, чтобы джаву мучить.
Странно видеть ссылки на гуглплей, правильная ссылка на Termux https://f-droid.org/en/packages/com.termux/
И да, требуется андроид минимум версии 7, это нужно указывать в самом начале статьи.
Я не хацкер. Не рутую, сторонними источниками не пользуюсь, параноей не страдаю.
При чем тут параноя? Там же по-человечески написано, что версия на гуглмаркете deprecated: Termux and its plugins are no longer updated on Google Play Store due to android 10 issues and have been deprecated.
Забыл ссылку вставить:
https://github.com/termux/termux-app
Не все в настройках включают отключенную по умолчанию установку "из неизвестных источников", поэтому ссылка на плеймаркет корректней нежели на фдройд.
Не все на андроиде имеют установленный плеймаркет. Поставить в настройках одну галочку и скачать бинарник по прямой ссылке проще и лучше, чем устанавливать проприетарное ненужно.
В GPlay Termux уже deprecated и не может обновляться из-за новых правил (нельзя качать и запускать бинарники не из GPlay, на чём весь Termux построен)
fdroid больше имеет отношение к OpenNET, чем Play Market
Скажи мне свои паспортные данные и снилс пожалуйста
В скриптах входа в чрут надо заменить // на /. Это просто перенос строки, не знаю почему так опубликовали.
"...Можно конечно взять готовые решения в
Google Play Store..."
А можно их озвучить? Работоспособного найти немогу. Debian noroot из статьи запускается раза с пятого, а так - чёрный экран.Вообще иметь переносную систему с локальным и xrdp/vnc доступом в телефоне - давнишняя и до сих пор нереализовываемая мечта. Первые версии Debian noroot работали более/менее сносно, но уже стали неработоспособны в виду недоступности обоазов (error 404).
Их много по поиску "linux" в Google Play. Пробуйте сами, по моему мнению debian noroot самый ванильный. Его недостаток в том, что автор сделал вход в пользователем, и нужно использовать fakeroot. Хотя мог оставить вход под псевдорутом как в заметке. Вообще не поленись, сделай сам, выйдет лучше. Заметка очень похожа на Debian noroot от pelya.
Забыл в заметке добавить, что все это дело устанавливается во внутреннюю ext4 память и нужно около 3Гб. На SD карточку не получится, потому что в андроид секурно запрещены внешние носители с юниксовымм fs. Иначе можно было бы элементарно рутовать подсунув suid бинарник.
а как же опции в mount?
-o nosuid например?
Вообще то да, не знаю тогда чего они так лочат нужные функции в Андроид.
Боюсь спросить, но всё-таки спрошу: докер заработает в таком псевдоруте?
Не знаю, наверное нет.
И ещё один вопрос: физический юсб-девайс получится пробросить в это окружение?Большое спасибо за очень полезную инструкцию!
> И ещё один вопрос: физический юсб-девайс получится пробросить в это окружение?Смартфон не рутованный, драйверов нет, ядро не поменять. /dev на андроид весь скрыт, ничего не видно. Андроид весь засекьюрен донельзя. Наверное ничего не получится.
> Большое спасибо за очень полезную инструкцию!
>> И ещё один вопрос: физический юсб-девайс получится пробросить в это окружение?
> Смартфон не рутованный, драйверов нет, ядро не поменять. /dev на андроид весь
> скрыт, ничего не видно. Андроид весь засекьюрен донельзя. Наверное ничего не
> получится.И модули ядра не загрузить.
Только на рутованном.
>> Большое спасибо за очень полезную инструкцию!
Заколупали со своим термуксом - написал бы инструкцию подходящую на 4+ андроид, тогда была бы польза. Точнее дебутстрап и прут можно и без термукса запустить на любой мобиле, а вот аналог термукса на дроид 4 не помешает - энтварь полное фуфло, особенно с дискриминацией по кол-ву пакетов на разных архитектурах.
И вообще - дроид без рута, деньги на ветер. Всегда рутовал и рутовать буду - без рута сплошные костыли и полная бесполезность как у огрызконедофонов
Давай, расскажи, что умеет Андроед, но не умеет Яблоко?
Только всякую ...уету не пиши, типа сканера мирового эфира,
подмены маков раз в минуту и прочие шапочки из фольги.
С таки запросами (точнее их отсутствием) тебе сойдет и кирпич, павлин. А человек очевидно рутует и кастомизирует для себя, это нетипичное использование. От себя добавлю: кастомное ядро с нужными драйверами для периферии, линукс в чруте, и прочая шапочка из фольги.
> С таки запросами (точнее их отсутствием) тебе сойдет и кирпич, павлин.
> А человек очевидно рутует и кастомизирует для себя, это нетипичное использование.Что значит "для себя"? Он какой-то мета-абстрактный мега разум из другой галактики?
Каждое публичное действие или публикация должны иметь рациональное обоснование и ничего кроме!ВОТ ОБЪЯСНИТЕ ПО БАЙТАМ: ДЛЯ ЧЕГО НУЖНО РУТОВАТЬ?!
ЖЕЛАТЕЛЬНО СРАВНИТЕЛЬНЫЕ ТЕСТЫ ТЕХ ЗАДАЧ, КОТОРЫЕ РЕШИЛИСЬ С РУТОМ
И ОТСУТСТВИЕМ РЕШЕНИЯ ИЛИ НЕДОСТАТОЧНЫМ КАЧЕСТВОМ РЕШЕНИЯ НА ЯБЛОКАХ.
> От себя добавлю: кастомное ядро с нужными драйверами для периферии,
> линукс в чруте, и прочая шапочка из фольги.Отэц, с линухом я ковыряюсь с 1994 года, задротством с андроедами лет 15 назад страдал.
КПД от этого ноль. От вашего "Мама, у меня кастомное ядро" только ржать хочется.Мож на 4PDA в круты, тут ходят люди, кто уже в новую историю российского ИТ попал. )))
Если ты ещё школьник-студент, тогда ладно, для самообразования потянет.
Если уже за 30-35, то деб...^W! :D
Вон валяются в шкафу, Xperia Z3, Sony Xperia Active, Xiaomi Redmi 7A ... все рутованые,
Что-то полезное от этого? Да нихуа! Трата и убийство времени.Redmi 7A купился только из-за того, что поддерживает протокол ANT+, - нужен для работы
со старыми смарт-весами Tanita BC1000. Можно было без него? Как нех..я делать.Продать эти весы, не тратить бабло на Redmi и купить Garmin Index 2 Scale,...
Xperia Active - 2011 года, тогда смарты только в массы входили, яблоки были по цене машины.
Фигассе ты из за огрызка подорвался. :-D>>Отэц, с линухом я ковыряюсь с 1994 года, за**_*м с андроедами лет 15 назад страдал.
Я вижу лишь подорвавшегося раба эппл и постаревшего "отэца", который винит и оправдывает себя. ;)
И это самое интересное. Почему? Не смог продаться, павлин? Не повелись на хвост? Ковыряние с 1994 и за**_**во с 2005 не принесли должных плодов? :-D
Я по работе портировал нетхантер на сяоми, и пользуюсь для редтиминга, не нарадуюсь, как рабочему инструменту так и вкладу в человейник. Работа полна за*****а и фана, как в нулевых с линухой/бсдями, будучи школотой. А ты уже постарел и все? Дайте мне огрызок, стар я стал для всего этого дорма? Ты жалок, "отэц", катись на своем велосипеде без сидушки в мир пони. ;)
Что бы зарутовать тело не нужно много времени.
Зачем рутовал если не использовал?
Как поставить dnscrypt на обычный смарт? Как настроить файервол? Есть еще много разных задач.
> Вон валяются в шкафу, Xperia Z3, Sony Xperia Active, Xiaomi Redmi 7A ... все рутованые,
> Что-то полезное от этого? Да нихуа! Трата и убийство времени.А ведь мог туда Sailfish OS поставить (или портировать)!
Собрать и установить собственный софт, без отстегивания $100 эплу?
А что умеет огрызок? Этому мусору место на свалке, он закончился где-то в 14-15 году с убийством джейла (апле к этому шла целенаправленно).
Из ведра я могу сделать девайс фактически с 100% приватностью, например полностью перекрыть доступ ко всем трекинг и рекламным серверам в hosts, у меня есть нормальный фаерволл, могу отключить/включить любой компонент или сервис в любом приложении, у меня полный доступ ко всей файловой системе - а значит могу делать полный бекап вообще всего буквально в два клика.
Считывать нфц токены и привязывать их напрямую (от карты тройка до карточек дверей в офисе).
Полная кастомизация системы, лаунчера, клавиатуры. Бесплатно поставить любой софт, от офисов и блокнотов до виртуальных машин, телефон открывает вообще любой фаил и выполняет те же задачи, что и ноутбук.
Привязать синхронизацию файлов к своему серверу дома, т.е. у меня это бесплатное приватное облако на 8 терабайт. Вырезать системный мусор и телефон начинает жить по 3 суток вместо 1, увеличить общий срок жизни батареи через ограничение заряда.
Через драйвдройд я могу подключать телефон к любому пк как флешку/дисковод и разворачивать там любые ОС или запускать свою, удобно с собой таскать полностью собранный и настроенный арч и работать на чем угодно, все внешние харды и флешки - в помойку.
Это я примерно одну десятую описал того, что использую это постоянно - это облегчает мне жизнь, экономит сотни часов и решает сотни вопросов. Огрызок - телефон для нпсов и телочек, которым кроме фронталки и инсты ничего не нужно, во всём остальном без исключения он безбожно сосёт и деньги усложняет жизнь пользователю, а не облегчает. Эпл зарабатывает на идиотах как может и я ни в чем их не обвиняю, но идиотам, которые за огрызки топят - место в тиктоках и инстаграммах, а не на профильных ресурсах для вменяемых людей.
Красяво написано!;)... Вот если бы ты эти описанные 10 процентов еще расписал по пунктам - вообще цены б тебе не было и добра сколь б нам - людям принес!)...
Даёшь HOWTO: Linux from Scratch на андроеде без рута!!!
Я обкатал Jackd2 аудио сервер и сижу с Ardour и Guitarix на телефоне. Правда задержки звука великоваты. Для этого собственно я и впрягся в эту тему. Рут мне все таки так и не потребовался.
И ещё хочу дополнить заметку. Proot фигово работает с dpkg. Проблемма в линках - симлинках. Поэтому лучше чруты делать на стационарном компьютере. Для этого можно применить пакет qemu-user и чрутиться прямо в аrm чрут.
Кстати да, постоянно при установке пакетов ошибки.
>Второй хук для неисправных пакетов заключается в убирании скриптов конфигурирования (в ENV_HOME):
>mv /var/lib/dpkg/info/<package>* /tmp/Два вопроса:
1. Не равносильно ли это удалению? tmp же автоматически чистится вроде.
2. Такое нужно проделывать с каждым пакетом? Проблем потом не будет?
Спасибо огромное за инструкцию, все получилось за исключением установки пакетов в виртуальной среде. Пытаюсь разобраться.
UPD: Удалил /var/lib/dpkg/info/dash.*, теперь пакеты начали ставиться. (Да, держу в курсе)
> UPD: Удалил /var/lib/dpkg/info/dash.*, теперь пакеты начали ставиться. (Да, держу в курсе)Я тут уже написал. Лучше готовить чрут на десктопе. В дебиан например достаточно установить пакет qemu-user и автоматически получаешь рабочую подсистема ядра binfmt. Что позволяет прямо выполнять chroot /dir в arm64 чрут. То есть прямо прозрачно выполняешь бинарник и других архитектур. А потом затаришь и разтаришь на смартфоне.
а как же proot-distro install debian ?