Android + Linux = ^_^

 

ustanovka-linux-na-android

 

УСТАНАВЛИВАЕМ LINUX-ДИСТРИБУТИВ НА ТЕЛЕФОН И ПЛАНШЕТ ПОД УПРАВЛЕНИЕМ ANDROID

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

 


ЗАЧЕМ?

На первый взгляд может показаться странным, что кто-то пытается запустить на мобильном устройстве операционную систему, в принципе не предназначенную для работы с экраном небольших размеров и без достаточно точного манипулятора (мыши) и клавиатуры. Однако не стоит делать поспешных выводов. Дистрибутив Linux может дать владельцу смартфона достаточно много преимуществ, среди которых набор старых проверенных инструментов, таких как утилиты командной строки, продвинутые редакторы, FTP- и SSH-серверы, сетевые инструменты и средства разработки приложений. Запустив Linux без графической оболочки на смартфоне с хардварной клавиатурой (Motorola Droid, к примеру), можно достаточно комфортно всем этим пользоваться прямо на ходу без необходимости покидать сам Android. Все инструменты доступны в любой момент, а смартфон продолжает оставаться смартфоном, позволяя принимать звонки и слушать интернет-радио.

kak-ustanovit-linux-na-planshet

Второй аргумент за установку Linux на смартфоне — это возможность использовать его в качестве переносной рабочей станции, которую можно подключить к любому ПК и тут же получить доступ к терминалу с помощью SSH/Telnet-клиента либо клиента VNC/RDesktop. Это по определению лучше, чем флешки с установленным Linux, так как нет необходимости, во-первых, перезагружать машину, а во-вторых, гонять туда-сюда данные; результаты твоей работы будут доступны сразу после того, как отключишь смартфон от компа.

linux-na-telefone

Наконец, наибольший выигрыш Linux дает на планшетах, экран которых позволяет более-менее сносно работать в графической среде, а возможность подключить мышь и клавиатуру через 0TG-кабель так и вообще дает шанс превратить планшет в полноценную рабочую станцию. При этом никакой особой разницы между установкой дистрибутива Linux на планшет и смартфон нет.
КАК?

Перенести Linux на Android действительно просто, и главную роль здесь играет ядро Linux. Любой Linux-дистрибутив представляет собой набор приложений и библиотек, работающих поверх ядра Linux, а так как Android сам основан на почти не измененном ядре Linux, эти приложения и библиотеки можно без каких-либо проблем запустить внутри среды Android. Достаточно лишь подыскать дистрибутив, для которого существует порт на платформу ARM (не забываем, что 99% всех Android-девайсов работают на ARM), установить его с помощью ARM-эмулятора на виртуальный жесткий диск (то есть в файл), скинуть этот файл на SD-карту устройства, открыть терминал, смонтировать образ в качестве loopback-устройства и сделать chroot внутрь. Все! Это так же просто, как запуск FTP-сервера в chroot-окружении — простой и проверенный десятилетиями метод.

Единственный камень преткновения, когда ты решаешь запустить дистрибутив Linux внутри Android, — графическая среда.

vnc-dlja-android

 

 

 

 

AndroidVNC — подключаемся к рабочему столу

backtrack-na-android

 

BackTrack, запущенный на планшете

В то время как с доступом к консоли никаких трудностей не возникает благодаря наличию полноценного эмулятора терминала, с графическими приложениями начинаются проблемы — нативного Х-сервера для Android нет, а запустить обычный Х-сервер внутри самого дистрибутива невозможно из-за коренных отличий в архитектуре графической подсистемы зеленого робота. Несмотря на то что в основе она использует стандартный Linux Framebuffer, поверх которого можно запустить Х-сервер, эксклюзивное право его использования изначально принадлежит более высокоуровневым библиотекам Android, поэтому остается либо загружать Linux-дистрибутив вместо Android (что совершенно непрактично), либо придумывать обходные пути.

Энтузиасты вышли из этой ситуации, используя простой метод «удаленного» подключения к рабочему столу с помощью любого доступного для Android VNC-клиента. Внутри chroot-окружения запускается Х-сервер Xvnc, и все приложения работают под его управлением. Пользователю остается лишь установить VNC-клиент, вбить локальный адрес — и вуаля, на экране появляется полноценный рабочий стол.

