Знаете ли вы, что продукты ReadyNAS корпоративного класса сертифицированы VMware ? В этой статье описывается, как подключить ReadyNAS к VMwaresESX для его использование в качестве хранилища данных datastore.
Архив рубрики «Для разработчиков»
Настройка кросс-компилятора ReadyNAS
18.12.2008Загрузить tarball кросс-компилятора для компиляции на системах x86 можно здесь. Он включает в себя gcc, g++ и заголовки разработки для систем на базе Linux. Чтобы все компоненты tarball были правильно размещены распакуйте его в каталоге root.
Настройка среды разработки ReadyNAS
18.12.2008Системные требования
- RAIDiator-4.00c1-p2 или более поздней версии.
- Add-on для утилиты APT. Загрузите и инсталлируйте его с помощью Web-интерфейса пользователя Frontview, выбрав System -> Update -> Local Update.
- The EnableRootSSH add-on. Его также следует инсталлировать с помощью Web-интерфейса пользователя Frontview, выбрав System -> Update -> Local Update. Это позволит вам подключиться по SSH к ReadyNAS и вызвать подсказку ввода команд shell.
Что дальше?
Если все эти требования выполнены, то вы сможете запустить стандартную для Debian команду “apt-get” для загрузки и инсталляции всех необходимых для разработки пакетов, включая заголовки для нестандартных пакетов, используемых с ReadyNAS.
Пример:
# apt-get update
# apt-get install libc6-dev
# apt-get install gcc
# apt-get install gdb
# apt-get install libtag1-dev
# apt-get install uuid-dev
ПРЕДУПРЕЖДЕНИЕ!
При перезаписывании некоторых системных библиотек и утилит может нарушиться нормальная работа ReadyNAS. Поэтому прежде чем выполнять описанную выше процедуру, из-за которой может понадобиться повторная инсталляция микрокода или возврат к настройкам по умолчанию, нужно обязательно сделать резервную копию системы.
Развертывание сервиса Subversion на ReadyNAS
25.07.2008Эта статья об инсталляции Subversion (SVN) была написана участником нашего форума по имени rocket15 и отредактирована для readynas.com.
Я создал репозиторий svn на моем ReadyNAS Duo следующим образом:
Инсталлировал следующие ReadyNAS add-ons:
- EnableRootSSH
- APT
Они размещены на странице ReadyNAS Add-ons.
Затем зашел на свой ReadyNAS как root с помощью SSH (можно также использовать putty) и выпол следующие шаги:
Шаг 1
Загрузил необходимые пакеты с помощью wget (он не работает с apt-get из-за старой libc6 на ReadyNAS):
# wget http://ftp.nl.debian.org/debian/pool/main/libx/libxml2/libxml2_2.6.27.dfsg-2_sparc.deb # wget http://ftp.nl.debian.org/debian/pool/main/n/neon26/libneon26_0.26.2-4_sparc.deb # wget http://ftp.nl.debian.org/debian/pool/main/d/db4.4/libdb4.4_4.4.20-8_sparc.deb # wget http://ftp.nl.debian.org/debian/pool/main/s/subversion/libsvn1_1.4.2dfsg1-2_sparc.deb # wget http://ftp.nl.debian.org/debian/pool/main/s/subversion/subversion_1.4.2dfsg1-2_sparc.deb # wget http://ftp.nl.debian.org/debian/pool/main/s/subversion/libapache2-svn_1.4.2dfsg1-2_sparc.deb
Шаг 2
Инсталлировал следующие пакеты (при инсталляции выдавались предупреждения, которые следует игнорировать):
# dpkg -i libxml2_2.6.27.dfsg-2_sparc.deb # dpkg -i libneon26_0.26.2-4_sparc.deb # dpkg -i libdb4.4_4.4.20-8_sparc.deb # dpkg -i libsvn1_1.4.2dfsg1-2_sparc.deb # dpkg -i subversion_1.4.2dfsg1-2_sparc.deb # dpkg -i libapache2-svn_1.4.2dfsg1-2_sparc.deb
Шаг 3
Затем создал репозиторий subverison.
# mkdir /c/svnstore/ # svnadmin create /c/svnstore/project_test # chown admin:admin /c/svnstore/ -R
Шаг 4
Сконфигурировал Apache для обслуживания Subversion:
# cd /etc/frontview/apache/addons # vi subversion.conf
(нужно нажать i и shift при выводе следующего контента, затем ввести :wq для сохранения и выхода)
LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so <Location /svn_test> DAV svn SVNPath /c/svnstore/project_test AuthType Basic AuthName "Subversion Test Repository" Require valid-user </Location>
Шаг 5
Затем перезапустил сервер Apache и протестировал полученную конфигурацию Subversion.
# /etc/init.d/frontview restart
Затем проверил файлы проекта клиентом svn (Tortoise) по следующему url:
http://<readynas>/svn_test/
Сообщите, получилось ли у вас эта процедура!!!
Как разработать Add-on для Frontview
10.07.2008Frontview Add-on – это программный модуль, который можно инсталлировать на ReadyNAS для расширения сервисов, вызываемых через Frontview. add-on может содержать демон сервиса с элементом управления, который выводится в Frontview. Если в Frontview открыть страницу Services → Installed Add-ons, то будет показаны два уже инсталлированных add-on — BitTorrent и ReadyNAS Photos.

