The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Linux окружение noroot в Android-смартфоне собственными руками."
Отправлено auto_tips, 07-Ноя-21 21:19 
В этой заметке я расскажу как собрать своё 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.ru/tips/info/3194.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру