输入您的问题查找答案
   
 
相关文库文档
更多相关文库文档 >>
联系客服
在线技术支持
客户服务热线:

电话销售热线:

服务时间(法定节假日除外):
家庭产品:
周一至周六:9:00-18:00
商用产品:
周一至周五:9:00-18:00
商用网络动态

与 NETGEAR 监控专用交换机亲密接触

选择德才兼备的 PoE 交换机

NETGEAR 交换机助力聊城第二人民医院智能监控建设

更多动态 >>

网件文库 » 存储产品  »  如何开发“Frontview 插件”
如何开发“Frontview 插件”

编号:50116       来自:NetGear       更新日期:2012-07-21       访问数量:6083

“Frontview 插件是一种可以安装在 ReadyNAS 上的软件模块,可通过 Frontview 扩展已提供的服务。每个插件对应一种Frontview 管理单元中的服务虚拟(daemon)。如果你在 Frontview 中看到了服务→已安装插件页面,在安装前,你会看到两种插件— BitTorrent 和 ReadyNAS Photos。

正如你所看到的,用户可以通过复选框启用或关闭任何一个插件,也可以通过“已安装的插件”页面打开一个新页面修改插件的内容。

开始

我们将从创建、配置和检测一个插件实例开始,在我们对插件的各部分进行解释时,我们将进一步讨论哪些地方需要修改。

在编写“Frontview 插件”前,最好具备以下能力:

  1. Linux shell 环境和 shell scripts
  2. Web 2.0 编程(HTML、Javascript、XML、AJAX)
  3. Perl 或 C 写 CGI 后端支持

你将需要运行 RAIDiator 4.1.3。如果在4.1.3发布前你看到此文,可以使用 beta 4.1.3-T120 版本。

下面,让我们用4步来教你创建你的第一个插件吧。

第一步:下载 Frontview 插件 SDK

首先,要下载“Frontview 插件 SDK”SDK 中包括一些插件所必需的模板,如:启动插件的创建脚本,将插件打包成适当的二进制格式以便 Frontview 可以读出的配置脚本。

建议您在 ReadyNAS 上正确创建并配置您的插件,也可在任何 Linux 平台上进行相关操作。如果您选择在 ReadyNAS 上进行上述操作,您需要设置 SSH 访问,同样需要设置工作环境。查看此外了解如何操作。

现在,请单击下面的图标下载“插件 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

第二步:创建插件模板

您已经设置好了“插件 SDK”环境。现在,就让我们创建一个使用 SDK 的简单的插件吧。创建的第一个插件仅是证明是可以这样做的,也就是说,可以安装它,Frontview 能够显示它,您也可以删除它。

在您的 SDK 基本目录中,运行下面的命令:

# bin/create_addon

此命令将会询问您一系列有关您插件的问题,并为您创建必要的模板以便您配置插件。如果您出错了,只需重新运行。要创建必要的源文件用于稍后的修改,只需运行一次此工具。记住:如果您使用同一个插件名称运行了两次该工具,当前的源文件就会被覆盖。

这是“create_addon”的控制台输出:

欢迎使用“Frontview Add-on Wizard”

输入插件名(请尽量简短):Foo Bar

FOOBAR 将被用作插件的标签并用作您插件文件的基本名称。

设置完成?(y/n) y

输入 ¡§Foo Bar¡¨ 的简单说明(非单引号):这是为 ReadyNAS 创建的最佳插件。每个人都会惊讶于此插件的作用。

说明将被读为:
这是为ReadyNAS创建的最佳插件。每个人都会惊讶于此插件的作用。

设置完成?(y/n) y

输入插件版本号 [1.0]:

版本: 1.0

设置完成?(y/n)y
如果您想对所输入的内容进行修改,请在 FOOBAR.xml 中进行。已经用您提供的信息生成了一个基本源代码树。您会找到以下文件:

FOOBAR/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.str

当您对上述文件进行了适应修改后,您就可以使用 build_addon 配置插件了。如果您需要进入FOOBAR目录,运行“../bin/build_addon”。

在此过程中,将为您的插件提供一个标签。一般情况下,此标签仅是插件名称大写,中间没有空格。在上面的例子中,插件 “Foo Bar” 的标签名为 “FOOBAR”。

完成后,插件源文件会被粘贴到此标签目录下。

第三步:配置您的第一个插件

您已经做好了配置插件源文件为二进制文件的准备了。要进行此操作,需要进入插件目录。运行下列命令(根据上面的 ¡§Foo Bar¡¨add-on 例子操作)。注意:您要先进入插件目录。

