GrabDuck

Установка пользовательских модулей программной оболочки медиасервера ZyXEL NSA220 | ...

:

Статья: 2116

Вопрос:

Пример по созданию модулей для дальнейшей установки в устройствах ZyXEL NSA. Далее описаны шаги по выполнению следующих задач: Сборка пользовательского модуля (user-made package) для работы в ZyXEL NSA Пример пользовательского модуля Подготовка сервера модулей на устройстве NSA и установка пользовательского модуля

Ответ:

В данной статье показан пример по созданию модулей для дальнейшей установки в устройствах ZyXEL NSA. Далее описаны шаги по выполнению следующих задач:

  • сборка пользовательского модуля для работы в ZyXEL NSA
  • подготовка сервера модулей на устройстве NSA
  • установка пользовательского модуля в устройство NSA


Сборка пользовательского модуля (user-made package)

  • Далее подразумевается использование инструментария разработчика.
    Пожалуйста, воспользуйтесь тулкитом (комплектом инструментальных средств разработчика), скачанным с официального веб-сайта ZyXEL:
    ftp://opensource.zyxel.com/NSA-220%20PLUS/v3.12/montavista_toolkit.tar.gz
  • Компиляция модуля
    С помощью предлагаемого тулкита соберите приложение, это может быть открытый исходный код или ваша разработка.
  • Создание модуля
    Модуль состоит из двух частей:

    Package --- control.tar.gz  --> описания модуля и скрипты некоторых действий
    |- data.tar.gz  --> бинарные файлы, библиотека, коды WebGUI и конфигурации

    <рабочие папки>
    package --- metafiles  --> поместить файлы требуемые control.tar.gz 
    |- data  --> поместить файлы требуемые data.tar.gz


control.tar.gz
Содержит файл control для записи описания модуля и опционально скрипты действий управления процессом инсталляции/деинсталляции.

control.tar.gz
        |- control  --> описание модуля
|- action scripts  --> скрипты управления процессом установки и удаления, включающие preinst, postinst, prerm и postrm

Перейдите к папке metafiles и создайте эти файлы.

control

Содержит несколько полей:

Поле

Описание

Package Название модуля. Например MyPkg.
Version Формат:
<PackageVersion>zypkg<SerialNO>
PackageVersion
указывает версию приложения с открытым исходным кодом, либо совпадает с SerialNO, в случае если вы автор приложения. Серийный номер SerialNO используется для контроля апгрейда модуля. Строка версии не должна содержать пробелов. Например, если вы собираетесь генерировать пакет модуля на основе ОИК-приложения OpenApp версии 1.45, PackageVersion будет 1.45, а SerialNO следует указать 001. Целиком строка версии будет выглядеть как 1.45zypkg001. Следующая модификация модуля будет иметь SerialNO 002, и полностью строку версии 1.45zypkg002. В случае если используется оригинальное приложение MyPkg, можно указать версию пакета 001zypkg001.
Description Описание модуля. Содержимое этого поля будет отображаться в списке модулей.
Depends Зависимость от других пакетов расширения функциональности. Укажите названия модулей которые требуется установить для работы, через запятую. К примеру, если модуль MyPkg перед запуском нуждается в наличии установленных модулей DepPkg1 и MyDepPkg2 это поле для него будет выглядеть следующим образом:
Depends: DepPkg1, MyDepPkg2
Size Размер сжатого модуля в байтах (приблизительное значение).
Installed-Size Размер модуля в установленном состоянии в байтах.
Architecture Всегда arm.
Zy-Model Здесь укажите NSA-220.
IsBuiltin Для модулей этот флаг всегда N
Filename Окончательное имя файла модуля. Формат
<PackageName>_<PackageVersion>_arm_<SerialNO>.zpkg
Например:
OpenApp_1.45_arm_001.zpkg
MyPkg_001_arm_001.zpkg

Ниже приведен пример содержимого файла для модуля MyPkg:

Package: MyPkg
Version: 001zypkg001
Description: This is a testing package.
Depends:
Size: 23595056

Скрипты обслуживания установки модуля (опционально) - preinst, postinst, prerm, postrm

Скрипт

 Описание

preinst Этот скрипт описывает необходимые действия до инсталляции.
postinst Позволяет выполнить процедуры после завершения установки.
prerm Выполняется перед началом удаления модуля.
postrm Этот скрипт выполняется после удаления модуля.

Четыре скрипта preinst, postinst, prerm и postrm используются для управления процессом установки/удаления. Формат скрипта предполагает что запись начинается с #!/bin/sh, и может быть интерпретирована оболочкой. Далее приведены некоторые примеры, описывающие возможные ситуации использования скриптов управления.

Для проверки существующей инсталляции модуля перед установкой можно использовать следующий скрипт preinst:

#!/bin/sh
# this is preinst for MyPkg
if [ -f /usr/local/zy-pkgs/etc/init.d/MyPkg ]; then
# already installed
exit 0
fi

Чтобы добавить пользователя “testman” после установки модуля, воспользуйтесь postinst-скриптом:

#!/bin/sh
# this is postinst for MyPkg
cat /etc/passwd | grep "^testman"
if [ "$?" != 0 ]; then
echo ’testman:x:0:0:testman:/:/bin/sh’ >> /etc/passwd
fi
cat /etc/shadow | grep "^testman"
if [ "$?" != 0 ]; then
echo ’testman:$1$$iC.dUsGpxNNJGeOm1dFio/:13493:0:99999:7:::’ >> /
fi

Если требуется остановка демона перед удалением модуля, добавьте следующий скрипт prerm:

#!/bin/sh
# this is prerm for MyPkg
killall MyPkgd
sleep 1

Для удаления временных файлов из /tmp/MyPkg после удаления модуля добавьте скрипт postrm содержащий:

#!/bin/sh
# this is postrm for MyPkg
rm –rf /tmp/MyPkg

Подготовленные control и скрипты управления поместите в папку metafiles и используйте tar для создания control.tar.gz:

tar zcvf ../control.tar.gz *

data.tar.gz

Содержит данные, которые будут установлены в системе автоматически по расположению /usr/local/zy-pkgs. Файлы собраны в структуру:

data.tar.gz
        |- bin/    --> помещение всех бинарных файлов данного модуля
|- lib/    --> используемые модулем файлы библиотек
|- gui/    --> размещение файлов относящихся к веб-интерфейсу (необяз.) 
|- etc/    --> поместите здесь конфигурационные файлы модуля 
|- init.d/ 
|- <pkg_name>   --> функциональный скрипт модуля. Может быть использован:
- для определения состояния модуля и его url-адреса
- включения и выключения модуля

Перейдем к папке data и произведем генерацию в ней файлов данных.

  • bin
    Эта папка содержит бинарные файлы вашего модуля. Рекомендуется поместить в нее все бинарные файлы (из sbin, usr/bin, usr/sbin, … т. д.). После установки модуля все файлы в папке bin будут помещаться в тулкит.
  • lib
    Содержит файлы библиотек используемые модулем. После установки все файлы будут помещены в /usr/local/zy-pkgs/lib.
  • gui
    Если в модуле присутствует веб-интерфейс для управления все используемые для него файлы (html/php/…etc) следует поместить здесь. Для того чтобы избежать перезаписи файлов других модулей можно создать папку (обычно с именем модуля) для их хранения. Не забудьте подготовить index.html файл используемый для входа. К примеру если название управляемого модуля MyPkg, поместим файлы его интерфейса в gui/MyPkg. Среди них должен присутствовать index.html. После установки модуля, все содержимое gui будет помещено в /usr/local/zy-pkgs/gui. В данном случае, перейти к index.html можно будет по адресу http://<ip>:<port>/pkg/MyPkg.
  • etc/init.d/<pkg_name>
    Это файл скрипта, обеспечивающего вывод состояния модуля и его url-адреса, включение и отключение модуля, или выполнение необходимых заданий при запуске. Используется 6 различных аргументов:
    Аргумент Описание
    getlink Возвращает URL веб-интерфейса управления модулем. Этот адрес отображается в поле “Management Page” списка модулей. Если модуль не использует веб-интерфейс здесь это пустая строка. Формат адреса URL:
    <protocol>://<ip>:<port>/pkg/<path>
    Соответствующий путь:
    /usr/local/zy-pkgs/gui/<path>
    В начале <path> всегда присутствует название модуля, и там расположен входной файл index.html.
    Пример.
    http://172.23.26.223:80/pkg/MyPkg
    Соответствующий путь:
    /usr/local/zy-pkgs/gui/MyPkg
    status Возвращает состояние в котором находится установленный модуль. Возможны два значения: Enabled (включен) и Disabled (отключен).
    startup Этот аргумент будет вызван во время запуска системы. Здесь следует предусмотреть включение модуля в случае если модуль был включен во время последнего завершения работы.
    shutdown Под этим аргументом перечисляются действия вызываемые при остановке системы. Здесь следует выполнить остановку демонов запущенных для работы модуля.
    enable Включение модуля. Аргумент обрабатывается в веб-интерфейсе кнопкой “Enable” списка доступных модулей.
    disable Отключение модуля, аргумент связан с действием кнопки “Disable” в списке модулей.


Далее следует сжать эти файлы в архив. Поместите все в папку data и выполните:

tar zcvf ../data.tar.gz *

Теперь data.tar.gz и config.tar.gz готовы, вы можете сформировать модуль при помощи команды вида:

cd .. ; tar zcvf MyPkg_001_arm_001.zpkg data.tar.gz config.tar.gz

Пример пользовательского модуля

Возьмем в качестве примера демона ssh. Чтобы свернуть демона ssh в модуле под названием MySSHD, предпримем следующие шаги:

  1. Используя тулкит, выполните компиляцию и сгенерируйте бинарные файлы. Используются следующие файловые структуры:
    MySSHD
    |- metafiles
    |- data    --> поместите здесь все сгенерированные файлы
    |- gui --- MySSHD --- index.html
    |- etc --- MySSHD --- sshd_config
    |       |- init.d --- MySSHD 
    |- config
    |- bin --- sshd
    |- ssh-keygen
  2. Сгенерируйте data.tar.gz
    cd MySSHD/data ; tar zcvf ../data.tar.gz *
  3. Подготовьте файл config
    cd ../metafiles ; vi config

    Package: MySSHD
    Version: 001zypkg001
    Description: This is a testing package to adding sshd to system.
    Depends:
    Size: 23595056
    Installed-Size: 67543040
    Architecture: arm
    Zy-Model: NSA-220
    IsBuiltin: N
    Filename: MySSHD_001_arm_001.zpkg

  4. Подготовьте файлы действий при установке/удалении

    Здесь нам потребуются postinst и prerm.

    vi postinst

    #!/bin/sh

    PKGNAME="MySSHD"
    PKG_ROOT="/usr/local/zy-pkgs"
    ZYPKG_DEPS="${PKG_ROOT}/etc/init.d/ZYPKG_DEPS"
    CONFIG_PATH="${PKG_ROOT}/etc/${PKGNAME}"
    STATUS_FILE="${CONFIG_PATH}/STATUS"

    # main start

    # create tty (allow 3 connections at the same time)
    mknod /dev/ptyp0 c 2 0
    mknod /dev/ptyp1 c 2 1
    mknod /dev/ptyp2 c 2 2
    mknod /dev/ttyp0 c 3 0
    mknod /dev/ttyp1 c 3 1
    mknod /dev/ttyp2 c 3 2


    vi prerm

    #!/bin/sh

    PKGNAME="MySSHD"
    PKG_ROOT="/usr/local/zy-pkgs"
    ZYPKG_DEPS="${PKG_ROOT}/etc/init.d/ZYPKG_DEPS"
    CONFIG_PATH="${PKG_ROOT}/etc/${PKGNAME}"
    STATUS_FILE="${CONFIG_PATH}/STATUS"

    # main start
    # stop daemon
    killall sshd
    sleep 1

    # remove tty
    rm /dev/ptyp0
    rm /dev/ptyp1
    rm /dev/ptyp2
    rm /dev/ttyp0
    rm /dev/ttyp1
    rm /dev/ttyp2

  5. Сгенерируйте config.tar.gz
    tar zcvf ../config.tar.gz *
  6. Сгенерируйте модуль
    cd .. ; tar zcvf MySSHD_001_arm_001.zpkg data.tar.gz config.tar.gz
  7. Готово. Модуль MySSHD собран.

Подготовка сервера модулей в устройстве серии NSA и установка пользовательского модуля

Для установки подготовленный модуль потребуется разместить на сервере чтобы получить его с помощью веб-интерфейса через страницу Модули (Packages). Следующие настройки позволят использовать ваш NSA как сервер модулей:

  1. Создайте общий ресурс с публичным доступом packages.
  2. Включите функцию публикации на веб-сервере и укажите этот ресурс.
  3. Создайте папку в ресурсе с названием модели вашего устройства (отображается на странице статуса системы)

    Модель

    Папка

    NSA-220 NSA-220/zypkg
    NSA-220 PLUS NSA-220_Plus/zypkg
    NSA210 NSA210/zypkg
    ServerBox ServerBox/zypkg
      
  4. Получите архив с модулями на официальном веб-сайте ZyXEL

    http://dl1.web.zyxel.ru:80/001/NSA-220/software/zy-pkgs_V3.24AFE.0.zip

  5. Распакуйте содержимое архива в папке созданной на шаге 3.
  6. С помощью 7-zip извлеките i-data/md0/admin/zy-pkgs/ZYPKGS из ZYPKG_INFO.tgz. Добавьте содержимое control в конце этого файла и сохраните перезаписав оригинал.
  7. С помощью 7-zip извлеките usr/local/zy-pkgs/etc/init.d/ZYPKG_DEPS из ZYPKG_INFO.tgz. Добавьте созданный модуль к спискам START-UP и SHUTDOWN согласно порядку увеличения зависимостей и перезапишите оригинальный файл. К примеру, если MyPkg зависит от MyDepPkg1, в файле ZYPKG_DEPS должно быть указано:
    # START-UP (DON’T REMOVE THIS LINE!)
    ……..
    /usr/local/zy-pkgs/etc/init.d/MyDepPkg1
    /usr/local/zy-pkgs/etc/init.d/MyPkg

    # SHUTDOWN (DON’T REMOVE THIS LINE!)
    ……


    Если зависимости этого модуля нет, добавьте его в конец списков START-UP и SHUTDOWN.
  8. Добавьте файл web_prefix к папке zy-pkgs общего ресурса admin. Например:
    http://172.23.26.226:80/packages/
  9. Перейдите к странице управления модулями и щелкните, чтобы обновить список (“Retrieve List From Internet”), вы увидите список с вашим модулем, выберите его и щелкните кнопку Установить/Обновить (“Install/Upgrade”). Через некоторое время модуль будет установлен.