Пользователи могут включать и отключать add-on, ставя флажок в соответствующем поле, и на странице Installed Add-ons изменять конфигурацию add-on либо открывать новую страницу.
Начало
Для начала мы создадим, упакуем и протестируем простой add-on, а затем поясним, что делает каждый компонент add-on и где нужно сохранять изменения.
До начала программирования Frontview add-on рекомендуется ознакомиться со следующими дисциплинами:
- Linux shell environment и скрипты shell
- Программирование Web 2.0 (HTML, Javascript, XML, AJAX)
- Perl или C для поддержки CGI back-end
Потребуется RAIDiator версии 4.1.3 или более поздней.
Для создания нашего первого add-on нужно выполнить четыре шага.
Шаг 1: Загрузка Frontview Add-on SDK
Сначала нужно загрузить Frontview Add-on SDK. SDK содержит необходимые шаблоны для add-on, включая create script для быстрой разработки add-on и build script для упаковки add-on в нужный двоичный формат, который понимает Frontview.
Рекомендуется создавать и упаковывать add-on непосредственно на вашем ReadyNAS, но можно выполнить эту процедуру и на любой другой платформе Linux. Если вы выбрали первый вариант, то настройте доступ по SSH, а также свое рабочее окружение. Инструкции по этим операциям можно найти здесь.
Щелкните по следующей картинке для загрузки Add-on SDK. Он записан в формате tar-gzip, поэтому можно щелкнуть правой кнопкой и сохранить этот архив.
Для извлечения файлов перейдите в пустой каталого и запустите следующую команду:
# tar xvzf addon_sdk.tgz
Выведется следующий список файлов:
README
bin/build_addon
bin/create_addon
bin/xmlutil.sparc
bin/xmlutil.x86
template/language/de/ADDON.str
template/language/en-us/ADDON.str
template/language/fr/ADDON.str
template/language/ja/ADDON.str
template/language/ko/ADDON.str
template/language/zh-cn/ADDON.str
template/language/zh-tw/ADDON.str
template/ADDON.conf
template/ADDON.html
template/ADDON.js
template/ADDON.xml
template/ADDON_HANDLER.pl
template/ADDON_service
template/install.sh
template/remove.sh
template/running.sh
template/start.sh
template/stop.sh
Шаг 2: Создание шаблона для Add-on
У вас подготовлено окружение add-on SDK и теперь можно создавать с помощью SDK простой add-on. Первый наш add-on не будет ничего делать — мы только убедимся, что его можно инсталлировать, он виден в Frontview и его можно удалить.
Из базового каталога SDK введите следующую команду:
# bin/create_addon
Команда задаст вам серию вопросов о add-on и создаст нужные файлы шаблонов для построения add-on. Если вы неправильно ответите на какой-то вопрос, то запустите команду снова. Эту утилиты нужно запустить только один раз для создания необходимых исходных файлов, которые позднее можно модифицировать. Помните, что ее повторный запуск с тем же именем add-on приведет к перезаписыванию исходных файлов.
При создании add-on на консоли выведется:
Welcome to the Frontview Add-on Wizard
Enter a name for the add-on (please keep it short): Foo Bar
FOOBAR will be used as the tag for the add-on and
will be used as the base name for your add-on files.Is this okay? (y/n) y
Enter a brief description for “Foo Bar” (no single quotes):This is the best add-on ever created for the ReadyNAS. Everyone will be so thrilled to see what this add-on does.
Description will read:
This is the best add-on ever created for the ReadyNAS. Everyone will be so thrilled to see what this add-on does.Is this okay (y/n) y
Enter the version of the add-on [1.0]:
Version: 1.0
Is this okay (y/n) y
If you would like to make changes to your input, please make them in FOOBAR.xml. A base source code tree has been generated using the information that you provided. You’ll find the following filesFOOBAR/install.sh
FOOBAR/remove.sh
FOOBAR/start.sh
FOOBAR/stop.sh
FOOBAR/running.sh
FOOBAR/FOOBAR.html
FOOBAR/FOOBAR.js
FOOBAR/FOOBAR.xml
FOOBAR/FOOBAR_HANDLER.pl
FOOBAR/FOOBAR.conf
FOOBAR/language/en-us/FOOBAR.str
FOOBAR/language/de/FOOBAR.str
FOOBAR/language/fr/FOOBAR.str
FOOBAR/language/ja/FOOBAR.str
FOOBAR/language/ko/FOOBAR.str
FOOBAR/language/zh-cn/FOOBAR.str
FOOBAR/language/zh-tw/FOOBAR.strAfter you make appropriate changes to the files above, you can build your add-on with build_addon. You need to be in the FOOBAR directory and run ../bin/build_addon.
заглавными буквами без пробелов. В нашем примере создается add-on с именем “Foo Bar” и его тэг будет “FOOBAR”.
После завершения этой операции исходные файлы add-on будут помещены в каталоге тэгов.
Шаг 3: Построение первого Add-on
Теперь можно преобразовать исходные файлы add-on в двоичне. Для этого нужно перейти в каталог add-on. Выполните следующие команды (они относятся к примеру с “Foo Bar” add-on).
# cd FOOBAR # ../bin/build_addon Successfully built "Foo Bar" add-on package as "FooBar_1.0.bin".
Команда build_addon используется каждый раз, когда нужно заново создать образ add-on с изменениями. Ее результатом будет файл addon.bin в вашем каталоге add-on. Этот файл будет распознан Frontview как add-on когда вы выгрузите его из закладки System → Update → Local .
Шаг 4: Тестирование Add-on
Теперь загрузим новый add-on из System → Update → Local.

