Встановлюємо Linux-програми на смартфон під управлінням Android

Багато власників Android-фонів зазнають труднощів із запуском даного Linux-софта на своїх девайсах. За всіма законами він начебто повинен тут працювати, та ось тільки для його установки чомусь потрібні права root, сам він поширюється в якихось саморобних інсталятор, а вибір програм сильно обмежений. Ця стаття запропонує відповідь на питання, чому так вийшло, і підкаже рішення - зручний спосіб установки і запуску майже будь-якого Linux-софта в Android.

Як відомо, андроїд заснований на ядрі Linux і включає в себе набір стандартних бібліотек і утиліт командного рядка, властивих звичайному Linux-дистрибутива. Однак запуск класичного Linux-софта тут сильно утруднений через безліч причин, в числі яких несумісність ABI, відсутність менеджера пакетів, власна система безпеки і відсутність багатьох компонентів стандартної Linux-системи.

Так, незважаючи на наявність в Android стандартної бібліотеки libc і інших, їх реалізація в більшості випадків несумісна з бібліотеками від проекту GNU і сильно урізана по функціоналу. З цієї причини Linux-софт потрібно як мінімум збирати заново спеціально під Android і ARM-процесор, а в багатьох випадках ще й патчить, додаючи функціонал, відсутній в бібліотеках.

BotBrew був протестований на наступних пристроях: Barnes & Noble NOOK Color, LG P970 Optimus Black, Huawei Ascend M860, HTC Desire, HTC Evo 4G, HTC Evo 3D, HTC Inspire 4G, HTC Droid Eris, HTC Hero, Samsung Galaxy Nexus, Samsung Galaxy S2 (GT-I9100), Samsung Galaxy Y (GT-S5360), Motorola Atrix 4G, Motorola Droid / Milestone, Sony Ericsson Xperia X8, Asus EeePad Transformer TF101.

Система безпеки Android, обрізати додатки в привілеї по повній програмі і не дозволяє їм виходити за рамки власного каталогу, також серйозно перешкоджає роботі стандартного Linux-софта. Тому часто потрібно отримувати права root, які ці обмеження знімають. Відсутність менеджера пакетів, який би дозволяв встановлювати звичайний Linux-софт, а не тільки Java-додатка, змушує розробників писати програми, потрібні тільки для того, щоб встановлювати інші додатки. Так з'являються всі ці кастомниє інсталятори.

Ну і довершує картину те, що в Android просто немає багатьох стандартних компонентів Linux, включаючи, наприклад, навіть такі невід'ємні, як графічний стек X Window або бібліотека GTK +. Деякі спроби все це сюди принести, звичайно, робляться, але далі полурабочие альфа-версій справа не рухається.

Проте можливість перенести в Android функціонал повноцінного Linux-системи дуже вже приваблива ідея, щоб ентузіасти не спробували вирішити виникаючі в процесі проблеми і дати нам повноцінне універсальне рішення. Найбільш очевидний і простий шлях - це запустити «віртуалізувати» версію повноцінного Linux-дистрибутива, про що ми вже докладно писали. Спосіб цей цікавий, але страждає від проблеми поділу системи на дві області, кожна з яких працює незалежно від іншої.

Набагато цікавішим виглядає проект BotBrew - в його рамках розробляється цілком звичайний для Linux-систем менеджер пакетів і репозиторій, за допомогою якого можна встановлювати Linux-софт в окремо взятий каталог всередині Android. Також свого часу було придумано безліч різних скриптів, які дозволяють легко і без зайвих проблем збирати придатний для роботи всередині Android Linux-софт на великому брата. Цим двом проектам і буде присвячена решта статті.

Проект BotBrew покликаний вирішити багато проблем з установкою Linux-софта, які тільки можуть виникнути у користувача, і підготувати систему Android до прийняття сторонніх для неї додатків. По суті, система складається з чотирьох компонентів:

  • репозиторій з прекомпілірованние для Android додатками, використовуючи який можна встановити багато Linux-додатки за допомогою однієї команди;
  • менеджер пакетів, в якості якого використовується легкий Opkg або dpkg разом з apt-get в експериментальній версії BotBrew Brazil;
  • менеджер процесів runit, необхідний для того, щоб правильно запускати і підтримувати роботу демонів, якщо такі будуть встановлені;
  • власна система збирання, яка містить в собі всі інструменти, необхідні для крос-компіляції додатків за допомогою будь-якого настільного Linux-дистрибутива.

Для роботи це чудо програмістської думки вимагає всього нічого: права root і трохи вільного простору у внутрішній пам'яті смартфона або на карті пам'яті. Причому перший варіант кращий, так як у випадку з SD файли будуть повалені на віртуальний диск, робота з яким підтримується далеко не всіма ядрами.


Початкова ініціалізація


Список встановлених додатків

На даний момент класична версія BotBrew, що використовує власний репозиторій, дозволяє встановлювати такий софт, як dcron, GCC, Git, SSH-сервер dropbear, консольний браузер Lynx, сканер безпеки Nmap, інструмент бекапа rsync, редактор Vim, веб-сервер lighttpd, скриптові мови Python і Ruby, а також кілька десятків інших пакетів. Встановлюється це все, до речі кажучи, в виділений каталог у внутрішній пам'яті смартфона / планшета і ніяк не захаращує основну систему. Іншими словами, позбутися від BotBrew і всього, що ти встановив, можна буде, просто видаливши один каталог.

Отже, як же використовувати BotBrew для установки Linux-софта? Для початку нам знадобиться пакет з самою програмою. Він є в Google Play (зазначу, що потрібен BotBrew root, а не експериментальний Brazil) і важить менше мегабайта. Після установки запускаємо і натискаємо кнопку «Proceed» внизу екрану, щоб софтіна викачала всі необхідні для її роботи компоненти, такі як консольний менеджер пакетів, та багато інших програм (в термінах Debian Linux - bootstrap). Важать вони всього кілька мегабайт, тому чекати доведеться недовго. Після закінчення установки BotBrew виведе на екран вікно з офіційною інтернет-сторінкою проекту, яке можна сміливо закривати.

Тепер на екрані ти повинен побачити список пакетів, доступних до установки. Їх досить багато, але графічних додатків з описаних вище причин ти серед них не знайдеш. Зате є різномасті сервери, компілятори і інтерпретатори, так що всім, хто хоче серйозно «погратися» зі смартфоном, буде де розвернутися. Для установки пакета досить тапнуть по його імені і на наступному екрані, що містить інформацію про програму, натиснути кнопку «Install».

Якщо під час bootstrap'а BotBrew виникли проблеми, ти можеш спробувати встановити його вручну за допомогою наступної команди:

wget http://repo.botbrew.com/anise/bootstrap/install.sh -O - | su

Якщо і це не допомогло, можна спробувати видалити всі установки ( «Remove BotBrew» в настройках) і потім спробувати запустити цю команду.

Після цього пакет з'явиться на вкладці «Installed», однак ніякої кнопки «Run» або чогось подібного ти не побачиш. Додаток доведеться самостійно запускати з консолі, що, втім, логічно. Сам додаток встановлюється всередину каталоговій структури / data / botbrew, в якому «емулюється» реальне оточення Linux-дистрибутива з каталогами / etc, / usr і іншими. А щоб не мучити користувачів необхідністю набирати повний шлях до команди, розробники BotBrew передбачили однойменну команду-врапперов. Щоб з її допомогою запустити, наприклад, встановлений консольний браузер Lynx, слід набрати таку команду:

$ Botbrew lynx http://xakep.ru

Як варіант - каталог / data / botbrew / bin можна додати в змінну оточення PATH, але це доведеться робити після кожного запуску терміналу:


Сайт журналу в консольному браузері Lynx


Процес установки пакета

$ Export PATH = "$ PATH: / data / botbrew / bin"

З демонами і різними мережевими сервісами, до речі, справи йдуть набагато краще. Після старту демони відразу будуть запущені, а управляти їх включенням можна через графічний інтерфейс, доступний після натискання на кнопку «Play» в нижній частині інтерфейсу BotBrew. Деякі додатки можуть зажадати створення додаткових користувачів і зміни їх параметрів, це можна зробити так само, як у звичайній Linux-системі:

  1. Створення користувача:
    $ Botbrew adduser vasya
  2. Відкриття користувачеві доступу в інтернет:
    $ Botbrew addgroup vasya inet
  3. Перемикання BotBrew на іншого користувача:
    $ Botbrew su vasya

Зверни увагу, що всі ці зміни стосуватимуться тільки віртуального оточення BotBrew і ніяк не позначаться на основній системі. Консоль можна використовувати також для установки додатків в обхід графічного інтерфейсу. Для цього слід використовувати консольний менеджер пакетів Opkg, синтаксис команд якого повністю сумісний в apt-get:

$ Botbrew opkg install dropbear

Зворотна операція:

$ Botbrew opkg remove dropbear

Щоб залишатися «на вістрі прогресу», репозиторій BotBrew потрібен час від часу оновлювати, натиснувши на відповідну кнопку в графічному інтерфейсі (її ні з чим не сплутаєш). Нові версії пакетів будуть відображатися на вкладці «Upgradable». Досить тапнуть по його імені і натиснути «Upgrade».


