搞定PXE中的网卡驱动

硬件:
主板ASUS P5QL Pro

软件:
CentOS 5.4 64bit

公司最近进的一台机器用的是用的华硕p5ql pro的板子,要上centos系统,最开始没有注意到没有centos54居然不支持网卡驱动,等到PXE加载完,installation报找不到ks文件(我指定了ks的),我这才意识到,原来centos54并不支持这个网卡。。。

实在是不想刻碟,太麻烦,想起来原来赵小明老师跟我们讲过,这种情况,只要把网卡的驱动加载到启动用的initrd.img中就可以了,于是就开始看看怎么把驱动加载到启动文件当中。

首先,当然是要找一台机器把驱动编译好。
驱动可以在asus的官方网站可以下载到。
编译的机器,最好用没有升过级的内核,不然,不保证可以直接用。
编译好之后,可以得到一个名称为 atl1e.ko 的文件
这个,就是我们要用到的文件

接下来,才是重头戏,我们要把这个文件加入到initrd.img中。
开始之前,建议参考一下这篇文s档: http://www.ibm.com/developerworks/cn/linux/l-linux-netinst/index.html
如果你发现里面的那个脚本不能用,恭喜你,你碰到了跟我一样的问题了,我这篇文章的意义就在于此!

使用file命令,我们可以知道initrd.img这个文件是一个gzip文件,那么,我们就要用gzip进行解压

mv initrd.img initrd.img.gz
gunzip initrd.img.gz

再使用file命令,我们又可以得知,解压之后的文件,是一个cpio格式的文件,那么,我就可以用cpio来进行解压

cpio -ivmd < initrd.img

解压之后,我们会得到许多目录与文件,因为我们要修改的只是驱动部分,所以要用到的就只有modules目录。

进入这个目录,我们只能看到五个文件

module-info  modules.alias  modules.cgz  modules.dep  pci.ids

其中module-info是记录硬件设备信息的,在这个文件里面,我们要添加如下三行

atl1e
eth
"AR8121/AR8113 PCI-E Ethernet Adapter"

其实的atl1e是模块名称,eth是设备类型(eth代表以太网卡),第三行是模块的描述

然后就是第二个文件,modules.alias,在这个文件里面,我们只要添加一行

alias pci:v00001969d00001026sv*sd*bc*sc*i* atl1e

虽然只有一行,但是解释起来还是挺麻烦的。这里涉及到一些硬件相关的信息。
其1969是硬件厂商的信息,可以从http://www.pcidatabase.com/查到是Atheros Communications的产品,而1026是产品的编号,继续查询可以得知是AR8121/AR8113的芯片。
这些信息的得到,是比较麻烦的,当然,我用的是一张很老的debian的救援盘,然后用lspci -n得到这些数据的

其他的,sv,sd,sc,i等等我也搞不太清楚是什么意思,我反正照着r8169的抄。你可以看看这篇文章:http://www.examda.com/linux/fudao/20091227/094826740-3.html

接下来,我们跳过modules.cgz,讲讲modules.dep
这是一个描述模块之间的依赖关系的文件,因为在这块网卡的驱动中没有找到相关的依赖说明,所以我就没有修改此文件。

pci.ids这个文件,是modules目录里面,我们要修改的第二重要的文件
在这个文件里面,我们要添加网卡的对应关系,要添加如下两行:

1969  Atheros(R)
        1026  AR8121/AR8113 PCI-E Ethernet Adapter

记得这两行的写法有一个从属关系,1026是从属于1969的

最后,让我们来说说modules.cgz,通过file命令,我们又可以得知到,这是一个gzip文件,同样,我们要进行解压:

mv modules.cgz modules.cgz.gz
gunzipmodules.cgz.gz

新到的新的modules.cgz,又是一个cpio文件,我们又要用cpio来进行解压

cpio -ivmd < modules

之后,就会得到2.6.18-164.el5这么一个目录,把我们开始得到的atl1e.ko文件拷贝到其中的2.6.18-164.el5/x86_64/目录中(其中还有其他许多ko文件)。

所有的工作都做得差不多了,接下来就是要进行封装了。
首先是封装modules.cgz

find 2.6.18-164.el5/|cpio  -o -H crc > newmodules
gzip newmodules
rm -rf 2.6.18-164.el5 modules
mv newmodules.gz modules.cgz

这里要注意的是把旧的文件modules.cgz文件与解压生成的目录删除以减少体积

这里封装好之后,我们要封装整个intrid.img文件了。

rm -f initrd.img vmlinuz
find . | cpio -c -o > ../new
gzip ../new
mv ../new.gz initrd.img

同上面的一样,要把一些与intrid.img不相干的文件文件删除以减少体积。

这个时候所有的东西时都管弄完了,你再用这个新生成的initrd.img进行引导,就可以正确的识别你的网卡并从网络读取文件了。

最后要注意的是:
装好的系统并不能使用这块网卡,装好系统之后,还是要进行网卡的编译。
当然,你也可以学我的,在kickstart文件当中,用%post来完成网卡的编译

Linux文本模式下发送带附件的Email

最近写一个脚本,需要直接在linux文本终端里面直接发送附件,而linux自带的那个什么mail命令,是由mailx包生成的,本身不带发送附件的功能。

放狗搜了一圈,发现基本上使用的都是mailx+uuencode这招。详情见http://www.webjx.com/server/linux-2724.html”

但是这种方式,是将文件转成ASCII码进行传输,在某些客户端(比如某些web客户端),很可能收到的就是一堆乱码。为了解决这个问题,我推荐另一个文本模式的邮件客户端:nail

不知道centos的官方源中有没有,但是,在rpmforge的源里面是肯定有的。装好之后,本身只会生成/usr/bin/nail这个命令,要是你很习惯用mail这个命令的话,可以考虑自己建立一个软链。

另附rpmforge源中nail包的information

# yum info nail
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: centos.ustc.edu.cn
 * base: centos.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * rpmforge: ftp-stud.fht-esslingen.de
 * updates: centos.ustc.edu.cn
Installed Packages
Name       : nail
Arch       : x86_64
Version    : 12.3
Release    : 4.el5.rf
Size       : 612 k
Repo       : installed
Summary    : Enhanced implementation of the mailx command
URL        : http://nail.sourceforge.net/
License    : BSD
Description: Nail is an enhanced mail command, which provides the functionality
           : of the POSIX mailx command. It is derived from Berkeley Mail.
           :
           : Additionally to the POSIX features, nail can work with Maildir/ e-mail
           : storage format (as well as mailboxes), supports IMAP, POP3 and SMTP
           : procotols (including over SSL) to operate with remote hosts, handles mime
           : types and different charsets. There are a lot of other useful features,
           : see nail.html in the documentation.
           :
           : And as its ancient analogues, nail can be used as a mail script language,
           : both for sending and receiving mail.

升级到ubuntu910记

ubuntu910出来也有好几天了,一直没有时间更新,今天下定决定,总算更新了。
千难万苦,不过总算都弄出来了。

Q1,更新到910后,系统变得超级慢,Xorg的利用率总是高达99%。
A1,
原因:这个估计跟我的一样,在升级内核的时候,选择了保留原来的menu.lst。这样子,系统在升级的时候,并没有把最新的,910用的kernel添加到menu.lst中(虽然已经安装了),而直接把原来的内核重新生成initrd.img。
解决办法:在menu.lst中的

## ## End Default Options ##

文字后面添加如下的内容

title Ubuntu 9.04, kernel 2.6.31-14-generic
uuid 0ee48f22-2bf9-469b-83e1-0429a18cc373
kernel /vmlinuz-2.6.31-14-generic root=/dev/mapper/vg0-lv00 ro rescue quiet splash
initrd /initrd.img-2.6.31-14-generic
quiet

title Ubuntu 9.04, kernel 2.6.31-14-generic (recovery mode)
uuid 0ee48f22-2bf9-469b-83e1-0429a18cc373
kernel /vmlinuz-2.6.31-14-generic root=/dev/mapper/vg0-lv00 ro rescue  single
initrd /initrd.img-2.6.31-14-generic

其中,2.6.31-14是你安装的最新的内核版本号

Q2: 我的SCIM输入法中不能添加中文了
A1:
原因:看了一些文档,好像910中的输入法已经开始主推ibus了,所以scim的支持不是很好
解决:最直接的办法是把“system”-“administration”-“Language Support”中,将“keyboard input method system”改为ibus,然后重装一个中文语文包的支持,然后将/etc/X11/xinit/xinput.d/default文件用/etc/X11/xinit/xinput.d/ibus代替,重启X服务即可。
当然,如果也可以继续用scim,只要安装一个scim-tables-zh就可以了

sudo apt-get install scim-tables-zh

然后,把/etc/X11/xinit/xinput.d/default文件用/etc/X11/xinit/xinput.d/scim代替,重启X服务即可

Q3:qq for linux在910下经常自动死掉
A3:
原因:简单的搜了一下,QQ的不稳定是因为与ibus不兼容。
解决:在Q2里面,用第二种方法解决输入法的问题就可以了

no suitable drive was found in the geneated device

今天早上在上课的时候,有同事跟我说他怎么就是不能重新安排grub,我问他报什么错误,他就是不说,然后我就只好自己测试了。果然,在进入rescue模式之后,一旦用grub-install来安装grub,只是提示这个错误:

No suitable drive was found in the generated device map

一查看/boot/grub/device.map,发现上面居然只有一行:

(fd0) /dev/fd0

居然连硬盘都没有添加上去,当然安装不成功了。。。
于是,在这个文件里面加上

(hd0) /dev/sda

然后再运行grub-install,果然就可以安装了。

PS:最后还有一个小问题,在grub.conf配置与fstab配置正确的情况下,系统启动还是报kernel panic,最后重装了内核才搞定。估计这位仁兄是在安装grub之前就装了内核,结果还是device map不正确导致的问题

thinkpad x200 ubuntu无线崩溃解决方案

最近不知道为什么,我x200总是会出现无线崩溃的情况。就算你用下面这条命令,得到的居然是设备忙…

$ sudo iwlist can
lo        Interface doesn't support scanning.

eth0      Interface doesn't support scanning.

pan0      Interface doesn't support scanning.

wmaster0  Interface doesn't support scanning.

wlan0     Interface doesn't support scanning : Device or resource busy

没办法,只好试着把驱动删除,然后再重新加载

用下面命令删除相关的无线模块:

# modprobe -r iwlagn
# modprobe -r iwlcore
# modprobe -r mac80211

用下面命令重新加载无线模块

# modprobe  mac80211
# modprobe  iwlcore
# modprobe  iwlagn

根据无线网卡型号的不同,上述模块名应该会有不同,附上我的无线网卡型号做参考

03:00.0 Network controller: Intel Corporation Wireless WiFi Link 5300

在后台运行rtorrent

本来一直是用transmission做PT的客户端的,但是transmission的功能实在是太弱了,web-gui显示的信息也实在是太有限。在别人的推荐下,总算下定决心换rtorrent+wtorrent来做PT客户端了。

说实在的,wtorrent的安装也还真不简单,零碎的步骤实在是太多了。不过,照着manual基本上是可以安装成功的。

以前也用过rtorrent,后来放弃,原因很多,主要是不知道要第三方的插件才能实现web-gui,第二就是这个程序必须要在前台运行。没有web-gui其实也好办,基本上可以自己写一个简单的ui,但是必须要在前台运行 就实在是太麻烦了。

以前没时间研究,就直接放弃了。这次看了看,原来还真可以让他在后台运行 的,只不过要借用一个叫 screen的工具。

首先,使用下面这个命令启动rtorrent

screen rtorrent

启动之后,按组合键CTRL+A+D可以销毁屏幕,回到命令提示符下。之后你就可以退出了,但是程序还是不会停的。

运行下面这个命令,可以恢复之前的屏幕:

screen -r

当然,也可以根据pid来恢复指定的程序的屏幕输出:

screen -r pid.tty.host

参考:http://www.linuxquestions.org/questions/linux-software-2/rtorrent.-how-to-make-it-run-in-the-background-596041/

od_deflate has been requested but can not be built due to prerequisite failures

在编绎apache时开启了–enable-deflate这个选项,结果就报了这个错

od_deflate has been requested but can not be built due to prerequisite failures

还好比较容易解决,只需要安装一个zlib-devel包就可以了。

只是在Mandriva Linux下安装这个费了点劲,购买的服务过期了,urpmi不能直接安装了,还好找到了包名,在网上一搜就找到一个可以下载的,也没花多少时间

tomcat时区设置问题

最近碰到一个很奇怪的问题,两台一模一样的机器,一样的时间,一样的时区,一样的tomcat,一样的代码。但是tomcat在两台机器上获取到的时间就是不一样,不仅不一样,其中一个的tomcat时间跟系统时间还不一致。

最开始试着通过修改catalina.sh把两个tomcat的时区都改为GMT,结果得到的时间还是不一样:

JAVA_OPTS="-mx1600M -Duser.timezone=GMT"

后来把tomcat的时区改为:

JAVA_OPTS="-mx1600M -Duser.timezone=Europe/London"

突然发现这个时候这台tomcat时间与系统时间一向不一致的机器,这个时候tomcat时间突然跟系统时间一致了,而另一台一直直一致的现在却不一致了(系统用的时区是BST,开始改GMT时区时没看出来)。

这个时候我才突然想到,tomcat读取的可能是硬件时间(BIOS时间),而这两台机器很有可能一台设置了使用UTC时间一台设置了不使用UTC时间。遂查看配置文件/etc/sysconfig/clock,果然如此。

修改成一致的设置,重启,果然正常了。