После щелчка по Perform System Update, дождитесь подтверждения инсталляции add-on и затем откройте закладку Services → Installed Add-ons . Вы увидете, что новый add-on инсталлирован.
Поздравляем с созданием вашего первого Frontview add-on!
Понимание скриптов обслуживания
До сих все было просто. Теперь детально рассмотрим каждый компонент исходника и станет ясно, как нужно модифицировать FOOBAR add-on для получения реального add-on. Сначала рассмотрим скрипты для shell.
install.sh
Этот скрипт выполняет необходимые настройки для инсталляции add-on. Скрипт добавляет две переменные тэга в into /etc/default/services для того, чтобы проверить инсталлирован ли add-on и включен ли он. Для FOOBAR добавляются следующие переменные:
FOOBAR_SUPPORT=1
FOOBAR=1
FOOBAR_SUPPORT говорит Frontview, что FOOBAR add-on инсталлирован, а FOOBAR=1 говорит Frontview, что FOOBAR add-on включен.
Обычно содержимое install.sh не нуждается в модификации. Изменения могут потребоваться для обеспечения правильной инсталляции add-on (например, добавление учетной записи пользователя, создание базы данных и т.п.)
remove.sh
Этот скрипт удаляет add-on и затем сам удаляется. Необходимо указать в CONF_FILES список конфигурационных файлов, используемых add-on чтобы их можно было удалить. Вы также можете добавить программные файлы, которые нужно удалить, в PROG_FILES.
Если вы модифицировали какой-то файл конфигурации системы или создали базу данных, то их нужно правильно очистить в этом скрипте. Рекомендуется не оставлять никаких следов от add-on. Записи add-on, добавленные в /etc/default/services через install.sh, автоматически удаляются.
start.sh
Этот скрипт запускает сервис add-on. Он может быть похож на скрипты запуска, записанные в /etc/init.d. Альтернативный способ — использование команд демонов запуска и остановки start-stop-daemon , например
start-stop-daemon –start -b -m –pidfile /var/run/FOOBAR.pid –quiet –exec FOOBAR_service
FOOBAR_service – это пример скрипта shell, эмулирующего реальный сервис. Все что он делает — это заставляет систему заснуть на заданное число секунд. Вы можете заменить контент или переименовать этот сервис по своему желанию.
stop.sh
Аналогично скрипту start.sh скрипт stop.sh останавливает сервис add-on. Если для запуска сервиса вы использовали start-stop-daemon, то остановить его можно той же командой, например
start-stop-daemon –stop –pidfile /var/run/FOOBAR.pid –signal QUIT –quiet
В скрипте stop.sh нужно использовать тот же файл .pid, который используется в start.sh.
running.sh
Этот скрипт проверяет, работает ли сервис add-on выдает 0 если так и есть и отличное от нуля значение если сервис остановлен. Этот скрипт говорит Frontview какой светодиод горит для add-on – зеленый или серый.

