Just Be Unreserved!

学无止境。


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

zsh安装

发表于 Feb 12 2014   |   分类于 Linux   |  

实在忍不了了,每次新装完Linux系统,都要重新搭一次使用环境,其实对于我而言也很简单,只需要安装几个软件就可以了,其实说白了,也就是用zsh替换系统默认的bash,其他几个软件有的是安装zsh必须的,有的是配合zsh使用起来会更爽。但是却也真的懒得去记那些安装步骤,还是记录下来了事,以后也方便查阅。

我的使用环境必须包含下面几个软件:

  • Vim
  • git
  • zsh
  • oh-my-zsh
  • autojump

只有以上五个,甚至连gcc,make都可以暂时没有,但是没有上面这五个软件,系统使用起来会让我非常难受。安装过程也很简单,我也主要用CentOS和elementary OS,前者属于RedHat系的,yum即可;后者输入Ubuntu系的,使用apt-get就可以。

####安装Vim

1
2
sudo yum install vim           #CentOS
sudo apt-get install vim #elementary OS

####安装git

1
2
sudo yum install git           #CentOS
sudo apt-get install git #elementary OS

###安装zsh

1
2
3
sudo yum install zsh        #CentOS
sudo apt-get install zsh #elementary OS
chsh -s /bin/zsh #修改系统默认Shell为zsh

###安装配置oh-my-zsh
oh-my-zh是zsh的一款主题,这真是一个牛叉到让人无语的项目,废话也不多说了,可以选择多种安装方法。

####via curl

1
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

####via wget

1
wget --no-check-certificate https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh

以上都是自动安装方式,当然,也可以选择手动安装方式:

1
2
3
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.zshrc ~/.zshrc.orig
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

安装完成之后就是配置了。

根据个人喜好,修改为自己喜欢的主题即可。我使用的是example这个主题。修改文件~/.zshrc,找到ZSH_THEME,修改为:

1
ZSH_THEME="example"

还有一个配置就是插件的添加和修改,在文件~/.zshrc里找到plugins,把需要的插件添加上即可,就像下面这样:

1
plugins=(git autojump)

其中git和autojump就是两个插件。

###安装autojump
autojump与zsh配合使用不仅能极大提高工作效率,还能使人的心情非常的愉悦。

1
2
3
4
wget https://github.com/downloads/joelthelion/autojump/autojump_v21.1.2.tar.gz
tar zxvf autojump_v21.1.2.tar.gz
cd autojump_v21.1.2
./install.sh

然后将一下代码粘贴到~/.zshrc里

1
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

如此,这样,就大功告成了。

回家过年

发表于 Feb 11 2014   |   分类于 随笔   |  

##假期开始

29号下午六点下班,那时候整个办公室只剩下我一个人了,我心里闪出了无数个情境:在火车站等车;回到家里,围着火炉和爸妈边斗地主边看春晚;初二去外婆家里拜年;第一次去见未来丈母娘……总之,思绪怎么也平静不下来。回到住的地方,也只剩下我一个人了,空荡荡的屋子,很静。

由于是早上五点钟的火车,我也不敢睡觉,也没有一开始想的那么激动,还挺平静,收拾了东西,打了一会儿DotA,看了一会儿电影,熬到了凌晨1点,再也坐不住了,就准备撤了。到外面,第一次用微信打车,确实挺方便。一个小插曲,打车到火车站要50块,我的银行卡里钱不够了,结果我用微信只付了10块钱,其余的都用现金支付了,反正微信赠送的10块钱算是赚到了。然后就是一直等一直等,中间也没什么好说的,直到回到郑州。

到了郑州火车站,一下火车,猛然发现郑州火车站改造了,更新更干净的地下通道让人不由地心情愉悦,一眼看上去各种高大上!除了站发现又多了个西北广场,然后就不知道该怎么走了……接着就是各种摩的粉墨登场,他们不会告诉你有公交车可以只打客运总站,只会说过年了,很多公交车都停运了,你只能坐我的摩的!而当你拒绝他们之后,各种不带脏字的埋汰和讥讽就扑面而来,让你有种想杀人的冲动。我发现跟我一样摸不着头脑的人还很多,结果不知所措的人们一个个在广场彻底放空。

郑州这个城市就是有这种魔力:总能让人稍微对它有一点好感之后,立马就对它产生厌恶之极的情绪。寄希望于这个城市会突然摆脱各种低级趣味的人,恐怕会一次又一次地失望,在这里,任何一次浮于表面的进步都会更加彰显人性的罪恶。不管你喜不喜欢,这就是我的家乡,这就是郑州。

好在,我也不用在这看不到希望的旮旯停留太久,赶紧回到家,我的假期也就真正开始了,我的心情也会马上好起来!

##我的外公

回到家第一顿饭就是爸妈包的饺子,实在是太香了!我太爱这种味道了!我恨不得每一顿都吃爸妈包的饺子!大年初一在家呆了一天,大二就去了外公外婆家拜年。

外公家里条件不错,前些年外公身体好的时候,在工作单位也很吃的开,权利挺大的,也挣了不少钱,随着年岁增大,外公也退休了,退休之后的生活也听滋润。直到去年,外公生病了,一直也没治好,从那之后,所有的事情都变了。

我妹妹和小表弟在外面玩耍,怎么也不愿进屋跟外公聊聊天,我平时本就不愿动,就留在屋里跟外公说说话。帮他倒开水,扶着他走路,聊聊工作,聊聊对象,看着外公吃力的样子,自己心里也挺不是滋味,可是却也无能为力。突然,外公就哭起来了,埋怨起来自己一身的病,搞的我也不知所措了,我劝他想开一点。说来说去,也就那么几句话,最后,我也没什么话说了,就不自觉地想掏出手机……来回反复好几次,都没掏出手机来。

