9 ноября 2008 в 18:32

Установка Debian Lenny на Android перевод

imageНу что же, Android вышел и даже выложены исходные коды. И мы получили первое работающее на Android устройство. Чего действительно у нас не было так это смены игры при котором мы внезапно получили бы контроль над своими телефонами. Вы помните что нам обещал Google в прошлом году.
Реальность такова, что даже Google не может повлиять на мир мобильных устройств. Те кто уже получил свой G1 и уже некоторое время успел поиграть с ним, был расстроен тем фактом, что мы до сих пор просто обычные пользователи на своем телефоне: T-Mobile не разрешил нам использовать пользователя root, боясь как бы мы чего нибудь не сделали.

Если вы захотите попробовать эту инструкцию в действии, учтите что все что вы делаете, вы делаете на свой страх и риск.

Получение полномочий супер пользователя(root)/Jailbreaking

Для меня ограничения подобного рода, превращают устройство в ни что иное как в игрушку: те кто следил за моими приключениями в мире iPhone, знают, что я считаю позором носить телефон с высокоскоростным ARM процессором, запущенной современной операционной системой, большим экраном, с многочисленными способами управления/ввода, всего лишь для того что бы использовать его как очередной сотовый телефон.

К счастью это изменилось несколько дней назад, когда кто то нашел серьезную уязвимость в прошивке Android. Можно было получить привилигерованные права. Просто набрав в консоле telnetd и подключившись с помощью telnet клиента вы получаете root.

К сожалению, пока трудно сделать что то стоящее с помощью Google'вской замены busybox — toolbox. Что нам нужно, так это полноценная юникс среда. Этот телефон достаточно мощный, даже для того что бы разрабатывать приложения прямо на нем.

Установка Debian ARMEL

Уже было несколько попыток установить busybox на андроид. Я думаю что мы можем пойти дальше, и с помощью этой инструкции установить полный дистрибутив Debian, один из высокоуважаемых линукс дистрибутивов позволяющий устанавливать все что вы захотите.
Для этого нам нужно продумать несколько вопросов связанных с G1. Во первых, где нам хранить его? На телефоне есть встроенная flash память, но там всего лишь 128MB для операционной системы и остальных приложений.

Поэтому мы обратили внимание на более емкую часть телефона — microSD карту, которая позволяет хранить до 16GB данных. К сожалению, для возможности чтения ее всеми кардридерами, эта карта имеет файловую систему FAT, которая бесполезна для хранения юникс программ и данных.
Но вот что мы придумали — мы можем хранить образ Debian на карте памяти и затем просто монтировать его.

Просмотрев содержимое /proc/filesystems, мы можем увидеть все типы файловых систем которые можем использовать: vfat, yaffs, yaffs2. На T-Mobile установлена только минимальная часть драйверов для файловых систем, необходимых для функционирования Android. Это означает что нам нужно загрузить драйвер, который позволил бы нам, монтировать наш образ, благо ядро собрано с поддержкой модулей.

Если потребуется могу написать руководство, потому как собирать модули для G1. Я поощряю людей которые стремятся к обсуждению тем разработки/модификации G1. Для обсуждения вы можете подписаться на рассылку the G1-Hackers mailing list которую я держу на Telesphoreo.
Я так же поддерживаю IRC на irc.saurik.com (тот же сервер на котором расположены Phone ориентированные каналы) на канале #android, совместно с еще несколькими заинтересованными людьми.

Создание дискового образа Debian

Так, хватит болтать, приступим! Во первых нам понадобится образ файловой системы Debian, который мы поместим на карту памяти телефона. Для его создания, мы можем использовать уже существующую Debian систему. Благо Debian уже имеет полную поддержку ARM EABI и даже есть полезная инструкция как установить.

Для людей у которых нет желания возиться с созданием образа, я уже создал готовый на 750MB, скачать можно здесь полный образ (RapidShare). Этот образ был упакован с помощью bzip2 и занимает ~85MB.

RapidShare достаточно медленный сервер, так что ребята из modmyGphone.com выложил у себя зеркало образа на своих серверах. Подробности можно почитать здесь.