# cd FOOBAR
# ../bin/build_addon
成功将"Foo Bar" add-on 包配置为"FooBar_1.0.bin"。

当您更改后想重新配置插件镜像时,可以使用“build_addon”命令。创建后的文件将以 addon.bin 文件保存在插件目录中。当您选择系统 → 更新 →本地工具条上载时,此文件会被 Frontview 识别为插件。

第四步:检测你的插件

现在,把您的新插件从系统 → 更新 →本地上载吧。

当单击完成系统升级后,请等待,直到出现插件已安装的确认信息,然后点击服务 → 已安装的插件工具条。您就会看到您的插件了。

恭喜您,创建了您的第一个“Frontview 插件

了解维护脚本

很容易,是吧?现在,让我们详细了解一下 FOOBAR 插件的各资源组件,然后您就知道要创建一个真正的插件,您该对哪些地方进行修改了。首先,让我们了解一下 shell 脚本。

install.sh

此脚本完成必要的维持以安装插件。此标签向/etc/default/services 中添加两个标签变量,跟踪插件安装和启动与否。就 FOOBAR 而言,添加以下变量:

FOOBAR_SUPPORT=1
FOOBAR=1

FOOBAR_SUPPORT 告诉 Frontview 已经安装“FOOBAR 插件”,而 FOOBAR=1 则是告诉 Frontview“FOOBAR add-on”已启用。

基本上,您可以保持 install.sh 绝大部分(如果不是全部)内容基本不变。只需对插件正确安装所需要的内容进行必要的修改(例如:添加一个用户名,创建一个数据库等)。

remove.sh

此脚本用来删除插件,然后清除干净。您需要在插件配置文件中设置 CONF_FILES 文件,以便这些文件能够被删除。您也可以附上需要删除为 PROG_FILES 的程序文件。

如果您已经修改了任何系统配置文件或创建了数据库,要确保已经对此脚本进行了清理。这样做,可以在删除后不留下插件使用痕迹。通过 install.sh 添加到 /etc/default/services 中的目录会自动被清除。

start.sh

此脚本用来启动您的插件服务。它与 /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脚本用来停止插件服务。如果您已经使用“start-stop-daemon”启动了此服务,您可以使用同样的命令停止。

start-stop-daemon –stop –pidfile /var/run/FOOBAR.pid –signal QUIT –quiet

就象在 start.sh 中一样,要确保使用 stop.sh 脚本中相同的.pid 文件。

running.sh

此脚本用来检测是否插件服务正在运行,如果正在运行返回状态0,如果停止了则是非0。它告诉 Frontview 是使用绿色的状态 LED 还是灰色的状态 LED 显示插件。

此处您所需要做的就是查看一下是否此程序正在运行。您可以把脚本中 ADDON_PROCESS 变量设置为您的程序名,也可根据需要修改此脚本进行更多操作。

了解源文件

现在让我们了解一下其它文件。

FOOBAR.html

插件 HTML 文件包含了显示在插件管理框架中的 UI 要素。注意:只有内框才由 HTML 文件控制,而不由标准的插件框架控制(例如:版本、复选框、删除和保存键)。此 HTML 文件内容不需要与插件 Javascript 文件(FOOBAR.js)以及 Perl (或非-Perl)CGI handler(FOOBAR_HANDLER.pl)一起使用。

如果HTML文件被删除了,灰框及插件框中的内容将不再显示。

FOOBAR.js

Frontview add-on 框架中将自动包含插件 Javascript 文件,文件中定义的功能可通过插件 HTML 文件使用。

FOOBAR.xml

记得运行 create_addon 命令吗?create_addon 基于您所输入信息自动生成 FOOBAR.xml。



FOOBAR
Foo Bar
1.0
FOOBAR_HANDLER.pl
FOOBAR_HANDLER.pl
FOOBAR_preaction
FOOBAR_onloadaction

在插件标签中的标签如下:

name – 插件的标签名称
friendly_name – 通过 create_addon 输入的插件名称
version - 通过 create_addon 输入的插件版本
get_url – 为HTML 页面返回XML数据的处理器
set_url – 为HTML 页面完成格式处理的处理器
preaction – Javascript 功能(在FOOBAR.js中),在 HTML 页面被加载前用于呼叫
onloadaction - Javascrip t功能(在FOOBAR.js中),在 HTML 页面被加载后用于呼叫

language/*/FOOBAR.str

Frontview为所有字符串都使用了字符串标签,同样的,Frontview 插件也一样。此功能是方便支持多语言。正如您所看到的,当您运行了 create_addon 时,它就会生成下列的字符串映射文件:

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

字符串映射表文件格式(例如: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::::Foo Bar. 这是为 ReadyNAS 创建的最佳插件。每个人都会惊讶于此插件的作用。PROMPT_FOOBAR_RUNTIME_SECS::::Run-time (in secs):

您可能注意到了,除了 en-us 和 ja 目录中的 foobar 文件外,“其他”所有的 FOOBAR.str 文件都是空的。这也是向您表明支持插件的本地版本是多么的容易。只需要将浏览器的语言从英语设置为所支持的语言,插件就能出现那种语言。由于我们已经有了一个日语字符串定义文件,将浏览器语言更改为日语的结果如下:

您会发现插件说明仍是英语的,但提示已经成为日语的了。如果您看一下 language/ja/FOOBAR.str,您会发现只有提示被翻译了。

LABEL_SERVICE_FOOBAR_INFO::::Foo Bar. 这是为 ReadyNAS 创建的最佳插件。每个人都会惊讶于此插件的作用。PROMPT_FOOBAR_RUNTIME_SECS::::実行時間(秒):

FOOBAR.conf

Apache 使用此文件执行插件处理器。您不必更改此文件。

FOOBAR_HANDLER.pl

这是 Perl 处理器,处理插件上的保存删除按钮动作。所提供的处理器样例用来说明命令是如何进行处理的,以及返回插件
 HTML 页面的 XML 数据结果。很不幸,如何处理通过的 XML 数据并不是本文所述范围,但您可以参考此文以及其它的插件 Perl 处理器内容大致了解一下是怎么处理的。

记住,插件处理器不必以 Perl 写入。如果您愿意,您仅可以用 C 语言写入。您只需要指定插件 XML 文件中的处理器(见下文)。如果您想用 C 语言,我们建议您用 Perl 作为 C 语言二进制的前端,并作为删除、启动和关闭仅适用于当前 Perl 的插件呼叫库。

让我们按以下源代码操作。

首先,下列文件需要应必要的定义和通用的插件功能。

do "/frontview/lib/cgi-lib.pl";
do "/frontview/lib/addon.pl";

以乱数读%的内容包含了所有通过 HTML 提交命令的输入格式变量。

# initialize the %in hash
%in = ();
ReadParse();

获取必要信息。$operation 既是获得也是设置。$command 包含三个可能值中的一个 — RemoveAddOnToggleService 或 ModifyAddOnService。我们会简要解释这些命令。

my $operation = $in{OPERATION};
my $command = $in{command};
my $enabled = $in{"CHECKBOX_FOOBAR_ENABLED"};

为此插件读入语言字符串文件。此操作可获得浏览器语言配置并将其导入到正确的字符串映射文件中。

get_default_language_strings("FOOBAR");

使用头部将 XML 载荷初始化。我们会随后附加上此载荷的变量。

my $xml_payload = "Content-type: text/xml; ...?>";

如果此操作是为了获取Show_FOOBAR_xml() 将为插件容器返回XML载荷。通常,这会通过插件配置,以便插件页加载时显示插件配置。

if( $operation eq "get" )
{
$xml_payload .= Show_FOOBAR_xml();
}

如果此操作是为了设置,则每个可能的设置命令都会被执行。Remove_Service_xml 和 Toggle_Service_xml 是预定义的呼叫,将删除插件并决定插件启动与否。此文件中的 Modify_FOOBAR_xml 呼叫被定义为处理输入格式更改,以满足您的需求。

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();
  }
}

如果您需要用 root  权限执行 shell 命令,您需要使用 spool_file() 和 empty_spool() 功能。此命令的例子如下:

$SPOOL .= "
df -h > /tmp/df.out
";

spool_file("${ORDER_SERVICE}_FOOBAR", $SPOOL);
empty_spool();

上述代码将输出文件/var/spool/frontview/60_FOOBAR (${ORDER_SERVICE} is 60)内的 $SPOOL 中的 shell 命令。当呼叫empty_spool() 命令时,此文件将以 root 权限执行。使用 spool 系统时要小心,以 root 权限执行任何命令都会导致数据丢失。

如果您还对 SDK 有什么问题,请将问题粘贴到 ReadyNAS 开发人员网络论坛上。

  
 
以上内容是否为您所需要的答案?
以上内容是否清晰、简明和易于理解的?
您是如何知道网件社区的?