Устанавливаем Entware.arm на «нестандартные железки»

linux-nonstandardНемного теории и истории

Предыдущая запись была посвящена установке Entware.arm на андроид. Эта статья является продолжением предыдущей и будет проиллюстрирована установкой на android. Но речь сейчас пойдет о более широком классе железок. В настоящее время пакеты entware и qnapware используются на совершенно разных устройствах: на маршрутизаторах, НАСах, андроид железках, на экзотических Popoplug V2. На некоторых устройствах нет ssh сервера, на других самбы, на третьих нормальной linux авторизации. Именно о таких нестандартных устройствах речь и пойдет.

Начну с исторического экскурса. Раньше я развивал систему opkg пакетов для маршрутизаторов ZyXEL Keenetic. При разработке системы ZyxWARE я столкнулся с тем, что в прошивке отсутствовал ssh сервер, а сервер telnet служил для выполнения ограниченного набора команд. Собранный для кинетика dropbear отказывался авторизировать пользователей. Оказалось, что некоторые системные файлы в папке /etc на ZyXEL некорректны и прошивкой не используются. Для запуска dropbear пришлось его модифицировать (применить патч) так, чтобы dropbear использовал файлы passwd, group, shells не из папки /etc, а с USB носителя.

Позже на ZyXEL Keenetic появилась возможность использовать Entware (разработчики после многолетних просьб сделали в прошивке необходимую для этого папку /opt в корневой файловой системе). Чтобы использовать стандартный dropbear из Entware был реализован другой подход. Файлы из прошивки из папки /etc (кроме passwd, group, shells) копировались при запуске на usb носитель в папку, где находились правильные три файла passwd, group, shells. После этого выполнялось перемонтирование папки /etc (/mount -o bind <новая папка> /etc) и все работало. Такой подход достаточно универсален, хотя и возможны ситуации с непредсказуемыми последствиями. Недостатком подхода является необходимость дополнительных проверок содержимого папки после обновления прошивки и время на копирование содержимого /etc при большом размере папки.

В этой заметке будет рассмотрен третий, универсальный подход. Напомню, что в Entware большинство приложений хранит свои настройки не в /etc, а в /opt/etc. Новый подход заключается в переносе файлов, которые используются при авторизации из /etc в /opt/etc. Для этого потребуется пропатчить системную библиотеку libc. Напомню, что в Entware и Qnapware  уже используются патчи системной библиотеки — один патч меняет папку, в которой лежит архив с локалями, а второй меняет расположение файла nsswitch.conf (из /etc в /opt/etc).

