Микросистема для удобной начальной установки Entware

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 02 янв 2018, 02:09

Всех с наступившим Новым Годом!

Меня всегда не устраивал тот факт, что установка энтвари требует уже установленное на устройстве минимальное программное обеспечение, тот же бизибокс. Даже когда оно установлено, не всегда оно работало как надо (тот же wget). Кроме того, на устройстве печатать команды не всегда удобно, так что приходится использовать удаленные средства: adb или ssh. С ssh-серверами из Play Marketa тоже беда. Одни работают кое-как, так как написаны на джаве или ее активно используют, другие либо представляют собой бинарное старье, либо не поддерживают авторизацию через пароли. Выложенные в данном разделе apk-установщики решают проблему лишь частично. В общем, собрал под себя набор статически скомпонованных бинарей static.tar.gz, с одной стороны облегчающих установку entware, а с другой стороны отчасти заменяющих entware-программы (не на каждом устройстве понадобится ставить OpenVPN или Transmission). Набор включает: dropbear-server, openssh-client, busybox, mc. Установка:

Код: Выделить всё

cd /data/local
tar -xzf /sdcard/static.tar.gz

(Ну да, tar и gzip все равно нужны. Если их нет, можно действовать через кастомное рекавери, или вытащить busybox из архива на компьютере, дать ему права и симлинки tar,gzip, и распаковать ими все окончательно). После распаковки можно сразу же запустить /data/local/static/bin/dropbear.

Особенности программ.
1. Все программы (хотя они и статические бинари) работают с конфигурационными файлами, находящимися в директории /data/local/static. Для dropbear это критично, так как необходим /data/local/static/etc/passwd.
2. Особенность сборки dropbear: в дочерних процессах переменные окружения не очищаются, поэтому вместо profile можно (и даже нужно) определить PATH до запуска сервера:

Код: Выделить всё

export PATH=/data/local/static/bin:$PATH
/data/local/static/bin/dropbear

Иногда в андроиде может не быть TERMINFO. Можно взять TERMINFO=/data/local/static/etc/terminfo.
3. Дефолтный root-пароль 12345. Меняем через /data/local/static/bin/passwd.
4. Дефолтные ключи сервера можно поменять, например, так:

Код: Выделить всё

cd /data/local/static/etc/dropbear/
rm dropbear_rsa_host_key; dropbearkey -t rsa -f dropbear_rsa_host_key -s 4096
rm dropbear_ecdsa_host_key; dropbearkey -t ecdsa -f dropbear_ecdsa_host_key -s 521

5. Авторизация через ключи и ssh-config находятся в ~/.ssh. После авторизации (и с правильным PATH) пробуем

Код: Выделить всё

ssh self ls

Авторизационные ключи меняются через

Код: Выделить всё

ssh-keygen -b 4096 -t rsa -f key
cat key.pub > ~/.ssh/authorized_keys 

6. Файлы hosts и resolv.conf в директории /data/local/static/etc работают в обычном линуксовом смысле для определения хоста в ssh и бизибоксных утилитах (ping, wget и прочих). Ну почему, почему такого нет в энтвари?!
7. За безупречную работу ВСЕХ апплетов busybox никаких гарантий не даю. Но wget качает, tar и gzip распаковывают, passwd меняет пароли в /data/local/static/etc/passwd (или shadow).

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 02 янв 2018, 12:05

kaztost писал(а):Источник цитаты Ну да, tar и gzip все равно нужны

Установка Zyxware, где не было tar, gz и wget была сделана так. В папку (tmp) выкладывались три файла:
1. Скрипт
2. Busybox (только с tar, gz) - слинкованный с прошивочной либой
3. Архив для первоначального развертывания Zyxware.

Потом все это дело было упаковано в самораспаковывающийсч скрипт-архив - http://zyxware.zyxmon.org/binary-packag ... .sh-r2.zip

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 02 янв 2018, 15:20

Да, у меня опыта в этом, конечно, мало, но идея самораспаковки из текста скрипта мне очень понравилась.

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 20 янв 2018, 03:00

Исправил небольшие проблемы в busybox, связанные с созданием новых user-ов через апплет adduser. Ссылка на архив обновлена.

В общем, за все время тестирования пока остаюсь доволен. На большинстве андроид-устройств (лично мне) ничего другого, кроме данной сборки, не нужно. Есть удаленный доступ к шеллу и файлам по sftp/scp. В шелле работает Midnight Commander. Между устройствами, на которых данная сборка стоит, можно обмениваться файлами через функцию shell-link в Midnight Commander. C обычного mc просто так на них не зайти (нужен либо /bin/sh на сервере или небольшой патч в mc). Ну и конечно же (для меня) данная сборка не отменяет потребность установки Entware и прочего на нескольких основных устройствах.

Чтобы нормально работал Midnight Commander, ssh-сервер лучше запускать в init.d так:

Код: Выделить всё

export TERM=xterm
export TERMINFO=/data/local/static/etc/terminfo
export TMPDIR=/data/local/static/tmp
export PATH=/data/local/static/bin:$PATH
/data/local/static/bin/dropbear -a

Аватара пользователя
Александр Рыжов
Сообщения: 447
Зарегистрирован: 12 авг 2015, 14:14
Откуда: Смоленск

Сообщение Александр Рыжов » 17 мар 2019, 18:30

kaztost, зачем понабилась эта правка? В скрипте установки перечисленные команды идут первым пунктом.

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 17 мар 2019, 21:31

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

kaztost
Сообщения: 223
Зарегистрирован: 17 июл 2017, 00:29

Сообщение kaztost » 17 мар 2019, 22:54

Александр Рыжов, в общем у меня вчера в LD_PRELOAD стояла библиотека типа https://github.com/termux/termux-exec, подменяющая execve(). И команды /opt/bin/opkg в скрипте не выполнялись из-за этого, поскольку execve() уже была подменена в процессе запуска шелл-интерпретатора.

Дефолтные андроидные LD_PRELOAD не должны приводить к таким чудесам, конечно. Но по идее, можно обезопаситься через

Код: Выделить всё

wget -O - http://bin.entware.net/***/installer/alternative.sh | (unset LD_PRELOAD; sh)

в таких случаях. С другой стороны, чисто теоретически sh может не выполниться с пустым LD_PRELOAD, но это дикость.


Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 1 посетитель :: 0 зарегистрированных, 0 скрытых и 1 гость (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость