网页浏览总次数

2011年3月12日星期六

程序员的练车日记 - 第二个两小时

左右并线:看反光镜,确认安全,打转向灯并线。困难在于看到后面有车,但估计不了是否安全。一般右反光镜能看到后面的车头,并线是安全的,但看到后面的车身时,并线就有些危险了。

换档咯噔响:离合要踩到底,先把档位推到空档,再推到目标档位,完全抬离合之前不要给油。

车速控制:到路口的时候不管有没有车或行人都要收油,左转弯的时候不要给油。

车位控制:行走的时候左右位置要控制好,避免压线和撞栏杆,一般是评经验完成。

加快起步速度:笨鸟先飞,估计绿灯要亮时先挂档慢松离合。

编译 CentOS 5 内核

如果只是编译驱动程序,只要安装kernel-devel包就可以。

为了安装rpm源码,需要安装 rpm-build,redhat-rpm-config和unifdef:

[root@host]# rpm install rpm-build redhat-rpm-config unifdef

因不建议以root身份编译内核,以普通用户身份创建目录树 ~/rpmbuild:

[user@host]$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

从CentOS镜像站点下载 kernel 源码包:

[user@host]$ wget http://mirror.neu.edu.cn/centos/5.5/os/SRPMS/kernel-2.6.18-194.el5.src.rpm
[user@host]$ rpm -i kernel-2.6.18-194.el5.src.rpm 2>&1 | grep -v mockb

版本号 2.6.28-194 需根据实际情况替换。由于 ~/.rpmmacros配置了rpm源码安装环境,kernel源码会被安装到 ~/rpmbuild 目录下。

产生编译用的源码目录树:

[user@host]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log

在 ~/rpmbuild/BUILD 目录会发现生成的源码目录树。

安装编译环境:

[root@host]# yum groupinstall "Development Tools"
[root@host]# yum install ncurses-devel

配置内核:
[user@host]$ cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`
[user@host]$ cp configs/kernel-2.6.18-`uname -m`[-type].config .config

[-type] 是可选的配置类型。

编译内核:

首先运行 make oldconfig,然后按照编译内核的步骤进行。为了自定义编译后的内核版本,可编辑Makefile里的 EXTRAVERSION 变量。


参考:
http://wiki.centos.org/HowTos/I_need_the_Kernel_Source
http://wiki.centos.org/HowTos/Custom_Kernel

2011年3月6日星期日

程序员的练车日记 - 第一个两小时

起 步:踩离合,挂1档,给车打火,半抬离合,确认离合已稳,保持离合位置,给油,慢抬离合。注意事项:熄火主要发生在离合抬得太快(给油的时候踩离合的脚不自觉松了)。半抬离合的距离要控制好,感觉车稍微有些抖动的时候就可以稳住离合给油。

找半联洞:踩离合,挂1档,踩刹车,半抬离合找半联洞,找到后确认离合已稳,保持离合位置,抬刹车给油,慢抬离合。熄火主要发生在离合抬得太快(给油的时候踩离合的脚不自觉松了)。

换 档:踩离合,换档,抬离合,给油。注意在踩离合之前不要给油,直到整个换档过程完成才给油。离合要踩到底。

停 车:踩刹车,等车速到可控时,再踩离合,挂空档,轻踩刹车,让车自然停下。注意不可急踩刹车。


他人经验:
左右转弯要抬头看
靠左侧开,视野好
刹车重踩慢放

2011年3月5日星期六

CentOS 5 配置 sendmail 用户转发

如果以用户 A 的身份给用户 B 发送信件,但用户 B 不可达,则 sendmail 会尝试给 A 发退信通知,如果 A 也不可达则会堵住邮件队列。这种情况通常发生在需要发送匿名邮件时,A通常是个伪帐号。

解决办法是把发给A的信件转给一个可达的地址,比如C,在sendmail可通过如下方式实现:

方案一:配置别名(alias),A的别名是C
方案二:通过虚拟帐号(virtusertable)
方案三:通过地址改写

在 O'Reilly Sendmail 4th Edition 这本书有这么一段文字描述

Before undertaking this step, however, see §17.8.59 on page 645 for a description of the FEATURE(virtusertable) which also allows nonlocal addresses to be transformed into inside or outside addresses. Note, too, that the User Database (§23.7.27 on page 942) allows recipient addresses to be changed so that they can be delivered to new hosts, and that the FEATURE(genericstable) in §17.8.19 on page 622 allows sender addresses to be changed to appear to be coming from new hosts. Clearly, there are many ways to achieve the same result, and one of those might be more suitable to your needs than the F=A flag.

方案一和二默认只支持本地域,如果A不属于本地域,则需要做额外的配置。假设本地域是 localdomain,而A的地址是 user-a@example.com,则方案二的实现过程如下:

修改 /etc/mail/sendmail.mc,确认如下行以配置

...
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
...
VIRTUSER_DOMAIN(`example.com')
...

修改 /etc/mail/virtusertable,如下
user-a@example.com another-user@another-domain

如果another-user是本地域的用户,则 @another-domain 可以省略。

执行如下命令让配置生效

cd /etc/mail
make
makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
/etc/init.d/sendmail restart

要flush特定特征的队列里的邮件,比如收件人地址含 leo 的邮件,可用

/usr/sbin/sendmail -qf -qRleo -v

参考 http://kb.bobcares.com/?View=entry&EntryID=153

2011年3月2日星期三

CentOS 5 给sendmail加 sasl 认证

CentOS 5的sendmail包已支持sasl认证,可用如下命令确认:

[root@yylab3 ~]# sendmail -d0.1 -bv
Version 8.13.8
Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
TCPWRAPPERS USERDB USE_LDAP_INIT

可看到有 SASLv2的输出。

首先编辑 Sendmail 认证配置文件,如下

[root@yylab3 ~]# cat /usr/lib64/sasl2/Sendmail.conf
pwcheck_method:saslauthd
#pwcheck_method:auxprop

32位CentOS该文件的位置是 /usr/lib/sasl2/Sendmail.conf。

编辑 /etc/mail/sendmail.mc,修改相关行如下

define(`confLOG_LEVEL’, `20′)dnl
dnl #DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
define(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl

然后 cd /etc/mail && make 可产生 /etc/mail/sendmail.cf文件。
为了方便mc到cf文件的转换,可安装 sendmail-cf 包。

重启 sendmail 服务让修改生效:
/etc/init.d/sendmail restart


接下来配置 saslauthd,修改 /etc/sysconfig/saslauthd 如下

[root@yylab3 ~]# cat /etc/sysconfig/saslauthd
SOCKETDIR=/var/run/saslauthd
MECH=pam
#MECH=shadow
FLAGS=

运行 /etc/init.d/saslauthd restart 使修改生效,可用 testsaslauthd 测试 saslauthd是否生效:

[root@yylab3 ~]# testsaslauthd -s smtp.sendmail -u leo -p leoleo
0: OK "Success."

现在 sendmail 应该支持认证转发邮件了,可以 telnet 服务器的25端口,

[root@yylab3 ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 yylab3.example.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 3 Mar 2011 16:29:55 +0800
ehlo localhost
250-yylab3.example.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
auth login
334 VXNlcm5hbWU6
bGVv
334 UGFzc3dvcmQ6
bGVvbGVv
235 2.0.0 OK Authenticated


参考 http://www.ispexperts.com.np/?page_id=449