前言
有同事已经通过艰苦的工作完成了长达好几百页的关于Linux的文档。事实上,在网上还有超过好几万页的各种关于Linux的技术精华,还不包括英文的。有数万程序员和网络专家在为这个软件努力工作。这就是自由的魅力。
我使用Linux有不少时间了,期间也经历过无数的挫折,同时也得到过很多高手的帮助。我一向喜欢言简意赅的文字。通过下面的简单句子和代码,我希望能够表达出我使用Linux的体会。也许本文的结构比较凌乱,但我希望它的每一句话都是对你有用的。当然,你要知道一些更详细的东西,请参阅我同事写的文档。
当然,能够通过查阅这个文档,使你的工作顺利是我最大的心愿。
一、关于Linux的误区
1、Linux干什么用?
首先,很少有人用Linux做桌面系统,因为Windows桌面系统已经足够好了。我们主要把Linux用作网络服务器的操作系统。如果你和你的应用符合下面的几条,那么你合适使用Linux:
*不愿意花钱在操作系统和网络应用上。
*用D版系统受良心谴责或害怕承担责任。
*想得到和花钱的系统差不多的性能。
*在用户面前显得水平较高。
*认识几个弄Linux的高手,或者知道在哪里能够找到问题答案。
2、每种Linux发行包差别很多吗?
如果你在上世纪80年代末到95年之前这段时间大量使用PC机的话,那对于Linux你应该很好理解:它就象一个有着32位抢先多任务核心的DOS,其区别在于外表看起来像是一种UNIX。Linux是好多人用智慧堆砌起来的,初学者经常问:“RedHat好还是Slackware好?”。这个人同时还面临上百种选择,这的确让人头痛。大部分Linux发行包实际上很简单,几乎所有的发行包都有相同的内核(也许是不同版本),外部命令和数据文件的差别也仅仅局限于在文件系统中的存放位置不同(这导致了某些兼容性问题,因为在某些地方找不到特定的文件嘛)。另外就是有些发行包为了显示自己的卓而不群,在发行包中增加了一些自己的实用程序。实际上动手修改内核的厂商不算太多,因为这样会内核官方版本的不断更新而手忙脚乱。当然有一些嵌入式系统开发商在Linux基础上做了自己的系统另说。
拥有众多的发行包是Linux的一个很讨厌的问题,在这一点上,我更喜欢FreeBSD,因为它只有一个官方发行版本,也运行得比较稳定。可给Linux做软件的程序员太多了,Linux上面的资料也更多。记住:当一个家伙跟你说用哪个发行版本无所谓的时候,那他就是专家。
3、Linux业余爱好者的东西吗?
这样的宣传给了很多人这样的印象。其实,Linux是一个严肃的操作系统,拥有一切操作系统共有的特性。它可以用在很多严肃的场合。
4、Linux性能比Windows更好吗?
这里的答案会让你失望,据我以往的实际测试,2.2版本的Linux核心的性能比windows2000要低。值得欣慰的是2.4版本的核心性能有大幅度提高基本上接近了Windows2000。但Windows2000复杂的图形界面占用了相当的系统资源。
5、Linux比Windows更复杂更专业吗?
从复杂度上说,Windows2000要比Linux复杂很多。在核心技术上,Windows也更先进。
6、Linux更可靠吗?
应该从两个角度评价系统的可靠性。(1)系统自身的可靠性,两者象差不多。人们普遍认为的Windwos不如Linux可靠的印象来源于Windows众多的良莠不齐的软件。当然,Linux比Windows结构简单,在一定程度上也可以提高可靠性。(2)从安全性角度来说,Linux远远高于Windows系统,道理很简单:树大招风嘛。另外,Linux的源代码开放机制使得漏洞发现和消灭得很快。而Windows相对就显得比较官僚了。这里补充一点,我用过的最可靠的系统是BSD类的OS,可靠性和安全性都可圈可点。
7、Linux真的不用花一分钱吗?
大部分的发行包需要花少量的钱购买。当然你也可以从网络上DOWN。其实这些发行包未必符合你的应用,一般都需要经过一些改动和定制才能运行好。当然,花的钱跟Windows没法比。
二、Linux安装注意事项
现在的大部分发行包都很容易安装,基本上都是图形向导式的,每个发行包都不太相同,也无法一一描述,如果你连安装都不明白,那就别用Linux了。这里仅仅说明几个注意的问题。
1、如果要和Windows混装,一定要先装Windows,后装Linux。
2、分区的时候,根据计划安装的软件灵活决定分区。一般分区有:/,/root,/usr,/var和swap分区,其中swap分区类型和其他不同需要专门选择一下,它的空间一般是物理内存的两倍即可。/root分区是紧急情况root用的,有64兆就行了。
3、当然,为了方便,你可以安装发行包给你做好的软件。但我安装Linux的习惯做法是开始就安装一个最小系统,然后安装所有的编译工具。安装编译工具的方法一般都通过你用的发行包的包管理工具实现,这样最方便。比如在TurboLinux中,运行/usr/sbin/Turbopkg就可以了。在管理工具中选择所有关于Developoment相关的选项或gcc相关选项,一般就可以了。
4、lilo一定要装。否则一旦出现分区问题都不好办。
5、如果和Windows混装的时候,装完了系统起不来了。可以用98启动盘启动,然后用FDISK /MBR回复主引导分区来保住Windows分区。
在安装了最小系统和全套的编译器后,我们应该得到一个比较干净的系统。在这个系统上,可以下载和安装各种应用软件了。
三、基本使用
1、文件系统
无论有多少个分区,整个文件系统都是一棵完整的树结构。经常用到的目录有:
(1)/usr:存放各种应用程序文件用。其中的/usr/local用来存放后安装的软件
(2)/var:用来存放所有的数据文件
(3)/proc:里面的文件用来表示系统内核的各种配置和状态。这一块不是真正的文件系统,而是内存里面的各种数据。可以从这里得到一些常用的系统信息。比如CPU内存什么的。
(4)/etc:这里是放置所有的系统配置文件。一般情况下,后安装的软件的配置文件不会放到这里。除非你是用RPM安装的随发行包配的软件或者故意这样做。我不喜欢把不同软件的文件混在一起,因此通常让不同的软件的配置文件放在各自的目录中。
2、常用的命令
这里我列出一些经常用的命令,具体的用法可以参见相关手册页(希望你的英文不象我这么差)。
vi(一定要会用这个你非常讨厌的东西,如果你屈服了,可以选择另一个叫做pico的编辑器,它有点象DOS的edit)
head(用来看很长的文件用)
tail(同上)
netstat(看网络状态)
tar(解开.tar.gz的压缩包)
ps(察看进程)
kill(干掉进程)
top(看系统状况)
shutdown(关闭系统)
cat(看文件内容)
ping (看网络连通状况)
ftp(传输文件)
man(手册)
上面这些命令都是最最常用的,一定要把基本用法记牢。事实上,每人能记住全部命令或一个命令的全部参数,记住几个常用的就行了。其他的查书。
3、内核升级
如果你不愿意冒险,可以跳过这个部分。不过根据我实际使用的经验,2.4.x版本的内核性能比2.2.x的性能至少提高40%,还是很值得一试的。现在最新的发行包几乎都带有新的2.4内核,但是版本号想对保守。这里,我的建议是在决定升级任何部分的时候,一定要首先看一下所谓的“currect version release note”信息,里面告诉你本次版本升级都有些什么改动。如果改动的内容不涉及你当前的环境或需求,只是增加了一些邪门设备的驱动,你大可不必急着升级。补充一句话:Linux的内核版本号的中间一位是奇数的是非稳定版本,比如2.3,是偶数的才是稳定版本。
升级内核的步骤如下:
(1)首先在网上找到你打算升级的内核文件,一般名字是:linux-2.x.xx.tar.gz,把这个文件复制到/usr/src。(不知道在哪里找?看看:http://www.kernel.org ,最好找到.tar.gz格式的,比如这里:http://www.kernel.org/pub/linux/kernel/v2.x/)。下面的升级举例是从2.2.18升级到2.5.7(这是最新的内核了,你使用其它的版本别忘了改变版本号)
(2)解压缩:tar zxvf linux-2.5.7.tar.gz后生成一个目录:linux-2.5.7。
(3)进入/usr/src,用ls –l 命令可以看到src里面有一个连接,类似于:linux -> linux-2.2.18/ (连接指向你当前用的内核版本)。首先删除这个连接(rm linux),用ln -s linux-2.5.7 linux 命令重建连接。我想你一定不会连这里的版本号都照抄吧?
(4)进入linux-2.5.7 目录,如果不是第一次编译这个内核,最好用命令:make mrproper 删掉上次编译产生的.o文件等,当然以前保存的配置也丢了。
(5)用命令:make menuconfig命令调整内核配置以适应你目前的环境,记住,不懂的配置不要乱动。首要任务是调整各种硬件的环境,比如SCSI卡:SCSI support/SCSI low-level drivers,不知道现在的SCSI卡型号?在/proc/scsi中可以找到。还有网卡,在Network Device Support 里面。不知道现在的网卡型号?在这个文件里面写着呢:/proc/net/PRO_LAN_Adapters/eth0.info或/proc/pci文件中也可以找到 。在menuconfig中用空格键改变选项状态,前面的<*>表示该功能编译在内核中,主要是运行速度快。< >表示不需要该功能。表示把该功能编译成模块,通常为了减小尺寸,和更换方便而把某些驱动编译成模块。
(6)下面的事情比较程序化,照着做:make dep (检查文件的完整性,过程很复杂)
(7)make bzImage 注意大小写(真正开始编译了耶!我觉着这个最过瘾了,屏幕“哗啦哗啦”的,这时候你会感觉到,多少不知名的程序员在这个复杂的系统中贡献了自己的一份力量)
(8)make modules (编译那些被标记为的功能模块或驱动程序)
(9)make modules_install(把编译好的模块复制到指定地点,一般是:/lib/modules/ 。注意:不同版本号的模块是完全分开在不同目录中的,因为modules跟内核是紧密相关的,混用容易导致系统崩溃)
(10)cd /usr/src/linux-2.5.7/arch/i386/boot ,用命令:cp /usr/src/linux2.5.7/arch/i386/boot/bzImage /boot/vmlinuz-2.5.7 把文件bzImage文件改名成vmlinuz-2.5.7复制到/boot/
(11)cp /usr/src/linux-2.5.7/System.map /boot/System.map-2.5.7
(12)进入/boot目录,rm System.map
(13)在/boot目录中运行ln System.map-2.5.7 System.map 10-13两个步骤每次重新编译都要做。
(14)我开始提醒过的,但愿你安装了lilo (否则你就高唱:“神啊,救救我吧!”),编辑文件:/etc/lilo.conf ,做下面的编辑:
boot=/dev/sda map=/boot/map install=/boot/boot.b prompt timeout=50 lba32 default=linux-2.5.7 image=/boot/vmlinuz label=linux initrd=/boot/initrd read-only root=/dev/sda5 image=/boot/vmlinuz-2.5.7 label=linux-2.5.7 initrd=/boot/initrd read-only root=/dev/sda5
黑体字部分是后加的和修改的。万一你没有安装lilo,你只能修改/boot下面的连接指向你新的System.map和vmlinuz , 而不用修改lilo了。这样也能启动,但是一旦出现问题,你的机器就启动不了了。
(15)执行命令:lilo (用来更新lilo数据),注意输出的结果:带星号的是缺省的。
(16)祈祷,然后reboot 系统重新启动后,用uname –a 可看到新的内核起作用了。如果出现任何问题不能引导了,你需要在lilo的引导界面选择原来的内核启动,进入系统后重新改变内核参数,调整硬件或其他配置。然后重复前面所有过程。
四、主要的软件安装
前面说过,我的习惯是,装系统的时候就安装一个内核和编译系统,得到了一个干净的系统后,再安装其他的软件就比较清晰。另一点,除非搞不到源代码版本,一般情况下我都会下载官方版本的源代码文件,来重新编译之。同样的,选择软件版本要根据该软件的Release Note来决定,并非越新越好。这就是为什么很多软件都是几个版本齐头并进的发展之原因。这些软件不同版本之间的安装方法会有少许不同,安装前一定要仔细阅读目录中的README文件和INSTALL文件,否则这些少许不同会造成不少得麻烦。下面描述的安装过程都核版本号紧密相关。另外,所有的软件都把程序文件的包拷贝到/usr/local/src目录中再解压缩,这是习惯。因为在Linux中习惯于把后来的软件装在/usr/local中。
(1)安装DNS服务器
1、从www.isc.org下载bind 域名服务器软件。我们这里用的是bind8.3.0,bind8分支和bind9分支是并行发展的。根据自己的实际情况选择合适的bind版本。
2、mkdir /usr/src/bind83
3、下载的文件叫bind-src.tar.gz,复制到/usr/local/src/bind83目录下。
4、cd /usr/local/src/bind83
5、tar zxvf bind-src.tar.gz
6、cd src
7、make stdlinks
8、make clean
9、make depend
10、make all
11、make install
12、编辑配置文件:/etc/named.conf内容如下,需要更改的部分用黑体标出:
/* * This is a worthless, nonrunnable example of a named.conf file that has * every conceivable syntax element in use. We use it to test the parser. * It could also be used as a conceptual template for users of new features. */ /* * C-style comments are OK */ // So are C++-style comments # So are shell-style comments // watch out for ";" -- it's important! options { directory "/var/named"; // use current directory named-xfer "/usr/libexec/named-xfer"; // _PATH_XFER dump-file "named_dump.db"; // _PATH_DUMPFILE pid-file "/var/run/named.pid"; // _PATH_PIDFILE statistics-file "named.stats"; // _PATH_STATS memstatistics-file "named.memstats"; // _PATH_MEMSTATS check-names master fail; check-names slave warn; check-names response ignore; host-statistics no; deallocate-on-exit no; // Painstakingly deallocate all // objects when exiting instead of // letting the OS clean up for us. // Useful a memory leak is suspected. // Final statistics are written to the // memstatistics-file. datasize default; stacksize default; coresize default; files unlimited; recursion yes; fetch-glue yes; fake-iquery no; notify yes; // send NOTIFY messages. You can set // notify on a zone-by-zone // basis in the "zone" statement // see (below) serial-queries 4; // number of parallel SOA queries // we can have outstanding for master // zone change testing purposes auth-nxdomain yes; // always set AA on NXDOMAIN. // don't set this to 'no' unless // you know what you're doing -- older // servers won't like it. multiple-cnames no; // if yes, then a name my have more // than one CNAME RR. This use // is non-standard and is not // recommended, but it is available // because previous releases supported // it and it was used by large sites // for load balancing. allow-query { any; }; allow-transfer { any; }; transfers-in 10; // DEFAULT_XFERS_RUNNING, cannot be // set > than MAX_XFERS_RUNNING (20) transfers-per-ns 2; // DEFAULT_XFERS_PER_NS transfers-out 0; // not implemented max-transfer-time-in 120; // MAX_XFER_TIME; the default number // of minutes an inbound zone transfer // may run. May be set on a per-zone // basis. transfer-format one-answer; query-source address * port *; /* * The "forward" option is only meaningful if you've defined * forwarders. "first" gives the normal BIND * forwarding behavior, i.e. ask the forwarders first, and if that * doesn't work then do the full lookup. You can also say * "forward only;" which is what used to be specified with * "slave" or "options forward-only". "only" will never attempt * a full lookup; only the forwarders will be used. */ forward first; forwarders { }; // default is no forwarders topology { localhost; localnets; }; // prefer local nameservers listen-on port 53 { any; }; // listen for queries on port 53 on // any interface on the system // (i.e. all interfaces). The // "port 53" is optional; if you // don't specify a port, port 53 // is assumed. /* * Interval Timers */ cleaning-interval 60; // clean the cache of expired RRs // every 'cleaning-interval' minutes interface-interval 60; // scan for new or deleted interfaces // every 'interface-interval' minutes statistics-interval 60; // log statistics every // 'statistics-interval' minutes maintain-ixfr-base no; // If yes, keep transaction log file for IXFR max-ixfr-log-size 20; // Not implemented, maximum size the // IXFR transaction log file to grow }; /* * Control listeners, for "ndc". Every nameserver needs at least one. */ controls { inet * port 52 allow { any; }; // a bad idea unix "/var/run/ndc" perm 0600 owner 0 group 0; // the default }; zone "rd.xxx.com" in { type master; // what used to be called "primary" file "rd.xxx.com.db"; check-names fail; allow-update { none; }; allow-transfer { any; }; allow-query { any; }; // notify yes; // send NOTIFY messages for this // zone? The global option is used // if "notify" is not specified // here. also-notify { }; // don't notify any nameservers other // than those on the NS list for this // zone }; zone "223.99.211.in-addr.arpa" in { type master; // what used to be called "secondary" file "21.9.22.db"; }; zone "0.0.127.in-addr.arpa" in { type master; file "127.0.0.db"; }; zone "." in { type hint; // used to be specified w/ "cache" file "named.root"; }; logging { /* * All log output goes to one or more "channels"; you can make as * many of them as you want. */ channel syslog_errors { // this channel will send errors or syslog user; // or worse to syslog (user facility) severity error; }; category parser { syslog_errors; // you can log to as many channels default_syslog; // as you want }; category lame-servers { null; }; // don't log these at all channel moderate_debug { severity debug 3; // level 3 debugging to file file "foo"; // foo print-time yes; // timestamp log entries print-category yes; // print category name print-severity yes; // print severity level /* * Note that debugging must have been turned on either * on the command line or with a signal to get debugging * output (non-debugging output will still be written to * this channel). */ }; /* * If you don't want to see "zone XXXX loaded" messages but do * want to see any problems, you could do the following. */ channel no_info_messages { syslog; severity notice; }; category load { no_info_messages; }; /* * You can also define category "default"; it gets used when no * "category" statement has been given for a category. */ category default { default_syslog; moderate_debug; }; };
13、在/var/named/中生成/etc/named.conf中标记的文件:rd.xxx.com.db,内容如下,需要修改和调整相应部分:
;Authoriative data for rd.xxx.com ; $TTL 3600 @ IN SOA compaq.rd.xxx.com. tandongyu.rd.xxx.com. ( 20020101 ;Serial 3600 ;Refresh 1 hour 900 ;Retry 15 mins 604800 ;Expire 7 days 86400) ;Mini 24 hours ;Name server NS records @ IN NS compaq.rd.xxx.com. ;Mail Exchange (MX) records rd.xxx.com. IN MX 0 compaq ;Address (A) records. localhost IN A 127.0.0.1 compaq IN A 21.9.22.9 tls65 IN A 21.9.22.8 fbsd IN A 21.9.22.7
14、在/var/named/中生成/etc/named.conf中标记的文件:21.9.22.db,内容如下,你需要修改相应部分:
; ; $TTL 3600 @ IN SOA compaq.rd.xxx.com. tandongyu.rd.xxx.com. ( 20020101 ;Serial 3600 ;Refresh 900 ;Retry 15 mins 604800 ;Expire 7 days 86400) ;Mini 24 hours ;NameServer (NS) records @ IN NS compaq.rd.xxx.com. ;Address Point to Name (PTR) records 9 IN PTR compaq.rd.xxx.com. 8 IN PTR tls65.rd.xxx.com. 7 IN PTR fbsd.rd.xxx.com.
15、在/var/named/中生成/etc/named.conf中标记的文件:127.0.0.db,内容如下,你需要修改相应部分:
; 0.0.127.in-addr.arpa $TTL 3600 @ IN SOA compaq.rd.xxx.com. tandongyu.rd.xxx.com. ( 20020101;serial 3600 ;refresh 1800 ;retry 604800 ;expiration 3600 ) ;minimum IN NS compaq.rd.xxx.com. 1 IN PTR localhost.
16、在/var/named/中生成/etc/named.conf中标记的文件:named.root,内容大致如下。该文件标记了14个域名服务器。可以从ftp.rs.internic.net获得该文件的最新样本:named.hosts,然后改名成你需要的名字,比如:named.root
; This file holds the information on root name servers needed to ; initialize cache of Internet domain name servers ; (e.g. reference this file in the "cache . " ; configuration file of BIND domain name servers). ; ; This file is made available by InterNIC registration services ; under anonymous FTP as ; file /domain/named.root ; on server FTP.RS.INTERNIC.NET ; -OR- under Gopher at RS.INTERNIC.NET ; under menu InterNIC Registration Services (NSI) ; submenu InterNIC Registration Archives ; file named.root ; ; last update: Aug 22, 1997 ; related version of root zone: 1997082200 ; ; ; formerly NS.INTERNIC.NET ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ; formerly C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; ; formerly TERP.UMD.EDU ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 ; ; formerly NS.NASA.GOV ; . 3600000 NS E.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 ; ; formerly NS.ISC.ORG ; . 3600000 NS F.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 ; ; formerly NS.NIC.DDN.MIL ; . 3600000 NS G.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 ; ; formerly AOS.ARL.ARMY.MIL ; . 3600000 NS H.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 ; ; formerly NIC.NORDU.NET ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; ; temporarily housed at NSI (InterNIC) ; . 3600000 NS J.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10 ; ; housed in LINX, operated by RIPE NCC ; . 3600000 NS K.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 ; ; temporarily housed at ISI (IANA) ; . 3600000 NS L.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12 ; ; housed in Japan, operated by WIDE ; . 3600000 NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 ; End of File
17、我们还需要配置/etc/resolv.conf、/etc/hosts、/etc/hosts.conf文件以适应新的状况。
18、一切都结束后,用/usr/sbin/ndc start命令启动bind,同样的可用stop、restart、reload等命令参数操作。
19、启动后用nslookup命令(有的系统推荐使用dig命令)检验是否正确。如果出现错误,该命令将不能启动。一般的错误都是数据库文件或配置文件笔误所至。比如少个“.”或者文件明不正确等等。
(2) 安装sendmail服务器
1、从www.sendmail.org下载最新的版本(这个snedmail倒是有必要升级为最新的版本,因为它的升级主要是安全漏洞问题)。这里说明的是用的sendmail-8.12.2.tar.gz
2、cd /usr/local/src/
3、把文件下载到:/usr/local/src中
4、tar zxvf sendmail-8.12.2.tar.gz
5、cd /usr/local/src/sendmail-8.12.2
6、chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
7、chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
8、cd /usr/local/src/sendmail-8.12.2/sendmail
9、sh Build
10、cd /usr/local/src/sendmail-8.12.2/cf/cf
11、建立文件sendmail.mc内容如下,你可根据需要修改相应部分。
divert(-1) dnl This is the macro config file used to generate the /etc/sendmail.cf dnl file. If you modify thei file you will have to regenerate the dnl /etc/sendmail.cf by running this macro config through the m4 dnl preprocessor: dnl m4 /etc/sendmail.mc > /etc/sendmail.cf dnl You will need to have the Sendmail-cf pacage installed for this to work. include(`/usr/local/src/sendmail-8.12.2/cf') define(`confDEF_USER_ID',`8:12') OSTYPE(`linux') undefine(`UUCP_RELAY') undefine(`BITNET_RELAY') define(`confTO_CONNECT', `1m') define(`confTRY_NULL_MX_LIST',true) define(`confDONT_PROBE_INTERFACES',true) define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail') define(`SMART_HOST',compaq.rd.xxx.com) <---这条用于(非HUB)缺省使用HUB发送邮件 MASQUERADE_AS(`rd.xxx.com') <------------------------- FEATURE(`masquerade_entire_domain') <---这三条用于邮件地址伪装 FEATURE(`masquerade_envelope') <------------------------- FEATURE(`smrsh',`/usr/sbin/smrsh') FEATURE(`mailertable',`hash -o /etc/mail/mailertable') FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable') FEATURE(redirect) FEATURE(always_add_domain) FEATURE(use_cw_file) FEATURE(local_procmail) FEATURE(`access_db') FEATURE(`blacklist_recipients') FEATURE(`accept_unresolvable_domains') MAILER(smtp) MAILER(procmail) dnl We strongly recommend to comment this one out if you want to protect dnl yourself from spam. However, the laptop and users on computers that do dnl not hav 24x7 DNS do need this. dnl FEATURE(`relay_based_on_MX')
12、sh Build install-cf
13、groupadd smmsp
14、useradd smmsp
15、cd cd /usr/local/src/sendmail-8.12.2/sendmail
16、sh Build install
17、cd /usr/local/src/sendmail-8.12.2/makemap
18、sh Build clean
19、sh Build all
20、sh Build install
21、cd /usr/local/src/sendmail-8.12.2/
22、在本域DNS主数据库文件中增加MX纪录:
rd.xxx.com. IN MX 0 compaq
注意修改相应部分。那个0是有几个邮件集中器的时候用于标记先后顺序的。当有好几个MX的时候,建议顺序写为10、20、30…
23、在/etc/mail目录下创建access文件,内容类似如下:
127.0.0.1 RELAY 21.9.22 RELAY 211.99.221.238 RELAY
然后:makemap hash access.db < access
24、创建文件/etc/mail/local-host-names,其内容为本机的拥有的域名信息。
rd.xxx.com compaq.rd.xxx.com
25、创建文件/etc/mail/aliases,内容类似:
MAILER-DAEMON: postmaster postmaster: root bin: root daemon: root nobody: root
运行newaliases创建数据库。
创建别名文件的意义之一在于当邮件发往域中其他邮件服务器的用户而不是mail HUB用户的时候用。
比如增加一条:
atan: atan@fbsd
则导致邮件发往mail HUB的时候自动转发到[email protected]
26、启动sendmail: /usr/sbin/sendmail -bd -q30m
排错:如果有问题导致启动不了,大部分问题和DNS配置有关,可以使用nslookup检查DNS是否正常。挨个检查/etc/mail中的文件内容也是排错的好办法。另外,修改配置,不建议直接编辑sendmail.cf文件,建议使用m4宏编译工具,因为有些带有安全漏洞或过时的宏在编译的时候会有提示,这样以免造成相关安全问题。
(3)安装DHCP服务器
1、源程序下载地址是:ftp://ftp.isc.org/isc/dhcp/dhcp-3.0.tar.gz ,我们的版本是:dhcpd-3.0
2、复制到:/usr/local/scr后解压:tar zxvf dhcp-3.0.tar.gz
3、cd /usr/local/src/dhcp-3.0.tar.gz
4、./configure
5、make(如果不是第一次编译,先make clean)
6、make install
7、cp ./server/dhcpd.conf /etc
8、编辑这个文件,看起来类似下面这样:(要更改的地方用粗体标出)
# dhcpd.conf # # Sample configuration file for ISC dhcpd # # option definitions common to all supported networks... option domain-name "rd.xxx.com"; option domain-name-servers compaq.rd.xxx.com; default-lease-time 86400; max-lease-time 172800; ddns-update-style ad-hoc; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. # This is a very basic subnet declaration. subnet 21.9.22.0 netmask 255.255.255.224 { range 21.9.22.2 21.9.22.6; option routers 21.9.22.1; } # This declaration allows BOOTP clients to get dynamic addresses, # which we don't really recommend. #subnet 10.254.239.32 netmask 255.255.255.224 { # range dynamic-bootp 10.254.239.40 10.254.239.60; # option broadcast-address 10.254.239.31; # option routers rtr-239-32-1.example.org; #} # A slightly different configuration for an internal subnet. #subnet 10.5.5.0 netmask 255.255.255.224 { # range 10.5.5.26 10.5.5.30; # option domain-name-servers ns1.internal.example.org; # option domain-name "internal.example.org"; # option routers 10.5.5.1; # option broadcast-address 10.5.5.31; # default-lease-time 600; # max-lease-time 7200; #} # Hosts which require special configuration options can be listed in # host statements. If no address is specified, the address will be # allocated dynamically (if possible), but the host-specific information # will still come from the host declaration. #host passacaglia { # hardware ethernet 0:0:c0:5d:bd:95; # filename "vmunix.passacaglia"; # server-name "toccata.fugue.com"; #} # Fixed IP addresses can also be specified for hosts. These addresses # should not also be listed as being available for dynamic assignment. # Hosts for which fixed IP addresses have been specified can boot using # BOOTP or DHCP. Hosts for which no fixed address is specified can only # be booted with DHCP, unless there is an address range on the subnet # to which a BOOTP client is connected which has the dynamic-bootp flag # set. #host fantasia { # hardware ethernet 08:00:07:26:c0:a5; # fixed-address fantasia.fugue.com; #} # You can declare a class of clients and then do address allocation # based on that. The example below shows a case where all clients # in a certain class get addresses on the 10.17.224/24 subnet, and all # other clients get addresses on the 10.0.29/24 subnet. #class "foo" { # match if substring (option vendor-class-identifier, 0, 4) = "SUNW"; #} #shared-network 224-29 { # subnet 10.17.224.0 netmask 255.255.255.0 { # option routers rtr-224.example.org; # } # subnet 10.0.29.0 netmask 255.255.255.0 { # option routers rtr-29.example.org; # } # pool { # allow members of "foo"; # range 10.17.224.10 10.17.224.250; # } # pool { # deny members of "foo"; # range 10.0.29.10 10.0.29.230; # }
上面这个文件中后面都是注释,是原来系统给你的配置做的例子,可以不要。当然除非你用到它们,并且清楚它们的含义。
9、建立空文件:touch /var/state/dhcp/dhcpd.leases空文件
10、检查内核编译选项:Networking options-----Packet socket: mmapped IO和Socket Filtering选项是否被选中(不知道怎么看?看看前面的文章,用make menuconfig呀),如果没有就需要重新编译内核了。
11、route add -host 255.255.255.255 dev eth0
12、roote add -host localhost dev eth0
13、在/etc/rc.d/rc.local最后增加一行route add -host 255.255.255.255 dev eth0
14、reboot系统
15、用dhcpd命令启动DHCP,用其他的机器试试看能不能自动配置网络了。
(4) 安装apache+mysql+php+gd+png+zlib+jpeg+freetype+sslmod
这么一大堆东西为什么要一块说呢?因为他们中间是有紧密联系的,尤其是那个PHP,用到其他所有的模块。要想PHP功能全,只能一步步来了。
1、首先安装MYSQL:从http://www.mysql.com/downloads/index.html下载自己觉得合适的版本。这里用3.23.42版本。
2、进入目录/usr/local/src(这个以后就不用说了吧?)解压缩:tar zxvf mysql-3.23.42.tar.gz
3、cd mysql-3.23.42/
4、configure --prefix=/usr/local/mysql
5、make
6、make install
7、useradd mysql ; groupadd mysql ; su mysql ;(建立命名为mysql的用户和组,并切换为mysql身份)
8、scripts/mysql_install_db (建立数据库结构)
9、cd /usr/local/mysql/bin
10、./safe_mysqld & (启动了)
11、./mysqladmin -u root password "new-password"(你的新密码,记住MYSQL的密码核系统密码是独立的,缺省是没有密码)
12、用mysql程序试试看。
下面的步骤都很程式化,我尽量简洁地写出。
13、下载相关的软件包:地址表格如下
软件 版本 地址 jpegsrc.v6b.tar.gz 6b ftp://ftp.uu.net/graphics/jpeg zlib.tar.gz 1.1.3 ftp://ftp.uu.net/graphics/png/src freetype-2.0.8.tar.gz 2.0.8 http://www.freetype.org libpng-1.0.10.tar.gz 1.0.10 ftp://ftp.uu.net/graphics/png/src gd-1.8.4.tar.gz 1.8.4 http://www.boutell.com/gd apache_1.3.23.tar.gz 1.3.23 http://www.apache.org php-4.1.1.tar.gz 4.1.1 http://www.php.net number4.tar.gz 4 http://www.php.net/extra rsaref20.tar.Z 2.0 ftp://ftp.ai.mit.edu/pub/deberg openssl-engine-0.9.6c.tar.gz 0.9.6c http://www.openssl.org/source mod_ssl-2.8.6-1.3.23.tar.gz 2.8.6 http://www.modssl.org
下齐了就放在/usr/local/src目录下,除了number4.tar.gz和rsaref20.tar.Z以外,其他一律用tar zxvf XXXX.tar.gz解压缩。(过瘾吧?)
特殊的,rsaref20.tar.Z 需要先建立一个rsaref-2.0目录,然后把rsaref20.tar.Z复制到改目录下用tar zxvf rsaref30.tar.Z释放压缩。Number4.tar.gz需要复制到php-4.1.1目录内,然后用tar zxvf number4.tar.gz解压缩。
下面的描述我想简单一点,只写出进入目录后执行的命令。那些目录都是释放的时候自己建立的,如果你这些操作都在/usr/local/src下面执行,所有的目录就都在这里面。最好按照顺序执行。再罗嗦一句:如果不是第一次编译,一般情况请执行一次make clean后再编译。
14、[jpeg-6b]:生成JPEG图像的函数库。
./configure make make test make install
15、[zlib-1.1.3]:压缩算法库,是PNG和JPEG需要的
make test make install
16、[freetype-2.0.8]:字体库,在图像上使用字体的时候需要用到,
./configure --prefix=/usr/local make make install
17、[libpng-1.0.10]:生成PNG图像的函数库
cp scripts/makefile.linux makefile make test pngtest pngnow.png (如果都通过测试了,请继续。否则,看看错误提示,改正错误) make install
18、[gd-1.8.4]:GD库,用来动态生成图像用,这里主要是配合PHP生成图像。
编辑Makefile 文件:
把下列行取消注释符号(#):
CFLAGS=-O -DHAVE_LIBXPM -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBTTF LIBS=-lgd -lpng -lz -ljpeg -lfreetype -lm -lttf 注释下列行(增加#): CFLAGS=-O -DHAVE_LIBPNG -DHAVE_LIBJPEG LIBS=-lgd -lpng -lz -lm 修改下列行: INCLUDEDIRS=-I. -I/usr/local/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include -I/usr/include/freetype
保存后执行:
make make install
19、[apache_1.3.23]:步骤一 ./configure --prefix=/usr/local/apache
20、[php-4.1.1]:
如果不是第一次安装,请删除:config.cache文件,然后执行先执行make clean
接下来配置环境,输入一个比较长的命令:
./configure --with-apache=/usr/local/src/apache_1.3.23 --with-config-file-path=/local/apache/conf --with-enable-versioning --with-mysql=/usr/local/mysql --with-ftp --with-gd=/usr/local/src/gd-1.8.4 --with-enabled-bcmath=yes --with-disable-debug --enable-memory-limit=yes --enable-track-vars --with-zlib --with-jpeg-dir=/usr/local/src/jpeg-6b --with-png-dir=/usr/local/src/libpng-1.0.10 --with-freetype-dir=/usr//local/src/freetype-2.0.8
当然你也可以实现准备一个含有上述命令的sh文件,这样改起来方便些。我就是这样做的。
make make install
21、[rsaref-2.0]:RSA加密模块
前面说过,这个目录的释放是特殊的,先见目录后释放,希望你是这样做的。
cp -rp install/unix local cd local make mv rsaref.a librsaref.a
22、[openssl-engine-0.9.6c]:openssl引擎
./config -prefix=/usr/local/ssl -L`pwd`/../rsaref-2.0/local/ rsaref –fPIC make make test make install
23、[mod_ssl-2.8.6-1.3.23]
./configure --with-apache=../apache_1.3.23
24、[apache_1.3.23]步骤二
./configure --prefix=/usr/local/apache --enable-shared=ssl --enable-module=ssl --activate-module=src/modules/php4/libphp4.a make make certificate TYPE=custom(回答一些问题) make install
25、收尾工作:
编辑/usr/local/apache/conf/httpd.conf文件,增加一行:
AddType application/x-httpd-php .php
26、用命令/usr/local/apache/bin/apachectl configtest检查一下配置文件的正确性。
27、用/usr/lcoal/apache/bin/apachectl start启动apache服务器
28、在/usr/local/apache/htdocs建立一个test.php文件包含下列内容:
本文地址:http://com.8s8s.com/it/it37373.htm