Статьи

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

  1. Зміст статті Минуло зовсім небагато часу з моменту випуску перших смартфонів під управлінням ОС Android...
  2. Як?
  3. Перевірка роботи необхідних модулів
  4. альтернативні варіанти
  5. Практичне заняття
  6. Установка Gentoo на ext2-розділ
  7. нативная установка
  8. Що далі
  9. WWW

Зміст статті

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

Навіщо?

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

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

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

Як?

Перенести Linux на Android дійсно просто, і головну роль тут відіграє ядро ​​Linux. Будь-Linux-дистрибутив являє собою набір додатків і бібліотек, що працюють поверх ядра Linux, а так як Android сам заснований на майже незмінному ядрі Linux, ці програми, але бібліотеки можна без будь-яких проблем запустити всередині середовища Android. Достатньо лише підшукати дистрибутив, для якого існує порт на платформу ARM (не забуваємо, що 99% всіх Android-девайсів працюють на ARM), встановити його за допомогою ARM-емулятора на віртуальний жорсткий диск (тобто в файл), скинути цей файл на SD-карту пристрою, відкрити термінал, змонтувати образ в якості loopback-пристрої і зробити chroot всередину. Усе! Це так само просто, як запуск FTP-сервера в chroot-оточенні - простий і перевірений десятиліттями метод.

Єдиний камінь спотикання, коли ти вирішуєш запустити дистрибутив Linux всередині Android, - графічне середовище. У той час як з доступом до консолі ніяких труднощів не виникає завдяки наявності повноцінного емулятора терміналу, з графічними додатками починаються проблеми - нативного X-сервера для Android немає, а запустити звичайний X-сервер всередині самого дистрибутива неможливо через корінних відмінностей в архітектурі графічної підсистеми зеленого робота. Незважаючи на те що в основі вона використовує стандартний Linux Framebuffer, поверх якого можна запустити X-сервер, ексклюзивне право його використання спочатку належить більш високорівневих бібліотекам Android, тому залишається або завантажувати Linux-дистрибутив замість Android (що зовсім непрактично), або придумувати обхідні шляхи .

Перевірка роботи необхідних модулів

Май на увазі, що підтримка loopback-пристроїв і файлових систем ext2 / ext3, необхідних для підключення образу, є далеко не у всіх ядрах Linux, встановлених на смартфонах під управлінням Android. Перевірити наявність підтримки можна за допомогою команди lsmod | grep -e loop -e ext2.

Ентузіасти вийшли з цієї ситуації, використовуючи простий метод «віддаленого» підключення до робочого столу за допомогою будь-якого доступного для Android VNC-клієнта. Усередині chroot-оточення запускається X-сервер Xvnc, і всі програми працюють під його керівництвом. Користувачеві залишається лише встановити VNC-клієнт, вбити локальну адресу - і вуаля, на екрані з'являється повноцінний робочий стіл.

Єдине вузьке місце при використанні віддаленого робочого стола - це продуктивність. Навіть працюючи локально, VNC не може забезпечити належний її рівень, якого б вистачило для плавної прокрутки або переміщення вікон без лагів. Вирішити цю проблему поки не вдалося, проекти розробки нативного X-сервера, який би використовував графічну підсистему Android, ще дуже сири і не можуть бути використані для запуску повноцінних графічних середовищ. Втім, ніхто не забороняє їх використовувати; наприклад, X Server від Darkside Technologies Pty Ltd ( goo.gl/ap3uD ) Цілком згодиться для запуску простого софта.

Спочатку Linux для Android існував тільки у вигляді образу з вже встановленою системою, а також пояснювальної інструкції, як цей образ підключити і використовувати. Потім з'явилися скрипти, які автоматизували процес підключення образу і запуску Linux, але і вони вимагали деякої роботи головою. Нарешті, останнім часом з'явилися інсталятори, доступні в Google Play (наприклад, goo.gl/RSA1j ), В деякій мірі автоматизують процес запуску дистрибутива, хоча, по суті, це все той же керівництво по установці, але інтерактивне, з прямими посиланнями на скачування образів і скриптів.

альтернативні варіанти

Вище я вже згадав про те, що дистрибутив 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-карті. До речі, ext2-розділ на карті пам'яті також можна використовувати для установки Linux, що запускається в chroot-оточенні.

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

Практичне заняття

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

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

Для початку нам потрібен образ жорсткого диска з встановленим дистрибутивом. Його можна створити самому, скориставшись емулятором QEMU, проте в зв'язку з тим, що процедура установки абсолютно стандартна і типова, описувати її я не буду, а просто направлю тебе за адресою goo.gl/9nvBi . Тут лежить архів з образом, на який встановлено Ubuntu 12.04 з графічним оточенням LXDE (було б нерозумно запускати Unity / Gnome на телефоні / планшеті). Архів слід розпакувати і покласти файл ubuntu.img на карту пам'яті.

Далі треба змонтувати образ і зробити chroot в оточення дистрибутива. Для цього потрібні права root, прошивка з підтримкою блокових loopback-пристроїв і встановлений busybox (шукаємо в Маркеті за запитом «busybox installer», в CyanogenMod є за замовчуванням). Послідовність дій:

  1. Відкриваємо емулятор терміналу в Android (якщо немає, можна встановити з Маркета Terminal Emulator). Або підключаємо смартфон / планшет до комп'ютера і отримуємо доступ до терміналу за допомогою adb: $ cd шлях-до-Android-SDK / platform-tools $ sudo ./adb shell

    Не забуваємо, що режим налагодження в цьому випадку повинен бути включений: «Налаштування -> Для розробників -> Налагодження Android».

  2. Отримуємо права root: $ su
  3. Створюємо блочне loopback-пристрій, підключаємо до нього образ диска і монтуємо його: # mknod / dev / block / loop255 b 7 255 # mount -o 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 / proc # mount -t sysfs sysfs / mnt / ubuntu / sys # mount -o bind / dev / mnt / ubuntu / dev
  5. Налаштовуємо так, щоб з chroot-оточення можна було отримати повноцінний доступ в Мережу: # sysctl -w net.ipv4.ip_forward = 1 # 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. Переходимо в chroot-оточення: # chroot / mnt / ubuntu

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

Тепер нам необхідно встановити і запустити X-сервер Xvnc, що експортує дисплей і пристрої введення з використанням протоколу VNC. TightVNCserver вже є в представленому образі і навіть налаштований, але, щоб ти краще зрозумів процес і зміг вирішити виниклі проблеми, я детально опишу процес його установки і запуску.

  1. Оновлюємося і встановлюємо TightVNCserver: # apt-get update # apt-get install tightvncserver
  2. Створюємо файл /root/.vnc/xstartup і пишемо в нього наступне: #! / Bin / sh xrdb $ HOME / .Xresources xsetroot -solid grey export XKL_XMODMAP_DISABLE = 1 icewm & lxsession

    Третя команда тут потрібна, щоб пофиксить проблеми, які можуть виникнути через фізичну відсутність на пристрої клавіатури.

  3. Запускаємо Xvnc за допомогою врапперов vncserver з правами root: # export USER = root # vncserver -geometry 1024x800

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

  4. Встановлюємо на смартфон додаток AndroidVNC, запускаємо його, вказуємо IP-адреса і порт 5901, підключаємося. На екрані повинен з'явитися робочий стіл LXDE.

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

Май на увазі, що скрипт монтує образ до каталогу / data / local / mnt

AndroidVNC - підключаємося до робочого столу

Установка Gentoo на ext2-розділ

Отже, ми встановили Ubuntu за допомогою образу з файлової системою і шаманств з loopback-пристроєм і chroot-оточенням. Зробити це виявилося нескладно, а із застосуванням скриптів так і взагалі дуже легко, але що, якщо піти далі і встановити більш хардкорних дистрибутив, і не з використанням образів, а на виділений ext2-розділ на карті пам'яті? Так ми зможемо вирішити проблему деяких прошивок і ядер без підтримки loopback-пристроїв і до того ж зможемо насолодитися нормальним дистрибутивом, встановленим за всіма правилами.

Так ми зможемо вирішити проблему деяких прошивок і ядер без підтримки loopback-пристроїв і до того ж зможемо насолодитися нормальним дистрибутивом, встановленим за всіма правилами

