12.23.2008

偶的新网站

http://www.enlamp.cn

关于Spider的一些问题

Sosospider很烦人,就封掉吧。
在服务器里进行封杀

BrowserMatch Sosospider a_robot=1
BrowserMatch libwww a_robot=1


中间添加如下
Order allow,deny
Allow from all
Deny from env=a_robot




统计中还出现BSpider,搜索一下,标识没有BSpider。
原来他用libwww呀。封杀之
http://www.robotstxt.org/db.html
http://www.robotstxt.org/db/bspider.html

封杀完成,测试
curl -A "libwww" http://www.myweb.com
curl -A "Sosospider" http://www.myweb.com
403了,大功告成。

curl的详细参数见下面链接
http://curl.haxx.se/docs/manual.html

12.15.2008

加载php扩展

以前安装php的时候,经常需要一些模块,忘了装只能重新编译了
现在才发现,可以直接不用重新编译php的。

cd 源码目录
cd ext
cd 到你想安装的模块,比如我的 mcrypt

/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make
cp modules/mcrypt.so /usr/local/php5/lib/php/extensions

修改 php.ini
添加
extension="mcrypt.so"
注:检查你的扩展目录,我得已经设置好了
extension_dir = "/usr/local/php5/lib/php/extensions"
所以直接extension="mcrypt.so"就可以。
如果你的没设置,那么需要绝对路径

几个小问题

1. edyliu-laptop:~$ sudo modprobe vfat
WARNING: Error inserting fat (/lib/modules/2.6.27-7-generic/kernel/fs/fat/fat.ko): Cannot allocate memory
FATAL: Error inserting vfat (/lib/modules/2.6.27-7-generic/kernel/fs/vfat/vfat.ko): Cannot allocate memory

内存不足,呵呵
可是挂载分区的时候,它提示说内核没有vfat.
free了一些内存,重新来过。一切顺利!

2. vmware server linux版 对于个人来说, 有点烦人。 总是自动启动, 一生气把它干掉了。

3. source insight 的 linux 版,看源代码不错的工具

sourcenav http://sourcenav.sourceforge.net/index.html

4. 读点MySQL的东西,Internal 还是代码。。。。。我接着看

12.11.2008

压力测试之MySQL

系统 CentOS 5.1 x86_64