后来,我另一个小表弟也来了,越来越热闹了,我和两个表弟开始打闹玩儿了,很开心。突然,外公又开口了,矛头直指大表弟……莫名其妙地骂了他一顿,我们都愕然了……表弟也搞的很郁闷,很不开心,边上我二姨抱怨了一句,结果外公又哭起来了,说二姨不孝顺……这下,我总算明白为什么妹妹和表弟为什么不愿跟外公聊天了。唉,这事说起来也确实闹心,老人家现在这个模样,身体上的病治不好了,心上的病却更加严重。平日里总说心病心病,感觉挺稀松平常的一件事,真遇上了,还真不知道该怎么办。只希望外公能看开一些。

最近外公最经常跟我和我爸妈提的一件事就是我的婚事,总说我再不结婚,他就看不到我结婚那一天了……

##拜见未来丈母娘

从外公家离开,我们一大家子就直接奔赴城里了,我爸妈、妹妹、二姨、三姨、各种表弟表妹,主要任务就是给我买衣服,为了第二天我能够穿的体面一些去未来丈母娘家。最恶心跟一群半老妇女一起买衣服,他们总是用自己低于人类平均水平的恶俗品味,高于物品实际价值N倍的价格,买来一堆仅仅足够沾沾自喜却丝毫不考虑当事人感受的垃圾。可是,我真是无能为力,只好由着他们了。

第二天凌晨四点钟我就被母亲大人叫起来了,听我妈说她两点就起来了……为了我一个人,一家人都这么折腾,想想都心酸……四点多我们从家里出发,五点钟在登封跟大伯汇合,大概六点多一点到了许昌,然后就遇到了大雾,高速公路被封了,幸亏我的手机是诺基亚,我只能说诺基亚手机的GPS实在是太特么地给力了!HERE地图和HERE驾车真是神器!安卓手机怎么都搜不到GPS信号,NOKIA一出手,立马见效,即使在一些没有手机信号的地方,也能导航!

最后经历各种波折,走了十个小时,总算到了未来丈母娘家里。本来以为以我这种闷葫芦的性格,见了面之后会不知道怎么办,气氛会比较尴尬,结果还好些,没跟丈母娘说话,丈母娘一直在忙着做菜,好招待我们。我爸、大伯和我跟女友她哥哥们坐在一起聊了起来,虽然还是会有尴尬,不知道说什么,不过好在都能理解,也都在找话题,聊着聊着就该吃饭了。我只能说女友的哥哥都太热情了,太好客了!得亏我多番推脱,否则真要把我灌醉了……

呆到大概四点钟,我们看时间差不多了,就准备撤了。来这一趟,总的来说,收获还是蛮大的,我觉得我给他们留的印象应该还不错,他们也都非常的热情,不像是那种矫情小气的人。也难怪,否则我也不会有这么好的女朋友啊。

##和女友在一起的日子

从丈母娘离开,顺带也把她老人家的女儿给拐了回家。接下来,分别数月的我们终于可以开始缠绵悱恻的日子了。

我们在家又呆了两天,由于第四天有暴雪,如果不提前走的话,就麻烦大了。而我们在家也实在是没什么事情做,所以在第三天就离开家了,跟女友一起去郑州享受二人世界了。回想起来,我们在一起两年多了,时间不算长,住在一起的时候,整日里吵吵闹闹,嘻嘻哈哈,有开心,也有烦恼,在一起经历了这么多的事,感觉这两年像是挺久一样。她也不止一次说过要和我分手,每次我都感觉也许我们真的要分开了,每次也都是我不同意,然后不知怎么地,慢慢就又和好了。

动不动就提分手,还很固执,总是坚持自己的错误,因此我觉得她挺任性的;对任何事,包括她的一些事,都是一副无所谓的态度,总是不愿在一些她认为很重要的事情上花时间,还老是在公共场合对她发脾气,因此她总认为我不在乎她……这就是我们对彼此的认识。

然后,然后,然后,一直到现在,我们还在一起,而且闹矛盾的次数越来越少,越来越珍惜在一起的时光。都说两个人在一起久了,爱情会变成亲情,我觉得我们的爱情不仅幻化成了亲情,而且还长大了。我经常说她太依赖我了,而我又何尝不依赖她呢?一想到她,脑海里浮现的都是她带给我的一些小感动,都是和她一起度过的艰难的日子,都是带给彼此的伤心,我想这就真的是爱吧!人生第一次,我发觉我是这么地爱一个人。虽然我非常不喜欢对她说,我爱你。

今生今世,遇到你,我真幸运。

开始使用Hexo写博客

发表于 Jan 29 2014   |   分类于 教程   |  

之前一直在WordPress上写博客,后来无意中发现了Jekyll这个静态博客引擎,突然觉得静态博客这个概念很有意思。看到很多人都开始使用Markdown了,对比了一下各自的优缺点,就想转过去。无奈自己几乎就是个前端文盲,对前端的东西简直是一窍不通啊,连Html标签都记不全,也是在懒得去花时间折腾。于是,暂时就放下了。前几天,把自己的电脑重做了系统,装了虚拟机,又突然冒出搭建静态博客的想法了。随便搜了一下,发现有人推荐Hexo,就试着安装了,花了两天时间总算是搞定了。Hexo的作者在这儿——tommy351,首先必须要感谢tommy!

