- Установил Ubuntu на свой смартфон. Рассказываю, что из этого вышло
- Как это работает?
- Как я это реализовал?
- Полноценный рабочий стол
- Плюсы, минусы и вывод
- Установка Archlinux на телефон с Android во второй раздел SD или просто подпапку системной карты памяти
- Готовим устройство
- Собираем минимальный стартовый вариант
- Приводим в порядок пакеты
- Добавляем автомонтирование и прочие плюшки
Установил Ubuntu на свой смартфон. Рассказываю, что из этого вышло
К счастью, разработчики уже давно смогли запустить все возможные дистрибутивы на смартфоне , и у вас есть возможно нацепить полноценную Linux-среду внутри обычного Android-смартфона .
Как это работает?
На самом деле, идея далеко не нова, и в году так 2014 были инструкции, описывающие метод установки того же Arch Linux на SD-карту.
Сегодня же, Linux можно установить как отдельное приложение, и даже запустить его, как отдельный процесс в системе!
Происходит это благодаря обычному наложению «среды» нужной ОС Linux поверх самой ОС Android . Дело в том, что сам Android , по сути — модифицированная ОС на базе ядра Linux , поэтому, запуск простых команд, сборка каких-то файлов и даже запуск полноценного интерфейса — совсем не сложно .
Как я это реализовал?
Здесь нет нечего сложного — достаточно иметь смартфон, не раньше 2014 с версией Android , выше 4.4.
Для примера, я буду брать приложение Termux с Play Market .
Также, дополнительно я установлю утилиты AnLinux . Зачем она — расскажу позже.
По сути, после запуска Termux , у нас уже есть более-менее рабочая ОС Linux на смартфоне. По работе она чем-то напоминает Debian/Ubuntu и даже команды, вроде apt работают без проблем.
Однако, нам ведь огрызок не нужен, верно? Обещал полноценный дистрибутив — пожалуйста.
Для этого мы будем использовать ту самую программку AnLinux . Она до боли проста — это сборщик нужных команд, которые нужно просто вставить в Termux и ты получаешь то, что хочешь .
В главном меню, можно выбрать подходящий дистрибутив. Полный список на момент написания статьи :
Проверял работу Ubuntu, Debian и Arch — все работает без проблем .
Как видите, терминал стал от Ubuntu и прямо сейчас у вас установлен полноценный дистрибутив Ubuntu, как в компьютере !
Полноценный рабочий стол
Думаю, не многим зайдет обычный и скучный терминал. Не беда — есть решение .
Ребята, у нас есть Telegram-группа. Там вы можете задать свой вопрос, поделиться своим мнением или впечатлениями от использования Linux-дистрибутивов.
В той же программке AnLinux , я выбрал Desktop Environment (среду рабочего стола) и поставил XFCE. По сути, после установки у меня будет подобие Xubuntu 19.10. Также, можно поставить LXQT.
Правда, для управление таким рабочим столом удобнее взять мышь и клавиатуру. Так как у меня нет переходника, я подключился удаленно через свой компьютер к рабочему столу своего телефона и могу спокойно управлять системой, заблокировав и положив телефон в карман!
Плюсы, минусы и вывод
Как вы уже поняли, реализовать это — достаточно трудно и новичкам может все это совсем не понравится. И, даже если у вас получится, вы все же столкнетесь с минусами :
- поиграть в тяжелые игры, заниматься моделированием не выйдет . Все же — это дистрибутив в телефоне, а телефон на базе процессоров архитектуры ARM (но, создать конкуренцию Raspberry Pi можно)
- для хранения подобной красоты нужно выделить немного памяти (Ubuntu + XFCE + LXQT = 1.2 GB)
- многим придется будет устанавливать root-права на свой телефон (особенно это касается смартфонов Xiaomi) . Хотя — это зависит от модели вашего телефона и вам может повезти.
Ну и теперь поговорим кратко о плюсах :
- пусть и на ARM, но это — ОС Linux на вашем смартфоне!
- есть возможность разгуляться программистам
- отличный полигон для разных экспериментов, который не испортит вам телефон
Так что, если плюсы вас устраивают и вы готовы мириться с некоторыми минусами — стоит попробовать!
Друзья, у нас есть Telegram-группа, где могут помочь с вашей проблемой с Linux и где вы сможете приятно пообщаться с единомышленниками.
Установка Archlinux на телефон с Android во второй раздел SD или просто подпапку системной карты памяти
Обычный, классический Botbrew имеет свой репозиторий, но в нем мало пакетов, что грустно. Тем, кто действительно хочет беспредельничать, понравится Borbrew-Basil, который использует дебиановский репозиторий emdebian. Однако, с ним нынче тоже все грустно, так как
As of July 2014, updates to the Emdebian distributions ceased. There will be no further updates and no further stable releases.
Получается, что даже те, кто когда-то поставил себе emdebian, нынче в пролете. Данный пост будет о том, как поставить на рутованный телефон Archlinux, но не как обычно в loop образ, а на родную файловую систему Android или второй раздел SD. Предполагается, что имеется рутованный телефон с установленным busybox, включенной отладкой по USB и утилита adb на основном компьютере.
Готовим устройство
Первое, что нам понадобится — создать папку, куда будем ставить наш линух. Варианта два — папка на разделе /data или отдельный ext4 раздел карты памяти. Во втором случае раздел надо будет как-то смонтировать в основную ФС телефона. Сделать это можно например с помощью Link2SD. Далее я буду исходить из того, что используется второй раздел SD, смонтированный в /data/sdext2, ставить будем в папку /data/sdext2/arch.
Также надо понять, репозиторий для какой архитектуры процессора будем использовать. У меня Qumo Quest 454 с процессором armv7l и для него подошел http://mirror.archlinuxarm.org/arm/.
Подключаем телефон по USB, заходим на него через adb и понеслась.
Собираем минимальный стартовый вариант
Для минимальной установки понадобятся следующие пакеты (выполняем от рута, версии пакетов со временем могут стать новее):
mkdir -p /data/sdext2/arch/packages cd /data/sdext2/arch/packages wget http://mirror.archlinuxarm.org/arm/core/acl-2.2.52-2-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/attr-2.4.47-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/bash-4.3.030-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/bzip2-1.0.6-5-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/curl-7.39.0-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/e2fsprogs-1.42.12-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/expat-2.1.0-4-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/filesystem-2014.10-3-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/gcc-libs-4.9.2-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/glibc-2.20-4-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/gpgme-1.5.2-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/keyutils-1.5.9-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/krb5-1.13-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/libarchive-3.1.2-8-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/libassuan-2.1.3-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/libgpg-error-1.17-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/libidn-1.29-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/libssh2-1.4.3-2-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/lzo-2.08-3.1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/ncurses-5.9-6.1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/openssl-1.0.1.j-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/pacman-4.1.2-7-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/pacman-mirrorlist-20141208-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/readline-6.3.006-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/util-linux-2.25.2-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/xz-5.0.7-1-arm.pkg.tar.xz wget http://mirror.archlinuxarm.org/arm/core/zlib-1.2.8-3-arm.pkg.tar.xz
После того, как все скачалось, распаковываем:
cd /data/sdext2/arch tar xvf packages/*.pkg.xz
У нас получилось что-то типа минимальной установки Archlinux. Теперь попробуем сделать в нее chroot, предварительно смонтировав системные папки ():
busybox mount -t proc none ./proc busybox mount -o rbind /dev ./dev busybox mount -t sysfs none ./sys busybox mount -t tmpfs none ./tmp busybox mount -o size=10%,mode=0755 -t tmpfs none ./run chroot . /bin/bash
Если все прошло успешно, то запустится bash из нашего минимального окружения и станет доступен pacman. У меня при запуске любого процесса система ругалась, что не может найти libsuc.so, описанный в LD_PRELOAD. В этом случае просто чистим LD_PRELOAD:
Приводим в порядок пакеты
Итак, мы в chroot’е, у нас работает pacman и bash. Первым делом приведем в порядок то, что есть. Пропишем DNS и загрузим репозитории:
echo "nameserver 8.8.8.8" > /etc/resolv.conf pacman -Sy
Теперь поставим официально то, что просто так распаковали и добавим остальные минимально необходимые для жизни пакеты и еще вернем на место dns, который нам побила установка filesystem:
pacman -S base --force --noconfirm echo "nameserver 8.8.8.8" > /etc/resolv.conf
Если все прошло удачно, то имеем полноценный за вычетом systemd и ядра Archlinux. Выходим из chroot и размонтируем все, что намонтировали:
exit umount ./dev/pts umount ./dev/cpuctl umount ./proc umount ./sys umount ./tmp umount ./run
Добавляем автомонтирование и прочие плюшки
Чтобы пользоваться тем, что получилось легко и просто, прикрутим init от botbrew-basil. Это утилита, которая проверяет, смонтировано ли у нас все, что надо и делает chroot в наше окружение. Я не смог найти, как скачать ее с репозитория botbrew, поэтому пока что просто выложил на Яндекс.Диск, ссылка. Копируем init в /data/sdext2/arch и добавляем атрибут на исполнение.
Заходим в adb shell и набираем:
В результате все, что надо само однократно подмонтируется и мы окажемся в свежепоставленном Arch. В виде бонуса init создаст в корне chroot’а папки /storage, /mnt и /android, куда смонтирует куски оригинальной файловой системы.
Чтобы наслаждаться линухом не через USB провод, а прямо с телефона, можно прописать /data/sdext2/init /bin/bash в качестве шела в любимом терминале. Дальше можно по вкусу создать пользователей, поднять sshd и т.п. Но любой арчевод и так знает, как это сделать, поэтому здесь про это писать не буду.
Спасибо за внимание, дополнения и исправления приветствуются.
UPDATE: небольшой скрипт, который я запускаю один раз после ребута
#!/bin/bash if [[ `whoami` != "root" ]] then sudo bash $0 $@ exit $? fi chmod 777 /tmp c=`ps afx | grep /usr/sbin/sshd | grep -cv grep` if [[ "$c" != "1" ]] then echo Strating sshd /usr/sbin/sshd else echo sshd already started fi if [[ ! -e /dev/fd ]] then echo Creating /dev/fd links ln -s /proc/self/fd /dev/fd ln -s /proc/self/fd/0 /dev/stdin ln -s /proc/self/fd/1 /dev/stdout ln -s /proc/self/fd/2 /dev/stderr fi if [[ ! -e /dev/net/tun ]] then echo Creating /dev/net/tun mkdir /dev/net ln -s /dev/tun /dev/net/tun else echo /dev/net/tun already exists fi