Step1 install ltp (linux test packages)
rpm -ivh bglibs-1.104-1.x86_64.rpm bglibs-devel-1.104-1.x86_64.rpm
cp /usr/include/unix/* /usr/include/sys/
tar xvzf ltp-full-20081130.tgz
make && make install

Step2 install jdbc
http://dev.mysql.com/downloads/connector/j/5.1.html
tar xvzf mysql-connector-java-5.1.7.tar.gz
cp mysql-connector-java-5.1.7/mysql-connector-java-5.1.7-bin.jar ltp-full-20081130/testcases/DOTS/
export CLASSPATH=$CLASSPATH:path---DOTS下的 Dots.jar 和 mysql-connector-java-5.1.7-bin.jar
比如我的
export CLASSPATH=$CLASSPATH:/root/test_db/ltp-full-20081130/testcases/DOTS/Dots.jar:/root/test_db/ltp-full-20081130/testcases/DOTS/mysql-connector-java-5.1.7-bin.jar

Step3 测试
先执行
sh PerfMon.sh 开启监听端口,就是监视mysql情况

再执行
cp config.ini mysql.ini
修改如下信息
UserID = dots
Password = passwd
DriverClass = org.gjt.mm.mysql.Driver
URL = jdbc:mysql://localhost:3306/TESTDB?user=dots&password=passwd

SERVER_IP = localhost

最后开启测试
chmod +x Dots.sh
./Dots.sh BTCJ1
./Dots.sh BTCJ2
./Dots.sh BTCJ3
./Dots.sh BTCJ4
./Dots.sh BTCJ5
./Dots.sh BTCJ6


1. Q: make LTP 出错
signalfd01.c:58:26: error: sys/signalfd.h: No such file or directory
make[4]: *** [signalfd01] Error 1

A: 安装 bglibs

2. 安装监控软件ganglia/munin

参考:
http://ltp.sourceforge.net/
http://tuxmining.blogspot.com/2008/05/mysql-51-2-weeks-of-stresstests.html
http://ganglia.sourceforge.net/
http://munin.sourceforge.net/

12.10.2008

用了一下PHP

最近程序那边经常要重启,因为用的openvz嘛,他们的程序经常把服务器搞的内存不足。
只能重启了,而我每次都要帮他们重启。

今天想php可以调用系统命令,让他们自己重启行了。

echo "I am Rebooting The Server!"."
";

$result = exec('sudo vzctl restart 217 2>&1', $retval);
$retval=str_replace("\r","
",$retval);

foreach($retval as $k => $row)
{
if($k == 0 || $k == count($retval)-1)
echo ($row . "
");
else
echo "...............
";
}
echo "The Server Is Up NOW!";

主要几点就是
1. 无法显示结果到网页 2>&1 就可以了
2. 无法运行root权限的指令,把daemon加到 sudo组里
daemon ALL=(ALL) NOPASSWD: /usr/sbin/vzctl (执行指令)
3. sudo 只能到tty 做如下注释:
#Defaults requiretty

12.08.2008

SPEC 文件分析(ZT)

详细的介绍了 spec文件的书写规则以及关键部分

spec文件规范
RPM软件包是怎样制作的呢?对大多数Linux开发工程师来说是比较陌生的。

其实,制作RPM软件包并不是一件复杂的工作,其中的关键在于编写SPEC软件包描述文件。要想制作一个rpm软件包就必须写一个软件包描述文件(SPEC)。这个文件中包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。

描述文件说明如下:

(1) 文件头

一般的spec文件头包含以下几个域:

Summary:
用一句话概括该软件包尽量多的信息。
Name:
软件包的名字,最终RPM软件包是用该名字与版本号,释出号及体系号来命名软件包的。
Version:
软件版本号。仅当软件包比以前有较大改变时才增加版本号。
Release:
软件包释出号。一般我们对该软件包做了一些小的补丁的时候就应该把释出号加1。
Vendor:
软件开发者的名字。
Copyright:
软件包所采用的版权规则。具体有:GPL(自由软件),BSD,MIT,Public Domain(公共域),Distributable(贡献),commercial(商业),Share(共享)等,一般的开发都写GPL。
Group:
软件包所属类别,具体类别有:
Amusements/Games (娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving (应用/文档)
Applications/Communications(应用/通讯)
..........
Source:
源程序软件包的名字。如 stardict-2.0.tar.gz。

(1)%description 段:
软件包详细说明,可写在多个行上。

(2)%prep段

这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,命令可以有很多行,如我们常写的tar解包命令。

(3)%build段

本段是建立段,所要执行的命令为生成软件包服务,如make 命令。

(4)%install段

本段是安装段,其中的命令在安装软件包时将执行,如make install命令。

(5)%files段

本段是文件段,用于定义软件包所包含的文件,分为三类--说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。

(6)%changelog段

本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中,以便查询之用。每一个修改日志都有这样一种格式:第一行是:* 星期 月 日 年 修改人电子信箱。其中:星期、月份均用英文形式的前3个字母,用中文会报错。接下来的行写的是修改了什么地方,可写多行。一般以减号开始,便于后续的查阅。

打包
如果想发布rpm格式的源码包或者是二进制包,就要使用rpmbuild工具(rpm最新打包工具)。如果我们已经根据本地源码包的成功编译安装而写了 spec文件(该文件要以.spec结束),
那我们就可以建立一个打包环境,也就是目录树的建立,一般是在/usr/src/redhat/目录下建立5个目录。它门分别是BUILD、SOURCE、SPEC、SRPM、RPM。其中BUILD目录用来存放打包过程中的源文件,SOURCE用来存放打包是要用到的源文件和patch,SPEC用来存放spec文件,SRPM、RPM分别存放打包生成的rpm格式的源文件和二进制文件。当然我们可以根据需要来选用不同的参数打包文件,笔者总结如下3条。

1) 只生成二进制格式的rpm包
rpmbuild -bb xxx.spec
用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)


1 Executing: %prep
2 + umask 022
3 + cd /usr/src/dist/BUILD
4 + exit 0
5 Executing: %build
6 + umask 022
7 + cd /usr/src/dist/BUILD


生成的文件会在刚才建立的RPM目录下存在。

2)只生成src格式的rpm包

rpmbuild -bs xxx.spec

生成的文件会在刚才建立的SRPM目录下存在。

3) 只需要生成完整的源文件

rpmbuild -bp xxx.spec

源文件存在目录BUILD下。

读者朋友可能对这个命令不太明白,这个命令的作用就是把tar包解开然后把所有的补丁文件合并而生成一个完整的具最新功能的源文件。

4) 完全打包

rpmbuild -ba xxx.spec

产生以上3个过程分别生成的包。存放在相应的目录下。

软件包制作完成后可用rpm命令查询,看看效果。如果不满意的话可以再次修改软件包描述文件,重新运行以上命令产生新的RPM软件包。

典型spec文件分析
通过第一部分的介绍,我们对软件包的管理以及spec文件的一些细节应该掌握的差不多了,接下来通过分析kaffeine.spec(kaffeine是linux平台下的媒体播放器)文件来让读者朋友实践一回spec文件的规范和书写。

Kaffeine.spec文件内容如下:


%define debug_package %{nil}
Name: kaffeine
Version: 0.4.3
Release: 25
Summary: A xine-based Media Player for KDE
Group: Applications/Multimedia
License: GPL
URL: http://kaffeine.sourceforge.net/
Source0: kaffeine-0.4.3.tar.bz2
Source1: logo.png
Source2: icon.tgz
Source3: kaffeine.desktop
Source4: codecs.tgz
Patch: kaffeine-0.4.3-fix-hide-crash.patch
Patch1:kaffeine-0.4.3-without-wizard.patch
BuildRoot: /var/tmp/kaffeine-root
%description
Kaffeine is a xine based media player for KDE3. It plays back CDs,
DVDs, and VCDs. It also decodes multimedia files like AVI, MOV, WMV,
and MP3 from local disk drives, and displays multimedia streamed over

以上这部分就是我们第一部分所说的文件头。这一部分主要包括软件包的名称、版本、源代码和patch等信息,通过这些关键字我们可以一目了然。查看以上内容,我们会全面了解该软件包。

接下来的这一个段就是核心部分,涉及到解包、补丁、编译、安装的过程。


%prep
%setup -q
%patch -p1
%patch1 -p1
%Build
make -f admin/Makefile.common cvs
./configure --prefix=/usr
make
#for mo files
pushd po
rm *.gmo
make
popd
%install
mkdir -p $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/share/services
cp $RPM_BUILD_ROOT/usr/share/apps/kaffeine/mms.protocol $RPM_BUILD_ROOT/usr/share/services
cp $RPM_BUILD_ROOT/usr/share/apps/kaffeine/rtsp.protocol $RPM_BUILD_ROOT/usr/share/services
#mkdir -p $RPM_BUILD_ROOT/usr/lib/firefox/plugins
#cp $RPM_BUILD_ROOT/usr/lib/kaffeineplugin/kaffeineplugin.so
$RPM_BUILD_ROOT/usr/lib/firefox/plugins
cp %{SOURCE1} $RPM_BUILD_ROOT/usr/share/apps/kaffeine
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine.png
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine-pause.png
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine-play.png
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine-record.png
mkdir -p $RPM_BUILD_ROOT/usr/share/icons/crystalsvg
tar zxvf %{SOURCE2} -C $RPM_BUILD_ROOT/usr/share/icons/crystalsvg
mkdir -p $RPM_BUILD_ROOT/usr/share/applnk/App/Multimedia
cp -r %{SOURCE3} $RPM_BUILD_ROOT/usr/share/applnk/App/Multimedia
mkdir -p $RPM_BUILD_ROOT/usr/lib/win32
tar zxvf %{SOURCE4} -C $RPM_BUILD_ROOT/usr/lib/win32
%clean
rm -rf $RPM_BUILD_ROOT
%post
ln -s /dev/cdrom /dev/dvd
ln -s /dev/cdrom /dev/rdvd
%files
%defattr(-,root,root)
/usr


这部分内容与所要打的包有关系,我们要根据具体情况来写出编译过程。这部分内容是最复杂的内容,当然,我们也可以看出,这样的写法其实就是在写一种规范化的脚本,说到脚本,读者朋友门就应该领会到这部分内容的灵活性了。


%changelog
* Fri Jul 1 2005 AiLin Yang -0.4.3-25
- modified the fullscreen bottom control panel
.....


这部分内容可以说是spec文件的最后内容了,它对团队软件开发以及后续的软件维护至关重要,它相当于一个日志,记录了所有的基于该软件包的修改、更新信息。

小结
要想制作一个RPM格式的软件包必须编写软件包描述文件。其标准命名格式为:软件名-版本号-释出号.spec,这个文件详细描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,以及软件包所要包含的文件等等。有了这个文件RPM就可以制作出相应的rpm软件包。

原文作者:
杨爱林,Linux 研发工程师, 通过 alyang@redflag-linux.com 可以跟他联系。

12.07.2008

常识积累

1. 关于32bit和64bit CPU的一些知识

通常将CPU称为32位CPU或64位CPU等。个人电脑经常使用的英特尔奔4、赛扬CPU,以及AMD的Athlon XP都是32位CPU。顾名思义,Athlon 64是以64位为单位完成一次计算的CPU。大体上来说,64位CPU能够一次性处理32位CPU分2次完成的计算,因此有望提高处理性能。
对于64位CPU,可寻址内存也将增加。普通的32位CPU,软件可寻址内存最大为4GB(约40亿字节),而64位CPU理论上最大可使用16EB(exabyte,16×10亿×10亿字节)。而Athlon 64的可寻址内存则小于16EB,为1TB(约1000×10亿字节)。

2. Ubuntu 8.10的一个好玩的,类似mac的dock

修改/etc/apt/sources.list

deb http://repository.cairo-dock.org/ubuntu intrepid cairo-dock
sudo apt-get update
sudo apt-get install cairo-dock cairo-dock-plug-ins

系统工具 Cario-dock 打开效果看看,帅不?

3.因为系统而要用Zend optimizer,我装的是v3.3,安装过程一切顺利,重启apache后发现并没有加载Zend optimizer模块,在apache的error_log里也没有发现记录,执行php -v命令有以下输出:

Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: cannot restore segment prot after reloc: Permission denied

上网查找原因,说是selinux的原因,服务器确实开着selinux的,更改selinux的配置文件将其设为disable,可我不想重启服务器,有以下解决办法:

执行命令:setenforce 0

就可以不重启关闭selinux了

12.03.2008

Apache+mod_cband限速

http://cband.linux.pl/ 官方被 HX 了,看不到

下载
wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz

安装
./configure --with-apxs=/whereis apxs
make
make install

然后就加载一下
具体用法
cat INSTALL

Mail服务器RBL反垃圾邮件

最近邮件服务器经常队列中堆满垃圾邮件。

添加了一个RBL,希望能好一点。
smtpd_client_restrictions = reject_rbl_client cblless.anti-spam.org.cn, reject_rbl_client dnsbl.sorbs.net

maps_rbl_domains = bl.spamcop.net
smtpd_recipient_restrictions = ....
reject_maps_rbl,permit

参考链接:
http://www.postfix.org/uce.html

http://anti-spam.org.cn

http://jimsun.linxnet.com/misc/postfix-anti-UCE.txt

http://www.us.sorbs.net/

收工吃饭。

12.02.2008

Probing PCI hardware (bus 00)

Linux安装时停止在Probing PCI hardware (bus 00)错误解决办法

环境:
  主板是英特尔G35的芯片组。两G条子。硬盘:SATA接口。

  操作系统 CentOS4.X

  故障:
  Linux安装时提示 Probing PCI hardware (bus 00)

  原因:
  与硬盘的接口及PCI接口有关。

  解决办法:
  启动到LINUX界面下按F3,后输入linux pci=nommconf 后回车即可。安装完后,重启时还需要输入。

安装完之后编辑 /etc/grub.conf 将pci=nommconf 附加到内核后面,在同一行上。如下所示:

kernel /boot/vmlinuz-2.6.9-78.0.5.plus.c4smp ro root=LABEL=/ pci=nommconf