slackware使用小记

  最近在同事的带动下,决定把工作时的操作系统换成Linux。
  我原先之所以不用Linux,是对Gnome的桌面缺乏足够的信心,对KDE又极度不爽。但自从看了cxa大师装上slackware + dropline X后,对dropline基于Gnome的X界面惊叹不已,便把自己20G的笔记本硬盘掰下一小块,装上了Slackware Linux。
  安装过程时而晴空万里,时而倾盆大雨,Linux就是在成功和失败的交织中让人学会玩味生活,所以才获得了全世界电脑爱好者的追捧,再次证实很多人是在自虐中寻求快感的。
  好了言归正传,先做些准备工作,比如用PQMagic分区,下载slackware安装包等等。随后装Grub for dos,修改boot.ini,重启后用Grub引导安装即可。
  Dropline的确很强大,它能够帮你妥善管理包括Firefox和Thunderbird在内的很多软件包,并在有软件更新的时候向你发出提示信息。我挑选了跟我平时工作紧密相关的软件包,放在开始菜单的toolbar里,基本可以完成平日所有的工作了,他们是:网页浏览器Mozilla Firefox,字处理软件Open Office,邮件客户端Mozilla Thunderbird,支持Jabber协议的聊天工具Gaim,SSH终端Teminal(打算换成putty),Web开发工具Bluefish,以及一个RSS阅读器Liferea。
  安装过程并不是一帆风顺,比如装USB的外接鼠标就出现了很多麻烦,现在工作起来也不很正常,再慢慢研究。SCIM装上了很久才能成功的使用,问题出在没有更新gtk的module列表,以及LOCALE设置有误。连安装zhcon的时候,系统也给我惹了不少麻烦,最后在同事的大力帮助下,在src/debug.h里加上一行#include<assert .h>才算了事。我白用g++ 3.3.5来伺候它了,或许2.9.5更爽些?
  虽然Dropline的后续开发脚步骤然停止,Slackware也宣称今后将更多支持KDE的桌面环境,但我还是很喜欢现在的样子,因为它很适合我的需求,多一分则乱,少一分则空。在我PIII 800的本子上跑的比较流畅,能够更便利的与其它UNIX/Linux服务器进行交互。我不确定它是不是最好的发行版之一,但我还是决定把它留下来当我的助手。

IE和Firefox在提交表单时对来路页面的判断差异

  首先我们做个测试:
  写一段JS提交一个表单:

theForm.action=”test.php?id=1″;
theForm.submit();

  在test.php里打印来路页面:

die($_SERVER[“HTTP_REFERER”]);

  然后分别在Firefox和IE里面查看test.php页面,发现均显示test.php。
  接下来,将上述JS更换为:

location.href=”test.php?id=1″;

  即改用GET方式提交表单。然后再次查看test.php页面,会发现Firefox仍然显示test.php,而IE显示空白。
  这说明IE并不将location.href属性的更改视为一次点击链接的过程。

为apache调整linux系统的时区

  一台操作系统为fedora的服务器,在安装时设定的时区是EST,为了便于awstats的日志统计,现欲将系统时区调整为CST(中国标准时间),并使apache服务应用该设置。
  第一步是修改系统时区。方法是多种多样的,比如tzselect,比如ln -s /etc/localtime /usr/share/zoneinfo/yourregion/yourcity,等等。
  第二步是使apache使用新的时区。通常的思路是/path/to/apache/sbin/apachectl restart,但是我尝试了几次都失败了,我便以为系统的硬件时钟也需要调整,于是又走了许多弯路。后来我突然想到一个例子,就是当我们未正确设置servername时,restart不显示任何信息,而start会提示”Could not determine the server’s fully
qualified domain name…”之类的提示信息,我于是推断restart并不等于stop+start。为了证实这个思路,我stop了apache服务,然后start,从日志记录中看到,新的时区设置已被应用到apache中。

