如果只是编译驱动程序,只要安装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月12日星期六
2011年3月6日星期日
程序员的练车日记 - 第一个两小时
起 步:踩离合,挂1档,给车打火,半抬离合,确认离合已稳,保持离合位置,给油,慢抬离合。注意事项:熄火主要发生在离合抬得太快(给油的时候踩离合的脚不自觉松了)。半抬离合的距离要控制好,感觉车稍微有些抖动的时候就可以稳住离合给油。
找半联洞:踩离合,挂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
解决办法是把发给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
[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
2011年1月9日星期日
使用sh2log记录用户shell操作
sh2log是一个shell包装器,可记录用户操作的输入输出,并以udp加密数据包的形式发送给审计机器。审计机器启动一个udp接收进程sh2logd,把这些信息存入文件。为查看这些信息,可使用parser程序。parser程序可以重放操作过程,或者仅仅列出用户输入。
sh2logd默认以文件大小切换记录文件,在某些情况下不便于检索。parser程序支持的选项有时候会感觉不够用。
sh2logd默认以文件大小切换记录文件,在某些情况下不便于检索。parser程序支持的选项有时候会感觉不够用。
maven 使用摘要
1 安装maven
导出环境变量,
export JAVA_HOME=/path/to/java/home
export M2_HOME=/path/to/maven/home
export M2=$M2_HOME/bin
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2:$PATH
测试mvn是否正常,
mvn --version
可选配置:
$M2_HOME/conf/settings.xml
$HOME/.m2/settings.xml
配置细节参考 http://maven.apache.org/settings.html
2 编译一个mvn工程
mvn clean install
3 项目中使用mvn
生成新项目,
mvn archetype:generate \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
archetype:generate mvn程序的执行目标,本例目标是插件archetype的generate任务;
groupId 程序包(java package)的全称
artifactId 程序包的标识
archetypeArtifactId 程序包的模板名称
编译项目,生成jar包,
mvn package
maven工具的几个阶段:
validate 验证工程是否正确
compile 编译工程源码
test 测试源码
package 打包成发布的形式
integration-test 发布包到集成测试环境
verify 验证包是否有效并符合质量规范
install 安装包到本地仓库
deploy 发布包到远程环境
clean 清场
site 为工程产生文档
细节参考 http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
4 技巧
生成eclipse环境
mvn eclipse:eclipse
生成web-app项目
mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=com.mycompany.app \
-DartifactId=my-webapp
打包时跳过测试
mvn package -Dmaven.test.skip=true
更多细节参考 http://maven.apache.org/guides/getting-started/index.html
5 更多参考
pom参考 http://maven.apache.org/pom.html
设置参考 http://maven.apache.org/settings.html
插件参考 http://maven.apache.org/plugins/index.html
导出环境变量,
export JAVA_HOME=/path/to/java/home
export M2_HOME=/path/to/maven/home
export M2=$M2_HOME/bin
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2:$PATH
测试mvn是否正常,
mvn --version
可选配置:
$M2_HOME/conf/settings.xml
$HOME/.m2/settings.xml
配置细节参考 http://maven.apache.org/settings.html
2 编译一个mvn工程
mvn clean install
3 项目中使用mvn
生成新项目,
mvn archetype:generate \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
archetype:generate mvn程序的执行目标,本例目标是插件archetype的generate任务;
groupId 程序包(java package)的全称
artifactId 程序包的标识
archetypeArtifactId 程序包的模板名称
编译项目,生成jar包,
mvn package
maven工具的几个阶段:
validate 验证工程是否正确
compile 编译工程源码
test 测试源码
package 打包成发布的形式
integration-test 发布包到集成测试环境
verify 验证包是否有效并符合质量规范
install 安装包到本地仓库
deploy 发布包到远程环境
clean 清场
site 为工程产生文档
细节参考 http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
4 技巧
生成eclipse环境
mvn eclipse:eclipse
生成web-app项目
mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=com.mycompany.app \
-DartifactId=my-webapp
打包时跳过测试
mvn package -Dmaven.test.skip=true
更多细节参考 http://maven.apache.org/guides/getting-started/index.html
5 更多参考
pom参考 http://maven.apache.org/pom.html
设置参考 http://maven.apache.org/settings.html
插件参考 http://maven.apache.org/plugins/index.html
2011年1月6日星期四
CentOS 5 安装VNC和Web VNC客户端
1 安装图形桌面系统和VNC
yum groupinstall "GNOME Desktop Environment" # 桌面环境
yum install vnc-server # VNC Server
yum install vnc # VNC Client
2 添加vnc用户
useradd eric
useradd leo
...
分别以这些用户登录,运行 vncpasswd,创建vnc口令。
3 编辑vnc服务的配置
编辑 /etc/sysconfig/vncservers,在文件尾部加入如下行
VNCSERVERS="1:eric 2:leo"
VNCSERVERARGS[1]="-geometry 800x600"
VNCSERVERARGS[2]="-geometry 800x600"
其中1、2指X Windows显示编号。
启动 vnc 服务,
service vncserver start
如果想定制用户登录的X环境,可修改 $HOME/.vnc/xstartup
4 测试VNC连通性
# login as eric
vncviewer 192.168.1.1:1
# login as leo
vncviewer 192.168.1.1:2
注意,直接指定ip地址和显示编号即可,实际端口是 TCP/(5900 + 显示编号)
另外也可通过 http 端口直接访问,端口号是 TCP/(5800 + 显示编号)
5 安装配置 guacamole
guacamole的优势是速度快,纯Javascript/Html5的客户端访问。
解压下载包,
把 guacamole.xml 拷贝到 $tomcat_prefix/conf/Catalina/localhost/,
把 guacamole-users.xml 拷贝到 $tomcat_prefix/conf/,
把 guacamole.war 拷贝到 $tomcat_prefix/webapps/,
修改 guacamole.xml 里VNC Server相关的配置,注意端口需指定VNC实际端口号。
修改 guacamole-users.xml 里http用户认证信息。
启动 tomcat 即可。
参考
http://wiki.centos.org/HowTos/VNC-Server
http://sourceforge.net/projects/guacamole/
yum groupinstall "GNOME Desktop Environment" # 桌面环境
yum install vnc-server # VNC Server
yum install vnc # VNC Client
2 添加vnc用户
useradd eric
useradd leo
...
分别以这些用户登录,运行 vncpasswd,创建vnc口令。
3 编辑vnc服务的配置
编辑 /etc/sysconfig/vncservers,在文件尾部加入如下行
VNCSERVERS="1:eric 2:leo"
VNCSERVERARGS[1]="-geometry 800x600"
VNCSERVERARGS[2]="-geometry 800x600"
其中1、2指X Windows显示编号。
启动 vnc 服务,
service vncserver start
如果想定制用户登录的X环境,可修改 $HOME/.vnc/xstartup
4 测试VNC连通性
# login as eric
vncviewer 192.168.1.1:1
# login as leo
vncviewer 192.168.1.1:2
注意,直接指定ip地址和显示编号即可,实际端口是 TCP/(5900 + 显示编号)
另外也可通过 http 端口直接访问,端口号是 TCP/(5800 + 显示编号)
5 安装配置 guacamole
guacamole的优势是速度快,纯Javascript/Html5的客户端访问。
解压下载包,
把 guacamole.xml 拷贝到 $tomcat_prefix/conf/Catalina/localhost/,
把 guacamole-users.xml 拷贝到 $tomcat_prefix/conf/,
把 guacamole.war 拷贝到 $tomcat_prefix/webapps/,
修改 guacamole.xml 里VNC Server相关的配置,注意端口需指定VNC实际端口号。
修改 guacamole-users.xml 里http用户认证信息。
启动 tomcat 即可。
参考
http://wiki.centos.org/HowTos/VNC-Server
http://sourceforge.net/projects/guacamole/
订阅:
博文 (Atom)