Проект «Ubuntu for Android» в дії

Візьмемо в якості піддослідного системи Gentoo. Щоб встановити його на ext2-розділ, нам знадобиться карта пам'яті обсягом не менше 2 Гб і рутованних смартфон з встановленим busybox. Послідовність дій така.

  1. Робимо бекап даних з карти пам'яті і створюємо на ній додатковий розділ, обсягом не менше двох гігабайт. Зробити це можна за допомогою будь-якої програми для розбивки дисків, проте май на увазі, що якщо ти хочеш продовжувати використовувати SD-карту за прямим призначенням, то створювати FAT32-розділ слід на початку карти, так, щоб він став першим, а додатковий розділ для установки дистрибутива повинен бути другим.
  2. Форматуємо розділи SD-карти: $ sudo mkfs.vfat / dev / sdc1 $ sudo mkfs.ext2 / dev / sdc2
  3. Беремо телефон, заходимо в «Налаштування -> Про телефон» і дивимося, який встановлений процесор. Далі переходимо на сторінку goo.gl/PRfux і викачуємо stage3 для потрібної архітектури, наприклад stage3 для ARM v7 лежить в каталозі current-stage3-armv7a.
  4. Монтуємо ext2-розділ карти пам'яті на комп'ютері і розпаковуємо в нього вміст отриманого архіву: $ sudo mount / dev / sdc2 / mnt $ sudo tar -xxpf stage3 - *. Bz2 -C / mnt

    Відразу редагуємо конфіги і все, що потрібно, за смаком, включаючи правку /etc/resolv.conf за зразком з попереднього розділу.

  5. Запускаємо емулятор терміналу (або виконуємо «adb shell»), монтуємо все необхідне і переходимо в chroot (майже так само, як у випадку з Ubuntu): # mount -o remount, 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 = 1 # chroot / mnt / gentoo

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

Втім, можна налаштувати середовище для крос-компіляції на компі, але це вже тема для окремої статті

Ubuntu на Galaxy Tab 10.1

нативная установка

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

Кожен пристрій по-своєму унікальне, включаючи різні таблиці розділів NAND-пам'яті, на яку проводиться установка, різні пристрої та драйвери для їх роботи

Нативний X-сервер для Android

На щастя, процес установки нативной версії дистрибутива добре описаний для багатьох пристроїв в російськомовних форумах, тому знайти інструкцію буде нескладно. Варто, проте, відразу звернути увагу на кілька особливостей такого типу установки:

  • Окремий або основний NAND-розділ. Linux-дистрибутив може бути встановлений як в завчасно створений розділ в NAND-пам'яті, так і в основний завантажувальний розділ. У першому випадку розробник прошивки зазвичай залишає можливість завантаження Android за допомогою спеціального скрипта або через завантаження Linux-дистрибутива в режимі відновлення, у другому він буде встановлений замість Android і для повернення можливості завантаження робота доведеться заново перепрошивати пристрій.
  • Можливість подвійного завантаження. Якщо Linux-дистрибутив буде встановлений на окремий розділ, розробник може залишити можливість завантаження Android. Однак варто відразу звернути увагу, як ця завантаження відбувається: за допомогою режиму відновлення або скрипта, що запускається з звичайного компа. Все-таки другий спосіб буде незручний в дорозі.
  • Підтримка обладнання. Оригінальна Linux-ядро Android-прошивки вже включає в себе всі необхідні драйвери, які можуть знадобитися для роботи повноцінної Linux-системи, проте далеко не у всіх Linux-прошивках все заведеться само собою. Часто виникають проблеми з Wi-Fi-адаптером і сенсорним екраном, який неадекватно реагує на дотики. Тому перед установкою прошивки варто уважно прочитати про можливі ускладнення.

У будь-якому випадку будь готовий до того, що під час установки Linux-дистрибутива всі твої дані будуть знищені. Без цього ніяк.

Без цього ніяк

Запуск Ubuntu за допомогою стартового скрипта

Що далі

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

WWW

goo.gl/UGDe3 - опис процесу підготовки образу Ubuntu власними силами (англійською).

Як?
Навіщо?
Як?

Новости