##安装环境
虽说部署Hexo有Windows解决方案,但是心理上总觉得搞这东西用Windows实在是不纯粹,这是我的环境:

  • Hexo: 2.4.5
  • OS: Linux 2.6.32-431.3.1.el6.x86_64 linux x64
  • http_parser: 1.0
  • node: 0.10.25
  • v8: 3.14.5.9
  • ares: 1.9.0-DEV
  • uv: 0.10.23
  • zlib: 1.2.3
  • modules: 11
  • openssl: 1.0.1e

首先,先说Hexo的安装吧!题外话:我始终觉得安装操作系统一定要选择Software Development Workstation,以前总自作聪明选择最小化安装,结果也就不提了,俩字:巨坑!

##安装过程

###安装node
安装node之前,首先要确认自己的Python版本是否支持,如果是较低版本的Python,推荐2.7版本则要先下载编译安装Python:

1
2
3
4
5
6
7
yum install bzip2* -y              #nodejs模块必须的
wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar -zxvf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure
make && make install
/usr/local/bin/python2.7 -V #查看Python版本

编译安装完成,但是如果不修改软链接指向的话,系统默认的Python版本依然是2.4,而yum必须要有Python2.4才能工作的,所以必须保证2.4和2.7共存,这时候要做的就是修改软链接指向:

1
2
3
4
cd /usr/bin
mv python python2.4
ln -s /usr/local/bin/python2.7 /usr/bin/python
python -v #查看Python版本

然后就是修复修改了默认Python版本yum不能工作问题:

1
2
vi /usr/bin/yum
/usr/bin/python————→/usr/bin/python2.4 #将—————→左边的用右边的替换

接下来就是安装Node了:

1
2
3
4
5
wget http://nodejs.org/dist/v0.10.25/node-v0.10.25.tar.gz
tar zxvf node-v0.10.25.tar.gz
cd node-v0.10.25
./configure --prefix=/opt/application/node
make && make install

将Node添加进环境变量,我的Shell环境是Zsh,只需要在export PATH后面添加如下路径即可:

1
:/opt/application/node/bin

###安装使用Hexo
安装Hexo非常简单,这是Hexo的说明文档

1
2
npm install -g hexo
hexo init HexoSource #根据个人实际情况把HexoSource替换为自己想要设置的目录名

进入文件夹HexoSource,可以看到配置文件_config.yml,在这里主要配置需要上传到github或者其他托管网站的路径,安装一些插件和主题。需要特别注意的是,_config.yml里面的配置项类似于key: value的形式,这个冒号后面的空格一定不能少!

####配置Hexo
安装主题需要制作或者下载自己所需要的主题,然后放在根目录下的theme文件夹下,然后在_config.yml里将默认的landscape修改为自己的主题名即可。

安装插件,在这里可以看到各种插件,然后用下面的命令下载即可:

1
npm install <plugin-name> --save

安装完成之后,要在_config.yml里启用:

1
2
3
plugins:
- hexo-generator-feed
- hexo-generator-sitemap

配置博客托管项目地址,在_config.yml最后找到deploy,接下来的配置项就是了,下面是我的示例:

1
2
3
4
deploy:
type: github
repository: git@github.com:liangzhitao/liangzhitao.github.io.git
branch: master

如果要绑定自定义域名的话,就需要新建一个CNAME文件放在根目录下的source文件夹下;这个目录就主要是放置博客内容的了;如果需要的话,可以建一个404页面,同样放在这个目录下,但是404页面需要顶级域名才支持,下面是腾讯的公益404页面代码。

1
2
3
4
5
6
7
8
9
10
<html>
<head>
<meta charset="UTF-8" />
<title>404</title>
</head>
<body>
<h1>404 Page Not Found</h1>
<script type="text/javascript" src="http://www.qq.com/404/search_children.js" charset="utf-8"></script>
</body>
</html>

####生成博客
这样,Hexo就部署完成了,接下来就是生成博客了,博客的生成也很简单:

1
2
3
hexo clean
hexo g
hexo d #这条命令自动把博客内容同步到github上去

Hexo使用的4000端口,生成之后,就可以本地查看调试了,浏览器打开http://$IP:4000查看效果。

###配置主题
我使用的主题是pacman,这里必须要要感谢Alimon同学的辛勤付出和无私奉献!主题介绍,猛戳这里,说的都比较详细了,我只大概介绍功能和Alimon没有提到的部分吧。

在主题配置里需要修改的主要有以下几个方面:

  • menu #配置页面
  • widgets #添加插件
  • rss #添加rss页面
  • duoshuo #开启多说评论

配置在博客主页显示新浪微博:

  1. 在微博秀页面获取微博秀代码;
  2. 在themes/pacman/layout/_widget目录下新建weibo.ejs文件,并将刚才获取的代码粘贴进去;
  3. 修改themes/pacman目录下的_config.yml文件,添加以下代码:
    1
    2
    widgets:
    - weibo

添加多说评论

注册多说,获取多说评论代码;将下面的代码粘贴到themes/pacman/layout/_partial/post/comment.ejs里;

1
2
3
4
5
<% if (theme.duoshuo.enable && page.comments){ %>
<section class="comment">
<div class="ds-thread"></div>
</section>
<% } %>

修改themes/pacman/layout/_partial/post/article.ejs,找到

1
<%- partial('comment') %>

修改为

1
2
3
<% if (!index) { %>
<%- partial('comment') %>
<% } %>

修改主题配置文件themes/pacman/_config.yml:

1
2
3
duoshuo:
enable: enable
short_name: ailurus #duoshuo short name

导航栏添加关于页面

1
hexo new page "about"

将想要添加的内容写进source/about/index.md里;

将themes/pacman/_config.yml相关内容修改如下:

1
2
3
4
menu:
Home: /
Archives: /archives
About: /about

要写新文章,只需一个命令:

1
hexo new "my new post"