Если хотите создать образ самостоятельно (может быть вам нужен другой размер файловой системы под дебиан, отличный от 750MB, или просто хотите контролировать весь процесс), это можно сделать с помощью следующих команд:

apt-get install debootstrap
dd if=/dev/zero of=debian.img seek=749999999 bs=1 count=1
mke2fs -F debian.img
mkdir debian
mount -o loop debian.img debian
debootstrap --verbose --arch armel --foreign lenny debian ftp.de.debian.org/debian
umount debian


Сборка нашего набора инструментов (kit) для Debian

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

* ext2.ko (RC19) (RC29/30) — стандартный модуль файловой системы Linux
* unionfs.ko (RC19) (RC29/30) — позволяет объединять папки (продвинутый)
* busybox — набор системных утилит

Скопируйте это все ( и debian.img) в папку на карту памяти microSD (я использовал USB соединение, которое проще и быстрее чем остальные). Если вы скачивали готовый образ, то имеет смысл переименовать его в debian.img, что бы дальнейшем было проще его использовать.

Установка и монтирование

Куда же нам лучше это все положить? Я скопировал набор инструментов (kit) в корневую директорию microSD карты и все остальное поместил в /data/local (очень полезная папка в которую вы можете нормально записывать).

Экспортируем пути, для того что бы можно было не набирать постоянно длинные пути. Это так же позволит этой инструкции выглядеть семантически намного проще для чтения.

export kit=/sdcard/kit
export bin=/data/local/bin
export mnt=/data/local/mnt


Далее нужно экспортировать еще несколько путей, они понадобятся программам которые мы будем использовать в дальнейшем. Это позволит сэкономить время при загрузке драйвера для ext2. Это может выглядеть странно (по крайней мере переменная HOME), но если мы их не зададим позже могут возникнуть основные проблемы.

export PATH=$bin:/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root

insmod $kit/ext2.ko


Следующим шагом нужно скопировать куда нибудь busybox для дальнейшего использования. Так как G1 не содержит команду cp, будем использовать для этого cat. Заметка, команда mkdir не имеет опцию -p (так как toolbox ее не поддерживает), так что если вы выберите директорию с большой вложенностью (или существующую) вы должны будете игнорировать некоторые ошибки или решить их иначе.

mkdir $bin #-p
cat $kit/busybox >$bin/busybox
chmod 755 $bin/busybox


busybox установлен, теперь мы можем с помощью него создать узел устройства (device node) для драйвера loopback. Нам нужен busybox, так как G1 не содержит утилиту mknod, которая понадобится для создания ноды. Так же создадим алиасы (короткие имена) для busybox, что бы легче было набирать команды.

alias _=busybox
_ mknod /dev/loop0 b 7 0


Если вы получите ошибку при запуске: _ не найдено, просто попробуйте сбросить ее:

unalias _
alias _=busybox


Наконец то устройство замыкание на себя(loopback) создано, мы можем подключить образ debian! Замечание, в качестве имени образа debian.img, используйте имя вашего образа, если оно отличается.

_ mkdir -p $mnt
_ mount -o loop $kit/debian.img $mnt


Тут может возникнуть несколько основных ошибок: если ошибка /etc/fstab, тогда по всей видимости файл $kit/debian.img не существует, или возможно не установлена переменная $mnt.

Заключительный этап установки

На этом этапе, мы должны закончить то, что debootstrap не в силах. Во первых, нужно запустить несколько скриптов и поправить URL к репозитариям Debian (почему то, debootstrap их путает, по не понятной причине). Если вы уже скачали готовый образ, то эти две команды вам делать не нужно.
_ chroot $mnt /debootstrap/debootstrap --second-stage
echo 'deb ftp.de.debian.org/debian lenny main' >$mnt/etc/apt/sources.list


После того как эти команды выполнятся (возможно займет почти 10 минут), мы можем поменять окружение на debian с помощью команды chroot. Мы получи оболочку и полное дебиан окружение, со всеми вытекающими клевыми штуками, которые мы можем делать. Эту команду выполняют все, даже те кто скачал готовый образ.

_ chroot $mnt /bin/bash

Далее подключаем в наше окружение файловые системы devpts, proc и sysfs.

mount -t devpts devpts /dev/pts
mount -t proc proc /proc
mount -t sysfs sysfs /sys


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

passwd root

Установка OpenSSH

Вот где проявляется вся мощь дебиан: быстрая установка новых программ на телефон. Ну что, установим SSH сервер, для того что бы получить полноценную консоль.
Для этого будем использовать APT (система управления пакетов в Debian). Первая команда обновить информацию о пакетах в репозитариях и установит обновления. Вторая установит собственно сам ssh сервер.
apt-get update
apt-get install openssh-server

Если позже вы снова захотите запустить OpenSSH (так как не используется нормальный запуск дебиан сервисов), вы можете сделать это с помощью следующей команды (или используя «restart» вместо «start»).

/etc/init.d/ssh start


Что же дальше?

Повеселимся! Первое что я сделал — установил subversion, gcc и vim, что бы можно было начать разрабатывать. Повторю, люди которые хотят подробнее изучить внутренности Android (драйверы ядра, доступ к железу, процесс перепрошивки) могут присоединиться к почтовой рассылке G1-Hackers.

После того как вы перезапустите телефон вам понадобится выполнить, если не все, то большую часть этих команд снова. Для тех кто использовал такие же пути как и я, могут использовать скрипты для переподключения (скрипт).

Так же стоит упомянуть, что пока примонтирован образ, Android не будет доступен через USB кабель. Для этого нужно отмонтировать все что было примонтировано раньше

_ umount $mnt/dev/pts $mnt/proc $mnt/sys $mnt

Хотя Android поставляется с утилитой размонтирования umount, которая работает как бы нормально, но тем не менее она оставляет loopback устройство, которое будет продолжать блокировать карту microSD для подключения через USB. Удалить ее можно в ручную, с помощью следующей команды:

_ losetup -d /dev/loop0

Запуск Debian в /

Больше всего в этом процессе огорчает, то что мы должны выбирать между андроид и дебиан. Здесь нам на помощь приходит unionfs.

Замечание, все последующие команды должны быть выполнены вне дебиан окружения. Для это нужно в текущей telnet сессии набрать:
exit

или открыть еще одну сессию. Все команды можно скачать ввиде готового скрипта.
Для запуска этого скрипта у вас уже должны быть экспортированы все стандартные переменные. Если вы с копировали скрипт в $kit, тогда выполнить его можно с помощью следующей команды.

. $kit/unionfs.sh

Установить этот скрипт можно с помощью wget:

_ chroot $mnt wget -O /tmp/unionfs.sh cache.saurik.com/android/script/unionfs.sh
cat $mnt/tmp/unionfs.sh >$kit/unionfs.sh
rm $mnt/tmp/unionfs.sh


Для тех кто не использовал готовый скрипт:

insmod $kit/unionfs.ko
mount -t unionfs -o dirs=$mnt/etc=rw:/etc=ro unionfs /etc


Теперь у нас /etc содержит файлы из Android и Debian. При изменении/создании файлов в /etc все модификации будут храниться в Debian разделе — это позволяет получить нам полноценный доступ к /etc!

Следующая проблема, состоит в том что Android и Linux используют разные соглашения именования для их динамического компоновщика. Для Android мы имеем /system/bin/linker, а для Linux мы имеем /lib/ld-linux.so.3. Это означает что мы получим ошибку файл не найден, при запуске работающих программ. Это легко исправить при помощи символических ссылок.

_ mount -o remount,rw /
_ ln -s $mnt/lib /


С первого взгляда это может выглядеть опасно, но это не так. При изменении корневой файловой системы телефона, это будет изменение в «rootfs»: специальное состояние Linux ramfs(файловая система в памяти). Это означает, что любые изменения которые мы сделаем, после перезагрузки телефона, исчезнут.

Теперь мы сможем запускать большинство Debian программ без применения chroot, просто запуская программы из $mnt. К сожалению не все будет работать, так как большинство файлов находятся не там, где должны быть. Давайте ка исправим это с помощью символических ссылок

for x in
bin boot home media mnt
opt selinux srv usr var
do
_ ln -s $mnt/$x /
done

Осталось еще несколько директорий которые нужно поправить. Первая: /root пустая, поэтому мы можем заменить ее ссылкой. Так как мы закончили изменение файлов в /, я настоятельно рекомендую перемонтировать корень / в режим только чтения.

rmdir /root
_ ln -s $mnt/root /
_ mount -o remount,ro /

Остались еще две /sbin и /dev. Тут есть не большая загвоздка с /dev. Так как внутри этой папки смонтирована /dev/pts, она не может быть объединена с помощью unionfs. Для решения этой проблемы, просто смонтируем /dev/pts поверх unionfs:

mount -t unionfs -o dirs=$mnt/sbin=rw:/sbin=ro unionfs /sbin
mount -t unionfs -o dirs=$mnt/dev=rw:/dev=rw unionfs /dev
mount -t devpts devpts /dev/pts


У нас все готово, даже для того что бы такие программы как openssh работали корректно, перезапустим сервис:

/etc/init.d/ssh restart

В заключение

Это все выглядит хорошо, но осталось еще несколько проблем заслуживающих внимание:
Первое — пока не понятно где хранятся имена пользователей и информация для аутентификации. Если вы посмотрите на владельцев файлов с помощью ls входящую в состав дебиан, то заметите что их там нет.

Второе, используя симлинк для /, вместо использования chroot (пока что не удалось сделать прозрачную загрузку всех сервисов) означает что любой пакет по пытающийся добавить директорию в / завершится неудачей. Для установки программ через apt-get придется использовать chroot.

И последнее, в скором времени выходит обновление RC30, после которого уже не будет действовать джейлбрейк через Telnetd. Так что пока не наиграетесь вдоволь, не устанавливайте его.
(Надеюсь я пойму почему телефонные компании, так любят продавать нам устройства, которые нарочно ограничены в функциональности. Это как то улучшает их бизнес?)

Если вы найдете не соответствия или еще какие либо ошибки в статье, пожалуйста сообщите.
Статья с переводом так же выложена ironphone.ru
Перевод: Jay Freeman (saurik)
Владимир @vovkab
карма
15,8
рейтинг 0,0
Самое читаемое

Комментарии (56)

  • +9
    пошел покупать G1
    • +1
      Я уже себе заказал, жду.
      • 0
        где заказывали?
        • 0
          ebay.com, больше пока собственно и не где, если конечно кто нить не привезет.
        • 0
          Но при покупке стоит помнить о не которых особенностях g1.

          1. Он будет залочен, придется либо покупать код активации или использовать *sim адаптер,
          конечно можно купить и разлоченный.
          2. говорят что даже после активации телефона не работают сервисы гугл, надеюсь они устранят данное недоразумение.
          • 0
            Вы разлоченный покупаете?
            И если не секрет, укажите цену, интересно.
            • 0
              Покупаю залоченный, выиграть можно от 350$ и выше, как повезет. За 400$ можно в любое время купить+ доставка. Так что не сильно напрягаясь можно за 450$ в любое время заказать. Жалко только что доллар поднялся, а так бы при 24р/$ очень хорошая цена.
              • 0
                vovkab, спасибо за ответ, а разлочить в домашних условиях сильно муторное занятие?
                • 0
                  сам еще не пробовал, но есть два способа:
                  1. купить анлок код, там же на ибэе
                  2. использовать что то типа turbosim

                  Первый думаю предпочтительнее. По идее код можно получить от t-mobile бесплатно, но это уже сложнее.
                • 0
                  эм. сорри, после покупки кода, когда загружается телефон появляется окошко для ввода кода, вводишь, если код нормальный, то телефон разлачивается, видео со всем процессом можно посмотреть тут: ru.youtube.com/watch?v=Ob32_fp24ag
                  • 0
                    спасибо, надо будет попробовать
    • 0
      жду Asus Glaxy7 или падения цены на HTC Touch HD, а потом буду думать как туда впихнуть линь :D

      Подписался на рассылку автора. Вот такое почаще хочется видеть на главной странице хабра!
  • 0
    Хочу попробовать!!!
    • +3
      Кстати скоро выйдет фикс от гугл исправляющий права на telnetd, и такой возможности может и не быть, придется искать новый способ джеилбрейка.
    • 0
      Кстати можно попробовать и на эмуляторе, по идее должно получиться.
      • 0
        хотелось бы узнать по подробнее, это даже похоже на тему новой статьи :)
        • +1
          Все очень просто, устанавливаешь Android SDK с офф сайта code.google.com/android/download.html
          распаковываешь,
          1. запускаешь в папке tools/emulator.exe
          2. запустить в папке tools: adb shell
          3. и выполнить команду
          mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system

          Вот тебе и джеил для эмулятора. А дальше можно попробовать установить дебиана.
  • +3
    А скриншоты?
    • +1
      а на что там смотреть? :)
  • +3
    Блин после яфона думал взять андроид, думал хоть там нормально все будет с правами и возможностями, из коробки… хрен там
    • 0
      Ну тут смотря как посмотреть. Вот например по большей части для чего делали джеил айфону? Просто для того что бы можно было свободно писать проги на любой ОС и затем их можно было бы установить в телефон. У андройда этой проблемы нету, сдк доступна, исходники открыты, писать можешь в любой операционке: win, lin, mac. Не нравится eclipse есть скрипты для сборки, можешь писать вообще в чем угодно.
      • 0
        Просто раздражают эти издевательства над power-пользователями. Ну, запрятали бы рута куда-нибудь внутрь с нетривиальным включением… Так нет, надо наворотить что-то своё.

        Кстати, эта статья не говорит ничего про поддержку радио (WiFi/Bluetooth/GPS/GSM) из линуксовского юзерспейса. Как там с ними?.. Там ведь блобы или как? И можно ли целиком прошивку (внутреннюю флешку) пересобрать?
        • 0
          По поводу рута, с тобой согласен, в идеале хотелось бы иметь полный доступ. В этом переводе, только начальный процесс адаптации дебиан на андроиде. Думаю остальное не заставит ждать себя долго, хотя кто знает.
        • 0
          Ну, запрятали бы рута куда-нибудь внутрь с нетривиальным включением…
          Эээ… А как же пресловутый Android Market? Как сделать так, чтобы проги нельзя было с телефона на телефон копировать? Пока эта проблема не решена — потому там только бесплатные проги, но, я думаю, работа ведётся. И одна из составляющих — затыкание дыр. Когда очередная прошивка продержится месяца два-три — тогда наконец и небесплатные проги появятся…
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Надеюсь я пойму почему телефонные компании, так любят продавать нам устройства, которые нарочно ограничены в функциональности. Это как то улучшает их бизнес?
    Интересно: вы издеваетесь или действительно не понимаете???
    • 0
      Деньги?
      • 0
        Дык. Если вы хоть иногда включаете телевизор, то могли бы заметить сколько вокруг телефонов разного… добра вертится. Мелодии, игры и прочая — всё завязано на то, что люди не могут просто вот так взять и поделиться чем-нибудь с соседом. «Крютых хакеров» они не боятся — ибо большая часть владельцев сотовых и компьютера-то не имеют, но вот возможности что-то поставить на телефон без кучи хитрых телодвижений быть не должно.

        Всё просто и понятно. Вот на что создатели всяких «непрошибаемых Blu-Ray» защит рассчитывают не очень понятно, а с производителями сотовых и приставок всё как бы ясно.
    • 0
      Если бы параллельно продавали устройства неограниченные в возможностях за большие деньги, то тогда было бы понятно.
      • +1
        Вы чего? Совсем что ли с дуба рухнули? Вася Пупкин не должен даже догадываться о том, что мелодию можно не покупать, а просто с телефона на телефон перекинуть! Всегда найдутся «шибко умные», кто будут хачить всё на свете, но чем их меньше — тем больше прибыли операторов…
        • 0
          Какое то ужасное в вашем представлении будущее. :)
          • +1
            Эээ… Будущее? Я вообще-то настоящее описывал…
            • 0
              Как страшно жить. Правда в последнее время то и слышно что будут бесплатно выкладывать музыку и тд. в замен на что нибудь, пускай даже абонплату.
  • 0
    Блин ну какой же все таки телефон страшный…
    все желания покупать и что то устанавливать пропадают при взгляде на это чудовище…
    • 0
      При всем богатстве выбора другой альтернативы нет, пока нет. :) Хотя можно было бы и лучше сделать. Видимо HTC зажали. Ну ни че и этот сойдет.
    • 0
      У меня было такое же мнение пока не подержал его в руках. Он зато весьма удобен. Единственное, что внушает опасение: механизм сдвига экрана. Как-то уж больно хлипко он смотрится…
      • 0
        Счастливчик :) мне только предстоит
  • 0
    Ну есть еще Openmoko и Neo FreeRunner. Там все с открытостью в полном порядке. Теоретически его можно даже купить в ЛинуксЦентре.
    • 0
      чего чего, а вот эти действительно страшные, и по последним слухам собираются на андроид.
  • 0
    очень интересно, надеюсь дальше — больше. полноценный debian в кармане — очень круто ;)
  • 0
    а если там нет X сервера — следовательно, никакую графическую программу из дебиана запустить невозможно?
    • 0
      Да и зачем? Устанавливается только Debian base subsystem, в качестве примера можете поглядеть как это сделано на iphone, там тоже стоит дебиан и apt в качестве управления пакетами, cydia в качестве морды к apt.
  • –2
    что-то то я не понимаю… вроде гугл всегда был за свободу и на хорошей стороне… а в итоге секса больше чем с пресловутым айпатефоном ?!?
    • 0
      Ну не скажите. Чтобы устанавливать проги G1 (в отличие от iPhone) хачить не нужно. И если вы делаете телефон самостоятельно (или используете открытые платформы типа того же FreeRunner'а), то проблем тоже нет. А если связались с ОпСоСами (Гугл не продаёт G1, этим занимается T-Mobile) — то будьте готовы играть по их правилам…
  • НЛО прилетело и опубликовало эту надпись здесь
    • –1
      Это не совсем верно. Почитайте just for fun.
      • 0
        И что? Там Линус подробно описывает как ему пришла в голову идея написать ядро для запуска GNU'сных программ. И что из этого в конце-концов получилось. На то, что Linux — это что-то больше, чем ядро он там вроде бы нигде не претендует…
        • 0
          Ну по крайней мере там идет речь о выходе именно операционной системы линукс как замена миникс. :)
        • +1
          Вы сами что бы создавали, ядро? :) конечно же нет, вы бы создавали ОС, ну а в дальнейшем так получилось что много софта написанного разными людьми и поэтому как то не удобно называть всю ось линуксом, поэтому стали писать gnu/linux. Тоже самое можно и на вики поглядеть: ru.wikipedia.org/wiki/Linux
          • 0
            От идеи создавать свою собственную OS Линус отказался достаточно быстро. Как появились MCC и SLS так и отказался оставив создание OS другим и сконцентрировавшись на ядре.
            • 0
              с этим ни кто не спорит, просто посмотри на первый пост(xsintez ) зачем так утверждать :)
              в вике написано что это так же и ось
              Эта статья об операционной системе, об одноимённом ядре ОС
        • 0
          не спорьте мальчики, там написано, что хорошие оси во младенчестве были терминальными программами ;)
          • 0
            там — это в книге Линуса just for fun.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          по всему интернету раскидано одно и тоже:

          Linux is a free Unix-type operating system originally created by Linus Torvalds with the assistance of developers around the world.

          www.linux.org/
  • 0
    www.opennet.ru/opennews/art.shtml?num=18832
    интересно… станет ли возможным сделать это прозрачнее и проще… запустил виртуальную машину и используй ось которая по душе…

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