Установка Archlinux на телефон с Android во второй раздел SD или просто подпапку системной карты памяти

imageПривет всем. Тут уже была статья на тему Botbrew, где в целом описано что это такое и что это дает. Вкратце: Проект BotBrew призван решить многие проблемы с установкой Linux-софта, которые только могут возникнуть у пользователя, и подготовить систему Android к принятию инородных для нее приложений.

Обычный, классический 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.1–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-armv6h.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, предварительно смонтировав системные папки:

mount -t proc none ./proc mount -o rbind /dev ./dev mount -t sysfs none ./sys mount -t tmpfs none ./tmp mount -o size=10%, mode=0755 -t tmpfs none ./run

chroot. /bin/bash Если все прошло успешно, то запустится bash из нашего минимального окружения и станет доступен pacman. У меня при запуске любого процесса система ругалась, что не может найти libsuc.so, описанный в LD_PRELOAD. В этом случае просто чистим LD_PRELOAD:

export LD_PRELOAD=

Итак, мы в chroot’е, у нас работает pacman и bash. Первым делом приведем в порядок то, что есть. Пропишем DNS и загрузим репозитории: echo «nameserver 8.8.8.8» > /etc/resolv.conf pacman -Sy Теперь поставим официально то, что просто так распаковали и добавим остальные минимально необходимые для жизни пакеты:

pacman -S base --force --noconfirm Если все прошло удачно, то имеем полноценный за вычетом 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 и набираем:

/data/sdext2/init /bin/bash В результате все, что надо само однократно подмонтируется и мы окажемся в свежепоставленном Arch. В виде бонуса init создаст в корне chroot’а папки /storage, /mnt и /android, куда смонтирует куски оригинальной файловой системы.

Чтобы наслаждаться линухом не через USB провод, а прямо с телефона, можно прописать /data/sdext2/init /bin/bash в качестве шела в любимом терминале. Дальше можно по вкусу создать пользователей, поднять sshd и т.п. Но любой арчевод и так знает, как это сделать, поэтому здесь про это писать не буду.

Спасибо за внимание, дополнения и исправления приветствуются.

© Habrahabr.ru