格式如下:

1
2
3
4
5
title: 开始使用Hexo写博客
date: 2014-01-29 15:43:10
tags:
categories:
---

这样,基于Hexo的博客就完成了!

PS:Markdown是很漂亮,可是写起来感觉好累啊……

Android中的测试

发表于 Jan 28 2014   |   分类于 Android   |  

##测试分类##
是否有源码:

  • 白盒测试:对源代码进行测试;
  • 黑盒测试:无需测试源代码

根据时间分类:

  • 单元测试:程序员自己写一个小测试模块,对自己写的源代码进行测试
  • 集成测试:程序员小团队内部进程集体测试
  • 系统测试:由专业的测试工程师完成
  • 回归测试:由专业的测试工程师完成

根据压力程度:

  • 猴子测试
  • 冒烟测试

##安卓单元测试##

对业务单元进行测试,主要集中在dao层和service层

举例说明:
假如要测试cn.easydone.hello这个包中PersonService这个业务类中的add(int x, int y)这个方法。

步骤:
1)在AndroidManifest.xml清单文件的application节点里添加以下节点内容,引入测试的类库

1
<uses-library android:name="android.test.runner"/>

2)在AndroidManifest.xml清单文件的application节点的外面添加以下节点内容,配置测试启动类,指定要测试的包

1
2
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.easydone.hello"></instrumentation>

3)创建cn.easydone.hello.test这个包,创建PersonServiceTest这个类,并且要继承AndroidTestCase这个类,在这个测试类中编写测试方法

1
2
3
4
public void testAdd() throws Exception{
PersonService ps = new PersonService();
ps.add(1,2);
}

4)在outline窗口找到对应的方法以『android junit test』的方式运行该方法即可。

这里面有几个需要注意的点:

  • 业务类一定要放在业务包里
  • 测试类一定要放在测试包里
  • 测试方法的命名规则是在测试方法前面加上test的驼峰命名法
    这几个需要注意的点都不是强制性的规定,但是都是一些良好的编程习惯,一个优秀的程序员一定会遵循的规范。

##断言测试##

一般测试主要完成两方面的工作:

  • 对业务逻辑执行的是否正常进行测试
  • 对业务方法的返回值是否正确进行测试
    上面的第二项测试内容也叫做断言测试。断言测试其实调用了安卓提供的一个方法『Assert.assertEquals(expected, actual)』

依然是上面的例子:
首先准备一个业务方法:

1
2
3
public int add(int x, int y){
return x + y;
}

然后写测试方法:

1
2
3
4
5
6
public void testAdd() throws Exception{
PersonService ps = new PersonService();
int actual = ps.add(1,1);
//断言测试
Assert.assertEquals(2, actual);
}

这样就搞定了!

域名那点事

发表于 Jan 23 2014   |   分类于 教程   |  

这两天一直在整域名的事,走了很多弯路,折腾的很,搞的很郁闷啊!本来想在godaddy上申请购买www.easydone.com的域名,godaddy也提示域名没被占用,可以购买,但是点击加入购物车的时候,又弹出一堆单词,大意是说他们的商务代表会随后跟我联系,跟他们谈过之后才可以买,真他妈蛋疼!这种情况,以前从没遇到过,估计遇到过这种情况的人也很少吧……最后还是放弃了,退而求其次,只好在国内的买了,结果国内还没有卖www.easydone.com这个域名的,只有cn了,对比了各家之后,大概算了一下,长期购买还是万网便宜一些。于是,就在万网搞了!

买了域名之后,接下来要做的就是把OpenShift的二级域名绑定为新域名了,由于之前没接触过,就网上搜资料,搜到一篇教程,大概流程就是用SSH登录OpenShift空间(SSH登录OpenShift空间也是要证书的,用Xshell生成证书,然后添加内容到OpenShift后台即可),生成证书,然后上传到OpenShift后台,然后在设置alias别名。由于众所周知的原因,国内SSH登录OpenShift空间非常卡,甚至经常登录不了,所以虽然教程看起来不复杂,但是依然很折腾,搞的很郁闷!最后绑定域名后,登录OpenShift后台,我才发现原来特么的根本不用这么折腾,在OpenShift后台本来就用添加别名的按钮,直接点击,把新域名填上就可以了……

然后就是搞域名解析和CDN加速了。本来域名解析我是选了DNSPOD,CDN选了Incapsula的,搞了一半,突然想起来了百度加速乐,结果就贱兮兮地把DNSPOD抛在一边,用了百度加速乐和Incapsula的方案。这两部做完之后,访问网站,发现图片都不见了,点击任何一篇文章,又会自动跳转到原来的二级域名下,又经过一番折腾,发现WordPress后台没有把域名改过来,而且域名一定要加上http!紧接着又遇到另外一个问题,由于WordPress默认admin文件夹被强制加了SSL认证,但是免费版的Incapsula是不提供SSL证书的,于是又SSH进入OpenShift空间,修改了wp-config.php,把admin文件夹的SSL认证参数改成了false,然后访问就没问题了。

由于加速乐除了域名解析外,也有CDN的功能,这部分与Incapsula功能是重复的,但是加速乐需要备案。加速乐有审核,在审核通过之前,一切都看起来很完美,我试着ping了一下,结果延时降到了不到200,心里美滋滋的。但是加速乐审核完成后,貌似这时候才开启了加速乐的CDN缓存,我猜想可能加速乐的CDN和Incapsula的CDN冲突了,反正最终的结果就是网站直接400了。

这时候,我慌了……于是我又删除了在加速乐上添加的域名,换回了DNSPOD的解析,与此同时还要回到万网修改DNS,修改DNS生效时间也比较长,接下来就是等了。结果等了一天,我ping新域名www.easydone.cn,已经获取到了Incapsula提供的IP,说明解析已经生效,但是网站怎么还是400啊?起初我猜测可能是加速乐的缓存,很快我否定了这个设想,因为我已经在加速乐上删除了添加的域名,新解析生效后,与加速乐没有任何关系了!于是我试了很多方法,都搞不定,心里很烦躁!

这时候,只好使出杀手锏了!我直接越过Incapsula即CDN,把原先的二级域名作为CNAME添加到DNSPOD,直接解析到新域名www.easydone.cn,然后惊喜的发现,正常访问了!很显然,问题出在了Incapsula上,加速乐的缓存和Incapsula的缓存冲突了!于是,我进入Incapsula后台删除了域名之后重新添加,再到DNSPOD重新解析Incapsula提供的新IP和CNAME。最终,完美解决!

Nagios+NRPE+PNP4Nagios配置详解

发表于 Jan 15 2014   |   分类于 Linux   |  

##简介

Nagios是一个监视系统运行状态和网络信息的监视系统,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。

##功能介绍

Nagios 可以监控的服务和状态主要包括以下几个方面:

  1. 监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
  2. 监控主机资源(处理器负荷、磁盘利用率等);
  3. 简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
  4. 并行服务检查机制;
  5. 具备定义网络分层结构的能力,用”parent”主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
  6. 当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
  7. 可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
  8. 自动的日志滚动功能;
  9. 可以支持并实现对主机的冗余监控;
  10. 可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等。

##服务器环境


注:nagios要选择3.x版本,实际应用过程中发现4.x版本的nagios,pnp4nagios无法进行适配兼容,这个问题在pnp4nagios的社区论坛上有人专门问过,暂时还没解决。

##监控服务端安装

###安装基础软件

1
yum install gd fontconfig-devel libjpeg-devel libpng-devel gd-devel perl-GD openssl-devel httpd php mailx postfix cpp gcc gcc-c++ libstdc++ glib2-devel libtool-ltdl-devel perl-devel -y

###创建用户和用户组

1
2
groupadd -g 6000 nagios
useradd -u 6000 -g nagios -c "Nagios Admin" -s /sbin/nologin nagios

###编译安装nagios

1
2
3
4
5
6
7
8
9
tar -zxvf nagios-3.5.1.tar.gz
cd nagios
./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --enable-event-broker --enable-nanosleep --enable-embedded-perl --with-perlcache
make all
make install
make install-init
make install-commandmode
make install-webconf
make install-config

###配置Apache
①增加Apache的PHP支持
在/etc/httpd/conf/httpd.conf里找到下面一行

1
DirectoryIndex index.html index.html.var

将其修改为如下

1
DirectoryIndex index.html index.php

并增加下面一行

1
AddType application/x-httpd-php .php

②增加Nagios的WEB访问控制
在编译安装完成nagios之后,可以看到在/etc/httpd/conf.d下生成了文件nagios.conf,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# SAMPLE CONFIG SNIPPETS FOR APACHE WEB SERVER
# Last Modified: 11-26-2005
#
# This file contains examples of entries that need
# to be incorporated into your Apache web server
# configuration file. Customize the paths, etc. as
# needed to fit your system.
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
Directory "/usr/local/nagios/sbin"
# SSLRequireSSL
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
/Directory
Alias /nagios "/usr/local/nagios/share"
Directory "/usr/local/nagios/share"
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
/Directory
````
文件/usr/local/nagios/etc/htpasswd.users里存储了WEB端访问nagios的用户名和密码

使用下面的命令创建用户名密码

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagios

1
③设置权限

chown nagios /usr/local/nagios/etc/htpasswd.users

1
2
3
然后重启Apache,在WEB页面上即可访问到nagios,但是此时的nagios只是空有一个框架,还不能进行任何监控,nagios的监控需要通过各种插件($NAGIOS/libexec下的各种脚本)来实现。 

###安装nagios插件Nagios-Plugin

tar zxvf nagios-plugin-1.4.14
cd nagios-plugin-1.4.14
./configure –with-nagios-user=nagios –with-nagios-group=nagios –with-command-user=nagios –prefix=/usr/local/nagios
make all
make install
chmod 755 /usr/local/nagios

1
2
3
4
nagios-plugin安装完成,此时在目录/usr/local/nagios/libexec下就生成了各种监控脚本,如下图
![](http://easydone.qiniudn.com/nagios-02.png)
###防火墙配置
①禁用selinux

setenforce 0

1
编辑/etc/selinux/config,修改selinux参数如下

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - No SELinux policy is loaded.

SELINUX=disabled

SELINUXTYPE= can take one of these two values:

targeted - Targeted processes are protected,

mls - Multi Level Security protection.

SELINUXTYPE=targeted

1
②编辑/etc/sysconfig/iptables,增加下面一行,以放开httpd的80端口

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

1
2
3
4
5
6
7
8
9
###nagios目录和配置文件说明 
①nagios目录的名称和作用
![](http://easydone.qiniudn.com/nagios-03.png)
②nagios配置文件及其作用
![](http://easydone.qiniudn.com/nagios-04.png)
###nagios的WEB配置
**cgi.cfg**
完成以上步骤后,重启nagios和apache,会发现已经可以在WEB页面上打开进行浏览了,但是点到具体的标签项目,会出现下面的错误提示
![](http://easydone.qiniudn.com/nagios-05.png)

It appears as though you do not have permission to view information for any of the services you requested…
If you believe this is an error, check the HTTP server authentication requirements for accessing this CGI
and check the authorization options in your CGI configuration file.

1
此时就需要对cgi.cfg进行配置,找到下面的内容

use_authentication=1

1
2
3
4
5
6
7
8
将1修改为0即可。 

此时在WEB页面上打开nagios,已经可以看到已经监控到服务端本身的一些服务,使用的监控模板就是默认的**templates.cfg**,带参监控命令配置文件是默认的**commands.cfg**,定义的监控本机服务配置文件默认的**localhost.cfg**,在**contacts.cfg**里填上邮箱,即在遇到警告、故障、故障恢复可发送报警邮件到指定邮箱。根据实际需求可以对这些文件进行修改。

以上步骤虽然实现nagios监控,但是只是对服务端本机进行监控,还无法实现对远程服务器的监控和柱状绘图展现监控结果,对于远程服务器的监控是通过NRPE来实现的,柱状绘图展现监控结果是通过PNP4Nagios实现的,其中绘图部分有RRDTool完成。

###用PNP4Nagios和RRDTool实现绘图
①PNP4Nagios的安装

yum install rrdtool -y
tar zxvf pnp4nagios-0.6.21.tar.gz
cd pnp4nagios-0.6.21
./configure –with-nagios-user=nagios –with-nagios-group=nagios –with-rrdtool=/usr/local/rrdtool/bin/rrdtool –with-perfdata-dir=/usr/local/nagios/share/perfdata
make all
make install
make install-config
make install-init

1
2
3
4
5
②开启PNP4Nagios的日志调试功能,在文件process_perfdata.cfg中查找字符串LOG_LEVEL,将0改为2;

③增加Nagios绘图活动图标,点击图标即可进入柱状图显示新页面,即在Nagios监控页面增加柱状图显示入口

修改templates.cfg,增加如下内容

define host {
name host-pnp
action_url /pnp4nagios/graph?host=$HOSTNAME$
register 0
process_perf_data 1
}

define service {
name services-pnp
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
register 0
process_perf_data 1
}

1
2
3
 **注:其中graph字符串,在PNP4Nagios的0.6*版本之前是index.php,0.6版本之后都换成了graph.**

④修改nagios.cfg,以使nagios将绘图数据输出,在nagios.cfg中查找以下几项,修改后的信息如下

process_performance_data=1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata
enable_environment_macros=1

1
⑤修改绘图命令,在commands.cfg中增加以下内容

‘process-host-perfdata’ command definition

define command{
command_name process-host-perfdata
command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
}

‘process-service-perfdata’ command definition

define command{
command_name process-service-perfdata
command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl
}

1
⑥为每一个被监控的本地服务增加绘图功能,只需按照如下格式在预定义的服务名后面加上字符串**services-pnp**即可,在预定义的服务器名后加上字符串**host-pnp,**此处的host-pnp和services-pnp是与上面的templates.cfg里定义host-pnp和services-pnp对应的。

#services-pnp
define service{
use local-service,services-pnp
host_name nagios
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}

#host-pnp
define host{
use nagios,host-pnp
host_name nagios server
alias nagios server
address 127.0.0.1
}

1
⑦安装完PNP4Nagios后,在Apache配置文件包含目录/etc/httpd/conf.d里会生成PNP4Nagios的Apache支持配置文件pnp4nagios.conf,具体内容如下

SAMPLE CONFIG SNIPPETS FOR APACHE WEB SERVER

Alias /pnp4nagios “/usr/local/pnp4nagios/share”
Directory “/usr/local/pnp4nagios/share”
AllowOverride None
Order allow,deny
Allow from all
#

   # Use the same value as defined in nagios.conf
   #
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
    IfModule mod_rewrite.c
    # Turn on URL rewriting
    RewriteEngine On
    Options symLinksIfOwnerMatch
    # Installation directory
    RewriteBase /pnp4nagios/
    # Protect application and system files from being viewed
    RewriteRule "^(?:application|modules|system)/" - [F]
    # Allow any files or directories that exist to be displayed directly
    RewriteCond "%{REQUEST_FILENAME}" !-f
    RewriteCond "%{REQUEST_FILENAME}" !-d
    # Rewrite all other URLs to index.php/URL
    RewriteRule "^.*$" "index.php/$0" [PT]
    /IfModule
/Directory
1
2
3
4
5
6
7
8
9
10
至此对Nagios监控服务端自身监控的配置完成,效果如下图 
![](http://easydone.qiniudn.com/nagios-06.png)

![](http://easydone.qiniudn.com/nagios-07.png)

![](http://easydone.qiniudn.com/nagios-08.png)
##**远程被监控端的配置**
Nagios对远程主机的监控是通过插件Nrpe来实现的。可以这样理解,Nagios服务端使用Nrpe通过SSL的方式与客户端的Nrpe进行通信,客户端的Nrpe再发指令给Nagios-Plugin运行监控命令监控客户端的服务。这就是用Nrpe进行远程监控的原理,根据此,说明在客户端也必须要安装Nagios-Plugin,服务端也需要安装Nrpe.

①在Nagios服务端安装Nrpe

tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure && make all
make install-plugin
make install-daemon
make install-daemon-config

1
服务端需要定义command发出指令到Nrpe,在commands.cfg里增加如下内容

#’check_nrpe’ command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

1
2
3
②上面的图表里介绍了host.cfg和services.cfg这两个文件,这里就需要用到这两个文件,文件分别定义了被监控的主机和被监控主机的服务; 

host.cfg的内容格式如下,加上host-pnp增加柱状图表输出,其中192.168.10.101和192.168.10.102分别是被监控主机的地址

define host {
use nagios,host-pnp
host_name web1
alias web1
address 192.168.10.101
}

define host {
use nagios,host-pnp host_name web2
alias web2
address 192.168.10.102
}

1
services.cfg的内容格式如下,services-pnp也已加上

define service{
use local-service,services-pnp
host_name web1
service_description LOAD
check_command check_nrpe!check_load
}

define service{
use local-service,services-pnp
host_name web1
service_description USERS
check_command check_nrpe!check_users
}

define service{
use local-service,services-pnp
host_name web1
service_description DISK
check_command check_nrpe!check_disk
}

1
2
3
③在被监控客户端上安装Nagios-Plugin和Nrpe 

Nagios-Plugin的安装同上,略去;Nrpe的安装只需在最后增加一条指令即可,将nrpe作为xinetd下的一个服务运行,如下

make install-xinetd

1
2
3
④配置被监控客户端的nrpe 

在/usr/local/nagios/etc/nrpe.cfg里定义了各个被监控服务的命令,如下

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10%
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 300
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 30% -c 20%

1
2
3
同样,各种监控脚本都在目录/usr/local/nagios/libexec里存放。

⑤定义xinetd服务支持nrpe,编辑/etc/xinetd.d/nrpe文件,修改后的文件内容如下

default: on

description: NRPE (Nagios Remote Plugin Executor)

service nrpe
{
flags = REUSE
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/local/nagios/bin/nrpe
server_args = -c /usr/local/nagios/etc/nrpe.cfg –inetd
log_on_failure += USERID
disable = no
only_from = 127.0.0.1 192.168.10.100
}

1
2
3
其中192.168.10.100是Nagios服务端的IP 

定义nrpe服务端口,在/etc/services中增加一行,如下

nrpe 5666/tcp # nrpe

1
⑥测试nrpe是否安装成功,如成功,会显示nrpe版本,如下

[root@web1 ~]# /usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.12
```
⑦重启nrpe,service xinetd restart

至此,Nagios+Nrpe+PNP4Nagios配置就全部完成了,有一点需要注意的是所有的Nagios和PNP4Nagios的目录属主都必须是nagios用户和nagios用户组。

⑧被监控主机的页面效果如下

Error for compiling Nagios-Plugins On CentOS

发表于 Jan 14 2014   |   分类于 Linux   |  

###Environment:

  • System:CentOS release 6.3 (Final)
  • SoftWare:Nagios-Plugins-1.4.14

###Problem Description:

1
2
3
4
5
6
7
BEGIN failed--compilation aborted at Makefile.PL line 11.
Can't run perl Makefile.PL at ../tools/build_perl_modules line 68.
make[2]: *** [all-local] Error 2
make[2]: Leaving directory `/usr/local/package/nagios-plugins-1.4.14/perlmods'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/package/nagios-plugins-1.4.14'
make: *** [all] Error 2

###Solution:

The packageExtUtils-MakeMakerhas to be installed first. Additionally, perl-devel is also needed to compile it. Then, reconfigure nagios-plugins.

1
2
3
4
5
6
7
8
yum install perl
yum install perl-devel
wget http://search.cpan.org/CPAN/authors/id/M/MS/MSCHWERN/ExtUtils-MakeMaker-6.64.tar.gz
tar -zxvf ExtUtils-MakeMaker-6.64.tar.gz
cd ExtUtils-MakeMaker-6.64
perl Makefile.PL
make
make install

Then,we can continue the nagios-plugin installling.

CentOS查看系统硬件信息

发表于 Jan 13 2014   |   分类于 Linux   |  

CentOS查看系统硬件信息

  • uname -a # 查看内核/操作系统/CPU信息的linux系统信息命令
  • head -n 1 /etc/issue # 查看操作系统版本,是数字1不是字母L
  • cat /proc/cpuinfo # 查看CPU信息的linux系统信息命令
  • hostname # 查看计算机名的linux系统信息命令
  • lspci -tv # 列出所有PCI设备
  • lsusb -tv # 列出所有USB设备的linux系统信息命令
  • lsmod # 列出加载的内核模块
  • env # 查看环境变量资源
  • free -m # 查看内存使用量和交换区使用量
  • df -h # 查看各分区使用情况
  • du -sh # 查看指定目录的大小
  • grep MemTotal /proc/meminfo # 查看内存总量
  • grep MemFree /proc/meminfo # 查看空闲内存量
  • uptime # 查看系统运行时间、用户数、负载
  • cat /proc/loadavg # 查看系统负载磁盘和分区
  • mount | column -t # 查看挂接的分区状态
  • fdisk -l # 查看所有分区
  • swapon -s # 查看所有交换分区
  • hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
  • dmesg | grep IDE # 查看启动时IDE设备检测状况网络
  • ifconfig # 查看所有网络接口的属性
  • iptables -L # 查看防火墙设置
  • route -n # 查看路由表
  • netstat -lntp # 查看所有监听端口
  • netstat -antp # 查看所有已经建立的连接
  • netstat -s # 查看网络统计信息进程
  • ps -ef # 查看所有进程
  • top # 实时显示进程状态用户
  • w # 查看活动用户
  • id # 查看指定用户信息
  • last # 查看用户登录日志
  • cut -d: -f1 /etc/passwd # 查看系统所有用户
  • cut -d: -f1 /etc/group # 查看系统所有组
  • crontab -l # 查看当前用户的计划任务服务
  • chkconfig –list # 列出所有系统服务
  • chkconfig –list | grep on # 列出所有启动的系统服务程序
  • rpm -qa # 查看所有安装的软件包
  • cat /proc/cpuinfo # 查看CPU相关参数的linux系统命令
  • cat /proc/partitions # 查看linux硬盘和分区信息的系统信息命令
  • cat /proc/meminfo # 查看linux系统内存信息的linux系统命令
  • cat /proc/version # 查看版本,类似uname -r
  • cat /proc/ioports # 查看设备io端口
  • cat /proc/interrupts # 查看中断
  • cat /proc/pci # 查看pci设备的信息
  • cat /proc/swaps # 查看所有swap分区的信息
    用 yum provides “*/lspci”命令来查询上述命令,然后安装相应的软件包。

关于转基因

发表于 Jan 8 2014   |   分类于 随笔   |  

从国家的层面讲,并没有旗帜鲜明地反对转基因;相反,实质上是在支持转基因,只不过现在的舆论导向有点问题,迫于压力,官方也不敢旗帜鲜明地支持转基因。

央视新闻调查,“黄金大米”的专题里讲的很清楚,转基因本身是一种好技术,但是通过违规操作推广转基因,只能增加人们对转基因的恐惧,让人会以为推广转基因里会有更多的黑幕,而事实也确实是存在黑幕。

方舟子、冯大辉、刘彦伟们反对的很多所谓的“反转控”,有不小的部分其实并不是“反转控”,而是“转控”操作过程的黑幕,只不过这一部分被方舟子们强行“反转控”,以方舟子为首的“转控”们也从来都都不会给人辩驳的机会,方舟子太容易钻牛角尖,为人太偏激,可以从讨论转基因扯到数十年前崔永元主持里的失误;刘彦伟签名里所谓的“不服来辩”只不过是个姿态;而冯大辉是个喜欢摆观点但是不解释,而用粗口来证明自己的人。所谓先推广,再解决黑幕,不过又是一个“先发展经济,再治理污染”的类比翻版。

转基因很好,但是研究转基因的科学家们有这群猪一样的队友(虽然科学家们是被他们强行队友了),这么好的技术推广不下去非常遗憾,也非常可惜,但是却也是活该。

那些年

发表于 Dec 15 2013   |   分类于 感悟   |  

最近一直在看上世纪九十年代的一个香港剧集『天地男儿』,很经典的一个港剧。一共六十五集,之前一直强迫自己不要去看结尾,虽然真的很想很想非常想知道结局,但是又害怕错过中间精彩的剧情。那天晚上十一点多的时候,看到了五十八集了,实在忍不了了,这罗嘉良演的徐家立简直坏透了,彼时对这部剧最大的期待就是想看看这家伙怎么死的!熬到现在专门看了结尾,虽然觉得他死的太过容易,不是很过瘾,但是看到其他人还算圆满的结局,也就淡化了之前对徐家立的死的期待。多希望电视剧只有二十集啊,那时候的家立还是个好人……剧集里伍咏薇演的罗慧芳,真希望自己能有这样的老婆啊,有点后悔去查她的资料和图片,就让她的形象定格在电视剧里多好。more

另外一部剧,跟这部一样,同样出自戚其义之手,更加家喻户晓,叫『创世纪』,罗嘉良演了好人。提起『创世纪』,我就又开始怀旧了。其实,不只是我,这应该是当年我们313宿舍集体的回忆。当年,我们宿舍晚上睡觉前的必备活动项目就是聊电视剧剧情。那时候我们整个学校都是封闭式管理,全体都要住校,一层楼一个公共的卫生间,宿舍里只有早上、中午和晚上开门。晚上下自习九点多,洗刷完毕躺床上就开始海侃。几年时间,聊得最多的就是『创世纪』和『流金岁月』。反倒是上了大学之后,大家都有了电脑,晚上有的上网聊妹子,有的打游戏,有的上自习到很晚,有的早早就睡觉了,再也没有高中时候那简陋的条件下的热闹情境。如今毕业了,自己在外面租房住,一个人的屋子,就愈发地怀念已经逝去的那些年。

上个月的24号,我回家参加了当时一位室友(也是我兄弟)的婚礼,回去后才发现没去几个朋友,大家不是在外面上学就是上班,都很忙,时间排不开,我一个人捎了八个人的红包。在去他家的前一天晚上,我发了一条状态:“小伙伴们,在明天温暖的日光里,我会带着你们的心意,去看我们共同的,十七岁那年的雨季。”结果钓上来好多以前默默潜水的家伙,哈哈!其实我也是请了三天假,加上两天周末,五天时间专门为回去参加他的婚礼。看着兄弟脸上洋溢着的幸福,心中由衷地感到高兴。脑海里不断地闪现那些年的点点滴滴,不管是相互扶持,还是冲突矛盾,现在都成了兄弟之间共同的美好回忆。

前些日子,和菜头在微信上发了一篇文章人过三十交友难。这么伤感的一个题目,这篇文章却以一个理性到近乎毫无感情和残忍的方式平述出来,三十岁,真的好可怕。文章最后做了一个总结:

###30岁后,人们为何很难结交亲密朋友?

1)你开始觉得人生有限,不能过多用在与陌生人交流;

2)结交好友的三个外部条件很难满足:

近距离接触、反复见面、计划外的互动;

3)社会地位和收入差异;

4)对方配偶的介入;

5)子女限制了你的社交圈;

6)你对好友的标准比年轻时严格得多。

那些年的美好与不美好,终究成了让人无法忘怀,想起来总会微笑甚至伤感的回忆。三十岁,一个说近不近,说远真的不远的时候,该珍惜现在拥有的一切了。趁着现在还拥有,朋友们,多见见面呗。

1…789…15
Ailurus

Ailurus

Android Developer

145 日志
13 分类
215 标签
RSS
Github Twitter Facebook Weibo
Links
  • 明哥
  • veaer
  • 程序亦非猿
  • 阿布
  • 区长
  • 卡老师
© 2020 Ailurus
由 Hexo 强力驱动
主题 - NexT.Pisces