AMH 社区首页
AMH社区 - 开放自由有价值的社区
[求助帖] AMH模块教程-插件型模块的编写 |
|
---|---|
894849635 |
894849635 发表于 2013-09-06 21:20:15
因为测试模块,把VPS搞坏了,所以要重装系统,在重装系统的期间,我决定教大家写模块
事实上,写模块并没有你想象中的那么难。 事实上,写模块对于你掌握Shell脚本命令还是有很大帮助的,此次拿我之前发布的imagemagick来作为讲解的基础 ------------------------------------------------------------------------------------------------------------------------------------------------------------ [*]为什么我要教你写模块? 因为写模块如果只有少数几个人的话,对于AMH的发展十分不利。就如wordpress,之所以能那么火,正是它数以百万计的插件和主题,而AMH的模块却很少,如果开发模块的技术掌握在少数人手中,无疑,并不适合AMH的发展。 [*]为什么明明有妹子@admin的教程,你还要写这个?说实话,妹子的教程很专业。也很像官方文档,事实上,那份文档对于你的读代码能力还是有一定要求的。水平稍次一点的,就没办法看懂了。所以,我干的事就像是360.把本来很难的事,让他变得简单一点。 [*]什么是插件型模块?插件型模块是我自己定义的,区别于AMH模块和系统型模块,AMH模块就是涉及到AMH面板的模块;而系统性的模块则是对系统功能进行补充的模块,就向我正在努力的V_PN模块;插件型模块,就是对PHP或Nginx提供功能性的插件,对于系统本身改动并不大,之所以选择它也是以为如此,插件型模块对于系统更改不大,不会太过影响系统正常运转,适合新手来写。 ------------------------------------------------------------------------------------------------------------------------------------------------------------ 写模块的基本步骤 1.建立模块文件夹,文件夹为英文。 2.建立AMHscript文件,并书写相关脚本。 3.将模块所使用的支持库文件,安装包等拷贝到模块文件夹下。 4.对模块进行测试,并修复模块中的BUG、 5.将模块发到论坛进行再一次测试,并根据众人反馈进行修改。 6.等待模块发布到模块平台上。 ------------------------------------------------------------------------------------------------------------------------------------------------------------ 写模块应该注意的注意事项 [*]模块名必须与你的模块所在的文件夹名相同,不然在删除模块时会进入死循环。 [*]不要对模块本身除函数内容外的任何内容进行改动,哪怕是注释! [*]模块下载东西下载到/usr/local ------------------------------------------------------------------------------------------------------------------------------------------------------------ 首先,我先将模块中amhscript的内容贴在下面 #!/bin/bash 在这个模块当中,有一些东西是默认的,比如说想开头,都是默认的,不要修改!PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin; #info function amh_module_info() { echo 'AMH-ModuleName: ImageMagick '; echo 'AMH-ModuleDescription: ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。 '; echo 'AMH-ModuleButton: 安装/卸载'; echo 'AMH-ModuleDate: 2013-09-04'; echo 'AMH-ModuleAdmin:'; echo 'AMH-ModuleWebSite: http://www.ixiqin.com'; echo 'AMH-ModuleScriptBy: Xqgz'; } #install function amh_module_install() { if amh_module_status ; then exit; else cd /usr/local/; wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz tar zxvf ImageMagick-6.7.1-2.tar.gz cd ImageMagick-6.7.1-2/ ./configure --prefix=/usr/local/imagemagick make && make install cd ../ wget http://pecl.php.net/get/imagick-3.0.1.tgz tar zxvf imagick-3.0.1.tgz cd imagick-3.0.1/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick make && make install cd ../ echo 'extension = "imagick.so"' >>/etc/php.ini amh_module_status; fi; } #admin function amh_module_admin() { if amh_module_status ; then echo '[OK] ImageMagick Management; else exit; fi; } #uninstall function amh_module_uninstall() { if amh_module_status ; then cd /usr/local/ImageMagick-6.7.1-2/ make uninstall cd /usr/local/imagick-3.0.1/ make uninstall rm -rf /usr/local/ImageMagick-6.7.1-2/ rm -rf /usr/local/imagick-3.0.1/ rm -rf ImageMagick-6.7.1-2.tar.gz rm -rf imagick-3.0.1.tgz sed -i /imagick.so/d /etc/php.ini echo '[OK] ImageMagick Uninstall successful.'; else exit; fi; } #status function amh_module_status() { if [ -d " /usr/local/imagemagick " ]; then echo '[OK] ImageMagick is already installed.'; return 0; else echo '[Notice] ImageMagick is not installed.'; return 1; fi; } 我曾经尝试着在这些默认设置好的地方添加####作为注释,但是,我得到的结果,却是一个什么都没有,只有一个删除按钮的界面,而这,只是以为我将所有的函数都加以注释使得AMH无法识别模块只能选择删除掉它! 除了这些内容,还有很多的内容是我们可以自行修改的内容。 首先,是模块的信息。 模块的信息主要是依赖于 amh_module_info这个函数 #info 其中,function amh_module_info() { echo 'AMH-ModuleName: ImageMagick '; echo 'AMH-ModuleDescription: ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。 '; echo 'AMH-ModuleButton: 安装/卸载'; echo 'AMH-ModuleDate: 2013-09-04'; echo 'AMH-ModuleAdmin:'; echo 'AMH-ModuleWebSite: http://www.ixiqin.com'; echo 'AMH-ModuleScriptBy: Xqgz'; } AMH-ModuleName后跟的是模块名,应注意,模块名应当与你制作模块时建立的文件夹名字相同,否则,会使AMH陷入死循环,不得不重启! AMH-ModuleDescription后跟的是你的模块的简介,一般而言要简洁一些,只要介绍你的功能就好,具体的使用教程,建议还是发在论坛。 AMH-ModuleButton这个参数一般是用不到的,但是,一些特殊模块可以使用,比如前些日子有一位朋友想要在AMH中加入重启的功能。我当时就说,这并不难,比如如果是关机,AMHscript中的内容如下 #!/bin/bash 在这里,就将AMH-ModuleButton的值设为 重启和关机。所以,对于这一项,你大可以不管他。PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin; #info function amh_module_info() { echo 'AMH-ModuleName: reboot '; echo 'AMH-ModuleDescription: 用来重启 '; echo 'AMH-ModuleButton: 重启/关机'; echo 'AMH-ModuleDate: 2013-09-06'; echo 'AMH-ModuleAdmin:'; echo 'AMH-ModuleWebSite: http://www.ixiqin.com'; echo 'AMH-ModuleScriptBy: 西秦公子'; } #install function amh_module_install() { reboot } #admin function amh_module_admin() { if amh_module_status ; then echo '[OK] reboot Management; else exit; fi; } #uninstall function amh_module_uninstall() { shutdown } #status function amh_module_status() { if [ -d " /root" ]; then echo '[OK] reboot is already installed.'; return 0; else echo '[Notice] reboot is not installed.'; return 1; fi; } AMH-ModuleDate 这里设置的是模块的时间,我个人把他作为模块的开发时间,具体请自行修改。 AMH-ModuleAdmin: 这个后面跟的是模块的管理地址,一般大部分插件型模块都是没有管理界面,所以大多留空、 AMH-ModuleWebSite: 这个后面跟的是你的网站的地址。 AMH-ModuleScriptBy: 这里是制作的名字,应该是不拘于中英文,写下你的名字就好。 唔,已经9000+字数了,二楼好了~
点赞,加油! (2分)
2013-09-06 21:20:15 1
|
894849635 |
本帖最后由 894849635 于 2013-9-6 22:23 编辑
接下来是重头戏:安装脚本 对于我们插件型模块,没有了管理界面,无形中就减少了我们的压力,比如说,想SSL模块吧,你丫不光要写安装脚本,还要写界面的PHP,那有我们插件型简单,简单易学。 接下来是具体讲解, 安装脚本调用的是amh_module_install()函数,所以我们在制作模块时,首先要写这一部分。 首先我们先来对比一下。 这是我的模块的安装脚本 function amh_module_install() 这是军哥的安装脚本{ if amh_module_status ; then exit; else cd /usr/local/; wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz tar zxvf ImageMagick-6.7.1-2.tar.gz cd ImageMagick-6.7.1-2/ ./configure --prefix=/usr/local/imagemagick make && make install cd ../ wget http://pecl.php.net/get/imagick-3.0.1.tgz tar zxvf imagick-3.0.1.tgz cd imagick-3.0.1/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick make && make install cd ../ echo 'extension = "imagick.so"' >>/etc/php.ini amh_module_status; fi; } wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz 有没有觉得看起来很相似,没错,因为这个模块,我没有从官网去找安装教程,一是因为当时已经是晚上12点了,有些疲倦,不愿意去折腾自己。二是因为,这个模块是第一个发布出来的,还是略微有些忐忑,所以,便直接用了军哥的安装代码。tar zxvf ImageMagick-6.7.1-2.tar.gz cd ImageMagick-6.7.1-2/ ./configure --prefix=/usr/local/imagemagick make && make install cd ../ wget http://pecl.php.net/get/imagick-3.0.1.tgz tar zxvf imagick-3.0.1.tgz cd imagick-3.0.1/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick make && make install cd ../ 整个来看,对于代码的修改并不大,所以,在制作模块的时候对技术要求也就低了一些,只需要将官方放出的安装代码移植过来就可以了, 不需要太多的修改。这就大大降低了模块制作者的要求【插件型模块,系统型模块你们暂时不要动,否则系统崩溃别怪我没提醒你。】而且,插件型模块大多不需要更新,往往一次就够了,很长时间不用更新,除非官方不再提供支持。更是减少了开发者的工作量。 在写这一部分脚本时,应该注意语法问题,尽量不要对官方的命令进行大的修改,以防命令的失效和死循环.也减少了你自己在BUG的修复时的工作量。 接下来设置的是管理脚本:调用amh_module_admin() 来影响模块的管理按钮 #admin 在这个函数中,我们需要设置的就是[]内的单词,如果是大写的OK,就会显示出管理按钮,如果设置的是NO大概就会不显示管理按钮。管理函数没什么可以说的,就这样吧。function amh_module_admin() { if amh_module_status ; then echo '[OK] ImageMagick Management; else exit; fi; } 接下来是卸载函数,这也是一个很重要的函数,它影响了你的卸载过程 #uninstall 卸载时应做的,删除安装时下载的文件,删除安装时的文件夹,删除安装时在某些文件中添加的部分字段。function amh_module_uninstall() { if amh_module_status ; then cd /usr/local/ImageMagick-6.7.1-2/ make uninstall cd /usr/local/imagick-3.0.1/ make uninstall rm -rf /usr/local/ImageMagick-6.7.1-2/ rm -rf /usr/local/imagick-3.0.1/ rm -rf ImageMagick-6.7.1-2.tar.gz rm -rf imagick-3.0.1.tgz sed -i /imagick.so/d /etc/php.ini echo '[OK] ImageMagick Uninstall successful.'; else exit; fi; } 其中常用的命令多为 sed -i /imagick.so/d /etc/php.ini 第一个命令是删除含有imagick.so的行 删除所在的文件是/etc/php.ini,你只要将关键字和文件修改就可以拿来用、rm -rf /usr/local/ImageMagick-6.7.1-2/ 第二个命令是静默删除某文件或文件夹【含子目录及文件】用于删除你的安装文件和安装目录。 用好以上的两个命令,基本上就可以完成删除命令的脚本。 最后一部分:判断状态的脚本 这一部分本身因为会返回1或0,所以用的是if,需要修改的仍然是“”内的内容,这个里面一般为安装的插件所特有的文件或文件夹,所以,请谨慎设置。记得将其中的XXX is already installed给改过来。。。 #status 本来以为会写很多,可是事实上也没有那么多,我还多占了好几楼,就这样吧。function amh_module_status() { if [ -d " /usr/local/imagemagick " ]; then echo '[OK] ImageMagick is already installed.'; return 0; else echo '[Notice] ImageMagick is not installed.'; return 1; fi; } 如果你能将这个看懂。写一个简单的插件型模块不成问题。 在最近,如果要写插件型模块,我会尽量放出更多的具体过程。来方便你理解。 当然,在电脑上的工作都有一个通性,那就是多练,你不妨也找一找imagemagick的安装脚本按照我说的做做试试,再和你在面板中安装的进行比较。 如果有什么问题,可以回复到这个帖子我会及时的回答你!
回复
2013-09-06 21:20:34 2
|
w241357 |
2楼还占啊
回复
2013-09-06 21:21:02 3
|
894849635 |
回复
2013-09-06 21:22:53 6
|
恶小弟 |
0.0 我也无耻一下吧
回复
2013-09-07 08:00:09 7
|
amysql |
很好的开发分享教程,
已转入使用教程分类。 支持
回复
2013-09-07 15:13:44 8
AMH面板 - 好用高效低占用、安全可靠极稳定 |
zilye007 |
我也来占位
回复
2013-09-08 13:28:46 9
|