Керувати сервісами в BotBrew дійсно просто

У маркеті можна знайти також додаток під назвою BotBrew Brasil, позначене як експериментальне. По суті, це все той же BotBrew, але з одним вельми важливою відмінністю. Замість власних сховищ і менеджера пакетів Opkg він використовує ARM-репозиторії Debian Linux і менеджер пакетів apt-get. Це означає, що кількість софта, яке можна встановити за допомогою «бразильської версії» додатка, набагато більше. У десятки разів більше.

Крім використання дебіановскіх репозиторіїв, Brasil відрізняється також злегка зміненим інтерфейсом. Наприклад, відразу після запуску він пропонує вибрати каталог установки. За замовчуванням використовується / data / botbrew-brasil, що, на мій погляд, цілком логічно, проте ти можеш вибрати будь-який інший, в тому числі на ext2-розділі карти пам'яті (FAT не підійде).

Друга важлива відмінність - це можливість вибрати спосіб використання програми, яка з'являється відразу після натискання «Proceed». Варіантів тут чотири:

  1. Use BotBrew on the command line - по суті, аналог установки в стилі звичайного BotBrew.
  2. Use the dpkg / APT system - установка разом з apt-get і репозиторіями Debian. Рекомендований варіант установки.
  3. Run Python programs - аналог першого варіанту з автоматичною установкою Python.
  4. Install a minimal Debian - мінімалістичний установка Debian.

Поясню другий і четвертий пункти. Перший BotBrew і перший пункт в цьому списку роблять не що інше, як установку минималистичной Linux-системи (що складається всього з декількох команд і бібліотек), всередині якої якраз і відбувається запуск Linux-софта. Однак apt-get, на відміну від мінімалістичного Opkg, вимагає більш-менш повноцінної установки Linux. Тому, вибравши другий пункт, ти отримаєш у себе на смартфоні такий собі мікро-Linux. А якщо ми можемо встановити мікроверсію, чому б не встановити більш-менш повноцінний дистрибутив. Для цього і існує четвертий пункт.

Після bootstrap'а BotBrew Brasil на екрані з'явиться все той же інтерфейс управління установкою додатків, знайомий нам по класичній версії додатка, а в системі з'явиться команда botbrew2, за допомогою якої можна запускати софт. Якихось суттєвих відмінностей в управлінні тут немає, крім хіба що команди apt-get замість opkg і можливості підключення додаткових репозиторіїв (в тому числі сховища першого BotBrew) прямо через інтерфейс установки додатків.


BotBrew Brasil пропонує кілька варіантів установки

Прекомпілірованние додатки і репозиторії з готовими пакетами - це прекрасно, але що, якщо необхідного додатку немає серед доступних для установки? Адже навіть той же BotBrew Brasil, що дозволяє підключати репозиторії Debian з величезною кількістю софта, в силу свого експериментального характеру запрацює далеко не на кожному смартфоні.

У цьому випадку ми можемо спробувати зібрати додаток самостійно. Однак тут нас чекає відразу кілька труднощів: справа в тому, що для складання софта для смартфона доведеться підготувати необхідний інструментарій крос-компіляції, потім врахувати всі залежності збирається додатки і, нарешті, в деяких випадках внести необхідні зміни в код. Все це досить заморочливі справи, які навряд чи варті того, щоб витрачати на них час.

Проте ми можемо скористатися напрацюваннями інших людей, щоб автоматизувати процес складання софта. Одне з найбільш розвинених і цікавих рішень з цієї області - набір скриптів SCRIPTSET , Розроблений користувачем smitna з XDA Developers. Він дозволяє буквально в пару команд зібрати безліч найрізноманітніших додатків, в числі яких htop, ImageMagick, iptables, ELinks, Screen, mc, node.js, Samba, strace, QEMU, Parted, SANE (його можна використовувати для прямого друку на принтері з телефону!) і безліч інших. Скрипт сам викачає крос-компілятор, всі необхідні залежності і додатки, накладе патчі, де це необхідно, і згенерує готовий для розпакування на телефон архів.

SCRIPTSET працює тільки в Linux, але, якщо у тебе Windows, ти можеш встановити Ubuntu в віртуальній машині. Далі слід відкрити термінал і встановити необхідні для збірки крос-компілятора інструменти:

$ Sudo apt-get install build-essential cmake autoconf2.13 scons

Після цього можна отримати сам SCRIPTSET і розпакувати його:

$ Cd ~ $ wget http://goo.gl/zvnom -O scriptset-2.6.zip $ unzip scriptset-2.6.zip

В результаті розпакування ми отримаємо ... ще один архів: scriptset-2.6.tar.bz2. Але і це ще не все, архів запакований без традиційного для tar кореневого каталогу, тому його необхідно створити самостійно. І вже в нього виробляти розпакування:

$ Mkdir scriptset $ cd scriptset $ tar -xjf ../scriptset-2.6.tar.bz2

Після розпакування в каталозі з'явиться кілька скриптів, конфігов, а також значних розмірів файл README, що містить інструкції по використанню скриптів. На скриптах не варто біт виконання (що не дивує, враховуючи попередні заморочки), тому його треба поставити самостійно:

$ Chmod 755 * .sh


Запуск збірки додатків

Далі відкриваємо файл configuration.conf на редагування і міняємо в ньому такі рядки:

# Vi ~ / scriptset / configuration.conf // Каталог установки додатків на смартфоні TARGET_SYSROOT = "/ data / sysroot" // Цільовий процесор TARGET_MARCH = "armv7-a" TARGET_MTUNE = "cortex-a9" TARGET_MFPU = "neon" TARGET_MFLOAT = " softfp "

Цього буде достатньо для коректної збірки усіх програм; цільовим процесором буде стандартний ARMv7 з додатковим набором інструкцій NEON. Такий встановлений в будь-якому смартфоні, випущеному за останні три-чотири роки. Каталог / data / sysroot буде використаний для установки додатків на смартфоні, однак, як це не дивно, його доведеться також створити і на настільній машині:

$ Sudo mkdir -p / data / sysroot $ sudo chown user: users / data / sysroot $ sudo chmod 777 / data / sysroot

Як пояснює автор скриптів, така дія необхідна тому, що шляхи для ключових каталогів в деякі програми вшиваються на етапі складання. Тому, якби ми зібрали додаток, використовуючи в якості кореневого поточний і будь-який інший каталог, воно б просто не запрацювало на смартфоні через відмінності в шляхах. Я впевнений, що коректніше було б вирішити цю проблему за допомогою chroot, але простіше і швидше створити потрібний каталог, а після закінчення робіт - видалити його.

Далі ми повинні вказати список програм, які плануємо збирати. Для цього відкриваємо файл package_selection.conf і міняємо no на yes в потрібних опціях. Наприклад, щоб зібрати bash, ImageMagick і Screen, потрібно поміняти три наступних рядки:

# Vi ~ / scriptset / package_selection.conf BASH = yes IMAGEMAGICK = yes SCREEN = yes

Май на увазі, що налаштування, що знаходяться між рядками # ALWAYS NEEDED, міняти не можна. Ці додатки і бібліотеки потрібні завжди, і без них інші додатки просто не збираються. Тепер можна скомпілювати програми. Для цього достатньо запустити скрипт build.sh без аргументів:

$ ./build.sh

Якщо всі необхідні пакети були встановлені і компілятор в ході складання не видав ніяких помилок, в результаті складання в поточному каталозі з'являться два архіву: cs-sysroot.tar.bz2 і android-mysysroot.tar.bz2. Перший - це оточення, необхідне для запуску додатків, створене крос-компілятором, а друге - сам набір додатків. Обидва цих архіву необхідно скинути на карту пам'яті смартфона, а потім, запустивши на ньому емулятор терміналу або підключившись по ADB, виконати дві команди:

$ Tar xjf /sdcard/cs-sysroot.tar.bz2 $ tar xjf /sdcard/android-mysysroot.tar.bz2

В результаті у внутрішній пам'яті смартфона з'явиться каталог / data / sysroot, в якому і будуть розміщені додатки. Запускати їх слід з того ж терміналу, вказуючи повний шлях. наприклад:

$ / Data / sysroot / usr / bin / bash

Ну або після запуску терміналу додати / data / sysroot / usr / bin в PATH:

$ Export PATH = "$ PATH: / data / sysroot / usr / bin"

Незважаючи на досить серйозні відмінності між Android і типовим Linux-дистрибутивом, встановити консольні Linux-додатки на смартфон не так вже й складно. На жаль, про графічних додатках мови поки не йде, але проекти портування бібліотеки Qt і графічного сервера Wayland в Android вже є, і незабаром, сподіваюся, ми отримаємо робочий рішення.


Вперше опубліковано в журналі «Хакер» від 08/2013.

Публікація на Issuu.com

Підпишись на «Хакер»

Отже, як же використовувати BotBrew для установки Linux-софта?

Дополнительная информация

rss
Карта