...

четверг, 11 декабря 2014 г.

Установка 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://ift.tt/1GpIJ5D.

Подключаем телефон по USB, заходим на него через adb и понеслась.


Для минимальной установки понадобятся следующие пакеты (выполняем от рута, версии пакетов со временем могут стать новее):



mkdir -p /data/sdext2/arch/packages
cd /data/sdext2/arch/packages

wget http://ift.tt/1wDJRn9
wget http://ift.tt/1GpIJ5H
wget http://ift.tt/1wDJRDr
wget http://ift.tt/1GpIGXJ
wget http://ift.tt/1wDJQQ1
wget http://ift.tt/1GpIJ5L
wget http://ift.tt/1GpIHdX
wget http://ift.tt/1wDJRDB
wget http://ift.tt/1GpIJ5P
wget http://ift.tt/1wDJRTS
wget http://ift.tt/1GpIHe0
wget http://ift.tt/1wDJRTY
wget http://ift.tt/1GpIJm4
wget http://ift.tt/1wDJR6x
wget http://ift.tt/1wDJRU2
wget http://ift.tt/1GpIHe9
wget http://ift.tt/1wDJR6C
wget http://ift.tt/1wDJU22
wget http://ift.tt/1GpIHed
wget http://ift.tt/1GpIJm9
wget http://ift.tt/1GpIJmb
wget http://ift.tt/1wDJRUa
wget http://ift.tt/1GpIJmg
wget http://ift.tt/1wDJSao
wget http://ift.tt/1GpIHuy
wget http://ift.tt/1wDJU2b
wget http://ift.tt/1GpIJCE


После того, как все скачалось, распаковываем:



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 и т.п. Но любой арчевод и так знает, как это сделать, поэтому здесь про это писать не буду.


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Want something else to read? How about 'Grievous Censorship' By The Guardian: Israel, Gaza And The Termination Of Nafeez Ahmed's Blog


Комментариев нет:

Отправить комментарий