В процессе ковыряния содержимого AR.Drone понял, что родной линукс это хорошо, но мало. Однако, в этом самом линуксе обнаружилось присутствие утилит chroot и возможность монтирования файлов с ext3 файловой системой, что позволяет сделать много интересных вещей, разместив chroot окружение на флешке.


В процессе подготовки такого окружения использовался уже существующий компьютер с Ubuntu 12.04
Действия следующие.
1) Создаём образ нашей файловой системы:
desktop$ dd if=/dev/zero of=./ar.drone.ubuntu.fs bs=1M count=800
2) Создаём в нём файловую систему:
desktop$ mkfs.ext3 ./ar.drone.ubuntu.fs
Теоретически, это можно сделать и на самом дроне, но в родном линуксе дрона нет утилиты mkfs.ext3
3) Монтируем файл:
desktop$ mkdir drone.fs
desktop$ mount -o loop ar.drone.ubuntu.fs ./drone.fs
3) Устанавливаем убунту. Часть 1:
desktop$ debootstrap --arch=armel --verbose --foreign precise ./drone.fs/
Часть 2.
Можно пойти двумя способами. Уже можно скопировать файл на флешку и доставить нужное на самом дроне (я первый раз делал именно так), но можно завершить установку и на рабочей машине. Это потребует установки qemu-kvm-extras-static (в более новых версиях - qemu-user-static):
desktop$ apt-get install qemu-kvm-extras-static
и копирования файла в образ:
desktop$ cp /usr/bin/qemu-arm-static ./drone.fs/usr/bin
Сhrootимся в каталог и наблюдаем колдунство:
desktop$ chroot ./drone.fs/ /bin/bash
/usr/bin/groups: cannot find name for group ID 0
I have no name!@desktop:/#
Мы, фактически, находимся на той же машине, в том же терминале, но уже можем запускать приложения, скомпилированные для ARM процессора. Чем и воспользуемся для второго этапа установки:
I have no name!@desktop:/# /debootstrap/debootstrap --second-stage

и дожидаемся окончания установки:
I: Base system installed successfully.
Размонтируем:
I have no name!@desktop:/# exit
desktop$ umount ./drone.fs

4) Копируем образ ar.drone.ubuntu.fs на флешку (если Вы дочитали до сюда - Вы знаете как это сделать).
5) Втыкаем флешку в дрона, ждём загрузки, подключаемся к ТД дрона и заходим на него телнетом:
desktop$ telnet 192.168.1.1
6) Создаём каталог для монтирования, монтируем туда образ.
drone# mkdir /mnt/ubuntu
drone# mount -o loop /data/video/usb/ar.drone.ubuntu.fs /mnt/ubuntu
Выполняем следующие команды для монтирования важных каталогов. Их желательно сохранить в какой-нибудь скрипт для удобства дальнейшего выполнения.
drone# mount -o bind /dev /mnt/ubuntu/dev
drone# mount -t proc proc /mnt/ubuntu/proc
drone# mount -t sysfs sys /mnt/ubuntu/sys
и chrootимся в образ.
drone# chroot /mnt/ubuntu/ /bin/bash

Имеет смысл примонтировать devpts:

mount -t devpts devpts /dev/pts

без этого не будет работать ssh сервер


Таким образом у нас получился дрон, в котором мы можем смело устанавливать что хотим. Хотим - поддержку wpa2. Хотим - node.js с nginx.

В процессе написания выявилось забавное. В дроне памяти МАЛО. Но! мы можем в чруте сделать своп (ну и фраза!).
Расшифровываю - мы можем подключить виртуальную память в этом изолированном окружении.
drone_chrooted# mkdir /mnt/usb
drone_chrooted# mount /dev/sda1 /mnt/usb
drone_chrooted# cd /mnt/usb
drone_chrooted# dd if=/dev/zero of=./ar.drone.swap bs=1024 count=524288
drone_chrooted# mkswap ./ar.drone.swap

В принципе, можно поставить положенные права, но не забывайте - мы говорим о устройстве, доступном по telnet с рутовыми правами. О безопасности говорить смешно.
drone_chrooted# chown root:root ./ar.drone.swap
drone_chrooted# chmod 0600 ./ar.drone.swap
drone_chrooted# swapon ./ar.drone.swap

Стоит также сгенерировать локаль, в противном случае будет выдаваться ошибка "perl: warning: Please check that your locale settings:"

drone_chrooted# locale-gen en_US.UTF-8


Как оказалось, с hostapd есть проблема. Оно устанавливается легко и непринуждённо, однако собрано без поддержки madwifi драйверов, которые дрон и использует. Видимо не обойтись без пересборки.

Комментарии   

0 # Bertels 06.04.2016 22:35
Hi,

For a project, I am trying to secure the drone's WIFI connection. Instead of making the drone connect to a secure hotspot, I'd like the drone to setup his own secure hotspot with hostapd.

I have tried a lot but I can't make it work. Did you manage to make it work and how did you do it?

BTW: Thanks for all your nice posts, they helped me a lot

greetzz,
Bertels
Ответить | Ответить с цитатой | Цитировать
0 # Mikhail Egorov 07.04.2016 09:04
No, I did not :(

However, I don't think that it is impossible. It looks like hostapd in Ubuntu is compiled without madwifi support, so to get WPA2 working we will have to recompile either kernel with ath5k or ath9k (not sure - I have checked that long ago) or hostapd with madwifi.
Ответить | Ответить с цитатой | Цитировать
0 # Bertels 12.04.2016 02:50
hi again,

I am trying for weeks now to make it work but still without succes. The deadline for my project is coming and I am a little desperate... If you want to give it a try, I will be verry happy. You can always contact me on my e-mailadress.

kind regards
Ответить | Ответить с цитатой | Цитировать

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


Защитный код
Обновить