<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[运维进行时]]></title> 
<link>http://blog.liuts.com/index.php</link> 
<description><![CDATA[热衷于开源技术，一起学习，共同进步。]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[运维进行时]]></copyright>
<item>
<link>http://blog.liuts.com/post/214/</link>
<title><![CDATA[香港，我来了！(不断更新...)]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Tue, 24 Aug 2010 10:28:57 +0000</pubDate> 
<guid>http://blog.liuts.com/post/214/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公司组织优秀员工、经理香港游，出发之前需要对香港这个地方好好了解一番，开始收集资料...。<br/><br/><strong><span style="color: #008000;">香港旅游购物图</span></strong><br/><br/>此处包含一个多媒体文件，请用网页方式查看。<br/><br/>[旅游购物图来源于Sohu]<br/><br/><strong><span style="color: #FF4500;">一、行程</span></strong><br/>8月26日：抵深，员工在深圳自由活动，在深圳住一晚；<br/>8月27日：参加香港文化中心、星光大道、游览海洋公园、浅水湾、平山顶广场俯视港岛全景，乘船游览维多利亚港夜景。<br/>8月28日：金紫荆广场、会展中心、游览迪斯尼公园。<br/>8月29日：香港自由活动,您可逛街购物，感受香港风情，晚上返回深圳。<br/><br/><strong><span style="color: #800080;">二、公司的温馨提示</span></strong><br/>1）香港购物在大的商场都可以刷卡，所以大家带好银联卡和信用卡就可以，不必带大量现金；<br/>2）最好提前在银行兑换一些港币，大家在香港就餐、坐车及购买一些小的商品都需要付现金，<br/>虽然在香港可以付人民币，但汇率很不划算，如果来不及兑换，过关的时候也可以兑换港币。<br/>3）建议大家带大点的拉杆旅行箱去，8月底是夏季商品打折最历害的时候，估计大家会买很多东西。<br/>4）26号深圳有阵雨，大家带好雨具。<br/>5）再次提醒大家，一定要提前打电话或网上确认自己的航班信息。<br/><br/><strong><span style="color: #008080;">三、在线办理乘机手续(海航)</span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=161" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=161" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong><span style="color: #006699;">四、摄影SHOW</span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=162" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=162" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=163" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=163" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=164" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=164" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=165" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=165" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=166" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=166" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=167" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=167" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=168" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=168" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=169" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=169" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=170" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=170" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=171" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=171" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=172" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=172" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=173" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=173" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=174" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=174" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=175" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=175" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=176" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=176" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=177" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=177" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=178" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=178" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=179" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=179" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=180" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=180" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=181" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=181" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=182" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=182" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=183" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=183" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=184" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=184" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=185" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=185" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=186" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=186" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=187" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=187" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=188" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=188" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=189" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=189" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=190" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=190" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=192" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=192" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=193" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=193" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=194" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=194" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=195" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=195" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=196" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=196" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=197" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=197" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=198" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=198" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=199" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=199" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=200" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=200" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=201" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=201" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=202" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=202" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=203" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=203" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=204" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=204" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=205" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=205" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=206" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=206" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=207" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=207" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://blog.liuts.com/tags/%25E9%25A6%2599%25E6%25B8%25AF/" rel="tag">香港</a> , <a href="http://blog.liuts.com/tags/%25E6%2597%2585%25E6%25B8%25B8/" rel="tag">旅游</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/213/</link>
<title><![CDATA[制作python模块安装包[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 24 Aug 2010 08:32:49 +0000</pubDate> 
<guid>http://blog.liuts.com/post/213/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python的第三方模块越来越丰富，涉及的领域也非常广，如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录，但此方式不便于管理与维护，存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。<br/><br/><strong>一、编写模块</strong><br/>进入项目目录<br/>#cd /home/pysetup <br/>#vi foo.py<br/><textarea name="code" class="python" rows="15" cols="100">
class MyClass():
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.blog = "http://blog.liuts.com"

&nbsp;&nbsp;&nbsp;&nbsp;def printblog(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print self.blog

&nbsp;&nbsp;&nbsp;&nbsp;def printBblog(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print self.blog.swapcase()
</textarea><br/><strong>二、编写setup.py</strong><br/>#vi setup.py<br/><textarea name="code" class="python" rows="15" cols="100">
from distutils.core import setup
setup(name='Myblog',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version='1.0',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description='My Blog Distribution Utilities',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;author='Liu tiansi',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;author_email='liutiansi@gmail.com',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url='http://blog.liuts.com',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;py_modules=['foo'],
&nbsp;&nbsp;&nbsp;&nbsp; )
</textarea><br/>更多参数说明见表：<br/><a href="http://blog.liuts.com/attachment.php?fid=160" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=160" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>三、setup.py参数说明</strong><br/><div class="quote"><div class="quote-content"><br/>#python setup.py build&nbsp;&nbsp;&nbsp;&nbsp; # 编译<br/>#python setup.py install&nbsp;&nbsp;&nbsp;&nbsp;#安装<br/>#python setup.py sdist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#生成压缩包(zip/tar.gz)<br/>#python setup.py bdist_wininst&nbsp;&nbsp;#生成NT平台安装包(.exe)<br/>#python setup.py bdist_rpm #生成rpm包<br/></div></div><br/>或者直接"bdist 包格式"，格式如下：<br/><div class="quote"><div class="quote-content"><br/>#python setup.py bdist --help-formats <br/>&nbsp;&nbsp;--formats=rpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPM distribution<br/>&nbsp;&nbsp;--formats=gztar&nbsp;&nbsp;&nbsp;&nbsp;gzip'ed tar file<br/>&nbsp;&nbsp;--formats=bztar&nbsp;&nbsp;&nbsp;&nbsp;bzip2'ed tar file<br/>&nbsp;&nbsp;--formats=ztar&nbsp;&nbsp;&nbsp;&nbsp; compressed tar file<br/>&nbsp;&nbsp;--formats=tar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tar file<br/>&nbsp;&nbsp;--formats=wininst&nbsp;&nbsp;Windows executable installer<br/>&nbsp;&nbsp;--formats=zip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZIP file<br/></div></div><br/><strong>四、打包</strong><br/>#python setup.py sdist<br/><div class="quote"><div class="quote-content"><br/>running sdist<br/><span style="color: #FF4500;"><br/>warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)<br/>warning: sdist: standard file not found: should have one of README, README.txt<br/></span><br/>writing manifest file 'MANIFEST'<br/>creating Myblog-1.0<br/>making hard links in Myblog-1.0...<br/>hard linking foo.py -> Myblog-1.0<br/>hard linking setup.py -> Myblog-1.0<br/>creating dist<br/>tar -cf dist/Myblog-1.0.tar Myblog-1.0<br/>gzip -f9 dist/Myblog-1.0.tar<br/>removing 'Myblog-1.0' (and everything under it)<br/></div></div><br/>提示两条warning可以忽略，不影响打包，当然一个完善的项目必须有README及MANIFEST.in(项目文件清单)文件。<br/>#ls dist<br/><span style="color: #FF4500;"><br/>Myblog-1.0.tar.gz<br/></span><br/><strong>五、安装</strong><br/>#tar -zxvf Myblog-1.0.tar.gz<br/>#cd Myblog-1.0.tar.gz<br/>#python setup.py install (此命令大家再熟悉不过了)<br/><div class="quote"><div class="quote-content"><br/>running install<br/>running build<br/>running build_py<br/>creating build/lib.linux-x86_64-2.6<br/>copying foo.py -> build/lib.linux-x86_64-2.6<br/>running install_lib<br/>copying build/lib.linux-x86_64-2.6/foo.py -> /usr/local/lib/python2.6/dist-packages<br/>byte-compiling /usr/local/lib/python2.6/dist-packages/foo.py to foo.pyc<br/>running install_egg_info<br/>Writing /usr/local/lib/python2.6/dist-packages/Myblog-1.0.egg-info<br/></div></div><br/><strong>六、测试</strong><br/><div class="quote"><div class="quote-content"><br/>>>> from foo import MyClass<br/>>>> app=MyClass()<br/>>>> app.print printblog()<br/>>>> app.printblog()<br/>http://blog.liuts.com<br/>>>> app.printBblog()<br/>HTTP://BLOG.LIUTS.COM<br/>>>><br/></div></div><br/>参考文献：<br/><a href="http://docs.python.org/distutils/setupscript.html" target="_blank">http://docs.python.org/distutils/setupscript.html</a><br/>Tags - <a href="http://blog.liuts.com/tags/python/" rel="tag">python</a> , <a href="http://blog.liuts.com/tags/setup.py/" rel="tag">setup.py</a> , <a href="http://blog.liuts.com/tags/%25E5%25AE%2589%25E8%25A3%2585%25E5%258C%2585/" rel="tag">安装包</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/212/</link>
<title><![CDATA[轻松实现源码打包安装[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 20 Aug 2010 06:38:21 +0000</pubDate> 
<guid>http://blog.liuts.com/post/212/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通常我们在Linux/Unix下安装一平台时往往需要十几甚至更多安装包，这些源码包来源于网络、本地硬盘、移动设备。有时碰到网络不畅通或下载地址失效会带来很多麻烦，一个好方法便是将常用的软件包下载到本地硬盘存放。问题是久而久之连自己都不晓得哪些包才是适用的。现用makeself来实现自解压倒安装倒是一个很好的解决方案，下面以制作Func客户端安装包为例。<br/><br/><strong>一、整理软件包</strong><br/><div class="quote"><div class="quote-content"><br/>#cd /home<br/>#mkdir FuncPack1.0<br/>将所需的软件包都往FuncPack1.0目录丢：）<br/>#ls FuncPack1.0<br/><span style="color: #00008B;"><br/>-rw-r--r-- 1 root root&nbsp;&nbsp;&nbsp;&nbsp;50878 Sep 28&nbsp;&nbsp;2009 certmaster-0.25.tar.gz<br/>-rw-r--r-- 1 root root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;249 Oct&nbsp;&nbsp;8&nbsp;&nbsp;2009 certmaster.conf<br/>-rw-r--r-- 1 root root&nbsp;&nbsp; 152871 Sep 28&nbsp;&nbsp;2009 func-0.25.tar.gz<br/>-rw-r--r-- 1 root root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;137 Oct&nbsp;&nbsp;8&nbsp;&nbsp;2009 minion.conf<br/>-rw-r--r-- 1 root root&nbsp;&nbsp; 197981 Sep 28&nbsp;&nbsp;2009 pyOpenSSL-0.9.tar.gz<br/>-rw-r--r-- 1 root root 11060830 May 22&nbsp;&nbsp;2008 Python-2.5.1.tgz<br/></span><br/></div></div><br/><strong>二、编写安装shell</strong><br/>#cd FuncPack1.0<br/>#vi install.sh<br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/sh
#
# ---------------------------------------------------
# A python&func install shell
# ---------------------------------------------------
# 
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writed by Liu&nbsp;&nbsp;tiansi
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mail:liutiansi@gmail.com
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blog:http://blog.liuts.com
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QQ groups:106651547
# ---------------------------------------------------


_pwd=$(pwd)
cd $_pwd/FuncPack1.0

echo "==================*install python2.5*============================"
/bin/tar -zxvf Python-2.5.1.tgz
cd Python-2.5.1
./configure && make && make install
echo "export PATH=&#92;$PATH:/usr/local/bin" >> /etc/profile
source /etc/profile
cd ..

echo "=================*install Func/certmaster/pyOpenSSL*================="

/bin/tar -zxvf pyOpenSSL-0.9.tar.gz
cd pyOpenSSL-0.9
/usr/local/bin/python setup.py install
cd ..

/bin/tar -zxvf certmaster-0.25.tar.gz
cd certmaster-0.25
/usr/local/bin/python setup.py install
cd ..

/bin/tar -zxvf func-0.25.tar.gz
cd func-0.25
/usr/local/bin/python setup.py install
cd ..

/bin/ln -s /usr/local/bin/certmaster /usr/bin/certmaster
/bin/ln -s /usr/local/bin/funcd /usr/bin/funcd

/bin/sed -i 's/'`hostname`'//g' /etc/hosts

/bin/rm -rf /etc/certmaster/certmaster.conf
/bin/rm -rf /etc/certmaster/minion.conf
/bin/cp certmaster.conf /etc/certmaster
/bin/cp minion.conf&nbsp;&nbsp;/etc/certmaster

/bin/sed -i -e '/^listen_port/&#123; s/51234/1999/; &#125;' /etc/func/minion.conf
/bin/sed -i -e "/^minion_name/&#123; s@=@= `hostname`@; &#125;" /etc/func/minion.conf

/sbin/chkconfig --level 345 certmaster on
/sbin/service certmaster start

/sbin/chkconfig --level 345 funcd on
/sbin/service funcd start

echo "Install over!"
</textarea><br/>#chmod +x install.sh<br/><br/><strong>三、打包</strong><br/>#cd /home<br/>#wget http://megastep.org/makeself/makeself-2.1.5.run<br/>#chmod +x makeself-2.1.5.run<br/>#./makeself-2.1.5.run<br/>#cd makeself-2.1.5<br/>开始打包!<br/><strong><span style="color: #DC143C;">#./makeself.sh&nbsp;&nbsp;--notemp ../FuncPack1.0/ FuncPack1.0.bin "system start install ..." ./install.sh</span></strong><br/>运行结果：<br/><div class="quote"><div class="quote-content"><br/>Header is 402 lines long<br/><br/>About to compress 11280 KB of data...<br/>Adding files to archive named "FuncPack1.0.bin"...<br/>./<br/>./func-0.25.tar.gz<br/>./Python-2.5.1.tgz<br/>./pyOpenSSL-0.9.tar.gz<br/>./install.sh<br/>./minion.conf<br/>./certmaster.conf<br/>./certmaster-0.25.tar.gz<br/>CRC: 853861468<br/>MD5: 14463177b627f0e85f3591e88fb02b1d<br/><br/>Self-extractible archive "FuncPack1.0.bin" successfully created.<br/></div></div><br/><span style="color: #008000;"><br/>命令说明：<br/>1、--notemp 不生成临时目录，在当前目录下创建一新的目录(推荐)<br/>2、../FuncPack1.0/ 打包的源目录<br/>3、FuncPack1.0.bin 生成自运行解压文件<br/>4、"system start install ..." 安装提示信息<br/>5、./install.sh 解压后所要执行的安装脚本<br/>6、CRC、MD5(防止被篡改)<br/></span><br/>更多说明见官方<a href="http://megastep.org/makeself/" target="_blank">http://megastep.org/makeself/</a><br/><br/><strong>四、运行包</strong><br/>1、将生成的FuncPack1.0.bin文件scp到其它主机<br/>2、运行FuncPack1.0.bin即可<br/>Tags - <a href="http://blog.liuts.com/tags/%25E6%2589%2593%25E5%258C%2585/" rel="tag">打包</a> , <a href="http://blog.liuts.com/tags/makeself/" rel="tag">makeself</a> , <a href="http://blog.liuts.com/tags/%25E8%2587%25AA%25E8%25A7%25A3%25E5%258E%258B/" rel="tag">自解压</a> , <a href="http://blog.liuts.com/tags/%25E5%25AE%2589%25E8%25A3%2585/" rel="tag">安装</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/211/</link>
<title><![CDATA[无痛之ext3升ext4[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 06 Aug 2010 09:56:48 +0000</pubDate> 
<guid>http://blog.liuts.com/post/211/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一台文件存储服务器单目录下子目录已经突破31998数限制，造成无法继续创建子目录，服务器系统环境为CentOS5.4 内核版本为2.6.18。解决方案只能是升级到ext4文件系统，首先到<a href="https://ext4.wiki.kernel.org/index.php/Ext4_Howto" target="_blank">https://ext4.wiki.kernel.org/index.php/Ext4_Howto</a>查了一下资料，文中的第一句便是“Ext4 was released as a functionally complete and stable filesystem in Linux 2.6.28”。难道只能升级内核一条路了吗？当然不是：）呵呵，下面总结本人实施/www分区从ext3升级至ext4步骤供大家参考。<br/><br/><strong>一、升级前状态</strong><br/><div class="quote"><div class="quote-content"><br/>[root@USER-SERVER ~]# df<br/>Filesystem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1K-blocks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used Available Use% Mounted on<br/>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20315844&nbsp;&nbsp; 2342008&nbsp;&nbsp;16925196&nbsp;&nbsp;13% /<br/><span style="color: #FF0000;">/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;129863460&nbsp;&nbsp;&nbsp;&nbsp;192192 122968152&nbsp;&nbsp; 1% /www</span><br/>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 194442&nbsp;&nbsp;&nbsp;&nbsp; 17798&nbsp;&nbsp;&nbsp;&nbsp;166605&nbsp;&nbsp;10% /boot<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1029680&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 1029680&nbsp;&nbsp; 0% /dev/shm<br/></div></div><br/>无任何信息返回，说明/dev/sda5的ext4特征没有激活<br/><div class="quote"><div class="quote-content"><br/>[root@USER-SERVER ~]# tune2fs -l /dev/sda5 &#124; grep extent<br/>[root@USER-SERVER ~]# <br/></div></div><br/><strong>安装所需包</strong><br/>源码安装：<br/><div class="quote"><div class="quote-content"><br/>wget http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-1.41.12.tar.gz<br/>tar zxvf e2fsprogs-1.41.12.tar.gz; cd e2fsprogs-1.41.12<br/>./configure<br/>make;make install<br/></div></div><br/>RPM安装：<br/><div class="quote"><div class="quote-content"><br/>yum -y install e2fsprogs<br/></div></div><br/><br/><strong>二、制作引导镜像</strong><br/>查找并加载相应的模块，如只需ext4支持，可将--with=ext3去掉<br/><div class="quote"><div class="quote-content"><br/>[root@USER-SERVER boot]# mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.old<br/>[root@USER-SERVER boot]# mkinitrd -v --with=ext4 --with=ext3 /boot/initrd-`uname -r`.img `uname -r`<br/>Creating initramfs<br/>Looking for deps of module ehci-hcd<br/>Looking for deps of module ohci-hcd<br/>Looking for deps of module uhci-hcd<br/>Looking for deps of module ext3: jbd <br/>Looking for deps of module jbd<br/>Found root device sda2 for LABEL=/<br/>Looking for driver for device sda2<br/>Looking for deps of module pci:v00008086d00002680sv000017AAsd00006B7Cbc01sc01i8f: scsi_mod libata ata_piix <br/>Looking for deps of module scsi_mod<br/>Looking for deps of module sd_mod: scsi_mod <br/>Looking for deps of module libata: scsi_mod <br/>Looking for deps of module ata_piix: scsi_mod libata <br/>Looking for driver for device sda3<br/>Looking for deps of module pci:v00008086d00002680sv000017AAsd00006B7Cbc01sc01i8f: scsi_mod libata ata_piix <br/>Looking for deps of module usb-storage: scsi_mod <br/>Looking for deps of module ide-disk<br/>Looking for deps of module dm-mem-cache<br/>Looking for deps of module dm-region_hash: dm-mod dm-log <br/>Looking for deps of module dm-mod<br/>Looking for deps of module dm-log: dm-mod <br/>Looking for deps of module dm-message<br/>Looking for deps of module dm-raid45: dm-message dm-mod dm-mem-cache dm-log dm-region_hash <br/>Looking for deps of module ext4: crc16 jbd2 <br/>Looking for deps of module crc16<br/>Looking for deps of module jbd2<br/>Using modules:&nbsp;&nbsp;/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ehci-hcd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ohci-hcd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/uhci-hcd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd/jbd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext3/ext3.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/scsi_mod.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/sd_mod.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/libata.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/ata_piix.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/storage/usb-storage.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mem-cache.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mod.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-log.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-region_hash.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-message.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-raid45.ko /lib/modules/2.6.18-164.15.1.el5/kernel/lib/crc16.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd2/jbd2.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext4/ext4.ko<br/>/sbin/nash -> /tmp/initrd.qO3680/bin/nash<br/>/sbin/insmod.static -> /tmp/initrd.qO3680/bin/insmod<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ehci-hcd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ehci-hcd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ohci-hcd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ohci-hcd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/uhci-hcd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/uhci-hcd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd/jbd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/jbd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext3/ext3.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ext3.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/scsi_mod.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/scsi_mod.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/sd_mod.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/sd_mod.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/libata.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/libata.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/ata_piix.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ata_piix.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/storage/usb-storage.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/usb-storage.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mem-cache.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-mem-cache.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mod.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-mod.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-log.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-log.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-region_hash.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-region_hash.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-message.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-message.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-raid45.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-raid45.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/lib/crc16.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/crc16.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd2/jbd2.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/jbd2.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext4/ext4.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ext4.ko' [elf64-x86-64]<br/>/sbin/dmraid.static -> /tmp/initrd.qO3680/bin/dmraid<br/>/sbin/kpartx.static -> /tmp/initrd.qO3680/bin/kpartx<br/>Adding module ehci-hcd<br/>Adding module ohci-hcd<br/>Adding module uhci-hcd<br/>Adding module jbd<br/>Adding module ext3<br/>Adding module scsi_mod<br/>Adding module sd_mod<br/>Adding module libata<br/>Adding module ata_piix<br/>Adding module usb-storage<br/>Adding module dm-mem-cache<br/>Adding module dm-mod<br/>Adding module dm-log<br/>Adding module dm-region_hash<br/>Adding module dm-message<br/>Adding module dm-raid45<br/>Adding module crc16<br/>Adding module jbd2<br/><span style="color: #FF0000;">Adding module ext4</span><br/></div></div><br/><br/>重启<br/>[root@USER-SERVER ~]# reboot<br/><br/><strong>三、格式转换</strong><br/>[root@USER-SERVER ~]# umount&nbsp;&nbsp;/dev/sda5<br/>[root@USER-SERVER ~]# tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize /dev/sda5<br/><div class="quote"><div class="quote-content"><br/>tune2fs 1.41.12 (17-May-2010)<br/>Please run e2fsck on the filesystem.<br/></div></div><br/><br/><strong>四、修改转换文件系统错误并挂载</strong><br/>[root@USER-SERVER ~]# e2fsck -fDC0 /dev/sda5 -y<br/>[root@USER-SERVER ~]# mount -t ext4 /dev/sda5 /www<br/><br/><strong>五、修改文件系统信息<span style="color: #FF0000;">(重要！否则重启后会还原为ext3)</span></strong><br/>将<br/>LABEL=/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2<br/>修改为<br/>LABEL=/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext4&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2<br/>[root@USER-SERVER ~]# vi /etc/fstab<br/><div class="quote"><div class="quote-content"><br/>oot@USER-SERVER ~]# vi /etc/fstab<br/>LABEL=/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 1<br/><span style="color: #FF0000;">LABEL=/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext4&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2</span><br/>LABEL=/boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/shm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/>devpts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/dev/pts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devpts&nbsp;&nbsp;gid=5,mode=620&nbsp;&nbsp;0 0<br/>sysfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /sys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/>proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/>LABEL=SWAP-sda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/></div></div><br/><br/><strong>六、升级后状态</strong><br/>ext4的特征全激活了：）<br/>#[root@USER-SERVER ~]# tune2fs -l /dev/sda5 &#124; grep extent<br/><div class="quote"><div class="quote-content"><br/>Filesystem features:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has_journal resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize<br/></div></div><br/>[root@USER-SERVER ~]# df -T<br/><div class="quote"><div class="quote-content"><br/>Filesystem&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp; 1K-blocks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used Available Use% Mounted on<br/>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;20315844&nbsp;&nbsp; 2310764&nbsp;&nbsp;16956440&nbsp;&nbsp;12% /<br/>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;194442&nbsp;&nbsp;&nbsp;&nbsp; 20563&nbsp;&nbsp;&nbsp;&nbsp;163840&nbsp;&nbsp;12% /boot<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfs&nbsp;&nbsp;&nbsp;&nbsp; 1029672&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 1029672&nbsp;&nbsp; 0% /dev/shm<br/><span style="color: #FF0000;">/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp; ext4&nbsp;&nbsp; 129863460&nbsp;&nbsp;&nbsp;&nbsp;192192 122968152&nbsp;&nbsp; 1% /www</span><br/></div></div><br/><br/>参考文献<br/><a href="http://fedorasolved.org/Members/rasker/converting-an-ext3-root-partition-to-ext4-in-fedora-10" target="_blank">http://fedorasolved.org/Members/rasker/converting-an-ext3-root-partition-to-ext4-in-fedora-10</a><br/><a href="http://kernelnewbies.org/Ext4#head-3891522e0601162aab24c73c1f148a1e28c6a9d4" target="_blank">http://kernelnewbies.org/Ext4#head-3891522e0601162aab24c73c1f148a1e28c6a9d4</a><br/>Tags - <a href="http://blog.liuts.com/tags/ext4/" rel="tag">ext4</a> , <a href="http://blog.liuts.com/tags/%25E5%258D%2587%25E7%25BA%25A7/" rel="tag">升级</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/210/</link>
<title><![CDATA[SDR1.0(SHELL+Dialog+RSA)Linux主机管理[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Mon, 02 Aug 2010 03:27:37 +0000</pubDate> 
<guid>http://blog.liuts.com/post/210/</guid> 
<description>
<![CDATA[ 
	<strong>前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;07年上线的一个Linux集中式管理，基于bash shell+Dialog+mysql+python+mod_perl来实现，现在共享出来，希望平台的思想及实现方法能够给大家一些帮助，以下为系统的说明文档。<br/><br/><strong>一、开发目的</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了使管理Linux服务器群变得更安全、简单、高效、智能。一定程度上缩小了维护成本，提高工作效率，做好应付将来管理上千台Linux服务器打好基础。<br/><br/><strong>二、背景</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前管理Linux服务器的方式还是走SSH到终端的管理方式，此方式存在一定的全安隐患。管理这些服务器的passwd就很头疼，稍微不注意，passwd会被黑客获取，造成灾难性的后果。管理应用方面，同样也是通过管理员电脑到每台服务器去操作，同样的一个操作就得到每台服务器上面重复地去做，消耗了很多时间与精力。在服务器性能监控方面，目前在应用Cacti、nagios平台，全此方式让管理员很被动，一般都是等到故障发生了才发现问题，影响了用户体验。主要原因是不能提前了解到服务器的健康状态。没有实时的跟踪、报警、分析机制。以后服务器会翻倍地增加，目前这种管理方式很明显已经不适应发展的需求。<br/><br/><strong>三、系统特点</strong><br/><span style="color: #008000;">安全性</span>-管理系统具有很好的安全性，通过2048位RSA密钥进行监控服务器与被监控服务器的认证，可以省去输入繁琐和易泄露的密码。系统管理员只要对主监控服务器做好安全配置并保管好私钥即可，被监控服务器外网远程终端默认将会被关闭，系统会定期扫描被监控服务器内/外网安全情况，生成分析结果给管理员。系统管理员可以定期更换公钥、私钥来提高安全系数。登录监控平台需要密码(perl pack加密)认证，每个操作窗口都加入会话认证，整个系统编译后的文件都是以二进制方式存放。<br/><br/><span style="color: #008000;">智能化</span>-监控服务器会根据被监控服务器上的应用部署相应的代理客户端，由代理客户端来检查、监控、分析本服务器的状态，分析结果将通过邮件、WEB、短信通知给系统管理员。让管理员不间隔了解到服务器的状态信息，代理客户端同时也具备管理本服务器应用的权力，当应用发生故障时它会自我修复并通知管理员。<br/><br/><span style="color: #008000;">易用性</span>-系统是基于Linux shell模式下的对话框展示，中文环境，同时也支持鼠标操作，功能清晰明了，操作时系统也会提示相应的文字提示，非常简单。<br/><br/><span style="color: #008000;">高效率</span>-新上架的服务器只要进行如下三步即可上线提供服务，即添加服务器->初始化->部署应用。如果要在多台服务器上进行一样的操作，只要选择好操作事件跟操作对象就可以了。<br/><br/><span style="color: #008000;">灵活性</span>-升级被监控服务器上的对象很方便，只要在监控服务器上更新好相应对象代码，系统会自动到被监控服务器上去更新它们。<br/><br/><span style="color: #008000;">可扩展性</span>-系统提供的高级应用功能，其它同事也可以编写自己的模块，根据不同应用可以定制不同的功能模块，系统提供这样的接口。<br/><br/><strong>4、系统网络架构图</strong><br/><a href="http://blog.liuts.com/attachment.php?fid=152" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=152" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>5、系统流程图</strong><br/><a href="http://blog.liuts.com/attachment.php?fid=155" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=155" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>6、系统主界面</strong><br/><a href="http://blog.liuts.com/attachment.php?fid=154" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=154" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>四、系统主要功能</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDR1.0是基于Linux bash shell+mysql+python+mod_perl工具开发，功能覆盖了Linux常用常用操作，下面详细介绍系统主要功能：<br/>1、系统目录结构<br/>/<br/>│&nbsp;&nbsp;add_firewall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加防火墙<br/>│&nbsp;&nbsp;add_server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加服务器<br/>│&nbsp;&nbsp;add_app&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部署应用<br/>│&nbsp;&nbsp;add_agent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部署代理<br/>│&nbsp;&nbsp;authorized_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公钥<br/>│&nbsp;&nbsp;checkonline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录验证<br/>│&nbsp;&nbsp;config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配制文件<br/>│&nbsp;&nbsp;c_server_class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;多选服务器列表<br/>│&nbsp;&nbsp;go&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录<br/>│&nbsp;&nbsp;identity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;私钥<br/>│&nbsp;&nbsp;list_server_do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择服务器<br/>│&nbsp;&nbsp;list_server_info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器信息<br/>│&nbsp;&nbsp;main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;功能选择<br/>│&nbsp;&nbsp;msgbox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提示信息<br/>│&nbsp;&nbsp;r_server_class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单选服务器<br/>├─tyapp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用安装脚本<br/>│<br/>├─bin<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nohup.out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfile<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syslog2mysql.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syslogs to mysql shell<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TyserverScan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器端口扫描(外网)<br/>│<br/>├─cron<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TyserverwebScan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验证WEB状态主程序<br/>│<br/>├─document<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开发文档<br/>│<br/>├─key<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;identitybak&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old key<br/>│<br/>├─logs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统操作日志目录<br/>├─tyagent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;代理程序目录<br/>└─tysysadmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前端cgi-bin目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;├─cgi-bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.pl<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index.cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模块入口程序<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendmail.cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;邮件报警接口<br/>&nbsp;&nbsp;&nbsp;&nbsp;│<br/>&nbsp;&nbsp;&nbsp;&nbsp;├─css<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.CSS<br/>&nbsp;&nbsp;&nbsp;&nbsp;│<br/>&nbsp;&nbsp;&nbsp;&nbsp;├─js<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyright.js<br/>&nbsp;&nbsp;&nbsp;&nbsp;│<br/>&nbsp;&nbsp;&nbsp;&nbsp;└─modules<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─Apache<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerLoglist.pm&nbsp;&nbsp;服务器日志列表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerScanport.pm&nbsp;&nbsp;服务器端口扫描<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerScanweb.pm&nbsp;&nbsp;服务器状态扫描<br/><br/><strong>五、功能介绍</strong><br/><span style="color: #00008B;">5.1服务器列表</span><br/>[功能]列表显示已添加至系统的服务器及其状态。<br/>[操作方法]选择添加服务器->选择服务器分类->列表出此类别服务器信息，包括LAN IP、WAN IP、日志客户端、SSH终端、防火墙、部署代理等等信息。<br/><br/><span style="color: #00008B;">5.2添加服务器</span><br/>[功能]添加服务器到系统。<br/>[操作方法]选择添加服务器->选择服务器分类->输入服务器名称、内网IP、外网IP，上下方向键切换输入框，这几项都不允许为空，输入完毕后点[Add]。<br/><br/><span style="color: #00008B;">5.3安全检测</span><br/>[功能]扫描服务器内网端口开放情况。<br/>[操作方法]选择安全检测->选择服务器分类->选择服务器->显示扫描进度条并将结果写入数据库。<br/><span style="color: #00008B;">5.4部署代理</span><br/>[功能]给服务器部署代理。<br/>[操作方法]选择部署代理->选择服务器分类->选择服务器->选择代理类型->[OK]。<br/><br/><span style="color: #00008B;">5.5连接状态</span><br/>[功能]查看已添加的被监控服务器与主监控服务器的连接状态，在做其它操作之前查看此项是一个好习惯。<br/>[操作方法]选择连接状态->显示探测进度条->生成结果。<br/><br/><span style="color: #00008B;">5.6更换证书</span><br/>[功能]更新主、被监控服务器的私、公钥，为了保障整个安全，定期更换证书是很有必要的。<br/>[操作方法]选择更换证->显示探测进度条。<br/><br/><span style="color: #00008B;">5.7管理终端</span><br/>[功能]开/关远程访问被监控服务器SSH终端。<br/>[操作方法] 选择管理终终->选择服务器分类->选择服务器->（开/关）->[OK]。<br/><br/><span style="color: #00008B;">5.8操作日志</span><br/>[功能]查看系统操作日志，方便查看历史操作记录。<br/>[操作方法]选择操作日志->选择日期(TAB切换年/月/日，方向键选择日)->显示操作日志记录。<br/><br/><span style="color: #00008B;">5.9部署日志</span><br/>[功能]添加被监控服务器系统日志到日志服务器，实时观察其状态。<br/>[操作方法] 选择部署日志->选择服务器分类->选择服务器(显示未添加的服务器列表) ->[OK]。<br/><br/><span style="color: #00008B;">6.0部署应用</span><br/>[功能]给服务器部署应用。<br/>[操作方法]选择部署应用->选择服务器分类->选择服务器->选择应用类型->[OK]。<br/><br/><span style="color: #00008B;">6.1部署防火墙</span><br/>[功能]给服务器部署防火墙(Firewall)。<br/>[操作方法]选择部署应用->选择服务器分类->选择服务器->选择防火墙类型->[OK]。<br/><br/><span style="color: #00008B;">6.2初始化</span><br/>[功能]初始化服务器，优化系统内核、删除无用用户、停止无用服务等等。<br/>[操作方法]选择初始化->选择服务器分类->选择服务器-> [OK]。<br/><br/><span style="color: #00008B;">6.3高级应用</span><br/>[功能]本系统扩展的一个接口。<br/>[操作方法]选择高级应用->进入命令行状态->运行相应接口(参数)。<br/><br/><span style="color: #00008B;">6.4用户管理</span><br/>[功能]本系统用户帐号管理。<br/>[操作方法]选择用户管理->开发中…。<br/><br/><span style="color: #00008B;">6.5退出文字</span><br/>[功能]退出本系统。<br/>[操作方法]选择退出->操作结束。<br/><br/><strong>六、截图说明</strong><br/><a href="http://blog.liuts.com/attachment.php?fid=151" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=151" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[应用分类]<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=150" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=150" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[服务器清单]<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=149" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=149" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[添加服务器]<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=145" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=145" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[安装应用平台]<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=146" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=146" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[操作日志]<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=147" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=147" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[安装功能代理]<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=148" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=148" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[安全扫描]<br/><br/><strong>七、使用指南</strong><br/>1、通过ssh登录监控管理器。<br/>2、[root@sysadmin ~]#go<br/>3、输入管理员密码：<br/>4、验证通过进入管理窗口。<br/><br/><strong>八、前端应用</strong><br/>1、定制作业<br/><textarea name="code" class="c" rows="15" cols="100">
* */1 * * * /var/www/tyAdmin/cron/TyserverwebScan
30 0 * * * /var/www/tyAdmin/cron/TyserverScan
</textarea><br/>2、配置<br/>将ServerLoglist.pm、ServerScanport.pm、ServerScanweb.pm复制到/opt/apache/perl/modules/Apache目录<br/>#vi httpd.conf<br/><textarea name="code" class="c" rows="15" cols="100">
<VirtualHost 192.168.100.10:80>
 ServerName cgi.sina.com.cn
 ServerAdmin liutiansi@gmail.com
 ErrorLog /var/log/apache/cgi.sina.com.cn/error.log
 CustomLog /var/log/apache/cgi.sina.com.cn/access.log combined
 DocumentRoot /var/www/tysysadmin
 ScriptAlias /cgi-bin/ "/var/www/tysysadmin/cgi-bin/"

 <Directory "/var/www/tysysadmin/cgi-bin">
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlResponseHandler ModPerl::Registry
&nbsp;&nbsp;PerlOptions +ParseHeaders
&nbsp;&nbsp;PerlSendHeader On
&nbsp;&nbsp;Options +ExecCGI
&nbsp;&nbsp;Order Deny,Allow
&nbsp;&nbsp;Deny from all
&nbsp;&nbsp;Allow from 192.168.100.0/255.255.255.0
 </Directory>

 <Directory "/opt/apache/perl/modules/Apache">
&nbsp;&nbsp;Order Deny,Allow
&nbsp;&nbsp;Deny from all
&nbsp;&nbsp;Allow from 192.168.100.0/255.255.255.0
 </Directory>

PerlRequire /var/www/tysysadmin/cgi-bin/index.cgi
 <Location /ServerLoglist>
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlHandler Apache::ServerLoglist
 </Location>

 <Location /ServerScanport>
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlHandler Apache::ServerScanport
 </Location>

 <Location /ServerScanweb>
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlHandler Apache::ServerScanweb
 </Location>
</VirtualHost>
</textarea><br/><br/>3、服务器日志时时跟踪<br/>http://192.168.100.10/ServerLoglist<br/><br/>4、服务器端口扫描<br/>http://192.168.100.10/ServerScanport<br/><br/>5、服务器WEB状态监控<br/>http://192.168.100.10/ServerScanweb<br/><br/><strong>九、安装</strong><br/>1、tar -zxvf SDR1.0.tar.gz<br/>2、cd SDR1.0<br/>3、vi config 修改成实际参数<br/><textarea name="code" class="c" rows="15" cols="100">
sysadmin_path="/home/SDR1.0"
mysql_bin="/usr/local/mysql/bin/mysql"&nbsp;&nbsp;&nbsp;&nbsp; #mysql客户端连接器位置
mysql_host="localhost"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#数据库主机
mysql_user="systemuser"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #数据库帐号
mysql_passwd="123456"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #数据库密码
scan_port="U:53,161,T:21-25,80,81,3306,8080"&nbsp;&nbsp;&nbsp;&nbsp;#安全扫描端口
ConnectTimeout="5"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#连接远程服务器outime
system_info="天涯Linux服务器管理系统SDR1.0"
copyright_info="&#92;Zb&#92;Z7天涯在线网络有限公司 网络系统部&nbsp;&nbsp; 作者：刘天斯&nbsp;&nbsp;&nbsp;&nbsp;邮箱：lliutiansi@gmail.com"
</textarea><br/><br/>4、创建Mysql数据库"sysadmin"，并导入SDR1.0/sql/sysadmin.sql<br/>5、修改系统环境<br/>&nbsp;&nbsp;5.1环境变量：vi /etc/profile<br/><div class="quote"><div class="quote-content"><br/>export PATH=$PATH:/usr/local/bin:/home/SDR1.0<br/></div></div><br/>&nbsp;&nbsp;5.2配置ssh链接<br/><div class="quote"><div class="quote-content"><br/>ln -s /usr/bin/ssh /usr/bin/sshto<br/></div></div><br/>&nbsp;&nbsp;5.3、修改mysql客户端编码<br/>&nbsp;&nbsp;vi /etc/my.cnf<br/><div class="quote"><div class="quote-content"><br/>[client]<br/> default-character-set=utf8<br/></div></div><br/><br/>6、安装nmap<br/>yum -y install nmap<br/><br/>7、生成公私钥<br/><div class="quote"><div class="quote-content"><br/>#cd /home/SDR1.0<br/>删除原公私钥<br/>#rm -rf authorized_keys identity<br/>#ssh-keygen -t dsa -b 2048 -f identity<br/>#mv identity.pub authorized_keys<br/>#chmod 600 identity authorized_keys<br/></div></div><br/>8、因修改了环境变量，退出终端exit再登录操作系统，进入/home/SDR1.0，运行"go"，默认密码为“123456”。OVER：）<br/><br/><strong>十、开发变量说明</strong><br/><textarea name="code" class="c" rows="15" cols="100">
1、go[$go_encrypt][服务器加密后的密码][全局]
2、go[$outmessage][密码不正确提示变量][全局(关闭窗口后失效)]
3、checkonline[$outmessage][检查是否登录][全局]
4、当前进程PID：main[$main_pid][登录进程号][全局]
5、选择当前功能值：main[$main_value][功能ID号][全局]
6、选择当前服务器类别值：c_server_class[$server_class_value][服务器列表][全局]
7、选择当前服务器类别值：r_server_class[$server_class_value][服务器列表][全局]
8、选择当前服务器值：$server_value [服务器内网IP][全局]
＃------------------------------------------------------------
*全局:对下级窗口有效，生命期为主窗口关闭。
</textarea><br/><strong>十一、处理模块代码</strong><br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/sh
#Function:select checklist server
#Writer:liutiansi
#Mail:lliutiansi@gmail.com
#Date:2007-11-03 23:57
source config
source checkonline

list_server_do_tempfile=`list_server_do_tempfile 2>/dev/null` &#124;&#124; list_server_do_tempfile=/tmp/server$main_pid
trap "rm -f $list_server_do_tempfile /tmp/add_firewall$main_pid /tmp/add_agent$main_pid /tmp/add_app$main_pid" 0 1 2 5 15
#过滤服务器列表
case $main_value in
&nbsp;&nbsp;9)
&nbsp;&nbsp;&nbsp;&nbsp;sqltj=" and TOLOG='N'"
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;16)
&nbsp;&nbsp;&nbsp;&nbsp;sqltj=" and TOFIREWALL='N'"
&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
esac
list_server_do_result=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVER,SERVERIP,SERVERNAME,TOLOG,TOLD,TOFIREWALL from sysadmin.ty_server where SERVERCLASS='$server_class_value'$sqltj order by SERVER;" &#124; awk 'NR>1 &#123;print NR,$0&#125;'&#124;awk '&#123;print $2" "$3"　日志["$5"]　终端["$6"]　防火墙["$7"] "$4&#125;'`
list_server_do_result1=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVICENAME from sysadmin.ty_system_service where ID='$main_value';" &#124; awk 'NR>1 &#123;print NR,$0&#125;'&#124;awk '&#123;print $2&#125;'`"->"
returncode=0
while test $returncode != 1 && test $returncode != 250
do
&nbsp;&nbsp;exec 3>&1
&nbsp;&nbsp;dialog --clear --colors --backtitle "$copyright_info" --title "$system_info" &#92;
&nbsp;&nbsp;--checklist "&#92;n&#92;n$list_server_do_result1选择服务器：" 25 70 14 &#92;
&nbsp;&nbsp;$list_server_do_result &#92;
&nbsp;&nbsp;2>$list_server_do_tempfile 

&nbsp;&nbsp;returncode=$?
&nbsp;&nbsp;
&nbsp;&nbsp;#对returncode值进行选择分支;
&nbsp;&nbsp;case $returncode in
&nbsp;&nbsp;#0为点击[OK]按钮；
&nbsp;&nbsp;0)
&nbsp;&nbsp;&nbsp;&nbsp;server_value=`cat $list_server_do_tempfile`
&nbsp;&nbsp;&nbsp;&nbsp;export server_value
&nbsp;&nbsp;&nbsp;&nbsp;#对功能ID进行选择
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;counter=`echo "$server_value"&#124;awk '&#123;print NF&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;Gap=`expr 100 / $counter`
&nbsp;&nbsp;&nbsp;&nbsp;num=0
&nbsp;&nbsp;&nbsp;&nbsp;case $main_value in
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;###########################################安全扫描########################################
&nbsp;&nbsp;&nbsp;&nbsp;3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#通过nmap扫描服务器端口；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=`nmap -p $scan_port $vlist&#124;awk 'NR==5,NR==12&#123;print $1"状态："$2&#125;' 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#将扫描结果入库；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set SCANPORT='$result' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result_up_str="[√]ok:$vlist扫描结果$result已成功入库！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist扫描结果$result入库失败！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在扫描$vlist...&#92;n-------------------------------------------------&#92;n$result"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　开始扫描......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;

&nbsp;&nbsp;&nbsp;&nbsp;##########################################部署代理########################################
&nbsp;&nbsp;&nbsp;&nbsp;4)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#调用代理选择对话框；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_agent
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取选择代理的标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agent_value=`cat /tmp/add_agent$main_pid`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#无选择与取消处理；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;[ "$agent_value" != "" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$agent_value" == "0" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#进度表显示运行状态；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第num列以空格分隔的字符(服务器)；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#循环代理个数；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for agentkey in $agent_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agentkey=`echo "$agentkey"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#获取代理crontab类型；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGENTCRONTAB=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select AGENTCRONTAB from sysadmin.ty_server_agent where AGENTNAME='$agentkey';" &#124; awk 'NR>1 &#123;print NR,$0&#125;'&#124;cut -b 3-100`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#创建代理目录；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_check_conn=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_check_conn -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#传输代理文件到客户端服务器；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyagent/$agentkey root@$vlist:/home/tyagent 1>&3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_do=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_do -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#非crontab运行；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$AGENTCRONTAB" == "1" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local &#124; grep $agentkey;&nbsp;&nbsp;then echo '0'; else echo &#92;"/home/tyagent/$agentkey&#92;" >> /etc/rc.local;fi;" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " crontab -l > /home/tyagent/cron.tmp;if sed -n '1,100p' /home/tyagent/cron.tmp &#124; grep $agentkey;&nbsp;&nbsp;then echo '0'; else echo &#92;"$AGENTCRONTAB&#92;" >> /home/tyagent/cron.tmp;fi;crontab /home/tyagent/cron.tmp" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更新服务器字段代理标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TO$agentkey='Y' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署代理$agentkey成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署代理$agentkey成功，但更新数据库失败！($result_up)"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:连接远程主机$vlist失败！"&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在$vlist主机部署$agentkey代理。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署代理：$agentkey失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#循环结束；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;

&nbsp;&nbsp;&nbsp;&nbsp;##########################################远程终端########################################
&nbsp;&nbsp;&nbsp;&nbsp;7)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#检查远程服务器/etc/iptables.sh有无包含192.168.100.0/24 22关键字来判断是否开通远程ssh；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "if sed -ne '/192.168.100.0/&#123;/22/p&#125;' /etc/iptables.sh&#124;grep 192.168.100.0&#124;grep 22; then echo 1; fi; " 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $? -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -n "$result" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLD="N"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLDstr="关闭"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "sed -i '/192.168.100.0/&#123;/22/d&#125;' /etc/iptables.sh;/etc/iptables.sh" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLD="Y"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLDstr="打开"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo &#92;"iptables -A INPUT -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT&#92;" >> /etc/iptables.sh;/etc/iptables.sh" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更新服务器标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLD='$TOLD' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist服务器已$TOLDstr远程终端！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist开/关远程终端，更新数据库失败！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在部署$vlist...&#92;n&#92;n$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist开/关远程终端失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;##########################################部署日志########################################
&nbsp;&nbsp;&nbsp;&nbsp;9)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写客户端服务器/etc/syslog.conf文件；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo &#92;"*.notice;cron.none;authpriv.* @syslog.com.cn&#92;" >> /etc/syslog.conf;/etc/init.d/syslog restart" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_do=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_do -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更新服务器标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLOG='Y' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署日志客户端成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署日志客户端成功，但更新数据库失败！"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署日志客户端失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在部署$vlist...&#92;n&#92;n$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;

##########################################部署应用########################################
&nbsp;&nbsp;&nbsp;&nbsp;10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#调用应用选择对话框；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_app
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取选择firewall的标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app_value=`cat /tmp/add_app$main_pid`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#无选择与取消处理；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;[ "$app_value" != "" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$app_value" == "0" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#进度表显示运行状态；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while [ $PCT -le 100 ]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第num列以空格分隔的字符(服务器)；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#创建应用目录；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent/$app_value" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_check_conn=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_check_conn -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyapp/$app_value root@$vlist:/home/tyagent/$app_value/$app_value 1>&3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " /home/tyagent/$app_value/$app_value "
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ $? -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署应用：$app_value成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署应用：$app_value失败！"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "$result_up_str..................................................................[$PCT%]"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署应用：$app_value失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;##########################################部署防火墙########################################
&nbsp;&nbsp;&nbsp;&nbsp;11)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#调用firewall选择对话框；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_firewall
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取选择firewall的标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firewall_value=`cat /tmp/add_firewall$main_pid`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#无选择与取消处理；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;[ "$firewall_value" != "" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$firewall_value" == "0" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#进度表显示运行状态；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第num列以空格分隔的字符(服务器)；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/firewall/$firewall_value root@$vlist:/etc/iptables.sh 1>&3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_do=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_do -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local &#124; grep iptables.sh;&nbsp;&nbsp;then echo '0'; else echo &#92;"/etc/iptables.sh&#92;" >> /etc/rc.local;fi;chmod u+x /etc/iptables.sh;/etc/iptables.sh" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOFIREWALL='Y' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署Firewall成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署Firewall成功，但更新数据库失败！"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署Firewall失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在部署$vlist...&#92;n&#92;n$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;esac
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;#*为点击[Cancel]按钮或其它中断。
&nbsp;&nbsp;*)
&nbsp;&nbsp;&nbsp;&nbsp;dialog &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --clear &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --title "$system_info" &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --yesno "&#92;n&#92;n确定要取消操作吗？" 10 30
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case $? in
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returncode=99
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;
&nbsp;&nbsp;&nbsp;&nbsp;esac
&nbsp;&nbsp;;;
&nbsp;&nbsp;esac
done
</textarea><br/><br/><a href="attachment.php?fid=156">点击这里下载文件</a><br/><br/>Tags - <a href="http://blog.liuts.com/tags/sdr1.0/" rel="tag">sdr1.0</a> , <a href="http://blog.liuts.com/tags/linux%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8%25E7%25AE%25A1%25E7%2590%2586/" rel="tag">linux服务器管理</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/209/</link>
<title><![CDATA[LAMP+logzilla2.9.9+syslog-ng实现集中日志管理(第二版)[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sat, 24 Jul 2010 06:28:52 +0000</pubDate> 
<guid>http://blog.liuts.com/post/209/</guid> 
<description>
<![CDATA[ 
	<strong>一、前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么要引入第二版？由于<a href="http://blog.liuts.com/post/207/" target="_blank">第一版</a>是基于Logzilla3.0，作者在Logzilla3.0以后做了licensed限制，可以从作者回复邮件的内容得到证实[图1]。因此需要定期去更新license.txt来达到延长使用期限的目的，个人感觉比较麻烦，同时还有主机及日志数的限制，这也是整理第二版的原因，当然，你也可以通过以下途径获取免费、无限制的licensed，见<a href="http://forum.logzilla.info/index.php?topic=214.0" target="_blank">How to get a free, unlimited, license of LogZilla</a>。但这不是本文所要讨论的话题：），第二版中本人采用logzilla2.9.9版来搭建一个免费、无限制的日志集中管理平台，功能上与3.0差异不大，好了，废话少说，我们开始吧！<br/><div align=center>[图1]</div><br/><a href="http://blog.liuts.com/attachment.php?fid=143" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=143" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>平台截图</strong><br/><a href="http://blog.liuts.com/attachment.php?fid=141" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=141" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://blog.liuts.com/attachment.php?fid=142" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=142" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>二、平台初始化</strong><br/>部署LAMP平台(略)<br/><div class="quote"><div class="quote-content"><br/>#yum install libdbi* libnet<br/>#cpan Date::Calc Text::LevenshteinXS String::CRC32<br/>#cpan -i Digest::SHA1<br/>#cpan -i Net::MySQL<br/></div></div><br/><strong>三、下载相关包</strong><br/><div class="quote"><div class="quote-content"><br/>#cd /home/install<br/>#mkdir logzilla;cd logzilla<br/>#wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.9.tar.gz<br/>#wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.0.3/setups/rhel-5-i386/syslog-ng-3.0.3-1.rhel5.i386.rpm<br/></div></div><br/><strong>四、开始安装</strong><br/><div class="quote"><div class="quote-content"><br/># cp eventlog_0.2.9.tar.gz /usr/src/redhat/SOURCES/<br/># tar zxvf&nbsp;&nbsp;eventlog_0.2.9.tar.gz<br/># cd eventlog-0.2.9/<br/># rpmbuild --ba eventlog.spec.bb<br/># cd /usr/src/redhat/RPMS/x86_64<br/># rpm -Uvh libevtlog*<br/><br/>#cd /home/install/logzilla<br/>#rpm -Uvh syslog-ng-3.0.3-1.rhel5.i386.rpm<br/></div></div><br/><strong>五、安装logzilla</strong><br/><div class="quote"><div class="quote-content"><br/>#cd /www/webroot/<br/>#wget http://php-syslog-ng.googlecode.com/files/logzilla_v2.9.9o.tgz<br/>#tar xzvf logzilla_v2.9.9o.tgz<br/>#mkdir -p /var/log/logzilla<br/></div></div><br/><strong>六、配置Mysql</strong><br/><div class="quote"><div class="quote-content"><br/># mysql -u<username> -p<password><br/>mysql> SELECT @@event_scheduler;<br/>+-------------------+<br/>&#124; @@event_scheduler &#124;<br/>+-------------------+<br/>&#124; OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+-------------------+<br/>1 row in set (0.00 sec)<br/></div></div><br/><br/><span style="color: #FF0000;">低于Mysql5.1版本会提示如下，如不打算升级到logzilla3.0，没有关系，可以略过此步骤。</span><br/>mysql> SELECT @@event_scheduler;<br/>ERROR 1193 (HY000): Unknown system variable 'event_scheduler'<br/><br/>激活event_scheduler<br/><div class="quote"><div class="quote-content"><br/>mysql> SET GLOBAL event_scheduler = 1; <br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql> SELECT @@event_scheduler;<br/>+-------------------+<br/>&#124; @@event_scheduler &#124;<br/>+-------------------+<br/>&#124; ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br/>+-------------------+<br/>1 row in set (0.00 sec)<br/><br/>mysql> quit;<br/></div></div><br/><strong>七、修改Syslog-ng配置</strong><br/>#vi /opt/syslog-ng/etc/syslog-ng.conf<br/><textarea name="code" class="c" rows="15" cols="100">
@version: 3.0
source s_local &#123;
internal();
unix-stream("/dev/log");
file("/proc/kmsg" program_override("kernel: "));
&#125;;
source s_local &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;udp(ip(0.0.0.0) port(514));
&#125;;

# destinations
destination d_messages &#123; file("/var/log/messages"); &#125;;


###########################################################################################
# Clay's LogZilla config below
###########################################################################################
# Last updated on 2010-06-15
###########################################################################################
options &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long_hostnames(off);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# doesn't actually help on Solaris, log(3) truncates at 1024 chars
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_msg_size(8192);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# buffer just a little for performance
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# sync(1); <- Deprecated - use flush_lines() instead
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flush_lines(1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# memory is cheap, buffer messages unable to write (like to loghost)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_fifo_size(16384);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Hosts we don't want syslog from
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#bad_hostname("^(ctld.&#124;cmd&#124;tmd&#124;last)$");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The time to wait before a dead connection is reestablished (seconds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_reopen(10);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Use DNS so that our good names are used, not hostnames
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use_dns(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dns_cache(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Use the whole DNS name
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use_fqdn(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keep_hostname(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain_hostnames(no);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Read permission for everyone
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perm(0644);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The default action of syslog-ng 1.6.0 is to log a STATS line
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# to the file every 10 minutes.&nbsp;&nbsp;That's pretty ugly after a while.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Change it to every 12 hours so you get a nice daily update of
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# # how many messages syslog-ng missed (0).
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# stats(43200);
&#125;;

destination d_logzilla &#123;
&nbsp;&nbsp; program("/www/webroot/php-syslog-ng/scripts/db_insert.pl"
&nbsp;&nbsp; template("$HOST&#92;t$FACILITY&#92;t$PRIORITY&#92;t$LEVEL&#92;t$TAG&#92;t$YEAR-$MONTH-$DAY&#92;t$HOUR:$MIN:$SEC&#92;t$PROGRAM&#92;t$MSG&#92;n")
&nbsp;&nbsp; template_escape(yes)
&nbsp;&nbsp; );
&#125;;

# Tell syslog-ng to log to our new destination 
log &#123;
&nbsp;&nbsp; source(s_local);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destination(d_logzilla);
&#125;;
</textarea><br/><strong>八、修改apache配置</strong><br/>#vi httpd.conf<br/><textarea name="code" class="c" rows="15" cols="100">
<VirtualHost *:80>
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin liutiansi@gmail.com
&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot /www/webroot/php-syslog-ng/html/
&nbsp;&nbsp;&nbsp;&nbsp;ServerName syslog.com.cn
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/syslog.com.cn-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/syslog.com.cn-access_log common
# LogZilla
Alias /logs "/www/webroot/php-syslog-ng/html/"
<Directory "/www/webroot/php-syslog-ng/html/">
&nbsp;&nbsp;&nbsp;&nbsp;Options Indexes MultiViews FollowSymLinks
&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride All
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order allow,deny
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allow from all
</Directory>
</VirtualHost>
</textarea><br/>重启apache服务：/etc/init.d/apache2 restart<br/><br/><strong>九、修改php.ini</strong><br/>Vi /usr/local/php/lib/php.ini<br/><textarea name="code" class="c" rows="15" cols="100">
memory_limit = 128M
max_execution_time = 300
/etc/init.d/apache2 restart
</textarea><br/><strong>十、配置日志分隔</strong><br/>cp /www/webroot/php-syslog-ng/scripts/contrib/system_configs/logrotate.d /etc/logrotate.d/logzilla<br/><br/><strong>十一、添加作业</strong><br/><div class="quote"><div class="quote-content"><br/>@daily /usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log<br/>@daily /usr/bin/find /www/webroot/php-syslog-ng/html/jpcache/ -atime 1 -exec rm -f '&#123;&#125;' ';'<br/>0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log<br/></div></div><br/><strong>十二、开始平台安装</strong><br/># /etc/init.d/syslog-ng restart<br/>http://192.168.0.100/logs/来进行安装<br/>步骤如下：<br/><a href="http://nms.gdd.net/images/thumb/f/f7/Install001_pre-install-checklist.png/593px-Install001_pre-install-checklist.png" target="_blank"><img src="http://nms.gdd.net/images/thumb/f/f7/Install001_pre-install-checklist.png/593px-Install001_pre-install-checklist.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/1/16/Install002.png" target="_blank"><img src="http://nms.gdd.net/images/1/16/Install002.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/thumb/d/d9/Install003.png/509px-Install003.png" target="_blank"><img src="http://nms.gdd.net/images/thumb/d/d9/Install003.png/509px-Install003.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/6/6b/Install004.png" target="_blank"><img src="http://nms.gdd.net/images/6/6b/Install004.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/2/29/Install005.png" target="_blank"><img src="http://nms.gdd.net/images/2/29/Install005.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/4/4c/Install006.png" target="_blank"><img src="http://nms.gdd.net/images/4/4c/Install006.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/5/53/Install007.png" target="_blank"><img src="http://nms.gdd.net/images/5/53/Install007.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/a/ae/Install009.png" target="_blank"><img src="http://nms.gdd.net/images/a/ae/Install009.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/0/05/Install010.png" target="_blank"><img src="http://nms.gdd.net/images/0/05/Install010.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>十三、替换脚本路径</strong><br/><div class="quote"><div class="quote-content"><br/>cd /www/wewroot/php-syslog-ng/scripts<br/>./fixpaths.sh<br/></div></div><br/>或者直接用sed来修改<br/><div class="quote"><div class="quote-content"><br/>#sed -i -e "&#123; s@/path_to_logzilla@/www/webroot/php-syslog-ng@&#125;" *.*<br/></div></div><br/>＃/etc/init.d/syslog-ng restart<br/><br/><strong>十四、客户端配置</strong><br/>在最后添加以下，其中syslog.admin.com.cn为主机域名，也可以直接用IP代替。<br/>#vi /etc/syslog.conf<br/>*.emerg;*.err;*.warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @syslog.admin.com.cn<br/>#/etc/init.d/syslog restart<br/><br/>测试：logger -p local4.err "This is a local.err test message."<br/><br/><strong>十五、后续问题</strong><br/><span style="color: #8B0000;">问题一</span>、点击[Graph]时会提示“JpGraph Error Font file "/usr/share/fonts/truetype/msttcorefonts/verdana.ttf" is not readable or does not exist.”<br/>解决方法：<br/>mkdir -p /usr/share/fonts/truetype/msttcorefonts/<br/>上传windows XP/2003/vista/下的字体文件verdana.ttf到/usr/share/fonts/truetype/msttcorefonts/即可。<br/><br/><span style="color: #8B0000;">问题二</span>、logs表无数据，运行/www/webroot/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl<br/>提示：Cannot determine peer address at /usr/lib/perl5/site_perl/5.8.5/Net/MySQL.pm line 277 <br/><br/>解决方法：<br/>1、是logzilla2.9.9安装时一个bug，新建的mysql的syslogadmin、sysloguser用户权限没有成功赋予，手工添加上就OK了，感谢【杭州】FIGO提供的故障案例。<br/>2、如第1步不成功，尝试修改/www/webroot/php-syslog-ng/html/config/config.php文件mysql主机地址localhost为127.0.0.1。<br/><br/><span style="color: #8B0000;">问题三</span>、搜索缓存图表只显示两天的数据，最近三天没有数据？<br/>解决方法：<br/>由于search_cache表采用的是MEMORY存储引擎，有大小的限制，修改一下/etc/my.cnf，在[MYSQLD]添加：<br/>tmp_table_size=1G<br/>max_heap_table_size = 1G<br/>再重启mysql就可以了。<br/>效果图：<br/><a href="http://blog.liuts.com/attachment.php?fid=144" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=144" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>参考文献：<a href="http://nms.gdd.net/index.php/LogZilla_Installation_Guide" target="_blank">http://nms.gdd.net/index.php/LogZilla_Installation_Guide</a><br/>Tags - <a href="http://blog.liuts.com/tags/logzilla/" rel="tag">logzilla</a> , <a href="http://blog.liuts.com/tags/syslog/" rel="tag">syslog</a> , <a href="http://blog.liuts.com/tags/syslog-ng/" rel="tag">syslog-ng</a> , <a href="http://blog.liuts.com/tags/%25E6%2597%25A5%25E5%25BF%2597/" rel="tag">日志</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/208/</link>
<title><![CDATA[译文-Symbolic一个基于func集中式管理平台[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Func]]></category>
<pubDate>Fri, 23 Jul 2010 16:27:31 +0000</pubDate> 
<guid>http://blog.liuts.com/post/208/</guid> 
<description>
<![CDATA[ 
	<a href="http://www.opensymbolic.org/" target="_blank"><strong><u>Symbolic</u></strong></a>是一个开源的企业平台，旨在建立、配置和管理您的庞大分布式数据中心为目的开源框架，代表了目前最先进的数据中心解决方案的集中管理平台。<br/><br/><strong>特征</strong><br/>1、属于RedHat认证协议栈的应用<br/>2、具于func后端应用<br/>3、支持 RHEL、Centos及Fedora<br/>4、先进的拖放标签管理(Ajax)<br/>5、提供Cobbler支持<br/>6、灵活管理操作用户、主机<br/>7、组和权限管理标记<br/>8、先进的基于Web的Ajax接口<br/>9、支持LDAP，Kerberos和本地认证<br/>10、符合JEE标准<br/>11、完全可定制的业务<br/>12、灵活的管理用户和主机<br/>13、安全的SSL连接<br/>14、虚拟机管理<br/>15、可定制的插件支持<br/>16、执行各种语言编写的外部脚本（Python、Groovy、bashshell）<br/><br/><strong>平台截图</strong><br/><a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/operation-edit.preview.png" target="_blank"><img src="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/operation-edit.preview.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/cluster-manager.preview.png" target="_blank"><img src="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/cluster-manager.preview.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/cobbler-vm-2.png" target="_blank"><img src="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/cobbler-vm-2.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/user-adding-authority.preview.png" target="_blank"><img src="http://www.opensymbolic.org/sites/opensymbolic.org/files/images/user-adding-authority.preview.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>如何部署平台？</strong><br/>192.168.0.1 symbolic.example.com - Symbolic Machine (管理端)<br/>192.168.0.2 station1.example.com - Symbolic Client (被控端)<br/><br/><a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/docs/v1.2.1/html/images/tutorial.png" target="_blank"><img src="http://www.opensymbolic.org/sites/opensymbolic.org/files/docs/v1.2.1/html/images/tutorial.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>平台架构图<br/><br/>1、如没有内部DNS服务器，需要修改hosts<br/><div class="quote"><div class="quote-content"><br/>echo "127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp; localhost.localdomain&nbsp;&nbsp;&nbsp;&nbsp;localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" >&nbsp;&nbsp;/etc/hosts<br/>echo "192.168.0.1&nbsp;&nbsp; symbolic.example.com&nbsp;&nbsp;&nbsp;&nbsp; symbolic&nbsp;&nbsp; certmaster" >> /etc/hosts<br/>echo "192.168.0.2&nbsp;&nbsp; station1.example.com&nbsp;&nbsp;&nbsp;&nbsp; station1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " >> /etc/hosts<br/></div></div><br/>2、安装EPEL包<br/><div class="quote"><div class="quote-content"><br/>rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm<br/></div></div><br/>3、安装Certmaster and Func<br/><div class="quote"><div class="quote-content"><br/>yum install certmaster func smolt<br/></div></div><br/><span style="color: #FF0000;">注：也可参考<a href="http://blog.liuts.com/post/186/" target="_blank">源码安装方式</a></span><br/>4、启用端口，记得在防火墙开启以下端口<br/><div class="quote"><div class="quote-content"><br/>51235/TCP on symbolic.example.com<br/>51234/TCP on symbolic.example.com<br/>51234/TCP on station1.example.com<br/></div></div><br/>5、配置func日志分隔<br/>#vi /etc/logrotate.d/func_rotate<br/><div class="quote"><div class="quote-content"><br/>/var/log/func/audit.log &#123;<br/>&nbsp;&nbsp; missingok<br/>&nbsp;&nbsp; notifempty<br/>&nbsp;&nbsp; rotate 4<br/>&nbsp;&nbsp; weekly<br/>&nbsp;&nbsp; postrotate<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -f /var/lock/subsys/funcd ]; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/init.d/funcd condrestart<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp; endscript<br/>&#125;<br/><br/>/var/log/func/func.log &#123;<br/>&nbsp;&nbsp; missingok<br/>&nbsp;&nbsp; notifempty<br/>&nbsp;&nbsp; copytruncate<br/>&nbsp;&nbsp; rotate 4<br/>&nbsp;&nbsp; weekly<br/>&#125;<br/></div></div><br/><br/>6、配置Certmaster及func<br/><div class="quote"><div class="quote-content"><br/>#chkconfig certmaster on<br/>#service certmaster start<br/><br/>#chkconfig funcd on<br/>#service funcd start<br/></div></div><br/>7、查看被控端认证请求<br/><br/>certmaster-ca --list<br/><div class="quote"><div class="quote-content"><br/>[root@symbolic ~]# certmaster-ca --list<br/>symbolic.example.com<br/></div></div><br/>8、认证主机<br/><div class="quote"><div class="quote-content"><br/>#certmaster-ca --sign symbolic.example.com<br/></div></div><br/>9、下载并安装Symbolic<br/><div class="quote"><div class="quote-content"><br/>wget http://downloads.sourceforge.net/symbolic/symbolic-&#123;VERSION&#125;.noarch.rpm<br/>yum --nogpgcheck localinstall symbolic-&#123;VERSION&#125;.noarch.rpm<br/></div></div><br/>10、配置JAVA_HOME<br/><div class="quote"><div class="quote-content"><br/>#vi /etc/sysconfig/symbolic<br/>...<br/>JAVA_HOME="/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0"<br/>...<br/></div></div><br/>11、配置启用symbolic<br/><div class="quote"><div class="quote-content"><br/>#symbolic-setup<br/>#service symbolic start<br/>#chkconfig symbolic on<br/></div></div><br/>12、完毕，访问平台<br/>http://symbolic.example.com:8081/symbolic<br/>Username:&nbsp;&nbsp;&nbsp;&nbsp;root<br/>Password:&nbsp;&nbsp;&nbsp;&nbsp;pass<br/><br/><strong>如何添加主机？</strong><br/>1、安装EPEL包<br/><div class="quote"><div class="quote-content"><br/>rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm<br/></div></div><br/>2、安装Func与Smolt<br/><div class="quote"><div class="quote-content"><br/>yum install func smolt<br/></div></div><br/>3、配置hosts<br/><div class="quote"><div class="quote-content"><br/>echo "127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp; localhost.localdomain&nbsp;&nbsp;&nbsp;&nbsp;localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" >&nbsp;&nbsp;/etc/hosts<br/>echo "192.168.0.1&nbsp;&nbsp; symbolic.example.com&nbsp;&nbsp;&nbsp;&nbsp; symbolic&nbsp;&nbsp; certmaster" >> /etc/hosts<br/>echo "192.168.0.2&nbsp;&nbsp; station1.example.com&nbsp;&nbsp;&nbsp;&nbsp; station1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " >> /etc/hosts<br/></div></div><br/>4、配置客户端certmaster配置<br/>#vi /etc/certmaster/minion.conf<br/><div class="quote"><div class="quote-content"><br/># configuration for minions<br/>[main]<br/>certmaster = symbolic.example.com<br/>log_level = DEBUG<br/>cert_dir = /etc/pki/certmaster<br/></div></div><br/>5、启动func服务<br/><div class="quote"><div class="quote-content"><br/>chkconfig funcd on<br/>service funcd start<br/></div></div><br/>6、到服务器主进行认证，方法见部署平台第8点。在平台Admin → Reload Certs可以看到请求的主机清单。<br/><br/><strong>在线文档V1.5.0</strong><br/><a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/docs/v1.5.0/html/index.html" target="_blank">http://www.opensymbolic.org/sites/opensymbolic.org/files/docs/v1.5.0/html/index.html</a><br/><br/>译文：<a href="http://www.opensymbolic.org/sites/opensymbolic.org/files/docs/v1.2.1/html/Symbolic-Tutorial.html#Symbolic-Tutorial-Server_Configuration" target="_blank">http://www.opensymbolic.org/sites/opensymbolic.org/files/docs/v1.2.1/html/Symbolic-Tutorial.html#Symbolic-Tutorial-Server_Configuration</a><br/>Tags - <a href="http://blog.liuts.com/tags/symbolic/" rel="tag">symbolic</a> , <a href="http://blog.liuts.com/tags/func/" rel="tag">func</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/207/</link>
<title><![CDATA[LAMP+logzilla+sphinx+syslog-ng实现集中日志管理(第一版)[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 22 Jul 2010 09:32:23 +0000</pubDate> 
<guid>http://blog.liuts.com/post/207/</guid> 
<description>
<![CDATA[ 
	<strong>一、前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前查看系统日志比较被动，遇到系统不正常或故障时才会主动去检查服务器系统日志，这样一来不能及时了解系统的运行情况，因此部署Logzilla+sphine+syslog-ng来弥补这不足。以下为安装、部署平台详细步骤。(Logzilla是什么新东西？其实前身就是php-syslog-ng，引用作者的话“Php-syslog-ng is now known as LogZilla. Same owner, better code :-)”)<br/><br/><strong>二、平台初始化</strong><br/>#yum install libdbi* libnet<br/>#cpan Date::Calc Text::LevenshteinXS String::CRC32<br/><br/><strong>三、下载相关包</strong><br/>#cd /home/install<br/>#mkdir logzilla;cd logzilla<br/>#wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.9.tar.gz<br/>#wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.0.3/setups/rhel-5-i386/syslog-ng-3.0.3-1.rhel5.i386.rpm<br/><br/><strong>四、开始安装</strong><br/># cp eventlog_0.2.9.tar.gz /usr/src/redhat/SOURCES/<br/># tar zxvf&nbsp;&nbsp;eventlog_0.2.9.tar.gz<br/># cd eventlog-0.2.9/<br/># rpmbuild --ba eventlog.spec.bb<br/># cd /usr/src/redhat/RPMS/x86_64<br/># rpm -Uvh libevtlog*<br/><br/>#cd /home/install/logzilla<br/>#rpm -Uvh syslog-ng-3.0.3-1.rhel5.i386.rpm<br/><br/><strong>五、安装logzilla</strong><br/>#cd /www/webroot/<br/>#wget http://php-syslog-ng.googlecode.com/files/logzilla_3.0.85.tgz<br/>#tar -zxvf logzilla_3.0.85.tgz<br/>#cd logzilla/scripts<br/>#./install.pl<br/>(根据实际情况来回应就OK了)<br/><div class="quote"><div class="quote-content"><br/>===================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogZilla Installation<br/><br/>====================<br/><br/>Enter the MySQL root username [root]: <br/>Enter the password for root [mysql]: <br/>Database to install to [syslog]: <br/>Database table to install to [logs]: <br/>Enter the name of the MySQL server [127.0.0.1]: <br/>Enter the port of the MySQL server [3306]: <br/>Enter the name to create as the owner of the logs database [syslogadmin]: <br/>Enter the password for the syslogadmin user [syslogadmin]: <br/>Enter the name to create as the WEBSITE owner [admin]: <br/>Enter the password for admin [admin]: <br/>Enter your email address [cdukes@cdukes.com]: <br/>Enter a name for your website [The home of LogZilla]: <br/>Enter the base url for your site (include trailing slash) [/logs/]: /<br/>Where should log files be stored? [/var/log/logzilla]: <br/>How long should I keep old logs? (in days) [30]: <br/>========================================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path Updates<br/><br/>========================================<br/><br/>Getting ready to replace paths in all files with "/www/webroot/logzilla"<br/>Ok to continue? [y]: <br/>Updating file paths<br/>Modifying ../scripts/db_insert.pl<br/>Modifying ../scripts/contrib/system_configs/logzilla.crontab<br/>Modifying ../scripts/contrib/system_configs/syslog-ng.conf<br/>Modifying ../scripts/contrib/system_configs/logzilla.apache<br/>Modifying ../sphinx/indexer.sh<br/>Modifying ../sphinx/sphinx.conf<br/>Updating log paths<br/>Modifying ../scripts/contrib/system_configs/logzilla.crontab<br/>Modifying ../scripts/contrib/system_configs/logzilla.logrotate<br/><br/>====================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database Installation<br/><br/>====================<br/><br/>All data will be installed into the syslog database<br/>Ok to continue? [y]: <br/><br/><br/>====================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Config.php generation<br/><br/>====================<br/><br/><br/>Generating /www/webroot/logzilla/html/config/config.php<br/>Ok to continue? [y]: <br/><br/><br/>====================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System files<br/><br/>====================<br/><br/>Adding LogZilla logrotate.d file to /etc/logrotate.d<br/>Ok to continue? [y]: <br/>Where is your syslog-ng.conf file located? [/etc/syslog-ng/syslog-ng.conf]: /opt/syslog-ng/etc/syslog-ng.conf<br/>Adding syslog-ng configuration to /opt/syslog-ng/etc/syslog-ng.conf<br/>Ok to continue? [y]: <br/>Found 1 sources<br/>Which source definition would you like to use? [s_all]: <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogZilla installation complete...<br/>Note: you may need to enable the MySQL Event Scheduler in your /etc/my.cnf file.<br/>Please visit http://forum.logzilla.info/index.php/topic,71.0.html for more information.<br/><br/>Also, please visit http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.0#UDP_Buffers to learn how to increase your UDP buffer size (otherwise you may drop messages).<br/><br/>Please run /etc/init.d/syslog-ng restart<br/></div></div><br/><br/><strong>六、安装 Sphinx</strong><br/>#cd logzilla/sphinx/src<br/>#tar xzvf sphinx-0.9.9.tar.gz<br/><br/>#cd sphinx-0.9.9<br/>#./configure --prefix `pwd`/../..<br/>#make && make install<br/><br/>#cd /www/webroot/logzilla/sphinx<br/>#vi sphinx.conf<br/>#!/usr/bin/php 替换成实际php的位置，如#!/usr/local/php/bin/php<br/>#./indexer.sh full<br/>#bin/searchd<br/><br/>提示：<br/>ERROR: index 'idx_logs': sql_query_pre[0]: Column 'max_id' cannot be null (DSN=mysql://syslogadmin:***@127.0.0.1:3306/syslog).<br/>如果看到该信息，属正常，因为现在还没有数据:)<br/><br/>添加作业：<br/><div class="quote"><div class="quote-content"><br/>30 0 1 * */www/webroot/logzilla/sphinx/indexer.sh full >>/www/webroot/logzilla/sphinx/log/sphinx_indexer.log 2>&1<br/>*/5 * * * */www/webroot/logzilla/sphinx/indexer.sh delta >>/www/webroot/logzilla/sphinx/log/sphinx_indexer.log 2>&1<br/>0 0 * * */www/webroot/logzilla/sphinx/indexer.sh merge >>/www/webroot/logzilla/sphinx/log/sphinx_indexer.log 2>&1<br/></div></div><br/><br/>添加rc.local<br/>#vi /etc/rc.local<br/><div class="quote"><div class="quote-content"><br/>/www/webroot/logzilla/sphinx/bin/searchd -c /www/webroot/logzilla/sphinx/sphinx.conf<br/></div></div><br/><br/><strong>七、配置Mysql</strong><br/><textarea name="code" class="sql" rows="15" cols="100">
# mysql -u<username> -p<password>
mysql> SELECT @@event_scheduler;
+-------------------+
&#124; @@event_scheduler &#124;
+-------------------+
&#124; OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;
+-------------------+
1 row in set (0.00 sec)
</textarea><br/>激活event_scheduler<br/><textarea name="code" class="sql" rows="15" cols="100">
mysql> SET GLOBAL event_scheduler = 1; 
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@event_scheduler;
+-------------------+
&#124; @@event_scheduler &#124;
+-------------------+
&#124; ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;
+-------------------+
1 row in set (0.00 sec)
mysql> quit;
</textarea><br/><br/><strong>八、修改Syslog-ng配置</strong><br/><br/>v#i /opt/syslog-ng/etc/syslog-ng.conf<br/>(略)<br/><br/><strong>九、修改apache配置</strong><br/>#vi httpd.conf<br/><textarea name="code" class="c" rows="15" cols="100">
# LogZilla
&nbsp;&nbsp; Alias /logs "/www/webroot/logzilla/html/"
&nbsp;&nbsp; <Directory "/www/webroot/logzilla/html/">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options Indexes MultiViews FollowSymLinks
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride All
&nbsp;&nbsp; Order allow,deny
&nbsp;&nbsp; Allow from all
&nbsp;&nbsp; </Directory>
</textarea><br/>重启apache服务：/etc/init.d/apache2 restart<br/><br/><strong>十、IONCube授权</strong><br/>http://127.0.0.1/logs/login.php<br/><a href="http://blog.liuts.com/attachment.php?fid=137" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=137" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>下载源码包ioncube_loaders_lin_x86-64.tar.gz<br/><br/>#mkdir -p /usr/local/ioncube<br/>#tar -zxvf ioncube_loaders_lin_x86-64.tar.gz<br/>#cd ioncube<br/>#cp * /usr/local/ioncube/<br/>#vi /usr/local/php/lib/php.ini<br/>zend_extension = /usr/local/ioncube/ioncube_loader_lin_5.2.so<br/><br/>#/etc/init.d/apache2 restart<br/><br/><strong>十一、安装完毕</strong><br/>http://127.0.0.1/logs/login.php<br/>根据install.pl配置的管理员帐号密码进行登录。<br/>1、MainPage<br/><a href="http://blog.liuts.com/attachment.php?fid=138" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=138" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>2、StatPage<br/><a href="http://blog.liuts.com/attachment.php?fid=139" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=139" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>十二、客户端配置</strong><br/>#vi /etc/syslog.conf<br/>在最后添加以下，其中syslog.admin.com.cn为主机域名，也可以直接用IP代替。<br/><div class="quote"><div class="quote-content"><br/>*.emerg;*.err;*.warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @syslog.admin.com.cn<br/></div></div><br/>#/etc/init.d/syslog restart<br/><br/>测试：logger -p local4.err "This is a local.err test message."<br/><br/>参考文献：<br/><a href="http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.0" target="_blank">http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.0</a><br/>Tags - <a href="http://blog.liuts.com/tags/lamp/" rel="tag">lamp</a> , <a href="http://blog.liuts.com/tags/logzilla/" rel="tag">logzilla</a> , <a href="http://blog.liuts.com/tags/sphinx/" rel="tag">sphinx</a> , <a href="http://blog.liuts.com/tags/syslog-ng/" rel="tag">syslog-ng</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/206/</link>
<title><![CDATA[实现真实的机柜模拟图[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[C/C++]]></category>
<pubDate>Fri, 09 Jul 2010 02:42:04 +0000</pubDate> 
<guid>http://blog.liuts.com/post/206/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般能反映机房设备位置、结构我们都喜欢通过网络拓扑图来展现，但个人感觉还不够直观、明了的表现出自己想要的结果(自己太挑剔了，呵呵)。因此写一个生成真实机柜模拟图平台，实现与真实服务器外观、服务状态、空闲位置等信息。<br/><strong>在线效果图</strong><br/><a href="http://blog.liuts.com/idc/" target="_blank">http://blog.liuts.com/idc/</a><br/><strong>系统截图</strong><br/>1、平台显示某一排截图<br/><a href="http://blog.liuts.com/attachment.php?fid=136" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=136" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="750"/></a><br/><br/>2、平台显示某台服务器详细信息截图<br/><a href="http://blog.liuts.com/attachment.php?fid=135" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=135" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="750"/></a><br/><br/>3、状态说明<br/><a href="http://blog.liuts.com/attachment.php?fid=134" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=134" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>2U服务器正常状态<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=133" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=133" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>2U服务器当机状态<br/><br/><strong>系统原理</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过获取运维平台的服务器信息(包括位置、操作系统、机型等)，格式为XML，通过c++的tinyxml来解析并渲染成比较美观的HTML格式。当机的信息通过Nagios来获取。这样就可以生成非常人性化的展现平台了：）<br/><br/><strong>系统代码Servermap.cpp</strong><br/><textarea name="code" class="c" rows="15" cols="100">
/***************************************************************************
 *&nbsp;&nbsp; Copyright (C) 2010 by Liu Tiansi&nbsp;&nbsp; *
 *&nbsp;&nbsp; liutiansi@gmail.com&nbsp;&nbsp; *
 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; This program is free software; you can redistribute it and/or modify&nbsp;&nbsp;*
 *&nbsp;&nbsp; it under the terms of the GNU General Public License as published by&nbsp;&nbsp;*
 *&nbsp;&nbsp; the Free Software Foundation; either version 2 of the License, or&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; (at your option) any later version.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; This program is distributed in the hope that it will be useful,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*
 *&nbsp;&nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp;&nbsp;See the&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; GNU General Public License for more details.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*
 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; You should have received a copy of the GNU General Public License&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; along with this program; if not, write to the&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; Free Software Foundation, Inc.,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 *&nbsp;&nbsp; 59 Temple Place - Suite 330, Boston, MA&nbsp;&nbsp;02111-1307, CN.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
 ***************************************************************************/


#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include "tinyxml.h"
#include "tinyxml.cpp"
#include "tinystr.h"
#include "tinystr.cpp"
#include "tinyxmlparser.cpp"
#include "tinyxmlerror.cpp"

using namespace std;

class servermap &#123;

&nbsp;&nbsp;public:
&nbsp;&nbsp;&nbsp;&nbsp;servermap( string *serverrow,string _idctype);
&nbsp;&nbsp;&nbsp;&nbsp;~servermap();
&nbsp;&nbsp;&nbsp;&nbsp;string int2str( int num);
&nbsp;&nbsp;&nbsp;&nbsp;void Getdownserver ();
&nbsp;&nbsp;&nbsp;&nbsp;string writefile (string filename);
&nbsp;&nbsp;&nbsp;&nbsp;string GetServerCondition (string ip,string servertype);
&nbsp;&nbsp;&nbsp;&nbsp;string (*displayXmlDocument_info (string filename))[5];
&nbsp;&nbsp;&nbsp;&nbsp;void ProduRow();
&nbsp;&nbsp;&nbsp;&nbsp;void ProduCurrServer();

&nbsp;&nbsp;private:
&nbsp;&nbsp;&nbsp;&nbsp;string idctype;
&nbsp;&nbsp;&nbsp;&nbsp;string (*p_info)[5];&nbsp;&nbsp;// 所有的服务器信息指针(从XML文件中遍历);
&nbsp;&nbsp;&nbsp;&nbsp;string (*pserver_info)[5];&nbsp;&nbsp;// 当前机房的服务器信息指针(从XML文件中遍历);
&nbsp;&nbsp;&nbsp;&nbsp;string ServerInfo[800][5];&nbsp;&nbsp;// 所有的服务器信息数组(从XML文件中遍历);
&nbsp;&nbsp;&nbsp;&nbsp;string ServerInfo_CurrServer[300][5];&nbsp;&nbsp;//当前机房数组，从ServerInfo中过滤出来;
&nbsp;&nbsp;&nbsp;&nbsp;string ServerDownIP[50];&nbsp;&nbsp;&nbsp;&nbsp;//当服务器清单；
&nbsp;&nbsp;&nbsp;&nbsp;int ServerInfoNumber;&nbsp;&nbsp;//获取所有信息的有效行;
&nbsp;&nbsp;&nbsp;&nbsp;string *CurrServer_row;&nbsp;&nbsp;//指向当前机房数组的指针;
&nbsp;&nbsp;&nbsp;&nbsp;int CurrServerInfoNumber;&nbsp;&nbsp;//获取当前机房信息的有效行;
&nbsp;&nbsp;&nbsp;&nbsp;string HTMLstr;&nbsp;&nbsp;&nbsp;&nbsp;//存储HTML串;
&#125;;

//构造func,传入排数及机房类型；
servermap::servermap( string *Serverrow,string _idctype)
&#123;
&nbsp;&nbsp;idctype=_idctype;
&nbsp;&nbsp;//初始化HTML头；
&nbsp;&nbsp;HTMLstr="<html>&#92;n<head>&#92;n<meta http-equiv=&#92;"Content-Type&#92;" content=&#92;"text/html; charset=utf-8&#92;"&nbsp;&nbsp;content=&#92;"5&#92;">&#92;n<title>服务器模拟状态图</title>&#92;n";
&nbsp;&nbsp;HTMLstr+="<script src='/js/server_top.js' language='javascript'></script>&#92;n";
&nbsp;&nbsp;
&nbsp;&nbsp;//机房排数组；
&nbsp;&nbsp;CurrServer_row=Serverrow;
&nbsp;&nbsp;ServerInfoNumber=0;
&nbsp;&nbsp;CurrServerInfoNumber=0;

&nbsp;&nbsp;//获取当前服务器清单；
&nbsp;&nbsp;Getdownserver();

&nbsp;&nbsp;//遍历所有服务器信息；
&nbsp;&nbsp;displayXmlDocument_info("ServerInfoAll.xml");

&nbsp;&nbsp;//简化当前机房服务器清单；
&nbsp;&nbsp;ProduCurrServer();
&#125;

//类虚构func，销毁创建的指针；
servermap::~servermap()
&#123;
&nbsp;&nbsp;//clear mem;
&#125;

//整形转字符串方法；
 string servermap::int2str( int num)
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;if (num == 0 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return " 0 ";
&nbsp;&nbsp;&nbsp;&nbsp;string str = "" ;
&nbsp;&nbsp;&nbsp;&nbsp;int num_ = num > 0 ? num : - 1 * num;

&nbsp;&nbsp;&nbsp;&nbsp;while (num_)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = ( char )(num_ % 10 + 48 ) + str;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num_ /= 10 ;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;if (num < 0 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = " - " + str;
&nbsp;&nbsp;&nbsp;&nbsp;return str;
&#125;

//返回服务器状态图片；
string servermap::GetServerCondition (string ip,string servertype)
&#123;
&nbsp;&nbsp;bool Obtaining=false;
&nbsp;&nbsp;for (int i=0;i<50;i++)
&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;if (ServerDownIP[i]==ip)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtaining=true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&#125;

&nbsp;&nbsp;if (servertype=="1U")
&nbsp;&nbsp;if (Obtaining)
&nbsp;&nbsp;&nbsp;&nbsp;return "1u_down.gif";
&nbsp;&nbsp;else return "1u_normal.gif";

&nbsp;&nbsp;if (servertype=="2U")
&nbsp;&nbsp;if (Obtaining)
&nbsp;&nbsp;&nbsp;&nbsp;return "2u_down.gif";
&nbsp;&nbsp;else return "2u_normal.gif";

&nbsp;&nbsp;if (servertype=="6U")
&nbsp;&nbsp;if (Obtaining)
&nbsp;&nbsp;&nbsp;&nbsp;return "ta_down.gif";
&nbsp;&nbsp;else return "ta_normal.gif";
&#125;

//获取当机服务器清单，从文件中获取；
void servermap::Getdownserver()
&#123;
&nbsp;&nbsp;string mainpath="/ServerDownlist";
&nbsp;&nbsp;string ip;
&nbsp;&nbsp;ifstream FileObject;
&nbsp;&nbsp;FileObject.open(mainpath.c_str(),ios::in);
&nbsp;&nbsp;int i=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(getline(FileObject,ip))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;ServerDownIP[i]=ip;
&nbsp;&nbsp;&nbsp;&nbsp;i+=1;
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp; FileObject.close();
&#125;

//写配置文件方法，形参为文件名；
string servermap::writefile(string filename)
&#123;
&nbsp;&nbsp;string mainpath="/www/webroot/"+filename;
&nbsp;&nbsp;ofstream FileObject;
&nbsp;&nbsp;FileObject.open(mainpath.c_str(),ios::out);
&nbsp;&nbsp;FileObject<<HTMLstr<<endl;
&nbsp;&nbsp;&nbsp;&nbsp; FileObject.close();
&nbsp;&nbsp;return "1";
&#125;


//获取XML文件服务器信息数据到指针；
string (* servermap::displayXmlDocument_info(string filename))[5]
&#123;
&nbsp;&nbsp;TiXmlDocument doc(filename.c_str());
&nbsp;&nbsp;doc.LoadFile();
&nbsp;&nbsp;TiXmlElement *root_r = doc.RootElement();
&nbsp;&nbsp;//static vector<vector<string> > ClassInfo(m,vector<string>(n));
&nbsp;&nbsp;int i=0;
&nbsp;&nbsp;for(TiXmlNode *node = root_r->FirstChild(); node; node = node->NextSibling())
&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;//输出元素节点名称;
&nbsp;&nbsp;&nbsp;&nbsp;//cout << node->Value() << endl;

&nbsp;&nbsp;&nbsp;&nbsp;//遍历输出节点属性名称及值;
&nbsp;&nbsp;&nbsp;&nbsp;if (node->Type() == TiXmlNode::ELEMENT)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(TiXmlAttribute *attr = node->ToElement()->FirstAttribute(); attr; attr = attr->Next())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout << "&nbsp;&nbsp;&nbsp;&nbsp;" << attr->Name() << " =: " << attr->Value() << endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;//遍历输出子节点名称及值;
&nbsp;&nbsp;&nbsp;&nbsp;TiXmlNode *child = node->FirstChild();
&nbsp;&nbsp;&nbsp;&nbsp;int j=0;
&nbsp;&nbsp;&nbsp;&nbsp;while(child)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int type = child->Type();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (type == TiXmlNode::ELEMENT)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerInfo[i][j]=child->ToElement()->GetText();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child = node->IterateChildren(child);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j+=1;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;i+=1;

&nbsp;&nbsp;&#125;
&nbsp;&nbsp;ServerInfoNumber=i;
&nbsp;&nbsp;p_info=ServerInfo;
&nbsp;&nbsp;//free(ClassInfo);
&#125;

//生成当前机房数组;
void servermap::ProduCurrServer()
&#123;
&nbsp;&nbsp;const char * strtmp;
&nbsp;&nbsp;string strswap,stradd,Position0,Position1,Position2,Position3;

&nbsp;&nbsp;for (int i=0;i<10;i++)
&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;if (CurrServer_row[i]=="")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;for (int j=0;j<ServerInfoNumber;j++)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strswap=*(*(p_info+j)+3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strtmp=strswap.c_str();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position0=strtmp[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position1=strtmp[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position2=strtmp[2];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position3=strtmp[3];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (idctype=="idc")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stradd=Position0+Position1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stradd=Position0+Position1+Position2+Position3;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (stradd==CurrServer_row[i])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrServerInfoNumber+=1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerInfo_CurrServer[CurrServerInfoNumber][0]=*(*(p_info+j)+0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerInfo_CurrServer[CurrServerInfoNumber][1]=*(*(p_info+j)+1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerInfo_CurrServer[CurrServerInfoNumber][2]=*(*(p_info+j)+2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerInfo_CurrServer[CurrServerInfoNumber][3]=*(*(p_info+j)+3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerInfo_CurrServer[CurrServerInfoNumber][4]=*(*(p_info+j)+4);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;pserver_info=ServerInfo_CurrServer;
&#125;

//生成服务器拓扑状态图；
void servermap::ProduRow()
&#123;
&nbsp;&nbsp;string point_moddle_key="-0";
&nbsp;&nbsp;string point_moddle="";
&nbsp;&nbsp;string point_last="";
&nbsp;&nbsp;string point_all="";
&nbsp;&nbsp;string substrServer="";
&nbsp;&nbsp;string DIVstr="";
&nbsp;&nbsp;int allservercount=0;
&nbsp;&nbsp;//所有机柜循环体;
&nbsp;&nbsp;for (int i=0;i<10;i++)
&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;if (CurrServer_row[i]=="")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;

&nbsp;&nbsp;&nbsp;&nbsp;//当前排循环体;
&nbsp;&nbsp;&nbsp;&nbsp;if (idctype=="idc")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<div align=center>"+CurrServer_row[i].substr(0,2)+"排</div>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<div align=center>"+CurrServer_row[i].substr(2,2)+"排</div>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<table width='1024' border='0' cellpadding='1' cellspacing='3' bgcolor='#ffffff' class='jjtable'>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<tr align='center' valign='top'>&#92;n";

&nbsp;&nbsp;&nbsp;&nbsp;for (int j=1;j<=7;j++)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point_moddle=point_moddle_key+int2str(j);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<td width='147' bgcolor='#eeeeee' background=&#92;"/images/serverico/jg.gif&#92;" >&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//HTMLstr+="<td width='147' style=&#92;"BACKGROUND: url(/images/serverico/jg.gif) #edf6fb repeat-y 0px 0px;&#92;">&#92;n"&nbsp;&nbsp;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<table width='99%' height='440'&nbsp;&nbsp;border='0' cellpadding='1' cellspacing='0'>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<tr>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="&nbsp;&nbsp;<td height='30' align='center' valign='bottom'&nbsp;&nbsp;class='jgtable'><font class=jgtitle>0"+int2str(j)+"</font></td></tr>&#92;n";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当前列循环体;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int k=1;k<=10;k++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (k==10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point_last="-10";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point_last=point_moddle_key+int2str(k);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point_all=CurrServer_row[i]+point_moddle+point_last;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<tr>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="&nbsp;&nbsp;<td height='30' align='center' valign='bottom' class='jgtable'>&#92;n";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int m=0;m<=CurrServerInfoNumber;m++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//过滤空元素；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cout<<point_all<<"=="<<*(*(pserver_info+j)+3)<<endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;substrServer=*(*(pserver_info+m)+3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (idctype=="idc")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;substrServer=substrServer.substr(0,8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;substrServer=substrServer.substr(0,10);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (point_all==substrServer)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIVstr+="IP:"+*(*(pserver_info+m)+0)+"<br/>";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIVstr+="操作系统:"+*(*(pserver_info+m)+2)+"<br/>";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIVstr+="位置:"+*(*(pserver_info+m)+3)+"<br/>";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIVstr+="机型:"+*(*(pserver_info+m)+4)+"<br/>";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*(*(pserver_info+m)+4)=="1U")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<img src='/images/serverico/"+GetServerCondition(*(*(pserver_info+m)+0),"1U")+"' width='127' height='12' style=&#92;"vertical-align:bottom;&#92;" onmouseover=&#92;"displayDIV('operate"+int2str(allservercount)+"'); return false&#92;" onmouseout=&#92;"hiddenDIV('operate"+int2str(allservercount)+"'); return false&#92;">";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (*(*(pserver_info+m)+4)=="2U")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<img src='/images/serverico/"+GetServerCondition(*(*(pserver_info+m)+0),"2U")+"' width='127' height='24' style=&#92;"vertical-align:bottom;&#92;" onmouseover=&#92;"displayDIV('operate"+int2str(allservercount)+"'); return false&#92;" onmouseout=&#92;"hiddenDIV('operate"+int2str(allservercount)+"'); return false&#92;">";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;HTMLstr+="<img src='/images/serverico/"+GetServerCondition(*(*(pserver_info+m)+0),"6U")+"'&nbsp;&nbsp;height='76' style=&#92;"vertical-align:bottom;&#92;" onmouseover=&#92;"displayDIV('operate"+int2str(allservercount)+"'); return false&#92;" onmouseout=&#92;"hiddenDIV('operate"+int2str(allservercount)+"'); return false&#92;">";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<div id=&#92;"operate"+int2str(allservercount)+"&#92;" style=&#92;"filter:Alpha(opacity=90);display:none;position:absolute; width:200px;BORDER-RIGHT: 2px outset; BORDER-TOP: 1px outset; BACKGROUND: #ffffff; BORDER-LEFT: 1px outset; BORDER-BOTTOM: 2px outset; text-align:left;&#92;"><table cellpadding=&#92;"3&#92;" cellspacing=&#92;"1&#92;"><tr><td>"+DIVstr+"</td></tr></table></div>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allservercount+=1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIVstr="";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="&nbsp</td>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="&nbsp;&nbsp;</tr>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+=" </table>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="</td>&#92;n";

&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="</tr>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="</table>&#92;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLstr+="<p> </p>&#92;n";
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;HTMLstr+="<script src='/js/server_down.js' language='javascript'></script>&#92;n";
&#125;

//类入 口main()，接受用户参数；
int main()
&#123;
&nbsp;&nbsp;string * row;
&nbsp;&nbsp;string idctype="";

&nbsp;&nbsp;//定义机柜排号;
&nbsp;&nbsp;string IDCA[10]=&#123;"01","02","03","04","05","06"&#125;;
&nbsp;&nbsp;string IDCC[10]=&#123;"18","19","20"&#125;;

&nbsp;&nbsp;
&nbsp;&nbsp;//IDC A
&nbsp;&nbsp;idctype="idc";
&nbsp;&nbsp;row=IDCA;
&nbsp;&nbsp;servermap appa(row,idctype);
&nbsp;&nbsp;appa.ProduRow();
&nbsp;&nbsp;appa.writefile("idca.html");
&nbsp;&nbsp;//IDC C
&nbsp;&nbsp;idctype="idc";
&nbsp;&nbsp;row=IDCC;
&nbsp;&nbsp;servermap appc(row,idctype);
&nbsp;&nbsp;appc.ProduRow();
&nbsp;&nbsp;appc.writefile("idcc.html");

&nbsp;&nbsp;//free(p);
&nbsp;&nbsp;return 0;
&#125;
</textarea><br/><strong>XML数据格式</strong><br/><textarea name="code" class="xml" rows="15" cols="100">
<?xml version="1.0" ?><wml>
<serverinfo>
&nbsp;&nbsp;<ip>192.168.0.1</ip>
&nbsp;&nbsp;<classid>18</classid>
&nbsp;&nbsp;<os>windows-server</os>
&nbsp;&nbsp;<locate>CC06-05-08</locate>
&nbsp;&nbsp;<body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type>6U</bodytype>
</serverinfo>
<serverinfo>
&nbsp;&nbsp;<ip>192.168.0.2</ip>
&nbsp;&nbsp;<classid>19</classid>
&nbsp;&nbsp;<os>linux-server</os>
&nbsp;&nbsp;<locate>CC06-05-07-R</locate>
&nbsp;&nbsp;<body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type>6U</bodytype>
</serverinfo>
<serverinfo>
&nbsp;&nbsp;<ip>192.168.0.3</ip>
&nbsp;&nbsp;<classid>20</classid>
&nbsp;&nbsp;<os>windows-server</os>
&nbsp;&nbsp;<locate>CC06-04-07</locate>
&nbsp;&nbsp;<body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type>6U</bodytype>
</serverinfo>
</wml>
</textarea><br/>Tags - <a href="http://blog.liuts.com/tags/%25E6%25A8%25A1%25E6%258B%259F%25E6%259C%25BA%25E6%259F%259C/" rel="tag">模拟机柜</a> , <a href="http://blog.liuts.com/tags/c%252B%252B/" rel="tag">c++</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/205/</link>
<title><![CDATA[Cfengine技术培训文档]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Cfengine]]></category>
<pubDate>Thu, 17 Jun 2010 03:34:29 +0000</pubDate> 
<guid>http://blog.liuts.com/post/205/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;给部门做的"Cfengine技术培训文档"PPT，分享使用过程当中的一些配置、使用方法及常见问题等。如有疑问再一起交流。<br/><div style="width:425px" id="__ss_4522185"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/liutiansi/cfengine" title="Cfengine培训文档 刘天斯">Cfengine培训文档 刘天斯</a></strong><object id="__sse4522185" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cfengine-100616222404-phpapp01&stripped_title=cfengine" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4522185" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cfengine-100616222404-phpapp01&stripped_title=cfengine" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/liutiansi">liuts</a>.</div></div><br/><br/>CfengineV_2简体中文文档<br/><a href="attachment.php?fid=131">点击这里下载文件</a><br/><br/>CfengineV_3简体中文文档<br/><a href="attachment.php?fid=132">点击这里下载文件</a><br/>
]]>
</description>
</item>
</channel>
</rss>