Обычно здесь только требуется проверить, работает ли процесс. Можно установить в скрипте переменную ADDON_PROCESS на имя процесса или, если требуется больше, внести необходимые изменения в скрипт.
Понимание исходных файлов
Теперь посмотрим на остальные файлы
FOOBAR.html
Файл add-on HTML содержит элемент UI, который отображается во фрейме управления add-on. Отметим, что только содержимое внутреннего поля контролируется файлом HTML и не используется стандартные управляющие элементы add-on framework (например, версии, флажки и кнопки Remove and Save). Содержимое этого файла HTML должно работать координировано с файлом add-on Javascript (FOOBAR.js) и Perl (или не-Perl) CGI handler (FOOBAR_HANDLER.pl).

Если файл HTML отсутствует, то серая рамка и ее содержимое внутри фрейма add-on не будут отображаться.
FOOBAR.js
Файл add-on Javascript автоматически включается в Frontview add-on framework и определенные в этом файле функции вызываются из файла add-on HTML.
FOOBAR.xml
Помните, как мы запускали команду create_addon ? Она автоматически генерирует FOOBAR.xml на основе информации, которую вы ввели.
<?xml version="1.0" encoding="UTF-8" ?>
<addon>
<name>FOOBAR</name>
<friendly_name>Foo Bar</friendly_name>
<version>1.0</version>
<get_url>FOOBAR_HANDLER.pl</get_url>
<set_url>FOOBAR_HANDLER.pl</set_url>
<preaction>FOOBAR_preaction</preaction>
<onloadaction>FOOBAR_onloadaction</onloadaction>
</addon>
Допустимые тэги для addon:
name - имя тэга для add-on
friendly_name – имя add-on name, которое было указано для create_addon
version - версия add-on, которая была указана для create_addon
get_url – handler, который возвращает данные XML для HTML-страницы
set_url – handler, выполняющий обработку форм для HTML-страницы
preaction - функция Javascript (в FOOBAR.js), которая вызывается до загрузки HTML-страниц
onloadaction - функция Javascript (в FOOBAR.js), которая вызывается после загрузки HTML-страницы
language/*/FOOBAR.str
Frontview использует тэги строк для всех своих строк и аналогичным образом так же действуют Frontview add-ons. Это обеспечивает гибкость при работе с разными языками. Как вы видите, при запуске create_addon генерируются следующие файлы string map:
language/en-us/FOOBAR.str
language/de/FOOBAR.str
language/fr/FOOBAR.str
language/ja/FOOBAR.str
language/ko/FOOBAR.str
language/zh-cn/FOOBAR.str
language/zh-tw/FOOBAR.str
Формат таблиц файлов string map (например, FOOBAR.str) следующий:
PREFIX_STRINGTAG1::::String1 Text
PREFIX_STRINGTAG2::::String2 Text
Frontview использует соглашение о тэгах строк, которые должны состоять из заглавных букв, за который идут 4 двоеточия, а за ними — соответствующий текст. Определения тэгов разделяются символом новой строки. Имена тэгов даются в соответствии с правилом Frontview — префикс, за которым идет описание тэга. Префикс может быть PROMPT, LABEL, SUCCESS или ERROR.
PROMPT - Текст приглашения слева от поля ввода. Обычно эти тэги завершаются двоеточием.
LABEL - Текст метки — это текст произвольного формата с описанием, инструкцией и т.п.
SUCCESS - Текст, который информирует об успешном выполнении операции.
ERROR - Текст, информирующей о возникновении ошибке при выполнении операции.
Теперь рассмотрим файл language/en-us/FOOBAR.str.
LABEL_SERVICE_FOOBAR_INFO::::<b>Foo Bar.</b> This is the best add-on ever created for the ReadyNAS. Everyone will be so thrilled to see what this add-on does.
PROMPT_FOOBAR_RUNTIME_SECS::::Run-time (in secs):
Наверное, вы заметили, что все файлы FOOBAR.str за исключением хранящихся в каталогах en-us и ja, – это пустые файлы. Это демонстрирует, насколько просто можно организовать поддержку локализованной версии вашего add-on. При простом изменение настроек языка браузера с English на другой поддерживаемый язык add-on будет выводится на этом языке. Поскольку у нас имеется строгое определение для японского языка, то изменение языка браузера на японский даст такой результат:

Описание add-on по-прежнему выводится на английском, но приглашение теперь выводится на японском. Если посмотреть файл language/ja/FOOBAR.str, то видно, что на японский переведена только подсказка.
LABEL_SERVICE_FOOBAR_INFO::::<b>Foo Bar.</b> This is the best add-on ever created for the ReadyNAS. Everyone will be so thrilled to see what this add-on does.
PROMPT_FOOBAR_RUNTIME_SECS::::実行時間 (秒):
FOOBAR.conf
Этот файл используется Apache для того, чтобы разрешить выполнение add-on handler. Этот файл не надо менять.
FOOBAR_HANDLER.pl
Это Perl handler, который обрабатывает операции с кнопками Save и Remove из add-on. Этот handler представлен как пример обработки команд и полученные в результате данные XML возвращаются на HTML-страницу add-on. Обработка XML-данных выходит за рамки этой статьи, но вы можете использовать эти и другие add-on Perl чтобы выяснить, как это происходит.
Необязательно писать add-on handler только на Perl — можно использовать и C. Нужно только определить handler в XML-файле add-on (см. далее). Мы рекомендуем использовать Perl как front-end для двоичного кода на C если вы предпочитаете именно этот языка, поскольку сейчас библиотечные вызовы для удаления, разрешения и блокировки add-on доступны только для Perl.
Рассмотрим исходный код.
Сначала в следующие файлы нужно включить определения и общие функции add-on.
do "/frontview/lib/cgi-lib.pl"; do "/frontview/lib/addon.pl";
Чтение в %in hash всех исходных переменных форм, полученных от команды HTML submit.
# initialize the %in hash %in = (); ReadParse();
Получение запрошенной информации. $operation – это get или set. $command может иметь 3 значения— RemoveAddOn, ToggleService, или ModifyAddOnService. Мы кратко объясним эти команды.
my $operation = $in{OPERATION};
my $command = $in{command};
my $enabled = $in{"CHECKBOX_FOOBAR_ENABLED"};
Чтение в строке language string файлы для этого add-on. Это настроит язык браузера и вызовет нужный файл string map.
get_default_language_strings("FOOBAR");
Инициализаци XML payload заголовком. Мы присоединим к этой переменной payload позднее.
my $xml_payload = "Content-type: text/xml; ...?>";
Если операция – get, то Show_FOOBAR_xml() возвратит XML payload для контейнера add-on. Обычно при этом передается конфигурация add-on, поэтому это будет отображаться при загрузке страницы add-on.
if( $operation eq "get" )
{
$xml_payload .= Show_FOOBAR_xml();
}
Если операция – set, то обрабатываются возможные команды set. Предопределенные вызовы Remove_Service_xml и Toggle_Service_xmlare будут удалять add-on и переключаться в зависимости от того, включен ли add-on. Modify_FOOBAR_xmlcall определен в этом файле для обработки изменений формы ввода и его можно модифицировать в зависимости от ваших потребностей.
elsif( $operation eq "set" )
{
if( $command eq "RemoveAddOn" )
{
# Remove_Service_xml() removes this add-on
$xml_payload .= Remove_Service_xml("FOOBAR");
}
elsif( $command eq "ToggleService" )
{
# Toggle_Service_xml() toggles the enabled state of the add-on
$xml_payload .= Toggle_Service_xml("FOOBAR", $enabled);
}
elsif( $command eq "ModifyAddOnService" )
{
# Modify_FOOBAR_xml() processes the input form changes
$xml_payload .= Modify_FOOBAR_xml();
}
}
Если нужно выполнить команду shell с правами root, то используйте функции spool_file() и empty_spool(), например:
$SPOOL .= "
df -h > /tmp/df.out
";
spool_file("${ORDER_SERVICE}_FOOBAR", $SPOOL);
empty_spool();
Эта команда сделает спулинг команд shell из $SPOOL в файл /var/spool/frontview/60_FOOBAR (${ORDER_SERVICE} is 60). При вызове empty_spool() файл будет выполнен из-под root. Используйте спулинг осторожно — ошибка root может привести к потере данных.
Если у вас возникнут вопросы по SDK, то разместите их на форуме ReadyNAS Developer Network forum.