使用Easy Firewall Generator和Fireparse构建易于维护的Linux防火墙

  通常,我们需要在Linux环境下手写iptables/ipchains规则,并设置为每次启动时运行。由于技术水平等因素制约,规则的内容并不全面,效率也不够高。
  现在有了Easy Firewall Generator,事情就变得简单多了。它是一个用PHP语言编写的程序,用户向其提交一些参数,就可以获得一套防火墙规则,拷贝下来就可以使用了。
  我们可以从EFG提供的方案中学到很多东西,例如:每条链最末一条规则的action都是RETURN,这样当数据包不符合先前规则时,就可以提前退出,而不再试图匹配后面的规则,提高了整体性能。
  关于Easy Firewall Generator使用的几点技巧:我们配置防火墙,通常是先关掉所有端口,再开放一系列端口,但在EFG的参数设置里,只能输入一个端口,怎么办呢?我们可以这样做:选中“Allow Inbound Services”并提交,然后输入一个端口,例如110,再提交,在获取的规则中查找110字符串,按照所在行的规则续写就可以了。另外,如果想使用我们稍后提到的fireparse工具,还需要将“Log entries in a Fireparse format”选中。
  接下来我们开始使用fireparse。fireparse是一个用perl语言编写的日志解析程序,更确切的讲,它是ADMLogger的一个重要的插件;它还会将分析结果寄至管理员的邮箱,便于快速反应和维护。
  fireparse的安装方法如下:
  首先到aaron.marasco.com下载ADMLogger(已经内含parser插件)。
  然后仔细阅读doc/README.ADMLogger。尤其是搞懂第三步:mailfirst一定要加上;如果parse日志已经设置为按日期保存(强烈推荐),则不必拷贝那个轮转文件了。最后执行一下 /var/adm/logger/logger.pl,在确认无误后,即可放入cron文件自动运行。

Awstats安装手记

  今天分别在异域桃源BBS和我公司的网站渤海易网上安装了Awstats。它是一个Perl编写的,基于Web服务器日志的异常强大的网站访问统计系统,使用它可以非常准确的得到各个时段的访问量及汇总,横向、纵向的数据比较,来路页面,对搜索引擎的友好程度,用户地理来源,甚至死链接。
  先折腾异域桃源。异域桃源BBS的服务器是Linux系统的,默认安装了Perl,我到http://sourceforge.net/projects/awstats/ 上下载了Awstats的最新版本,解压,然后将里面的wwwroot/cgi-bin拷贝到apache的cgi目录下,再将wwwroot/icon目录拷贝到www页根目录下。接下来是对配置文件的改动了。将awstats.model.conf保存为awstats.yyty.conf,修改LogFile和SiteName的值,执行awstats.pl -update -config=yyty 即可对日志进行分析(不妨将这句加入crontab定时运行)。在浏览器地址栏内输入http://yyty.org/awstats/awstats.pl?config=yyty 就能够看到截至日志分析时刻的统计结果了。awstats的配置文件很长,尤其在中后部分有一些细节的配置,以及插件的选择,不妨尝试一下,很多遇到的问题可以在配置里找到解决办法。
  有了第一次架设经验,在公司网站服务器上做就很踏实了。渤海易网的服务是架设在IIS上的,基本安装过程与Linux下是相似的。首先,到http://activestate.com/Products/ActivePerl/ 去下载ActivePerl用于解释Perl。其次,我们需要自行设定一个方便Awstats解析的日志格式:打开IIS配置窗口,选择“W3C扩充扩展日志文件格式”,仅仅选中以下各项:date,time,c-ip,cs-username,cs-method,cs-uri-stem,cs-uri-query,sc-status,sc-bytes,cs-version,cs(User-Agent),cs(Referer),保存设置,关闭IIS服务,将服务器上已有日志妥善转移到别处,然后启动IIS服务。接下来配置Awstats的配置文件,将LogFormat设定为”date time c-ip cs-username cs-method cs-uri-stem cs-uri-query
sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)”。此后步骤同Linux部分。如果查看统计结果时发现数据时间统一向后错位了8个小时怎么办?不要着急,仔细在配置文件里找答案,有个叫做timezone的插件可以解决这个问题。加上timezone +8即可。但加载此模块会降低Awstats40%的性能,需三思,更高级改动方法详见 http://www.chedong.com/tech/awstats.html
  观看统计结果是件非常有成就感的事情,尤其是观看渤海易网的各项指标时。通过对网站关键字的分析,以及各类搜索爬虫路过的痕迹,我们能够在网站优化和安全控制方面更有的放矢的开展工作;观察错误日志,我们甚至发现了几处死链接。总之,统计的目的就是让人们对一件事物有宏观的把握,并能发现和改善微观矛盾,促进其进一步发展。

使用cronolog对apache日志实现轮询

  apache的access_log等日志如果长度过大,会显著影响系统的性能,这种现象在日志超过100MB的情况下特别明显。我们可以使用Apache推荐的一个近几年发展已经比较成熟的工具cronolog来对日志文件进行轮循,例如:
TransferLog “|/usr/sbin/cronolog /path/to/apache/logs/%Y/%m/%d/access_log”
  在这个示例中,access_log被通过管道方式发送给cronolog,后者将日志按“日”写入对应目录下的access_log。
  那么,我们每天定时mv走access_log,并按照特定的规则命名,是否也可以达到同样的效果呢?答案是否定的。因为在unix/linux系统中,一个文件是不依赖于它的文件名存放的,将access_log mv成别的文件名,apache仍然会写入那个文件,而不会另起炉灶,除非重启apache服务。

将本站的主要链接全部换成静态样式

  在google的眼睛里,一个页面后跟不同的参数,仍然是一个页面,这种算法对很多web论坛和诸如Bo-Blog的代码很不利。于是我在.htaccess中加入了Rewrite规则,并修改了代码中的相应链接,历时两个钟头,完成了url的美化大业。有人说apache的Rewrite功能是URL操作的瑞士军刀,此话的确不假!
  附本人在.htaccess中做的改动:
[separator]

RewriteEngine on
RewriteBase /
RewriteRule a_(.+).html$ index.php?job=art&articleid=a_$1 [L]
RewriteRule cat_(.+).html$ index.php?job=showcat&cat=$1 [L]
RewriteRule day_(.+).html$ index.php?job=showday&tar=$1 [L]

  RewriteBase一定要加,否则系统会不知道index.php的路径,故无法执行重写规则,并显示错误。

如何取得MSN帐号的登录状态

  访问 http://www.onlinestatus.org ,就会看到一个叫做“Online Status Indicator”的东西,它以图标的方式指示出某个MSN Messenger帐号是否在线。
  点击 http://www.onlinestatus.org/forum/usage.php ,可看到一些提供此项服务的站点,点击即可获取相关代码,放在自己的网站上使用。
  点击 http://www.onlinestatus.org/hosting.html ,可以在网站的指导下,对外提供此项服务。

使用tmpwatch删除qmail过期文件

tmpwatch可删除时间为若干小时之前的旧文件,如果你对这个危险的功能不确信,可外加–test参数,能够看到除了删除文件以外的一切效果。
脚本如下(仅为抛砖引玉):

#!/bin/sh

#白名单:whitelist

HOMEDIR=”/home”
MAILDIR=”Maildir”
WHITELIST=”whitelist”
TMPWATCH=”/usr/sbin/tmpwatch”
HOURS=$1

#砍信操作
dojunk()
{
$TMPWATCH -adv –test $HOURS $1
}

if [ $# -lt 1 ]
then
echo “Usage: $0 HOURS”; exit
fi
for i in `cat /etc/passwd | awk ‘BEGIN {FS=”:”}; {print $1}’`
do
if grep $i $WHITELIST &> /dev/null
then
echo “$i is in whitelist, ignore…”
elif [ -d “$HOMEDIR/$i/$MAILDIR” ]
then
dojunk $HOMEDIR/$i/$MAILDIR
fi
done

关键字:qmail 删除邮件 tmpwatch