Единственное узкое место при использовании удаленного рабочего стола — это производительность. Даже работая локально, VNC не может обеспечить должный ее уровень, которого бы хватило для плавной прокрутки или перемещения окон без лагов. Решить эту проблему пока не удалось, проекты разработки нативного Х-сервера, который бы использовал графическую подсистему Android, еще очень сыры и не могут быть использованы для запуска полноценных графических сред. Впрочем, никто не запрещает их использовать; к примеру, X Server от Darkside Technologies Pty Ltd play.google.com/store/apps/details?id=au.com.darkside.

XServer вполне сгодится для запуска простого софта.

Изначально Linux для Android существовал только в виде образа с уже установленной системой, а также пояснительной инструкцией  как этот образ подключить и использовать. Затем появились скрипты, которые автоматизировали процесс подключения образа и запуска Linux, но и они требовали некоторой работы головой. Наконец, в последнее время появились инсталляторы, доступные в Google Play (например, goo.gl/RSAIjl. в некоторой степени автоматизирующие процесс запуска дистрибутива, хотя, по сути, это все то же руководство по установке, но интерактивное, с прямыми ссылками на скачивание образов и скриптов.

АЛЬТЕРНАТИВНЫЕ ВАРИАНТЫ

Выше я уже упомянул о том, что дистрибутив Linux вполне может быть загружен вместо Android, благодаря чему удастся задействовать Framebuffer для прямого доступа к видеоадаптеру и существенно ускорить работу графического интерфейса. Однако делать это на смартфоне практически бессмысленно — Linux непригоден в качестве основной системы на небольших экранах, к тому же принимать звонки и пользоваться интернетом будет невозможно.

А вот на планшете Linux будет выглядеть вполне достойно.


Обычно на устройство, изначально работающее под управлением Android, так называемая нативная версия Linux-дистрибутива устанавливается следующим образом. На внутреннем NAND-накопителе планшета создается дополнительный раздел, на который копируется Linux-дистрибутив. Затем загрузчик U-Boot (он применяется в большинстве планшетов) настраивается таким образом, чтобы использовать этот раздел в качестве загрузочного.

В результате планшет будет автоматически загружать Linux-систему после включения питания.

Чтобы оставить возможность загрузки Android, загрузчик U-Boot перенастраивают таким образом, чтобы раздел с Linux-системой был не основным, а выполнял функцию «раздела для восстановления» (Recovery Mode), доступного с помощью включения устройства с зажатой клавишей громкости (тот самый, который используется для перепрошивки устройства и выполнения различных восстановительных операций). Таким образом удается получить устройство с двойной загрузкой: Android по умолчанию и дистрибутив Linux при загрузке в режиме восстановления. Сам Recovery Mode при этом остается доступным только с помощью специальных инструментов.

В случае если NAND-памяти оказывается недостаточно для размещения полноценной Linux-системы, ее части (обычно раздел /usr) выносят в образ или раздел на SD-карте. Кстати, ех12-раздел на карте памяти также можно использовать для установки Linux, запускаемой в chroot-окружении.

Установить нативный Linux-дистрибутив сложнее, чем работающий в chroot-окружении, но это стоиттого, если утебя есть планшет и OTG-кабель, с помощью которого можно подключить клавиатуру и мышь.

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ

Как я уже говорил, для запуска под управлением Android пригодны только дистрибутивы, портированные на архитектуру ARM. Прежде всего это Ubuntu и Debian, причем первый по понятным причинам пользуется гораздо большим интересом среди роботоводов. Также можно установить Gentoo и несколько специализированных дистрибутивов, например Backtrack. Рассмотрим самый типичный случай, то есть установку Ubuntu по стандартной схеме, без использования каких-либо автоматизированных инсталляторов и прочего.

Для начала нам нужен образ жесткого диска с установленным дистрибутивом. Его можно создать самому, воспользовавшись эмулятором QEMU, однако в связи с тем, что процедура установки абсолютно стандартна и типична, описывать ее я не буду, а просто направлю тебя по адресу goo.gl/9nvBi. Здесь лежит архив с образом, на который предустановлен Ubuntu 12.ОД с графическим окружением LXDE (было бы неразумно запускать Unity/GNOME на телефоне/планшете). Архив следует распаковать и положить файл ubuntu.img на карту памяти.

ubuntu-na-galaxy-tab

Ubuntu на Galaxy Tab 10.1

 

 

 

 

 

 

 

Ubuntu is configured with SSH and VNC servers that ca n be accessed from the IP: ethO: No such device

Now enter the screen size you want in pixels (e.g. SO 0x480), followed by [ENTER]:

800×480

Please select which Desktop environment you want to u se, type the number to select it then press [ENTER]

1 — LXDE

2 — Gnome

Make your Selection:

1

New ‘X’ desktop is localhost:0

Starting applications specified in /root/.vnc/xstartu P

Log file is /root/.vnc/localhost:0.log

* Starting OpenBSD Secure Shell server sshd [ OK ]

zapusk-ubuntu-s-pomoschu-skripta

 

 

Запуск Ubuntu с помощью стартового скрипта

ubuntu-dlja-android

 

 

 

 

Проект «Ubuntu for Android» в действии

 

 

 

Далее надо смонтировать образ и сделать chroot в окружение дистрибутива. Для этого нужны права root, прошивка с поддержкой блочных 1оорЬаск-устройств и установленный busybox (ищем в Маркете по запросу «busybox installer», в CyanogenMod есть по умолчанию). Последовательность действий:

1. Открываем эмулятортерминала в Android (если нет, можно установить из Маркета Terminal Emulator). Л ибо подключаем сма ртфон/п л аншет к ком пу и получаем доступ к терм и налу с помощью adb:

$ cd путь-до-Android-SDK/platform-tools $ sudo ./adb shell

He забываем, что режим отладки в этом случае должен быть включен: «Настройки -> Для разработчиков -> Отладка Android».

2. Получаем права root:

$ SU

3. Создаем блочное 1оорЬаск-устройство, подключаем к нему образ диска и монтируем его:

# mknod /dev/block/loop255 b 7 255

# mount -о remount,rw /

# mkdir /mnt/ubuntu

# mount -o loop,noatime -t ext2 \

/sdcard/ubuntu.img /mnt/ubuntu

Содержимое образа должно появиться в каталоге /sdcard/ ubuntu. Проверь, чтобы это было так.

4. Подключаем все необходимые для работы дистрибутива вирту-альныеФС:

# mount -t proc proc /mnt/ubuntu/ргос

# mount -t sysfs sysfs /mnt/ubuntu/sys

# mount -o bind /dev /mnt/ubuntu/dev

5. Настраиваем так, чтобы из chroot-окружения можно было получить полноценный доступ в Сеть:

# sysctl -w net.ipv4.ip_forward=l

# echo «nameserver 8.8.8.8» > /mnt/ubuntu/etc/resolv.conf

# echo «nameserver 8.8.4.4» >> /mnt/ubuntu/etc/ resolv.conf

# echo «127.0.0.1 localhost» > /mnt/ubuntu/etc/hosts

6. ПереходимBchroot-окружение:

# chroot /mnt/ubuntu

Собственно, на этом установка заканчивается. Теперь можно запускать консольный софт, производить обновление системы, стартовать сетевые сервисы и делать почти все, что можно сделать с обычной десктопной Linux-системой, не забывая, конечно, что некоторый софт, напрямую взаимодействующий с железом и различными специализированными псевдодевайсами,работать не будет. Также не забываем, что виртуальные ФС после завершения работы следует размонтировать.

Теперь нам необходимо установить и запустить Х-сервер Xvnc, экспортирующий дисплей и устройства ввода с использованием протокола VNC. TightVNCserver уже есть в представленном образе и даже настроен, но, чтобы ты лучше понял процесс и смог решить возникшие проблемы, я подробно опишу процесс его установки и запуска.

1. ОбновляемсяnycTaHaenHBaeMTightVNCserver:

# apt-get update

# apt-get install tightvncserver

2. Создаем файл/root/.vnc/xstartup и пишем в него следующее:

#!/bin/sh

xrdb $НОМЕ/.Xresources xsetroot -solid grey export XKL_XMODMAP_DISABLE=1 icewm & lxsession

Третья команда здесь нужна, чтобы пофиксить проблемы, которые могут возникнуть из-за физического отсутствия на устройстве клавиатуры.

3. Запускаем Xvnc с помощью epannepavncserver с правами root:

# export USER=root

# vncserver -geometry 1024×800

В результате выполнения последней команды на экран будет выведен запрос на пароль для доступа к VNC-серверу, лучше указать что-нибудь простое вроде «123». Разрешение можно установить фактически любое, однако лучше, если оно будет совпадать с физическим разрешением экрана устройства.

U. Устанавливаем на смартфон приложение AndroidVNC,3any-скаем его, указываем IP-адрес и порт5901, подключаемся. На экране должен появиться рабочий стол LXDE.

Чтобы не заморачиваться с ручным вводом всех команд, можно использовать скрипт ubuntu.sh, расположенный здесь: goo.gl/xSpK4. Просто положи его и образ ubuntu.img в каталог ubuntu на SD-карте и запусти скрипт командой sh ubuntu.sh, а через 5-10 секунд подключись к рабочему столу с помощью AndroidVNC. Имей в виду, что скрипт монтирует образ к каталогу /data/local/mnt.

УСТАНОВКА GENTOO НА ЕХТ2-РАЗДЕЛ

Итак, мы установили Ubuntu с помощью образа с файловой системой и шаманств с 1оорЬаск-устройством и chroot-окружением. Сделать это оказалось несложно, а с применением скриптов так и вообще очень легко, но что, если пойти дальше и установить более хардкорный дистрибутив, и не с использованием образов, а на выделенный ехt2-раздел на карте памяти? Так мы сможем решить проблему некоторых прошивок и ядер без поддержки lоорbаск-устройств и к тому же сможем насладиться нормальным дистрибутивом, установленным по всем правилам.

Возьмем в качестве подопытной системы Gentoo. Чтобы установить его на ех12-раздел, нам понадобится карта памяти объемом не меньше 2 Гб и рутованный смартфон с установленным busybox. Последовательность действий такова:

1. Делаем бзкап данных с карты памяти и создаем на ней дополнительный раздел, объемом не меньше двух гигабайт. Сделать это можно с помощью любой программы для разбивки дисков, однако имей в виду, что если ты хочешь продолжать использовать SD-карту по прямому назначению,то создавать РАТ32-раздел следуете начале карты, так, чтобы он стал первым, а дополнительный раздел для установки дистрибутива должен быть вторым.

2. Форматируем разделы SD-карты:

$ sudo mkfs.vfat /dev/sdcl $ sudo mkfs.ext2 /dev/sdc2

3. Берем телефон, заходим в «Настройки -> О телефоне» и смотрим, какойустановлен процессор. Далее переходим на страницудоо. goo.gl/PRfux и выкачиваем stage3 для нужной архитектуры, например Б1адеЗдля ARM v7 лежит в каталоге current-stage3-armv7a.

 


4. Монтируем ех12-раздел карты памяти на компе и распаковываем в него содержимое полученного архива:

$ sudo mount /dev/sdc2 /mnt $ sudo tar -xxpf stage3-*.bz2 -C /mnt

Сразу редактируем конфиги и все, что нужно, по вкусу, включая правку /etc/resolv.conf по образцу из предыдущего раздела.

5. Запускаемэмулятортерминала(иливыполняем«adbshell»), монтируем все необходимое и переходим echroot (почтитакже, как в случае с Ubuntu):

# mount -о remounx^rw / # mkdir /mnt/gentoo
# mount /dev/block/mmcblk0p2 /mnt/gentoo
# mount -t proc proc /mnt/ubuntu/proc
# mount -t sysfs sysfs /mnt/ubuntu/sys
# mount -o bind /dev /mnt/ubuntu/dev
# sysctl -w net.ipv4.ip forward=l
# chroot /mnt/gentoo

Доступ к рабочему столу производится таким же способом, как в Ubuntu, за исключением того, что теперь прямо на телефоне придется собрать кучу софта :). Впрочем, можно настроить среду для кросс-компиляции на компе, но это уже тема для отдельной статьи.

