Tag Archives: Linux

Ubuntu 6.06 Linux

好久没有玩Linux桌面了,记得以前还是在90年代末在国内媒体对Linux近乎狂热的宣传大潮下我开始对Linux桌面的研究的。那个时候的所谓Linux发行版,从安装开始,步步都是地雷,安装好之后也只是看上去很美,连个汉字都显示不好,更别说应用了。就是在那时候,一方面舆论误导,另一方面自己天真的天真的以为会玩Linux就是高手(想必现在的菜鸟们还是这么想得吧),我学会了怎么分区,怎么装rpm,怎么汉化,怎么用simsun替换字体,怎么让声卡发声,怎么拨号上网等,足足花了有2年的时间吧。现在想来,那个时候真是精力旺盛,想不佩服自己都不行。
工作以后,才知道自己学的那点破东西基本没什么用,那些真正可以称作Linux精华的东西,其实在传统Unix中都可以找到,例如vi,例如shell脚本,例如apache,mysql等等等等,这才幡然醒悟----当年被人坑了。
怎奈Linux还是潮流,那就要继续跟,于是乎在后来的时间,一方面加紧学习Linux在服务器方面的应用,另一方面经手了无数其他的操作系统,知名的和不知名的。以至于相当长一段时间,都会在做某些操作的时候,在想此操作在XXX系统上可通过何种方法实现。
再后来,终于悟出了,这么多花花绿绿的东西基本上都是同源的,甚至当年Windows95都包含了BSD的代码,还有什么不能混血的?所以开始研究内核,研究操作系统实现。到最后,发现不论是何种实现,最后要达到的目标是相同的,大家不过是在这数种实现方法中取长补短,共同进化而已。
直到这时,才感觉自己真正能够抓住些东西了,所以现在的研究重点不过是Posix标准,RFC,等等等等,然后再去看内核代码这些个东西是怎么实现的。当然新操作系统还是要玩的,不玩怎么知道以后的潮流是什么哦。
扯远了,今天的目标是Ubuntu Linux。这东西属于Linux发行版的后起之秀了,是Debian的一种fork。同时就继承了Debian的所有优点,比如apt,比如良好的桌面环境。据说Ubuntu的作者是某个亿万富翁,这家伙某天突然迷上了Linux,因此自己出钱搞了一批人,搞出了这样一个系统,为了迅速推广它,作者到目前为止Ubuntu还提全世界范围的供免费的光盘邮寄服务,其强大财力不得不让人叹服。
废话不说了,开搞。
安装过程跟以往Linux发行版有不小区别,竟然是先启动一个LiveCD的版本给你尝鲜,然后再安装的。安装过程非常简单,给人的选择就只有用户名密码,和计算机名而已,连安装组件都不能定制。安装完成后看了下是往硬盘塞了1G多的东西,还好不算太臃肿了。
第一次启动发现grub被搞到mbr了,还好还能切换到longhorn的ntldr,有惊无险。启动过程不长不段,平均水平吧,启动的图形界面比较粗糙,只能说聊胜于无吧。
启动成功后进入的应该是gdm,session只有gnome一个可选,语言可选的倒是很多,做得似乎很漂亮,选中文试试看。输入用户名密码进入gnome。完全启动成功后发现基本就是最普通的gnome,只是壁纸换过而已。
惯例首先检查硬件,发现声卡能出声,网卡通过dhcp也成功驱动,直接进入在线状态。所有硬盘分区都已经直接挂载好了,连ntfs分区都搞定。并且中文显示完全正常,只是默认的楷体字不很习惯。看到这里不禁嘘唏不已,花了近半年才基本搞定的东西,现在默认都能给配好了。再看中文输入,竟然默认已经安装了scim并启用,使用起来非常顺手。再加上openoffic,基本上windows下需要的普通上网和办公工作都能完成了。真是非常不错的桌面系统,比当年所谓的那些Linux不知好了多少倍。也许Linux被普通用户接受不再是遥遥无期的事情了??
再来看多媒体,默认的movie player基本上什么都放不了,连mp3都不行,意料之中,linux发行版不可能将有版权的东西作为默认组件,不过现在不能不代表不可以,来试试看起源自debian的强大apt管理机制!从菜单里找到一个Synaptic package manager ,应该属于apt前端,发现search功能,直接敲xine,不出所料找到一些包,选中,确认,果然自动开始下载并安装,所有依赖包自动安装,不错!完成后实验一下,mp3能放了,普通无压缩avi也可以了,wmv和rm还有div等还不行,简单,装解码包!继续找w32codecs,竟然也有apt源,装了,顺手找到了mplayer,一并装了,中间下载时间长了些,但还是基本满意的。装好后实验,完全可用!想当年为了折腾个mplayer从autoconfig学到gcc,声卡驱动换了好几茬,历时无数次系统重装,跨越n个发行版,历时1年才第一次成功,基本见证了从linux盲到基本合格的linux user的过程,想想真是心酸。仔细一看放电影速度不甚满意,一检查发现显卡驱动用的竟然是vesa,立刻想到到nvidia.com下载,转念一想我还要试试apt,竟然又顺利找到apt源并安装好,只是后来配置不是自动完成,还要修改xorg.conf,完成后直接ctrl+alt+backspace,gdm一起来就瞅见nvidia大大的徽标,登入再放视频,一切ok!
没想到几年没有关心,linux桌面的可用程度有了如此大的提高,看来普通用户的选择会越来越多了,有意思的玩具也会越来越多了,幸也!
下个目标,看看传说中的XGL!待续…..

基于pacp的嗅探器范例代码

今天研究了下pcap,简单写了段代码,能嗅探到混杂模式网卡接收到的所有包了,贴一下以备以后使用:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
char *dev, errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t * alldevsp;
dev = pcap_lookupdev(errbuf);
printf(”Device used: %sn”, dev);
int x=pcap_findalldevs(&alldevsp,errbuf);
pcap_if_t * ifdev;
for(ifdev=alldevsp;ifdev;ifdev=ifdev->next)
{
printf(”Device: %sn”,ifdev->name);
}
struct bpf_program filter;
char filter_app[] = “host 10.0.0″;
bpf_u_int32 mask;
bpf_u_int32 net;
pcap_t* adhandle;
adhandle = pcap_open_live(dev,100,1,1000,errbuf);
pcap_lookupnet(dev, &net, &mask, errbuf);
pcap_compile(adhandle, &filter, filter_app, 0, net);
pcap_setfilter(adhandle, &filter);
pcap_dumper_t* dumpfile;
dumpfile=pcap_dump_open(adhandle, “packet.dat”);
int re;
struct pcap_pkthdr* header;
u_char* pkt_data;
while((re=pcap_next_ex(adhandle,&header,(const u_char**)&pkt_data))>=0)
{
pcap_dump((unsigned char*)dumpfile,header,pkt_data);
}
pcap_freealldevs(alldevsp);
return(0);
}

RedHat Linux 2.6内核如何build kernel-sourcecode的rpm包

RedHat企业版自从AS4开始,桌面版本自从FC3开始,不再单独提供kernel-sourcecode的rpm安装包,原因是RedHat认为没有必要维护单独的kernel-sourcecode包,因为所有的源代码包都应该包含在.src.rpm中而不是rpm中。所以在这些高版本的RedHat Linux上,我们如果需要定制内核的话,没有直接的源代码rpm可以安装,只能通过kernel.org下载的tar.gz的包手工安装,或者通过kernel-*.src.rpm编译出kernel-source包再来安装。后面一种方法可以享受到RedHat针对内核的某些参数和代码的优化,因此对使用RedHat发行版特别是企业版本的,是有一定好处的。
但是目前很多人至今分不清内核,内核开发,内核源代码一些包之间的关系,因此在编译内核的时候经常走弯路,同时RedHat官方对于如果得到kernel-source也没有明确的指示,导致很多人不得要领。
首先认清楚各rpm包的内容和用途
kernel-*.rpm ————- 内核二进制包,没有的话系统都起不来
kernel-sourcecode-*.rpm——————- 内核源代码包,安装到/usr/src/linux-*下面的,包含内核源代码,编译内核必须(当然是不考虑用kernel.tar.gz编译的情况),但高版本RedHat Linux不再提供此rpm,原因参见官方Release Note,这篇文章的最终目的就是要我们自己把这个包搞出来。
kernel-devel-*.rpm—————-内核开发包,安装到/usr/src/kernels,用于内核模块开发,组织形式跟内核源代码包类似,包含了部分内核源代码。注意很多人误认为这个就是内核源代码包,直接拿它来编译内核,当然不可能成功。这个包只是用于内核模块一级开发,例如驱动程序等,虽然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因为缺失了核心源代码。
kernel-*.src.rpm—————RedHat提供的用于建立rpm的源代码包,安装到/usr/src/redhat中,使用rpmbuild可以从这个包中build出上面所说的所有包。
现在就来从src.rpm编译出上面的所有的包,除了sourcecode这个包其他的包都可以在不用修改任何地方的情况下直接rpmbuild出来,唯有sourcecode这个比较麻烦,一定要按照下面的步骤来做,我以RedHat AS4 所带的版本为例,其他版本相同。
#首先安装src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#进入相应目录,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
1,define buildsource 0————我的这个在第8行,改为1,这就是为什么没有源代码包的原因,因为默认不生成源代码包
2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel——-我的在572行,如果没用用X的话,把这句注释掉,这样编译出来的包就不依赖于X-window的某些包,因为内核配置是可以make xconfig的,所以默认依赖X-window,我没装X-window,因此这个就去掉了。
#保存退出
touch /etc/beehive-root
#这句命令非必须,如果不做的话,最后编译出来的包都会变成kernel-*.*-root.rpm,多了个root,据说是为了标示包的编译人的,如果touch了这个文件,就没有这个问题了,命名和官方rpm一样。
rpmbuild -ba –target=i686 ./kernel-2.6.spec
#编译i686平台的所有包,这样上面介绍的所有包都会生成,或者换成rpmbuild -bb –target=i686 ./kernel-2.6.spec只编译非src.rpm。
#所有包就会生成到/usr/src/redhat/RPMS/i686下面
#如果只需要sourcecode而并非所有rpm包,那在修改spec文件时还要修改如下行:
48 %ifarch noarch
49 %define builddoc 1
50 %define buildsource 0—————-这里0修改为1
在编译的时候使用rpmbuild -ba –target=noarch ./kernel-2.6.spec,这样仅仅编译soucecode和doc包,会节省很多时间。
注意,此篇文章所讲所有内容仅适用于使用2.6内核的新版本RedHat Linux,2.4版本内核代码组织方式不同,不适用此文章。