Наименее болезненный способ установки утилит Linux на устройстве Android - это установить целое распределение в подкаталоге. «Нормальные» распределения (Debian, Arch, Fedora и т. Д.) Указывают двоичные файлы, которые динамически связаны с Glibc, который Android не обеспечивает. Они должны быть выполнены с погрузчиком ( /lib/ld-linux_so
) Glibc.
Простой способ настройки такой системы - использовать Debian DEBOOSTRAP для создания начального дерева каталогов Debian, перенесите его на устройство Android, а затем на установочные пакеты с помощью Get
и другие стандартные инструменты Debian. Есть пара страниц по теме на Debian Wiki: ChrootonAndroid , HotwodeBianinannandroid .
Во-первых, установите Debootstrap. На Debian или производной, просто установите пакет Debootstrap
. На некоторых других вариантах Linux или другого Unix просто захватите Tarball Tarball или проверьте его из GIT: это только сценарий оболочки и поддерживает файлы данных.
Определите, поддерживает ли ваше устройство аппаратную плавающую точку . Если это не, замените ARMHF
на ARREL
ниже. Вы можете сказать, проверив / proc / cpuinfo
под Android (или что-то еще, используя ядро Linux): у вас должен быть ARMV7 (или ARMV8) с функциями Thumbee
и VFPV3
.
Если у вас его еще нет, установите Busybox на устройстве Android. Хотя он не является строго необходимым, это придет удобно ниже. Вы можете извлечь Busybox-Static
двоичный пакет , извлеките исполняемый файл Batebox с AR P Busybox-Static _ * _ ARMHF.DEB Data.tar.gz | tar -xzf - ./bin/busybox
, и перенести Busybox Businober
на устройстве Android. Ниже я предполагаю, что Busybox находится в / поставщиком / Bin / Busybox
.
Если ваше устройство Android может монтировать карту SD, которая отформатирована как Ext2 / Ext3 / Ext4 (или любая другая файловая система, которая поддерживает разрешения Unix, то есть не FAT), установите SD-карту на вашем ПК Unix и запустите следующую команду Как root:
debootstrap itarch = ARMHF - foreign hteezy / Media / SDCard / Debian http://http.debian.net/debian
Если нет, запустите следующую команду как root (или под fakeroot, если у вас есть):
SH -C 'Debootstrap - TMP = ARMHF - FORESING / TMP / Debian http: // http. Debian.net/debian && tar -zcf /tmp/debian.tar.gz -c / tmp debian '
Теперь вам нужно передавать /tmp/debian.tar.gz
на ваше устройство Android. Вы можете сделать это через ADB ( adb push /tmp/debian.tar.gz /
) или любой другой способ, которым работает для вас, то распаковываете тарлбол (используйте BusyBox TAR
) :
TAR -ZXVF /Debian.tar.gz
Настройте комфортную среду для запуска программ Linux. Легкий способ - запустить их в Chroot . Я предполагаю, что система Debian находится в / Media / SDCard / Debian
и что у вас есть BusyBox. Создайте сценарий оболочки:
#! / Поставщик / bin / busybox sh
Linux_Root = / Media / SDCard / Debian
alias bb = / vendor / bin / busybox
unset ld_library_path path old
Export Path = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
# Bind-Mount FileSystems Если еще не сделано
для d в / dev / media / proc / sys; делать
BB GreeP -q "$ Linux_root $ d" / proc / mounts || BB Mount -O RBind "$ D" $ linux_root / $ d "
Готово
для d в / data / system; делать
если ! BB GreeP -q "$ linux_root $ d" / proc / mounts; потом
mkdir -p "$ Linux_root / Android / $ D"
BB Mount -O RBind «$ D» $ Linux_root / Android / $ D "
фигурировать
Готово
EXEC BB CHROOT "$ LINUX_ROOT" / BIN / BASH "$ @"
Сделайте этот файл исполняемого сценария и поместите его в / Vendor / Bin
или где-либо еще на пути Android. Прежде чем вы сможете полностью насладиться установкой Linux, вам нужно завершить работу Debotstrap: в Chroot, запустить
/ Debootstrap / Debootstrap --second-Stage
Для тех, кто может наткнуться на подобную проблему: zip-файл был обработан Maven, который попытался использовать фильтрацию. Как следует из документации Maven, такая фильтрация может привести к повреждению двоичных файлов. После исключения zip-файлов из фильтрации Maven, распаковка работала нормально.