НАТИВНАЯ УСТАНОВКА

Запустив Ubuntu с использованием VNC-сервера, ты заметишь неторопливость его работы, которая связана с издержками протокола VNC на передачу картинки «по сети». Чтобы избежать этой  проблемы, можно установить Ubuntu в качестве основной системы рядом с Android, так, чтобы она смогла использовать видеоадаптер напрямую. К сожалению, универсального способа сделать это не существует. Каждое устройство по-своему уникально, включая различные таблицы разделов NAND-памяти, на которую производится установка, различные устройства и драйверы для их работы.

К счастью, процесс установки нативной версии дистрибутива хорошо описан для многих устройств в русскоязычных форумах, поэтому найти инструкцию будет несложно. Стоит, тем не менее, сразу обратить внимание на несколько особенностей такого типа установки:

• Отдельный или основной NAND-раздел. Linux-дистрибутив может бытьустановлен каквзаблаговременносозданный раздел в NAND-памяти, так и в основной загрузочный раздел. В первом случае разработчик прошивки обычно оставляет возможность загрузки Android с помощью специального скрипта либо через загрузку Linux-дистрибутива в режиме восстановления, во втором он будетустановлен *вместо* Android и для возвращения возможности загрузки робота придется заново перепрошиватьустройство.

• Возможность двойной загрузки. Если Linux-дистрибутив будет установлен на отдельный раздел, разработчик можетоставить возможность загрузки Android. Однако стоит сразу обратить внимание, какэтазагрузка происходит: с помощью режима восстановления л ибо скрипта, запускаемого с обычного ком па. Все-таки второй способ будет неудобен в дороге.

