LINUX.ORG.RU

ajenti @ UMI X2

 ,


7

2

Нашел время, доработал это извращение. Наглядный пример зачем в современном мобильнике 4 ядра и 2GB RAM. Собственно, на скриншоте ajenti, который торчит из моего старого UMI X2 с разбитым экраном. Так как экран на ладан дышит, а новый экран стоит как новый аппарат, я взял другой телефон, а этот приспособил на чердаке на даче для раздачи интернета.

На борту стоковый android (ядро тоже родное) с root'ом, из которого вычищено все, что только можно, включая google play services. Из софта только smanager, который запускает при загрузке аппарата скрипт, который запускает debian в chroot'е и дергает chroot окружение каждый раз, когда меняется состояние мобильной сети.

В chroot'е живет OpenVPN, stunnel, squid, iptables со стопкой правил, ssh, ajenti и самописная прога, умеющая отдавать фотку по запросу, а так же куча скриптов всех цветов и расцветок. (Ходили слухи, что будет и на нашей улице DPI, решил превентивно разобраться с stunnel. На практике дает много оверхеда).

Так как интернет на даче через мобильную сеть, прямого IP нет, приходится держать OpenVPN до VPS'ки с включенной компрессией, чтобы можно было удаленно наблюдать за курочками^W^W^W администрировать дачную сетку.

Помимо OpenVPN стоит squid с прозрачным редиректом всего траффика через него и жирным кешем на быструю 32GB SD карточку.

Родной «tethering» не используется. Вместо этого скрипт запуска chroot окружения делает вот так:

echo 0       > /sys/class/android_usb/android0/enable
echo rndis,adb > /sys/class/android_usb/android0/functions

А уже debian'овский chroot получает IP штатными средствами. Воткнут телефон в OpenWRT роутер. Изначально, все было на нем, но связка OpenVPN+stunnel оказалась очень жручей до CPU и сжирала 600Mhz MIPS уже на 5-6 мегабитах, если не меньше. Здесь такого боттлнека нет. Да и сеть телефон держит ВНЕЗАПНО лучше 3g модема.

Изначально оверхед от OpenVPN по tcp был где-то 60%, после долгих мытарств, увеличения TCP окна и добавления в конфиг волшебных строк

tun-mtu 1500
mtu-disc yes
txqueuelen 15000
Все стало намного лучше, оверхед стал где-то 20-30%. Пинг без OpenVPN был 80-100ms, с OpenVPN - 150-200ms. TCP_NODELAY в разных местах stunnel уменьшает время пинга, но здорово увеличивает оверхед, потому не используется

Все расписывать будет очень долго, потому отмечу самые нетривиальные хаки:

1. При выключенном экране телефон находится в easrlysuspend (ЕМНИП) и никогда не будет включать вторичные ядра, даже если на 100% загрузить доступное ядро. Потому в настройках девелопмента надо выставить «не гасить экран при подключенном кабеле». Экран он гасить не будет, и в earlysuspend уходить не будет. Сам же экран я гашу в стремном keepalive скрипте, который по крону запускается каждую минуту:

#!/bin/bash
N=`route -n|grep tun0|wc -l`
if [ "$N" -eq "0" ]; then
        route del 127.0.0.1
        route add 127.0.0.1 dev lo
        mkdir /dev/net
        ln -sf /dev/tun /dev/net/tun
        /etc/init.d/stunnel4 restart
        /etc/init.d/openvpn restart
fi

echo 0 > /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness

2. Каждое изменение состояния сети android убивает все маршруты и заполняет таблицу заново, потому помимо крона этот же keepalive вызывается и smanager'ом

3. Напряжение батарейки, температуру батарейки и температуру SoC'а можно прочитать в /sys. Так как у меня медиатек - ajenti это не подхватывает, приходится читать ручками:

Температура батарейки: /sys/devices/platform/mt6320-battery/power_supply/battery/batt_temp

Напруга на батарейке: /sys/devices/platform/mt6320-battery/power_supply/battery/batt_vol

Напруга проводе воткнутом в телефон: /sys/devices/platform/mt6320-battery/power_supply/battery/ChargerVoltage

Ну и

/sys/devices/virtual/thermal/thermal_zone{0,1,2,3}/temp

Для чтения температуры самого SoC'а.

3. usb0 добавлен у меня в br-lan на роутере, вместе с остальнымим портами, для br-lan интерфейса является маршрутом по умолчанию. Хитровыдолбанную настройку DNS и маршрутизации расписывать не буду, лень.

4. На скорость крайне положительно влияет нижеследующее заклинание, немного меняющее настройки буферов для TCP и прочего:

echo "0" > /proc/sys/net/ipv4/tcp_timestamps
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
echo "1" > /proc/sys/net/ipv4/tcp_sack
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
echo "30" > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout 
echo "404480" > /proc/sys/net/core/wmem_max
echo "404480" > /proc/sys/net/core/rmem_max
echo "256960" > /proc/sys/net/core/rmem_default
echo "256960" > /proc/sys/net/core/wmem_default
echo "4096,16384,404480" > /proc/sys/net/ipv4/tcp_wmem
echo "4096,87380,404480" > /proc/sys/net/ipv4/tcp_rmem

5. OpenVPN не оживет по дефолту, так как /dev/net/tun в андроеде виден как /dev/tun. решается парой строчек:

mkdir /dev/net
ln -sf /dev/tun /dev/net/tun
Лучше запихнуть в keepalive - раз в сутки оно куда-то пропадало у меня.

Задавайте свои вопросы. Все вышеуказанное было настроено за один вечер под действием отборного кофеина, советы экспертов по тонкой настройке OpenVPN на 3g канале приветствуются. ;)

>>> Просмотр (1920x1080, 136 Kb)

★★★★★

Проверено: JB ()

Очень даже Ъ.

под действием отборного кофеина

А может всетаки под действием чего-то потяжелее, такое из Андроида замутить)

daniilArch ★★ ()

Вопрос может немного не по теме, но меня интересует как можно перенести /data из внутренней памяти на раздел ext2 sdcard?

w1nner ★★★★★ ()
Ответ на: комментарий от w1nner

Оба варианта надо править емнип в скриптах, которые в initrd. Ибо монтирование /data как раз там и происходит. fstab'а там нема.

ncrmnt ★★★★★ ()
Ответ на: комментарий от daniilArch

Зависит от контроллера. Режим хоста умеют не все контроллеры, иногда тот который умеет тупо не выведен на пады. В этом сетапе используется режим клиента, так что работать будет с любым телефоном. Хостом выступает роутер.

ncrmnt ★★★★★ ()

ncrmnt

Угадал автора по заголовку)
Слушай, ты скоро на бутерброде вебсервер поднимешь такими темпами.

devl547 ★★★★★ ()

Отличная работа! Добавил в избранное. Тоже сделал из старого смарта 3G-роутер (и только), правда у него разбит экран, но работает сенсор. Через скриншоты adb и слепое тыканье пальцем установил droidvnc, остальную конфигурацию проводил через него, тыкая уже мышкой с компа. Сильно экспериментировать страшно, т.к. экрана считай нет - перепрошить в случае чего будет очень сложно (а вернее прошить можно, а вот после прошивки включить отладку по usb...)

xmichael ()
Ответ на: комментарий от xmichael

Почему? Емнип если рекавери запустить - в режиме рекавери будет доступ adb, соответственно из рекавери через adb shell можно все сделать, ежели бизибоксы и т.п. подтянуть. В т.ч. и включить adb в самой прошивке ручками, если вспомнить где тот флажок хранится.

ncrmnt ★★★★★ ()
Ответ на: комментарий от devl547

На бутерброде может и не подниму, как его есть потом? А вот на микроволновке современной это уже вполне становится реально.

ncrmnt ★★★★★ ()
Ответ на: комментарий от t184256

Кроме шуток, я на нем поднял уже OpenVPN, stunnel, squid и ajenti. Под нагрузкой даже треть ресурсов не заюзана, несмотря на то, что работают все жручие до ресурсов кишки дроеда. Добавлю позже еще самописный TTS сервер, но едва ли это сильно изменит положение.

ncrmnt ★★★★★ ()
Ответ на: комментарий от last_man_standing

Нет, это какой-то артефакт у ajenti при работе в chroot'е.

root@arvale:~# uname -a
Linux arvale 3.4.5 #1 SMP PREEMPT Fri Aug 30 10:23:42 CST 2013 armv7l GNU/Linux
root@arvale:~# uptime
 10:55:24 up 2 days, 13:48,  2 users,  load average: 9.29, 9.29, 9.41

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)

Аватарка автора соответствует действительности.

Jayrome ★★★★★ ()
Ответ на: комментарий от th3m3

Оно из дебо-репозиториев ajenti, видимо там прослоупочили и не обновили.

ncrmnt ★★★★★ ()
Ответ на: комментарий от overmind88

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

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

В рекавери доступ adb? Что-то не подумал... Спасибо, попробую) Впрочем и да, можно разделы бекапить/восстанавливать через fastboot. Надо заняться.

xmichael ()
Ответ на: комментарий от ncrmnt

Ещё как вариант подключения когда нет белого ipv4 - это gogoc, который выдает вполне нормальный, но динамический ipv6, прикручиваем dyndns и 100% доступ к машине готов. У меня так сервачёк крутится...
p.s. осталось только включить резервный канал на 3g, когда свет вырубится, а так в запасе 10 часов есть(6 полуживых 18650)

vladcraft ()
Последнее исправление: vladcraft (всего исправлений: 1)
Ответ на: комментарий от vladcraft

ipv6 пока не нужен/не критичен. Дома его тоже пока нема, на DO тоже вроде не было, когда последний раз проверял. Если его себе внедрять, то сразу везде, и это еще надо еще сесть раскурить стандарт, особенности софта и понять как его секурно настраивать, чтобы каждый esp8266 не торчал голым ipv6 задом в интернеты. А это время, которого нет ;)

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

transmission может только пиры ipv6 получать, управлять им невозможно пока. Вот mpd вполне и поток и управление на ipv6 держит. В итоге часть софта не умеет ipv6.

vladcraft ()
Ответ на: комментарий от ValdikSS

Да, видел. Там не все так просто, у меня sndbuf и rcvbuf в нуле, но изменение параметров окна через sysctl здорово помогают. 3g все же имеет бОльшие задержки. Еще кстати здорово помогло в инженерном меню медиатека выставить предпочтение для передачи данных, нежели для голосовой связи. Сразу - 50-70ms к пингам

ncrmnt ★★★★★ ()

осталось воткнуть hi-fi систему, пару хардов и nas с mpd готов)

mystery ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.