Если пропатчить системную библиотеку так, что файлы passwd, group, shadow, gshadow и shells будут находится в /opt/etc, то заработает dropbear «из коробки». Придется дополнительно пропатчить очень небольшое число приложений, которые напрямую работают с указанными файлами — это busybox (апплеты adduser и подобные напрямую работают с passwd), samba, shadow*, proftpd. На работу остальных приложений Entware патч никак не повлияет. Такой патч и был сделан для glibc. Были собраны экспериментальные варианты измененных пакетов (находятся в папке http://qnapware.zyxmon.org/binaries-armv7/experimental/) .

Устанавливаем экспериментальные пакеты

Покажем, как использовать новые экспериментальные пакеты на примере установки android (предыдущая заметка).

Как всегда работу с пакетами начнем с двух команд — обновим список пакетов и сами пакеты (если такие обновления есть):

opkg update
opkg upgrade

Установим экспериментальный вариант системной библиотеки и (желательно) экспериментальный вариант busybox:


# opkg install http://qnapware.zyxmon.org/binaries-armv7/experimental/libc_2.20-8c_armv7soft.ipk
Downloading http://qnapware.zyxmon.org/binaries-armv7/experimental/libc_2.20-8c_armv7soft.ipk.
Upgrading libc on root from 2.20-8b to 2.20-8c...
Configuring libc.
# opkg install http://qnapware.zyxmon.org/binaries-armv7/experimental/busybox_1.23.2-1a_armv7soft.ipk
Downloading http://qnapware.zyxmon.org/binaries-armv7/experimental/busybox_1.23.2-1a_armv7soft.ipk.
Installing busybox (1.23.2-1a) to root...
Configuring busybox.

Установим стандартный dropbear и создадим rsa и dss ключи


opkg install dropbear

Создаем папку /opt/etc/dropbear и ключи

# mkdir /opt/etc/dropbear
# /opt/bin/dropbearkey -t rsa -f /opt/etc/dropbear/dropbear_rsa_host_key
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAA.....
Fingerprint: md5 b6:....

# /opt/bin/dropbearkey -t dss -f /opt/etc/dropbear/dropbear_dss_host_key
Generating key, this may take a while…
Public key portion is:
ssh-dss AAA…..
Fingerprint: md5 e4…..

Все готово для проверки dropbear. Запускаем ssh сервер командой (для проверки на нестандартном порту)

dropbear -p 222 -a

И соединяемся с нашим устройством по ssh. Логин root, пароль 12345. Если соединение установлено, то все сделано правильно. Теперь мы можем изменить пароль суперпользователя командой passwd. Можем добавить новых пользователей.  После перезагрузки dropbear запустится на стандартном 22 порту (для изменения порта отредактируйте файл (/opt/etc/init.d/ S51dropbear).

Тут следует отметить, что пароли авторицации, пользователи в Entware не связаны с пользователями и паролями основной системы. Они не зависят друг от друга. В Entware суперпользователь по-умолчанию — root, а в основной системе может быть admin.

Если нужно установить самбу — опять используем экспериментальный пакет — http://qnapware.zyxmon.org/binaries-armv7/experimental/samba36-server_3.6.25-3a_armv7soft.ipk. Этот вариант samba собран с поддержкой логов, для упрощения отладки конфига. Подробнее об установке и настройке самбы под Entware можно прочесть тут. Для отключения логов, после настройки пропишите ‘log level = 0′ в файле конфигурации. Скорее всего Вам понадобится добавить пользователя nobody командой smbpasswd.

Вместо заключения

Экспериментальные пакеты можно ставить и на обычные устройства, они ничем не будут мешать работе приложений Entware. Более того в ряде случаев они могут и помочь. Например, если сервису Entware нужны определенные пользователи, и стандартными средствами устройства их добавить нельзя, то поможет замена стандартной авторизации, на авторизацию Entware. Не исключено, что эти изменения системной библиотеки войдут в основной дистрибутив Entware/Qnapware. Патчи, которые использовались для сборки пакетов и тулчейна тут — http://qnapware.zyxmon.org/binaries-armv7/experimental/patches/patches.tar.gz

4 Комментарии в“Устанавливаем Entware.arm на «нестандартные железки»”

  1. kaztost
    13.04.2016 в 11:16 #

    Спасибо за подробную инструкцию. Некоторые осаащиеся баги и фиксы:

    Команда passwd для изменения пароля все равно пытается работать с /etc/=/system/etc. Поэтому сначала надо перевести /system в режим rw, скопировать /opt/etc/passwd в /etc, а после смены пароля скопировать обратно.

    Чтобы в ssh-сессии работали андроидные бинарники am, pm, svc и проч., нужно экспортировать все андроид-окружение из стандартного шелла (см. вывод команды env в стандартном шелле).

  2. Zyxmon
    13.04.2016 в 11:23 #

    Если все сделать по инструкции, то команда passwd будет менять пароль в /opt/etc/passwd. Тогда и dropbear можно будет использовать в качестве ssh сервера.
    Если же не ставить специальную версию системных либ и busybox — то пароль будет в стандартном месте.
    Все никак руки не дойдут сделать все для Entware-ng. Entware на android нужно едниницам.

  3. kaztost
    14.04.2016 в 02:15 #

    Так я и делал все по инструкции. Просто не в меру умный opkg при выполнении
    opkg install http://qnapware.zyxmon.org/binaries-armv7/experimental/busybox_1.23.2-1a_armv7soft.ipk
    устанавливал более свежую версию busybox_1.23.2-3_armv7soft.ipk из вашего репозитория. Пришлось все переустановить, причем перед установкой альтернативного busybox пришлось временно закомментарить строку src в opkg.conf. Теперь passwd работает как надо.

    Видимо это все у вас работало, когда текущая версия была busybox_1.23.2-1:)

    Весь Entware-ng на андроид наверное действительно мало кому нужен да и не будут все программы нормально работать (например даже busybox reboot и busybox poweroff ничего не делают). В основном Entaware нужен для стандартных сетевых сервисов, однако настравать их без GUI мало кто может или хочет. А в гугломаркете все эти программы — просто кривые костыли, обходящие нестандартность андроидного линукса (хотя и с GUI). Использование OPTWARE, поэтому, мне кажется очень привлекательной идеей и хотелось бы увидеть обновления, особенно для dropbear+openssh-sftp-server+samba.

  4. Zyxmon
    14.04.2016 в 09:00 #

    Насчет умного opkg и версии busybox — да совершенно верно.
    Все руки не доходят сделать аналогичные спец пакеты для Entware-ng. Сделаю.

Добавить комментарий для kaztost Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

(Required)

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Автор темы: www.gopiplus.com, перевел WP-Templates.ru, поддержка SearchTimes.ru.