• Поддержка оборудования. Оригинальное Linux-ядро Android-прошивкиуже включает в себя все необходимые драйверы, которые могутпонадобиться для работы полноценной Linux-системы, однако далеко не во всех Linux-прошивках всезаведется само собой. Часто возникают проблемы с Wi-Fi-адаптером и сенсорным экраном, который неадекватно реагируетна прикосновения. Поэтому перед установкой прошивки стоит внимательно прочитать информацию о возможных осложнениях.

В любом случае будь готов к тому, что во время установки Linux-дистрибутива все твои данные будут уничтожены. Без этого никак.

ЧТО ДАЛЬШЕ

Linux-дистрибутив, установленный рядом с оригинальной Android-системой, может стать очень удобным рабочим инструментом, однако на данный момент «Linux внутри Android» считается скорее игрушкой и способом покрасоваться перед друзьями, нежели серьезным решением. Уверен, что в скором времени, когда для Android появится полноценная реализация графического сервера Wayland, ситуация начнет меняться и мы увидим дистрибутивы с адаптированным для небольших экранов интерфейсом, а также полноценные Linux-приложения, распространяемые в форме обычных АРК-пакетов. Также не стоит забывать о проекте «Ubuntu for Android» — в его рамках идет работа над официальным портом Ubuntu для Android, который позволит использовать смартфон в качестве переносного системника, подключаемого к любому монитору.

goo.gl/UGDe3 — описание процесса подготовки образа Ubuntu собственными силами (на английском).

 

Нативный Х-сервер x-server

 

для Android

3 comments for “Android + Linux = ^_^

  1. Иван
    10/06/2012 at 1:10 пп

    Отличная статья! Респект!

  2. Александр
    11/09/2012 at 6:18 пп

    Написано понятно и по делу.Давно искал.Очень интересная статья!

  3. Юрий
    01/06/2013 at 1:54 пп

    Очень занимательная статья, правда много описок, причём в самих командах (в разделе про генту). Хотелость бы отдельно узнать как поведёт себя X-сервер в случае с генту(можно ли использовать стандартный, или придётся пользоваться костылями)?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *