2008年12月31日星期三
Postfix实现收发邮件备份
Gmail和MSexchange有这么一个功能——对发送的邮件进行备份,非常适合企业作为内部邮箱使用——一方面保存公司内部流转文档,另一方面可以允许公司对于邮件进行监控,虽说有点太那个,但不得不承认,确实有这个需求。
Postfix作为目前最广泛的开源mail解决方案,原手册中并没有提及上述功能的实现方式,研究了一下postconf中的所有配置,找出了一个曲线解决方法。
sender_bcc_maps,即自动暗送。
本文以Freebsd ports默认安装的postfix为例,开启了mysql模块,其他的系统可以参考本文。
首先在/usr/local/etc/postfix/main.cf的末尾添加如下几句:
sender_bcc_maps = mysql:/usr/local/etc/postfix/mysql/bcc_maps.cf
开启mysql作为数据库的暗送列表
在mysql中新建一个table bcc,三个字段:
mailaddress (var char 128, 唯一索引) //用户的邮件地址bccAddress (var char 128) //监听用户的邮件地址active (tiny int 128) //开启与否
并根据需求填写相应的信息。
创建文件/usr/local/etc/postfix/mysql/bcc_maps.cf
user = postfix_mysql_user password = passworddbname = postfix_table
table = bccselect_field = bccAddress where_field = mailaddress additional_conditions = and active='1'
确认无误后,重启postfix生效。
作为发送暗送,同时还有一个对应的recipient_bcc_maps 接收暗送,开启的方法与之类似,这里不再累述。
建议对暗送的邮件地址设置对应的IMAP策略对邮件进行分类过滤。
计划之后修改部分postfixadmin的代码以方便管理员直接从postfix做设置,毕竟靠phpmyadmin设置危险性还是不小。
2008年12月8日星期一
Kernel2.6编译mysql3的问题
前些天帮个朋友重装了个系统――Centos5.1下的LAMP。由于程序限制,必须在选择mysql3的数据库。
按照常理操作:
#cd /mysql3XXX
#./configure --prefix=/usr/local/mysql3
出现如下错误:This is a linux system and Linuxthreads was not found
系统中没有找到linux线程――比较搞笑,没有线程,那系统是怎么起来的?
分析下来,这是由于mysql使用了较老的thread库,针对于kernel2.4的mysql3得不到支持。
#echo '/* Linuxthreads */' >> /usr/include/pthread.h
#./configure �with-pthread �with-named-thread-lib=-lpthread --prefix=/usr/local/mysql3
重新编译后搞定!
2008年11月23日星期日
论“山寨”
2008年11月19日星期三
FreeBSD的ZFS
ZFS是sun跟随opensolaris项目一并开源的存储解决方案。具体的优势可以参考这里 。 本文不做累述。总之,使用ZFS可以将所有系统的裸存储设备都利用起来――小到磁盘,大到盘柜,都不需要考虑具体的容量分配。相对来说是低成本的存储解决 方案。
Freebsd近期也引入了ZFS这一存储格式,作为存储服务器,个人觉得用Solaris远没有Freebsd成本来的低。具体操作如下:
首先,照例的更新版本库,升级内核
#cvsup -h cvsup.cn.freebsd.org /usr/share/examples/cvsup/stable-supfile //漫长的等待
#cd /usr/src
#make buildkernel ; make installkernel //更加漫长的等待
#halt
关机后为系统安装磁盘,这边由于是测试环境,采用了一个磁盘的两个分区为例。如果是生产环境,建议采用至少2块以上的硬盘作为ZFS的物理设备。
#echo "zfs_enable=YES" >> /etc/rc.conf
# /etc/rc.d/zfs start //启用ZFS服务
# echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf //自动更新
开始设置ZFS库
#zpool zpool create zfs raidz ad7s1 ad7s2
这里要注意的是raidz参数可以用mirror、raidz1(raidz默认)、raidz2或置空来代替,分别相当于传统上的Raid 1 Raid5、Raid6以及简单叠加。
# zpool status zfs
pool: zfs
state: ONLINE
scrub: scrub completed with 0 errors on Wed Nov 19 05:11:29 2008
config:
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad7s1 ONLINE 0 0 0
ad7s2 ONLINE 0 0 0
errors: No known data errors
恭喜,ZSF pool已经成功!
然后是创建文件系统:
# zfs create zfs/www
如果成功,系统将会出现/zfs/www目录
# mount
/dev/ad4s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad4s1g on /data (ufs, local, soft-updates)
/dev/ad4s1e on /tmp (ufs, local, soft-updates)
/dev/ad4s1f on /usr (ufs, local, soft-updates)
/dev/ad4s1d on /var (ufs, local, soft-updates)
zfs on /zfs (zfs, local)
zfs/www on /zfs/www (zfs, local)
设置文件系统参数:
#zfs set compression=gzip zfs/www //设置自动做gzip
设置NFS共享:
#zfs share zfs/www
搞定!
具体命令解释可以参考SUN的官方文档
题外话:
总觉的ZFS的思想有些超前,128位的文件系统倒可以先不谈。光是自动设置gzip这一项,可真是考验机器的设置。4核的Xeon搞个500M左 右的文件竟然花费了n久,何况几年前?SUN的技术始终是这么的接近于"实现的边缘"也难怪SUN这些日子可不是那么好过。
2008年11月2日星期日
Ubuntu 810
自10月30号官方发布了Ubuntu810的正式release之后,第一时间做了dist-upgrade。
这次810的发布,对于像我这样一直更新的人来说,最显眼的变化就属桌面上的那只"山羊"了。跟之前那只"苍鹭"相比,制作更加的复杂和精良。看起 来,Ubuntu团队中interface team的能力那是与日俱增。
之前我碰到的那个休 眠和wifi灯的问题 已经得到修复,不过我这里又出现了caplock灯不会正常工作的问题――X下切换大小写时没有灯亮起来,除了麻烦一点不影响正常是使用,也就作罢。
升级之后,我的realplayer无法正常工作,只得重装。也算是小问题之一。
话在讲回来,在正常升级后的两天之内,系统升级了3次,每次至少10个包,算上发布前最后一周的那个"是不是集成进Opengoffice3"的那 个讨论,可以看得出,这次发布有不少的"赶工"嫌疑。毕竟发布时部分时区已经到了31号,再不发布的话,恐怕只能叫做Ubuntu811了。
litrin@litrin-Ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 8.10
Release: 8.10
Codename: intrepid
2008年10月20日星期一
Sun v245的硬RAID
Sun的215和245除了支持传统上的软RAID之外,新增了硬RAID功能。不过话说回来,这种价位上的服务器,不支持硬RAID的似乎也太抠 门了。
本文以崭新的机器作为例子,如果不是新机器――建议不要乱来。
一、先期准备:
新的机器一般都没有系统,直接开机即可进入OK模式(OK提示符)
setenv fcode-debug? true
setenv auto-boot? false
reset-all
机器重启以便生效,否则之后将会出现This must be fixed immediately using set-sas-wwid 的提示。
二、初始化磁盘
我的机器disk配置如下:
{0} ok show-disks
a) /pci@1e,600000/pci@0/pci@a/pci@0/pci@8/scsi@1/disk
b) /pci@1e,600000/pci@0/pci@1/pci@0/ide@1f/cdrom
c) /pci@1e,600000/pci@0/pci@1/pci@0/ide@1f/disk
q) NO SELECTION
Enter Selection, q to quit:
{o}ok select /pci@1e,600000/pci@0/pci@a/pci@0/pci@8/scsi@1 //选择磁盘通道
三、创建RAID卷
{1} ok show-volumes
No volumes to show
目前还没有RAID卷存在
{1} ok probe-scsi-all //查看ID
/pci@1e,600000/pci@0/pci@a/pci@0/pci@8/scsi@1
MPT Version 1.05, Firmware Version 1.08.04.00
Target 0
Unit 0 Disk FUJITSU MAY2073RCSUN72G 0501 143374738 Blocks, 73 GB
SASAddress 500000e01496c622 PhyNum 0
Target 1
Unit 0 Disk FUJITSU MAY2073RCSUN72G 0501 143374738 Blocks, 73 GB
SASAddress 500000e01496fa32 PhyNum 1
Target 2
Unit 0 Disk SEAGATE ST914602SSUN146G0603 286739329 Blocks, 146 GB
SASAddress 5000c5000cac86fd PhyNum 2
Target 3
Unit 0 Disk SEAGATE ST914602SSUN146G0603 286739329 Blocks, 146 GB
SASAddress 5000c5000cac00c5 PhyNum 3
注:如果出现ERROR: /pci@1e,600000: Last Trap: Fast Data Access MMU Miss报错,您可能需要执行
{1}ok reset-all
{1} ok 0 1 create-im-volume //注意:"反向"命令
Target 0 size is 143243264 Blocks, 73 GB
Target 1 size is 143243264 Blocks, 73 GB
The volume can be any size from 1 MB to 69943 MB
What size do you want? [69943]
Volume size will be 143243264 Blocks, 73 GB
PhysDisk 0 has been created for target 0
PhysDisk 1 has been created for target 1
Volume has been created
{1} ok 2 3 create-im-volume
Target 2 size is 286607360 Blocks, 146 GB
Target 3 size is 286607360 Blocks, 146 GB
The volume can be any size from 1 MB to 139945 MB
What size do you want? [139945]
Volume size will be 286607360 Blocks, 146 GB
PhysDisk 2 has been created for target 2
PhysDisk 3 has been created for target 3
Volume has been created
创建了2个Raid1卷,Raid 0 卷则用create-is-volume命令
{1} ok show-volumes
Volume 0 Target 0 Type IM (Integrated Mirroring)
Degraded Enabled Resync In Progress
2 Members 143243264 Blocks, 73 GB
Disk 0
Primary Online
Target 4 FUJITSU MAY2073RCSUN72G 0501
Disk 1
Secondary Online Out Of Sync
Target 1 FUJITSU MAY2073RCSUN72G 0501
Volume 1 Target 2 Type IM (Integrated Mirroring)
Degraded Enabled
2 Members 286607360 Blocks, 146 GB
Disk 2
Primary Online
Target 5 SEAGATE ST914602SSUN146G0603
Disk 3
Secondary Online Out Of Sync
Target 3 SEAGATE ST914602SSUN146G0603
搞定!
四、删除磁盘
{1}ok 0 delete-volumeIXPUB技术博客 z(Wp pv0Z k`n
The volume and its data will be deleted
b2F ~k)jj&pRR$m0Are you sure (yes/no)? [no] yes
-e@vpf `y${0Volume 0 has been deleted
将磁盘0删除
五、重启
setenv fcode-debug?false
setenv auto-boot? true
reset-all
安装操作系统和应用程序。部署完毕!
2008年10月16日星期四
“世界运行在数据之上“
MS是微软sql Server 2005的一句广告语:"世界运行在数据之上"。反正这些天我已经深深的感受到了什么叫做"海量"。
自打8月底,公司采购的最多IT设备恐怕就是硬盘和磁带了,而且几乎所有的采购都是500G起步――半T的硬盘竟然也十几个一买,搞的360buy 的送货员狂汗。
按说一般办公的主机,只要不BT,搞个80G的盘足够用了,哪知这个到了视频制作那边,这种级别的容量就像软盘一样微不足道,8M码流的成片,1秒 就是8M,1小时就28G。这仅仅只是成片,素材又是一个数量级。况且视频这类的东西几乎无法被压缩。回想起N年前1.2G的硬盘,真是哭笑不得。
数据库备份又是一个大户,每天3个备份,每个100G,还好做的是循环增量。
电话录音,wav格式,每电话每秒44K,每天一张CD(650M)还好不多。
之前一直没有关注过EMS之类的企业级存储,看来需要恶补一下。
反观IT这些年的发展,似乎都处在一个"处理过快,传输落后"的地步,即便是SATA接口,传输一块硬盘的数据也需要数小时的时间,想要升级接口的 成本大大于单纯升级容量。类似的例子还有USB2.0、网卡甚至于前端总线之类。个人认为,下一个阶段恐怕是接口上的升级了。
2008年9月29日星期一
远程控制Boinc
持了n多的分布计算项目,其中最初明的应该算是SETI@home那个寻找"小绿人"的
项目。
Boinc由客户端和管理器组成,默认的安装要求安装有桌面环境。这对于很多服务
器而言似乎严格了一点。现在就分享一下使用控制器远程使用客户端的方法。
首先,安装Boinc
Fedora : yum install bonic-client
Debian : apt-get install boinc-client
Ubuntu : sudo apt-get install boinc-client
FreeBSD : cd /usr/poot/net/boinc-client; make install clean
其他的系统可以直接去http://boinc.berkeley.edu下载安装程序。
这里需要说明的是,我在Freebsd上安装最新的程序,配置结束后系统老是提醒我
平台不正确,那不到运算数据。看来同样波克利项目之一的Freebsd 跟Boinc之间
存在兼容问题,比较讽刺。
找到安装目录下的gui_rpc_auth.cfg文件,修改内容为控制密码,例如:123456
执行 boinc-client --daemon --allow_remote_gui_rpc。
在远程,使用boinc-manager。高级->选择计算机->填写主机ip和密码。按照向
导添加项目。以后每次需要管理项目的时候也要采用类似的方法在几台主机之间切换。
如果要显得专业一点,可以修改相应的服务启动文件。
希望各位能够帮助大家提供更多的运算量!
2008年8月5日星期二
并购
首先是"合并",明确一点对于大多数的员工来说恐怕就是"裁员"――沉甸甸的话题。作为"重要部门"的leader,相对大多数员工较早的知道了消息。自己下属的去留,公司其他同事的去留,始终成为一个悬念,日夜折磨着我。更为痛苦的是,公司方面封锁着消息,憋在肚子里的感觉更是折磨人。话说没有不透风的墙,公司员工陆陆续续得到了消息,流言就像瘟疫一样在公司里蔓延。不断的考验着每一个人的士气。所有的工作陷入了瘫痪……
第二只靴子总算扔了下来,公司开始大范围的裁员,看着公司里原本和气的同事一个个离开公司,心里很是郁闷。几个部门甚至到了连根拔起的程度,走在空荡荡的办公室里,心里几分唏嘘和感慨。也许我们作为职场上漂浮的人来说,也许我们本不属于某家公司。但作为朝夕相处的同事或是朋友,也许这就是所谓的缘尽缘散吧。
接下来是"交接",公司高层考虑了多方面的因素,决定使用对方的office。本身对于负责运维的我来说,这是见省力气的活。可对方的运维主管怎么说也是职业道德存在问题,竟然公开以公司的各项关键数据和应用作为筹码,叫嚣要与公司谈判。几次谈判无果而终。为保障数据安全和关键应用,利用周末两天的时间,作为解聘他的前期准备,我的任务是拆解公司所有的密码并更换所有的权限。也算是运气比较好,除了几套"非关键应用"服务器的密码无法破解之外,包括netscreen,solaris, Oracle在内的几十个密码被拆解。基本上已经牢牢的控制了新公司的所有最高权限。周一一大早,对方的运维主管如期的拿到了解聘通知书,安排做移交。恼羞成怒的他自然没有什么好脸色,所谓的移交仅仅只是过场而已,气氛压抑到我甚至有了动手打人的念头。最后,作为报复,他偷偷重建了公司OA系统的RAID,造成OA系统瘫痪,而且数据几乎是无法恢复的。为此公司方面甚至动用了法律顾问,几次交锋之后,双方同意和谈。他需要重新恢复OA系统(公司方面了解了他在此之前早有预谋,甚至拷贝了400G以上的数据回家),代价是公司送他一台电脑――比较搞笑的交易。
最后,又是搬家。不谈也罢。
开源社区的商业话题
不足之处望指正。
之前,一直以为开源社区是由于财力的原因无法大幅改善软件的人机界面――至少大
部分的软件没有同样功能的商业软件来的漂亮。现在觉得,由于大部分开源社区的
领导者大多都是程序牛人,而对于软件的产品设计相对欠缺了不少;或者由于领导
人是产品设计师而缺乏开发技术。加之开源社区的成员分散于网络,沟通很有障
碍。种种问题导致了开源软件的界面始终落后于软件技术。
之前,一直以为购买了诸如redhat服务这类的商业支持,对方提供的仅仅只限于产
品在使用过程中的技术支持。现在才明白:诸如Redhat这类的公司,既然收人钱
财,肯定会替人消灾的。对方不仅提供技术支持――这是最基本的。提供的服务还包
括与合适的开源社区沟通以便引导社区完善你所感兴趣的部分。例如:你的某硬件
系统无法支持,redhat可以给你确切的答复***内核以后会支持之类的明确信息。
这前提当然需要你掏出足够的银子。
2008年7月30日星期三
走进工厂的工匠
视。我只是想借助这篇东西发发牢骚罢了。
记得在学生时代,我非常向往一份程序员的职业。总是听说某某人搞开发的,月薪
多少多少;搞开发的,由于某些功能无法实现,强迫业务部门改变现有流程;甚至
于某某程序员,由于不满,能大骂老板而毫发未伤之类的传闻。感觉上程序员是一
个旱涝保收的金饭碗,甚至可以凌驾于这个公司的运作之上。
前些日子公司的合并,部门的变动――IT部门开发这一块的损失最大。联系到目前几
乎任何一家公司的裁员,IT部门往往是最先拿程序员开刀。几分感慨啊!
曾经的软件行业,一个程序员几乎要完成从设计到开发到界面的一条线。开发过程
中还要考虑到"宝贵的资源",接二连三的优化算法,分配内存。工作内容的细致程
度不亚于一个艺术家。可以说是一个集软硬件为一体的行业高手。无外乎享受着优
厚的待遇。
现如今,至少在很多企业里,程序员的概念就是一大帮小孩子(只有男生,没有女
生),在一间阴暗的满是烟味的房间,乱蓬蓬的头发和衣服,加班熬夜而布满血丝
的眼睛……
软件行业呢?作为协作开发概念的前提就是要每个程序员都成为一个白痴、一个零
件,一百个人来做同样的事情只会有一种代码,新手和老手的区别只是在效率上,
到头来对于这种概念业界还给予了高度评价和支持――优化的算法?拜托,现在机器
这么高的配置是干什么用的?你这么写别人怎么看得懂?
人才退化,每个IT人几乎都学过C,谁又真正用C开始写过整个项目?OK,我是说从
stdio.h开始的C!MVC的概念大致就是,底层找现成的;中间件有能力的就改,没
能力就抄;关注模型层(modle)就OK了。
至于说某些硬件厂商为了提高硬件效率而出现的"人肉编译器",只能解释为为商业
(更却切的是数字)的妥协,最终还是会趋向零件化的。
这也许就是各种行业的普遍规律。当一种职业变的凌驾一切时,立刻就会通过各种
方式的改良,或者说"行业优化"让他变的每况愈下。于是我们看到了MS .net系列
一推出的宣传口号就是"为业界培养大量的低成本人才"这种说法。讽刺的是,前些
日子看到CCTV介绍大连的软件外包园的定义为"新的经济模式",我想这几乎就是下
一个"富士康血汗工厂(此富士康不是iphone gril待的那个富士康 :-) )"的雏形。
工业替代了手工业,自动化替代了传统工业――IT亦然!
2008年7月15日星期二
linux下模拟串口终端
还是重复下:我的系统是ubuntu的,笔记本没有集成com(相信目前几乎所有的本本都没有这么‘高级’的接口),使用USB的串口连接线HL340芯片。
Linux对于改转接口的支持相当不错,至少不用安装驱动。插上后系统就自动识别了/dev/USBtty0
通过软件管理器安装了GtkTerm,本以为这玩意可以直接工作的,周折了一会,才明白了还要如下云云。
- gtkterm里面,configuration->port里面设置合适的端口
- 开启一个终端窗口
- 执行cat /dav/USBtty0
- 切回gtkterm开始工作。注意不要遮挡住终端窗口
总的来说,这种方式比较复杂。linux下其实也可以选择putty,用法跟win下的一致,唯一的缺点是没有办法粘贴复制,这里不再累述。
2008年6月30日星期一
用FreeBSD的ports安装apache+php+mysql・改
那篇E-mail不长,在我的电脑上显示下来仅仅只有三行不到的样子,大抵的内容无非是说本站如何如何的帮了忙,我不免沾沾自喜起来——正如往常的 沾沾自喜一样,mail的结尾处指出了小站的几个问题,最重要的是说很多文章过于流程化了,没有一点文字上的修饰和润色,言外之意是字里行间缺乏应有的优 雅和细致。要指明的是,所谓优雅和细致,正是目前白领文学或者说白领文化所擅长的。说到白领文化的代表,我想村上春树的小说(或者说林少华翻译的日本小 说)、伍佰的歌词、汪家卫的台词、小女人的blog绝对可以作为代表。作为我,从来没有当作自己是白领的一员——乏味的代码、吵闹的机房、灰尘遍布的机 架,也许能跟这些词句联系上的只有“体力劳动”一个词了。我固然写不出优雅和细致,字里行间唯独只有王朔依稀的身影。于是我决定做一个尝试,既然有这样的 需求,按照目前常说的一句话似乎叫做“需求第一”吧,我决定润色并重写曾经本站访问量最高的那篇文章……
以上,正如以往话剧前面总有一个人上来讲述故事背景一样,是本文的开场白,别急,正剧马上就要开始了,当然希望您读的时候也要用优雅而细致的语调默默的朗读。
那时大概在前年的下班年,我一个正处在技术大崩溃边缘的技术人员,为了给自己制作一个技术性的网站(正如您现在看到的那样,就是本站了),要用FreeBSD平台的操作系统build一个万维网系统。
在此之前,看了网上很多安装apache php以及mysql的文章,唯独可惜是,其中大多都是用在林纳克斯的OS中的,不知为何,大多是用源代码编译的步骤教程,而其余 的,Rpm(redhat programs manager )又占去了绝大部分。几乎寻觅不到FreeBSD平台下有关于Ports安装的一点讯息。于是我决定写一篇这样的东西,以免让大家舍近求远。
需要在所有的工作开始之前confirm的是,将您的主机连接到互联网之上且网路配置吻合,虽然这是句笑话,但似乎很多人都在这里遇到了坎坷。
连接好控制台,轻击键盘,键入命令:
cvsup -h cvsup.freebsd.org /usr/share/example/cvsup/ports-supfile
这条命令的大体意思是从互联网上同步一下ports,以防止后续的工作中出现不必要的麻烦。
接下来的步骤就是要安装database了,Mysql纵然在严酷而恶劣下的环境还可以迅即的完成数据检索,为此Mysql成了我的首选。我的手指轻轻滑过键盘,屏幕出现了:
cd /usr/ports/databases/mysql50-server/
make install clean ;rehash
不知过了多久,在我回忆了我虚度的童年时光之后——也许吧,可能时光流逝的还要慢一点,总之,一阵漫长的时光度过之后,Mysql已经成为了电脑中的一分 子。接下来呢?配置mysql吧:cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf
可见我电脑中资源少的可怜,我仅仅只有权力使用小内存模式启动mysql,如果条件允许您这样做的话,您可以尝试 my-big.cnf 甚至于 my-huge.cnf
mysql_install_db -u mysql ; mysqld_safe -u mysql &
看看mysql是否已经能够start
也许您的mysql已经成功的运行了起来,但这还是远远无法满足要求的,万维网的存败似乎跟重要的来自于Apache和PHP的成功与否——至少,这决定您主机可以运行两层结构的网站。指尖在被人称作“小黑”的电脑键盘上拂动,我键入了:
cd /usr/ports/www/apache22/
make install clean
正如上面一样,我又一次回忆了我虚度的童年时光。
cd /usr/ports/lang/php5
make config ,在这里要选择您需要的PHP的modules,但请记住一点,如果您不选择apache支持的话,也许您就会因此而后悔莫及。伤害一个系统的最好方法就是伤害他最不容易察觉的地方。
make install clean ;rehash
童年又再一次的被回忆了起来,我似乎看见了家乡的桃花……
当我从回忆的桎梏中解脱出来,回身,编译已经结束,剩下的只有配置了,回味中,我想,这也许就是生活,等待中的生活。
配置过程相比之下是紧张而痛苦的,没有了漫长的等待,更多的是寻觅。
在/usr/local/etc/apache22/httpd.conf中加入:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps #可不加,仅仅只是方便您察看PHPS格式的源代码。
可以尝试让系统启动起来了,付出了艰辛之后,是时候享受成果了:
apachectl start
echo "<?php phpinfo() ?>" > /usr/loacl/www/data/info.php
如果启动成功,并能显示lynx http://localhost/info.php ,说明您的辛苦没有白费,系统起来了!Apache PHP Mysql这一刻在您的机器上灵魂附体,他已经不是一个人在战斗!!
echo ' mysql_enable = "YES" ' >> /etc/rc.conf
echo ' apache2_enable="YES" ' >> /etc/rc.conf
这样,纵然您的机器无故重起,照旧服务器还可以正常运行,一如往常一样的运行着……运行着…………
我显示器就样默默的对视了大约40分钟,在这40分钟里,我和他的距离最近只有0.01厘米,就在这40分钟之后,我彻底的爱上了FreeBSD……
爱上的FreeBSD,也爱上了开源,这难道就是传说中的幸福吗?
Virtual Server Virtual PC下Linux桌面的问题
琢磨了半天,硬件都是认出来的,只能说明分辨率之类的设置有问题,(Centos为例) 修改桌面配置文件/etc/X11/xorg.conf,
找到:DefaultDepth 24 改为 DefaultDepth 16 #16 bit 色深
同样的:
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
改为:
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
这个就是标准的640x480x16bit的标准VGA.
重起桌面,问题解决!同样的方法在V-PC上通过。
2008年6月26日星期四
完全抛弃Windows桌面的注意事项
此文针对于完全使用linux的用户,双系统或虚拟系统的可供参考。
算起来,自己的本本完全离开windows已经超过2个月了,目前跑的是ubuntu804。总结下使用过程中的几个问题。
- 一开始用3D桌面觉得很酷,后来没几天你就会觉得这玩意除了能把系统拖慢以外,还能帮助你分散注意力,提升负效率
。除了用于炫耀之外,老老实实的2D桌面已经很高效了。 - 对于安全性有要求的朋友(特工?)http://www.litrin.net/?q=node/484
- 对于性能有要求的朋友,可以使用rt(realtime)的内核,虽然我用上了之后感觉没什么区别。

- 如果你的朋友不是用evolution,还是用Thuderbird吧,除非像我一样经常用到todo list之类的功能。http://www.litrin.net/?q=node/482
- windows下面用putty并通过密钥登录的,记得通过putty-key-gen把putty的密钥转存为openssh的密钥。
- Openoffice处理标准的文本没有问题,但记得习惯另存为MS格式或PDF格式。
- 对于字体的问题,如果需要的话,可以从xp(vista更佳)拷贝字体文件到Linux。
- 如果是在无法接受Openofffice的兼容性的话,wine+绿色版本office很好用。
- Adobe Reader,随然系统自带的PDF浏览器已经很出众了,AR比较耗资源且非常慢,但在硬盘不吃紧的今天,多装一个软件没有坏处,何况还是免费的。
- Pindin可以集成几乎所有的聊天工具,兼容性不错(不是‘很好’),amsn的中文版本,几乎没法用。
- Chmsee,技术人员必备!
- Gftp,如果不想敲命令下载的话。
- Realplayer for Linux,看片的话。
- planner项目管理很好用,但自己用用就可以了,不要指望用惯project的人打的开。
- FF的浏览器已经几乎可以访问所有的网站了,如果实在存在兼容问题,建议采用IEs4Linux来安装IE。对于网银这样的问题,如果不会使用Seamonkey的话,还是打电话好了。

- 通过“终端服务客户端 ”可以登录到远程windows桌面,切断时会有一个报错,不用理会就可以了。
- 新手可以安装个ubuntu-tweak来修改系统设置。
- 没事的话可以看看http://fullcirclemagazine.org/ 保证你会有收获!
PS:其实Linux的系统也会死机。
wine的3D游戏性能测试
这次我使用ATI显卡的主机——家里自己的“游戏机”,配置照例列一下:AMD Althlon64 3000+ 1.5GRAM ATI原厂X700 pro256M wd200G SATA2
windows是XP pro 不是For i386_64的,催化剂5.13
Linux使用Suse10 for AMD64标准内核(未升级)wine 为0.93beta 安装ATI的最新“催化剂”的Linux X86_64版本5.12

(可以看见后面其实已经死掉的3dmark03安装程序)
Super PI 104w位时间: 50“ : windows耗时49“ = 98%


运行3dmark 01 成功,但只能测试第一个场景,“飞车”结束后就跳回桌面,我看了一下最大87FPS——与win下的89FPS接近,但贴图错误让人难以忍受,看来对于3d的模拟wine支持的不是很理想。


安装3dmark03,不成功,安装不上,无法测试。
安装Sandra2002成功,但似乎测试程序要修改部分驱动程序,故无法进入界面,跳出logo后卡住了。
安装Aquamark,提示没有windows/system/drivers/ 目录,创建后通过安装,但运行时报错,无法进入测试。

模拟运行星际1.11B 成功,唯一的缺陷反而是速度太快,调节speed选项没有任何变化,可能是由于这一部分的程序采用与底层硬件直接通讯的方式获得时钟,但采用模拟以后,原先的程序实际上采用了一种类似于解释脚本的方式运行,无法正确的获得时钟。

(恶心的虫族+变态的无限矿)

(我有“7号”我怕谁!)
其他还尝试模拟了几个游戏包括最新大作Q4 、文明4、Doom3、极飞9等,除了几个桌面小游戏(连连看、养鱼、zuma等,其中部分采用opengl加速)外均无法运行,无一例外的“报错”是“请放入游戏CD”——破解不成功?可连正版的Diablo2也不行。估计还是跟底层硬件通讯有关,加密也好,破解也好几乎离不开对于硬件的直接通讯(加密)或模拟直接通讯(破解)。
结论:wine对于windows程序的模拟只停留在2D桌面应用和早期opengl游戏的层面上,若要运行大型d3d游戏还是老老实实的在win下罢,而且若要流畅运行桌面程序,安装驱动程序是必须的。
2008年6月24日星期二
让Openoffic与你的数据库对接
Openoffice从2.0版本开始,增加了Openoffic Base组件。这个组件功能类似于MS Access,同样允许你通过ODBC 或 JDBC 连接到外部数据库。本文就Ubuntu下的ODBC连接mysql为例。
安装 unixODBC 和 MyODBC :
#sudo apt-get install unixodbc unixodbc-bin libmyodbc
其中"unixodbc-bin"是一系列图形化的工具,可以不安装。
设置unixODBC:
#sudo ODBCConfig
开启ODBC的控制面板,与windows的几乎一样的布局。
System DSN->ADD...按钮
继续ADD
这里的Name和Description随便写就可以了,Driver 为 /usr/lib/odbc/libmyodbc.so
Setup 为 /usr/lib/odbc/libodbcmyS.so ,其余的默认就好了。对于其它不是Ubuntu的用户,只要确保安装了MyODBC,不妨直接搜索文件名将路径贴过来就可。结束后"对勾"按钮保存结束。
到了这一步就没有太大难度了,Name随便,Server添数据库服务器的IP地址,Port Mysql的端口,默认3306,Database下拉列表中选择需要连接的数据库。其余空着,对勾。
设置成功!OK结束。
设置OpenOffice Base:
这里选择"连接到现有数据库"下拉列表选择ODBC,我试过选择Mysql不 过到头来还是通过了ODBC连接。
如果前面ODBC设置正确,这里会出现数据源列表。
数据库的用户名、密码,同时还有测试按钮。
OK,搞定!
现在就可以利用OpenOffice Base来直接向数据库中导入、导出数据了,对于数据库开发来说,利用图形化的界面搭建数据库是非常惬意的了。
2008年6月20日星期五
启用Solaris的tomcat
察看系统是否安装了apache和tomcat
pkginfo grep SUNWtcatrpkginfo grep SUNWapchr
如果有的话
cd /etc/apachecp httpd.conf-example httpd.conf
vi httpd.conf
include /etc/apache/tomcat.conf #应该是在最后一行,去掉注视
cd /var/apache/tomcat/conf cp server.xml-example server.xml
OK了
启动
/etc/rc3.d/S50apache stop /etc/rc3.d/S50apache start // 第一次restart似乎无效
svcadm enable apache
2008年6月17日星期二
了解 LILO 和 GRUB
在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序。通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU GRUB(GRand Unified Boot loader), 并研究两者各自的优点和缺点。
什么是引导加载程序?
最简单! 地讲,引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录(master boot record,MBR))。在单一的 MBR 中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。所以需要更灵活的引导加载程序。
主引导记录本身要包含两类内容 —— 部分(或全部)引导加载程序以及分区表(其中包含有关于介质其余部分如何划分为分区的信息)。当 BIOS 引导时,它会寻找硬盘驱动器第一个扇区(MBR)中存储的数据;BIOS 使用存储在 MBR 中的数据激活引导加载程序。
由于 BIOS 只能访问很少量的数据,所以大部分引导加载程序分两个阶段进行引导。在引导的第一个阶段中,BIOS 引导一部分引导加载程序,即 初始程序加载程序�! �initial program loader,IPL)。IPL 查询分区表,从�! �能够� ��载位于不同介质上任意位置的数据。首先通过这步操作 来定位第二阶段引导加载程序(其中包含加载程序的其余部分)。
第二阶段引导加载程序是引导加载程序的主体;很多人认为这才是引导加载程序的真正部分。它包含有加载程序更需要磁盘空间的部分,比如用户界面和内核引导程序。从简单的命令行到绘声绘色的 GUI,这些用户界面的范围很广泛。
引导加载程序通常配置为两种方式的其中之一:要么是作为主引导加载程序(primary boot loader),要么是作为二级引导加载程序(secondary boot loader)。主引导程序 是安装在 MBR 上的第一阶段引导加载程序(见先前的描述)。 二级引导加载程序 是安装在可引导分区的第一阶段引导加载程序。必须在 MBR 上安装单独的引导加载程序,并配置它将 控制权转交给二级引导加载程序�! �
很多较新的 Linux 引导加载程序特别实用,因为它们提供了不同程度的交互,比如高级的 GUI 和加密的口令,以及通过选择操作系统进行引导的能力。这样,可以在具有多个物理磁盘的同一机器上共存多个操作系统。这种设置越来越常见,因为它帮助很多用 户在安装新的 Linux 时,能够保留先前由 Windows� 机器所生成的宝贵数据资料。我个人认为这种设置非常美妙;只使用一台机器就可同时拥有 Linux 和 Windows。
随着时间的推移,引导加载程序已经得到了增强,为用户引入了大量的功能。各个引导程序的功能和配置存在差异,但基本的目标是相同的。
现在来看两个较为流行的引导加载程序:LILO 和 GRUB。
LILO
LInux LOader(LILO) 已经成为所有 Linux 发行版的标准组成部分。作为一�! �� 较老的/最老的 Linux 引导加载程序,它那不断! 壮大� � Linux 社区支持使它能够随时间的推移而发展,并始终能够充当一个可用的现代引导加载程序。有一些新的功能,比如增强的用户界面,以及对能够突破原来 1024-柱面限制的新 BIOS 功能的利用。
虽然 LILO 仍在不断地发展,但 LILO 工作原理的基本概念保持不变。
使用 LILO 作为引导加载程序
要使用 LILO 作为引导加载程序,需要做的事情取决于是要进行全新安装还是要让已经安装的 Linux 改为使用 LILO。如果是要进行全新安装,那么直接跳转到 配置 LILO 那一节。如果已经安装了某个 Linux 发行版,那么通常可以选择安装并配置 LILO(并可以将机器引导到新的 Linux 安装)。
要将现有的 Linux 迁移到 LILO,首先必须获得最新版本的 LILO(见 参考资料)。在做任何其他事情之前,建议您确保在手边拥有一张 Linux 引导盘 &! mdash;— 如果偶而弄错了某些地方,它可以提供很大的帮助,能够恢复到初始的 Linux 配置!将 LILO 安装到系统中之后,让它接管 MBR 非常简单。以 root 用户身份输入:
配置 LILO
LILO 的配置都是通过位于 /etc/lilo.conf 的一个配置文件来完成的。清单 1 给出了一个示例配置,使用的是我的家用机器,支持 Linux 和 Windows 机器的双重引导。了解我的工作站的基本配置,就可以想像出这些配置是如何与实际机器相! 关联的: 主 HDD(物理磁盘 1)上安装了 Windows XP(最初机器上只有它)。在 Linux 术语中,这个 HDD 是 /dev/hda(在 GRUB 术语中是 hd0,0)。 从 HDD(物理磁盘 2)上安装了 Red Hat Linux;root 分区位于这个硬盘驱动器的第三个分区,即 /dev/hdb3(在 GRUB 术语中是 hd1,3)。
清单 1. lilo.conf 示例文件
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
compact
default=Linux
image=/boot/vmlinuz-2.4.18-14
label=Linux
root=/dev/hdb3
read-only
password=linux
other=/dev/hda
label=WindowsXP
install= 是 LILO 在引导过程中内部使用的文件之一。它同时包含有引导加载程序的主要部分和二级部分。boot.b 文件的 一个片段被写入到 MBR(引导加载程序的主要部分),它会指向那个映射,接下来指向二级引导加载程序。同样,不要改动它!
prompt= 告诉 LILO 使用用户界面(本例中给出了两个选择 —— Linux 和 WindowsXP)。除了使用 prompt/user 界面以外,在适当情况下还可以为 Linux 内核等指定具体的参数。如果不在配置文件中指定此选项,那么 LILO 将引导到 默认的 OS,不发生任何用户交互,也不会等待。(但是请注意,如果在引导时按下了 SHIFT,那么还是可以得到提示,当不想把 引导加载程序暴露给普通用户时,这非常有用)。
timeout= 是引导提示在自动引导默认 OS(! 本例中是 Linux)之前的等待时间(以十分之一�! �为单� ��)。 如果在 lilo.conf 没有指定 prompt,那么这个参数就会被忽略。
compact 选项可以大大加速引导过程,它会将连续的读磁盘的请求合并为一个单独的请求。不过,这可能是 一件祸福参半的事情,因为我在论坛上看到过很多贴子提到了关于此选项的问题。当希望从软盘引导时,这个选项尤其有用。
default= 选项告诉 LILO 默认使用哪个映像进行引导,比如在等待超时之后。这与 lilo.conf 文件中的某个映像的 标签相关联。如果没有在配置文件中指定此选项,那么它将引导文件中指定的第一个映像。
对于允许用户引导到的每一个 Linux 版本,都应该指定 image= 及以下三个选项。image 选项指定希望 引导到的内核版本。 label= 标明了在运行期间希望能够从用户界面引导的不同 OS。另外,这个标签用于指定引导的默认 OS。 (注意:�! ��签名称中避免出现空格;否则,引导那个文件时会出现无法预期的错误。)
root= 告诉 LILO OS 文件系统实际所在的位置。在我们的示例中为 /dev/hdb3,即第二块硬盘上的第三个分区。
read-only 告诉 LILO 以只读的方式初始引导到文件系统。OS 一旦完全引导起来,就会以读写方式挂载。
password= 允许您为将要引导到的特定 OS 设置口令。不幸的是,这个口令是以可读文本的方式保存在 lilo.conf 文件中,所以,所有人都能够读取它。如果需要,还可以对想要引导自的每个操作系统设置口令(在我们的示例中,只为 Linux 的引导 设置了一个口令)。
other= 的动作类似于 image 和 root 选项的组合,但是用于除了 Linux 以外的其他操作系统。 在我们的示例中,它告诉 LILO 到哪里去找到 Windows OS(位于第一块硬盘的第一个分区)。! 如果先安装 Windows,后安装 Linux,通常会是这样! 。
label= 与所有其他 label 选项相同。
初始引导过程
当 LILO 初始引导时,它会按次序打印出每个字母 —— L-I-L-O。如果所有字母都显示出来,那么第一阶段引导就成功了。缺少任何内容 都表示出现了问题: L:第一阶段引导加载程序已经被加载。如果 LILO 停止在这里,那么是在引导第二阶段引导加载程序时出现了问题。这通常会伴随有一个错误代码。 在这个阶段的常见问题是介质问题,或者在 lilo.conf 文件中指定了不正确的磁盘参数。
LIL:第二阶段引导加载程序正在被执行。此时,可能会再次出现介质问题,或者映射文件(如 lilo.conf 文件中所指定的)在寻找描述符表时 可能会出现问题。
LIL?:加载到与上面相同的阶段。这通常意味着加载第二阶段引导加载程序使用了错误的地址,最常见的原因是 boot.b 所在的位置与 lilo.conf ! 文件所指定的不同。
LIL-:加载到与上面相同的阶段。加载描述符表时出现问题,最常见的原因是描述符表错误。
LILO:LILO 成功被加载,没有出现任何错误。
LILO 被成功加载后,将看到 LILO 提示符。还是使用前面的示例 lilo.conf 文件,此时将有两个选择,可能对 LILO 新手来说并不直观。首先,可以 让 LILO 超时(10 秒后),这将引导 /dev/hdb3,即 Linux 分区。另外,可以按下 TAB 键,这将列出将要引导的操作系统选项。在我们的示例 lilo.conf 中, 将得到的选项是 “Linux” 和 “Windows”。输入哪一个,就会引导到哪个 OS。指定加载 Linux 选项,会提示输入一个口令,在本例中是 linux。如果输入的口令有误,则会返回 LILO 提示符。
不幸的是,LILO 不支持引导期间的交互式配置,所以,只能在 lilo.conf 中或者运行 /sbin/lilo 时指定选项。
关于第一次尝试 LILO 的最后一点建议是:我发现使用软盘引导磁盘比使用硬盘实现 LILO 配置更为安全。为此,必须在 l! ilo.conf 文件中使用 boot=/dev/fd0 替换 boot=/dev/hda。那样,如果弄乱了 lilo.conf 文件 中的任何配置,都可以取出引导磁盘并像先前一样引导到 Linux。当使用软盘进行引导一切正常以后,可以将 lilo.conf 修改回 boot=/dev/hda,然后最后一次运行 /sbin/lilo 来上传修改。
GNU GRUB
近来,GRand Unified Boot loader(通常称为 GRUB)似乎要取代 LILO 在引导加载程序方面的统治地位。GNU GRUB 基于原来的 GRUB 程序(最初由 Erich Stefan Boleyn 所创建),正在由自由软件基金会(Free Software Foundation)进行积极开发。
使用 GRUB 作为引导加载程序
与使用 LILO 相同,使用 GRUB 作为活动的引导加载程序所需要的步骤,取决于是安装全新的 OS 还是已经安装了 Linux 并计划转移到 GRUB。 如果是进行全新安装,那么可以直接跳转到 配置 ! GRUB 那一节。如果已经安装了某个 Linux 发行版�! �那么� ��常可以选择 安装并配置 GRUB(并可以将机器引导到新的 Linux 安装)。
计划迁移到 GRUB 的当前 Linux 用户需要去获得最新版本的 GRUB(见 参考资料)。同样, 与 LILO 相同,在做任何其他事情之前,需要在手边准备一张 Linux 引导盘。使用交互模式(后面将描述)则不需要这张磁盘, 不过最好拥有一张以备急需时使用。将 LILO 安装到系统中之后,让它接管 MBR 非常简单。以 root 用户身份输入:
在前面的示例中,hd1 是我的 Linux Disk,hd0 是我的 Windows 磁盘。这样将使用当前 GRUB 默认值,并抹去 MBR 中当前所有内容(请阅读 配置 GRUB,以确保能够按预期引导起来)。
配置 GRUB
GRUB 的配置都是通过位于 /boot/grub/grub.conf 的一个配置文件来完成的。清单 2 给出了一个示例配置,使用的是我的家用机器,支持 Linux 和 Windows 机器的双重引导:
清单 2. grub.conf 示例文件
timeout=10
splashimage=(hd1,3)/grub/splash.xpm.gz
password --md5 $opeVt0$Y.br.18LyAasRsGdSKLYlp1
title Red Hat Linux
password --md5 peVt0$Y.br.18LyAasRsGdSKLYlp1
root (hd1,3)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img
title Windows XP
password --md5 peVt0$Y.br.18LyAasRsGdSKLYlp1
rootnoverify (hd0,0)
chainloader +1
timeout= 是在自动引导默认 OS(在本例中是 Red Hat Linux)之前引导提示会等待多少秒。
splashimage= 是用作 GRUB GUI 背景的图片所在的位置。
password 选项指定了使用 MD5 加密的口令,用于访问 GRUB 的交互式引导选项。注意,这不会阻止用户选择 引导已经定义的 OS;需�! ��为 每一个 -title 设置它。为了生成一个 md5 口令, 请运行 GRUB 所附带的 grub-md5-crypt 工具(以 root 身份)。它将提示输入一个希望加密的口令。然后输出使用 MD5 加密的口令。将这个口令拷贝到 grub.conf 中 password -md5 之后,但是要在同一行上。通常这个口令可以设置为 root 口令,因为无论如何也只有 root 才可以读取 grub.conf 文件。
title 标明了在运行期间能够从用户界面引导的具体 OS。 与 LILO 不同,在这个名称中可以有空格。
password 的设置方式与前面的 password 相同。如果计划与其他用户共享此机器,那么不要将这个口令设置为 root 口令。
root 告诉 GRUB OS 文件系统的实际位置。可见,GRUB 引用介质的方式与 LILO 不同。在 LILO 示例中, /dev/hdb3 是第二块硬盘中的第三个分区。Grub 将此硬盘引用为(hd1,3),即第二块硬盘的�! ��三个分区(disk 0 是第一块硬盘)。
ke! rnel:v mlinuz-X.X.XX-XX 是 root 目录中默认引导映像的名称。
initrd:initrd-X.X.XX-XX.img 是 root 目录中默认 initrd 映像的名称。
title 与所有其他 title 选项相同。
password:见其他口令选项。
rootnoverify 告诉 GRUB 不要尝试去改变 OS 的 root。这样,当文件系统不被 GRUB 所支持时,不会出现引导错误。
chainloader +1 告诉 GRUB 使用一个链式加载程序来加载这个 OS,加载 Windows 时需要这个选项。
与 LILO 的配置文件不同,grub.conf 会在引导时被读取,当被修改时不必去更新 MBR。
初始引导过程
与 LILO 类似,当 GRUB 初始加载时,从 MBR 加载第一阶段程序。加载后,它进入第一阶段和第二阶段引导加载程序之间的中间阶段(为了方便讨论,可称为第 1.5 阶段)。 之所以存在第 1.5 阶段,是为了能够对 /boot/grub 中的 GRUB 配置文件进行常规的文件系统访问,而不是去访问磁盘块。然后进入引导加载程序的第二阶段,GRUB 加载 grub.conf 文件。
现在应该能够看到 GRUB GUI 了。对于熟悉 Windows 的用户来说,这看起来感觉比 LILO 更友好。不过,不�! �因为 GRUB 拥有 GUI 就认为它是一个不能 处理数据的引导加载程序。可选项多得惊人。(见 引导时的附加配置 中的提示。)
如果像我那样配置,那么现在应该能看到屏幕中有两个选项:引导到 Red Hat Linux 或者引导到 Windows XP。默认情况下,它将加载 Linux。选择任意一个的结果不言而喻。
现在来看一些好东西。
引导时的附加配置
在 GRUB GUI 中,按下任何键都会停止超时的计时。然后按下 P 键,可以输入 GRUB 口令,并获得对 GRUB 交互式引导选项的完全访问权限。 按下以下其中一个键,应该能够使用三个选项之中的一个:
要在引导之前编辑命令,请按下 E。这将让您能够为当前选中的 OS 编辑具体的选项。GRUB 只会显示出与那个 OS 的引导相关的选项, 然后您可以恰当地进行编辑。当为 root 文件系统指�! ��了错误的 HDD 时,这尤其有用。如果需要以单�! ��户模 式访问机器(不需要指定口令 就能够让您获得 root 访问权限!),那么在 GRUB 主屏幕上选择 Linux OS。然后与前面一样,按下 E,并移到内核那一行( 在我的示例中是 kernel /vmlinuz-2.4.18-14 ro root=LABEL=/)。然后在那一行最后添加 single,并按下 B 来使用修改过的 grub.conf 进行引导。在编辑模式下所做的任何修改都不会 保存到 grub.conf 文件中。
要修改内核参数,请按下 A。如果您是一位经验丰富的 Linux 用户,可以根据需要调整内核参数。 要获得类似于 BASH 的命令行界面,请按下 C。这个小型的命令行界面允许您在系统中查找 GRUB 配置文件,加载另外的配置文件, 编辑配置文件中的行,以及直接输入 GRUB 命令。如果配置的变化(比如删除了某个分区)让系统无法引导,那么可能会用到这个界面。 如果需要将系统引导为单用户模式,或者要让�! ��行级别为 3 而不是普通的运行级别,也可能会使用到它。
这些选项有很多用途,但超出了本文的范围。
可见,GRUB 真正开放了引导期间的可能性。不过,这可能是一件好坏参半的事情,因为 GRUB 也潜在地允许攻击者在 OS 加载之前访问系统。 会被误用的主要开放领域是:
访问单用户模式。所有加载到单用户模式的人都会得到 root 访问权限,使得 Linux 可被随意滥用。
访问其他操作系统。任何配置为不需要口令的可引导操作系统,比如 DOS,都将是开放的。
访问 GRUB 编辑器。这允许用户获得修改 GRUB 配置的完全访问权限。
在 GRUB 配置中,设置安全性非常重要;设置口令,并使用 MD5 加密,可以保证整个系统的安全。
GRUB 的未来
GRUB 将要被 GRUB2 所取代。原来的 GRUB 将要被�! �新命名为 GRUB Legacy;除了修复 bug 以外,不会�! �对它� ��行积极开发。GRUB2 将是对原来 GRUB 的完全重写。到目前为止,以下特性是变化的核心部分:
通过创建压缩的核心映像取代了第 1.5 阶段
支持核心映像的动态加载
争取让整个 GRUB 框架成为面向对象的
支持国际化,比如 非-ASCII 字符集
支持不同硬件体系结构和不同平台(不同于 Linux 的平台)
GRUB 与 LILO 的比较
如本文开始处所述,所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO 和 GRUB 之间有很多不同之处:
LILO 没有交互式命令界面,而 GRUB 拥有。
LILO 不支持网络引导,而 GRUB 支持。
LILO 将关于可以引导的操作系统位置的信息物理上存储在 MBR 中。如果修改了 LILO 配置文件,必须将 LILO 第一阶段引导加载 程序重写到 MB! R。相对于 GRUB,这是一个更为危险的选择,因为错误配置的 MBR 可能会让系统无法引导。使用 GRUB,如果配置文件配置 错误,则只是默认转到 GRUB 命令行界面。
结束语
与所有软件相同,对某个用户来说是最好的选择,并不是对所有人来说都是最好的。至于这里所涉及的两个引导加载程序,我个人喜欢的是 GNU GRUB。它是一个非常好的全面的加载程序,组合了灵活的用户界面和大量的功能。但是,还有很多使用过并忠爱 LILO 的人仍然选择 LILO 作为引导加载程序。幸运的是,如果您刚刚开始接触 Linux 引导加载,使用哪个都不会有太大问题。
关于安全性,任何可以接触到引导磁盘/CD 的人,只需要使用没有设置安全性的 grub.conf 或 lilo.conf,就可以绕过本文中提及的所有安全措施。 特别是使用 GRUB 时! ,因为能够引导到单用户模式,所以是一个严�! �的安� ��漏洞。解决此问题的一个简单方法是在机器的 BIOS 中禁止通过 CD 和软盘进行 引导,并确保为 BIOS 设置了一个口令,使得其他人不能修改这些设置。
来自:IBM developerWorks Linux 专区
Google的怪异玩法
- 搜索在线摄像头监视站点
在Google中输入“inurl:"ViewerFrame?Mode="”或者“inurl:"MultiCameraFrame? Mode="”、“inurl:"view/index.shtml"”(输入时不带外面的双引号,在英文状态下输入),你会获得无数个未经加密的网络摄 像机监视到的画面。无聊的时候玩玩,可以满足一下我们的好奇心。此外,打开这个站点:www.opentopia.com/hiddencam.php, 在“from”中选择“China”,你还可以看到国内的某处网络摄像机画面。 - 让Google搜索结果在新窗口中打开
默认情况下Google的搜索结果跟百度等搜索引擎不一样,它是直接在当前网页中打开搜索结果,这对我们的使用会感到不方便,其实我们可以通过 设置来达到目的。打开Google后,选择“使用偏好”链接,在打开页面的“结果视窗”中勾选“开启新视窗以显示查询结果。”一项,单击“存储偏好设置” 按钮即可。 - 比较两个关键词在Google中搜索结果数量
想知道克里和布什谁更火?那就比较一下Google的搜索结果数量就知道了。打开www.googlefight.com/,在 “Keyword #1”和“Keyword #2”中分别输入“克里”和“布什”,单击“Make a fight!”按钮即可看到他们各自的结果。笔者试过,克里有741000个搜索结果,布什有4020000个搜索结果,布什获胜! - 让Google来告诉去哪儿旅游
想好去哪儿旅游了吗?问问Google吧。打开douweosinga.com/projects/besttimetovisit站点,在 “Enter the name of destination”栏中输入你想要去的城市名字,比如“北京”,点击“Go”即可获得结果。 - 有趣的关键字
在Google中输入“_*_”这个关键字,不管你是“搜索所有网页”还是“仅搜索中文网页”,你都只能搜索到一大堆中文页面。想明白这是为什 么吗?到blog.outer-court.com/forum/5066.html去看看就知道了,原来这是ASCII字符和Google之间的矛盾。 - Google在用户隐私资料收集方面的九大疑点
Google-Watch近日刊登文章,警告用户小心Google对隐私资料获取的“阴险”与“强硬”,并列举了Google在用户隐私资料收集方面的九大“阴谋疑点”: - Google的“老不死”cookie:Google是第一个使用Cookie的搜索引擎供应商,其Cookie有效时间竟然直至2038年。Google的Cookie在你的硬盘上留下 独一的ID记录,当你浏览Google页面时,Google会检查你是否拥有Cookie文件,如果没有则留下新Cookie,如果已经存在便会读取旧 Cookie中的信息。
- Google记录所有能记录的资料:Google将记录所有搜索引擎用户的Cookie ID、网址IP、登录时间与日期、搜索偏好以及浏览器类型。Google还会针对你的IP地址提供给你不同的地域性搜索结果。
- Google资料保护并不完善:Google没有任何资料保存政策,很显然,他们可以自由读取搜集到的用户个人资料。
- Google不会透露资料的用途:当纽约时报2002年在采访中就资料用途问题咨询Sergey Brin时,他拒绝对此发表评论。
- Google雇佣“危险人物”:Mutt Cutts--Google重要软件工程师,曾经为美国国家安全局工作。而且Google还想雇佣更多有类似背景的人。
- Google工具条是间谍软件:Google的免费工具条能够记录你浏览的所有页面,并且读取你的所有Cookie,Google已经在其隐私政策中承认这一点。而且Goolge工具条每次更新都无声无息,并不询问用户是否需要更新。
- Google的页面缓存拷贝行为违法:根据美国网络版权法,Google的页面缓存记录行为违法。
- Google并不是你的朋友:目前Google占有75%站外链接份额,网站管理员不得不寻求Google的认可。如果网站管理员试图利用Google已知的搜索排名算法提 高自己的排名,将受到Google的惩罚,其链接和流量将被Google中止。而Google目前并没有出台公开处罚标准和政策。
- Google是个人隐私的定时炸弹:每天有2亿用户使用Google搜索服务,其中大部分在美国本土以外,Google的隐私资料收集行为将成为个人数据的定时炸弹。连华盛顿新成立的安全局资料采集部门都梦想获得Google搜集资料的高效能力。
- Google技巧
google检索引擎因其准确和快速的检索服务而深受广大网民欢迎,成为他们手中查询信息的必备工具,Google检索引擎本身也不辜负网 民的期望,不断推出新的检索功能,除了为帮助人们更精确查找信息而常用的网站内容(site)、网页链路(inurl)、网页标题(intitle)、各 种格式文件(filetype)和被链接(link)等检索功能之外,最近,还推出了一系列新的检索服务,总体来说,这些新的检索功能更加人性化,更贴近 人们的日常生活和需要,因而很容易被用户接受和使用。 - 汉语拼音输入检索 :为了方便使用中文的用户在网上搜索,Google允许用户直接在键盘上输入汉语拼音来检索相关事物,例如:输入 shanghaishikebiao检索结果提示:您是不是要找:上海时刻表,这正是我们需要查找的关键词,用户可以据此浏览相关结果,这包括上海地区的各种交通工具的时刻表。如果需要查找更详细的资料“上海飞机航班时刻表”,则只要在原来的检索结果“上海时刻表”中间输入feijihangban,例如:上海feijihangban时刻表。Google的这项新功能,可以免除用户在中文和拼音输入方面的互相转换。用户在输入拼音时,不要留有空格,否则Google会误认为英文。Google把拼音与常用的字或者词组一一对应,因此,过于生僻的字或词组不适合于用这个方法查找。
- 中英文字典:经常使用计算机的用户手头上自然会有一、两个字典软件,用于查找和翻译中英文的词义。作为一种使用频率较高的工 具,Google也提供了一个中英文字典,很方便使用。用户可以按照下列方法查找词义查找英文的中文词义则输入fy computer查找中文的英文词义 则输入 翻译 计算机
- 天气查询 :天气情况也是人们经常要查询的信息之一,Google 提供的天气查询来自于一个更新及时的中文气象网站,适合中国人使用。用户输入中文和英文都可以查询,例如要了解奥运会期间雅典的天气情况,可以按照下列方法输入:雅典 天气 athens tq 返回的查询结果中会在第一条出现一个 “雅典天气预报”,用户点击后就可以看到当天雅典的天气情况。如果地名相同者,用户还需要进行一次选择。
- 股票查询:查询股票的网站已经很多了,Google提供的股票查询只是更方便一些而已,用户可以按照股票名称、股票代码或者股票名称的声母字母查询,下列为查询“中国联通”股票行情的举例。中国联通 股票 zglt gp gp 600050
- 邮政编码和区号查询: 人们时常需要查询邮政编码和电话区号,Google提供了这样一个实用的功能,用户据此能够获得所要查询的省市名称,邮政编码及长途电话区号,下面为查询举例: 邮编 杭州 区号 绍兴 yb 杭州 qh 绍兴 需要注意的是用户只能查询到城市级别的邮政编码和区号,而无法进一步查询区县的具体信息。
- 手机归属地查询 :用户在输入手机号码后可以获得号码段、归属地、卡类型、邮政编码和电话区号的信息,但是从实用的角度看,其中只有手机归属地的信息较为有用。
- 计算器使用 :Google有计算器的功能,例如在google检索框中输入45*86+35/7,就会得到结果:(45 * 86) + (35 / 7) = 3 875 有兴趣的用户,或者经常在计算机上进行运算的用户不妨可以试一试。
- 购物检索 :Google新开设的购物检索称之为Froogle,网址为http://froogle。google。com/ 用户只要输入商品的名称,就可以看到该商品的图片和价格,用户还可以限定一种商品的价格进行检索,并且将检索结果按需要从高价到低价排序列出,许多商品可以直接在网上订购,这种图文并茂的检索购物方式较受用户青睐。
- 美国实用生活信息查询 : 如果用户生活在美国或者短期去美国出差和学习,下面的查询功能或许能对他们又帮助,因为这些检索服务目前仅限于美国。
- 地区代码查询 : 用户输入美国的地区代码,在返回的检索结果中的第一项就是该地区的地图,用户可以通过不断的点击来找到一条具体的大街。
- 条形码查询:用户输入一个商品的条形码就可以找到有关该产品的说明。
- 飞机航班查询 :用户输入一家航空公司的名称和航班号,即可获得该航班的出发地和目的地,起飞和到达时间,以及实际航行情况,目前是否开始检票,抵达目的地候机大楼的舱门号。
- 车牌号查询 :用户输入车牌号,可以获得一辆车的名称、型号、出厂年份,车身和发动机情况。
- 邮件查询 :用户输入一个邮件的号码,可以获悉该邮件目前的状况,譬如邮件已经抵达或者正在路途上等。
- 检索工具栏 : Google的检索工具栏功能强大,有拖放和右击检索功能,新闻阅读,广告拦截,网站排名显示和搜索字词标明 等,工具栏可以附在浏览器下,使用更加方便。用户可以首先在Google网站下载并安装一个检索工具栏,然后根据需要在工具栏的选项中进行设置,我们推荐 用户使用这个检索工具栏,它将给用户带来许多意想不到的方便。
- Google 新闻:Google 的新闻来源于4500家报刊杂志和通讯社,在精选以后持续播出世界各国的新闻,每条新闻都有更新的时间,并联接相关的新闻。用户可以使用免费的新闻通知服务,通过电子邮件收到自己感兴趣的新闻。
- 网站排名 : Google 通过对 Web 链接结构和许多其它变量自动计算,对网页的重要程度进行评定。网站排名根据这个评定能够显示用户正在访问的网站的重要程度,用一根绿色线条显示,直观而明确。
- 搜索字词标明 :搜索字词标明通过鲜艳的色彩标明用户所检索的字词在每个网页上的位置,便于用户查阅,单击“搜索字词标明”按钮可以打开和关闭标明状态。
- 拖放和右击检索 :拖放检索功能使检索更为方便,用户可以把在网页上所选取的字词直接拖放到检索框中,Google会自动进行检索。对于与 Web浏览器同时运行的许多文 字处理应用程序中的文字,也可以使用此功能。右击检索是指用户可以在网页上选取文字后,右击鼠标,然后从弹出式菜单中选择“Google 搜索”便可以自 动检索。
CentOS 与 RHEL 的关系
RHEL 在发行的时候,有两种方式。一种是二进制的发行方式,另外一种是源代码的发行方式。
无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布。但如果你使用了他们的在线升级(包括补丁)或咨询服务,就必须要付费。
RHEL 一直都提供源代码的发行方式,CentOS 就是将 RHEL 发行的源代码从新编译一次,形成一个可使用的二进制版本。由于 LINUX 的源代码是 GNU,所以从获得 RHEL 的源代码到编译成新的二进制,都是合法。只是 REDHAT 是商标,所以必须在新的发行版里将 REDHAT 的商标去掉。
REDHAT 对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统�! ��身,而是我们所提供的商业服务。”
所以,CentOS 可以得到 RHEL 的所有功能,甚至是更好的软件。但 CentOS 并不向用户提供商业支持,当然也不负上任何商业责任。
我正逐步将我的 RHEL 转到 CentOS 上,因为我不希望为 RHEL 升级而付费。当然,这是因为我已经有多年的 UNIX 使用经验,因此 RHEL 的商业技术支持对我来说并不重要。
但如果你是单纯的业务型企业,那么我还是建议你选购 RHEL 软件并购买相应服务(按:RH在中国只有开发中心而没有支持中心,换而言之,买了支持也得不到)。这样可以节省你的 IT 管理费用,并可得到专业服务。
一句话,选用 CentOS 还是 RHEL,取决于你所在公司是否拥有相应的技术力量。
*NIX下修改文件名的2个窍门
for i in $*
do
mv $i `echo $i | tr A-Z a-z`
done
Unix/Linux 上的文件名可以用控制字符。但是也带来了不能修改名字的烦恼。
例如 用 ls -ail 可以看到一个没有名字显示的目录:
208978 drwxr-xr-x 1 2430 Aug 3 13:08
209299 drwxr-xr-x 24 3287 Oct 25 1993 .
208946 drwxr-xr-x 49 447 Jun 22 1993 ..
可以看到有一个 inode 号为 208978 的文件不能显示名字。
我们用 find 命令来修改成普通名字:
find . -inum 208978 -exec mv {} new.dir ;
以上方法对于普通文件和目录都合适。
PHP单元测试工具PHPUnit初体验
http://pear.php.net/manual/en/packages.php.phpunit.intro.php
工作流程如下:
1.设计你的class/API
2.创建测试程序集
3.实现class/API
4.运行测试
5.修正测试失败或错误,回到第4步。
我们来举个例子:
下面是你要测试的class,其中formatn函数一个取任意数字的5位有效数字的函数。
class fo {
function fo() {
}
function formatn($num) {
$num = rtrim($num,"0");
$pos = strpos($num,".");
$num = str_replace(".","",$num);
$count1 = strlen($num);
$num = ltrim($num,"0");
$count2 = strlen($num);
$! zeroc = $count1 - $count2;
$num = substr($num,0,6);
$num = round($num/10);
//$num = str_pad($num, 5, "0");
if ($pos !== false) {
$num = str_pad($num, (strlen($num)+$zeroc), "0", STR_PAD_LEFT);
$dotl = substr($num,0,$pos);
$dotr = substr($num,$pos);
$num = $dotl.".".$dotr;
}
! return $num; &n bsp; }
}
<?php
require_once 'format_number.php';
require_once 'PHPUnit.php';
class foTest extends PHPUnit_TestCase {
//这个成员变量是存放要测试的类引用
var $abc;
//构造函数
function foTest($name) {
$this->;PHPUnit_TestCase($name);
}
//new一个要测试的类为成员变量abc赋值
function setUp() {
$this->;abc = new fo;
}
 ! ; //unset要测试的类
function tearDown() {
unset($this->;abc);
}
//自定义的testcase
function testFormatn1() {
//调用要测试的类的方法,结果放到$result变量
$result = $this->;abc->;formatn("100.234");
//期望结果
$expected = "100.23";
//判断是否相等,这里使用assertTrue方法来判断布而值是否为true。
$this->;asse! rtTrue($result == $expected);
 ! ; }
function testFormatn2() {
$result = $this->;abc->;formatn("0.100234");
$expected = "0.10023";
$this->;assertTrue($result == $expected);
}
function testFormatn3() {
$result = $this->;abc->;formatn("0.100235");
$expected = "0.10024";
$this->;assertTrue($result == $expected);
}
function testFormatn4() {
$result ! = $this->;abc->;formatn("0.000100235");
$expected = "0.00010024";
$this->;assertTrue($result == $expected);
}
function testFormatn5() {
$result = $this->;abc->;formatn("0.000100232");
$expected = "0.00010023";
$this->;assertTrue($result == $expected);
}
function testFormatn6() {
$result = $this->;abc->;formatn("1343");
$expected! = "1343";
! & nbsp; $this->;assertTrue($result == $expected);
}
function testFormatn7() {
$result = $this->;abc->;formatn("1343.01");
$expected = "1343";
$this->;assertTrue($result == $expected);
}
function testFormatn8() {
$result = $this->;abc->;formatn("1343.05");
$expected = "1343.1";
$this->;assertTrue($result == $expected);
}
func! tion testFormatn9() {
$result = $this->;abc->;formatn("0");
$expected = "0";
$this->;assertTrue($result == $expected);
}
function testFormatn10() {
$result = $this->;abc->;formatn("105.2342");
$expected = "105.23";
$this->;assertTrue($result == $expected);
}
function testFormatn11() {
$result = $this->;abc->;formatn("105.2375");!
! $expect ed = "105.24";
$this->;assertTrue($result == $expected);
}
function testFormatn12() {
$result = $this->;abc->;formatn("0.000523751");
$expected = "0.00052375";
$this->;assertTrue($result == $expected);
}
function testFormatn13() {
$result = $this->;abc->;formatn("0.000523755");
$expected = "0.00052376";
$this->;assertTrue($result ==! $expected);
}
}
<?php
require_once 'testcase.php';
require_once 'PHPUnit.php';
$suite = new PHPUnit_TestSuite("foTest");
$result = PHPUnit::run($suite);
echo $result->;toString();
?>;
php runtest.php
得到结果如下:
TestCase foTest->;testFormatn2() passed
TestCase foTest->;testFormatn3() passed
TestCase foTest->;testFormatn4() passed
TestCase foTest->;testFormatn5() passed
TestCase foTest->;testFormatn7() passed
TestCase foTest->;testFormatn8() passed
TestCase foTest->;testFormatn9() passed
TestCase foTest->;testFormatn10() passed
TestCase foTest->;testFormatn11() passed
TestCase foTest->;testFormatn12() passed
TestCase foTest->;testFormatn13() passed
TestCase foTest->;testFormatn6() failed: expected TRUE, actual FALSE
我们就可以去检查一下我们的代码在什么地方出问题了。
补充一点
也可以把assertTrue方法换assertEquals,如下:
$result = $this->;abc->;formatn("1343");
$expected = "1343";
$this->;assertEquals($expected, $result);
}
操作系统性能的几个误区
- 内核越小性能越高:这个误区多发在"洁癖型"管理员身上,他们似乎乐于将内核编译的可能的小,放弃一切不需要的驱动程序,优化程序造成的结果可想而知。
- 内存占用越少性能越高:常见于Windows与xWindows的扇子(Fans)之间的争论,"同样512的内存,Win占用不到10%, Linux占用70%以上"究竟孰优孰劣暂不深究,但对于大多数*nix系统而言对于空闲的内存空间会自动以磁盘缓存的形式占用。
- 磁盘读写次数越少磁盘性能越好:对于不同的文件系统而言,单凭读写次数是无法分辩磁盘子系统的优劣的,典型的例子就是Ext3的读写次数远多于Ext2.
笔记本安全防护
在众多笔记本电脑保护设备中,一些设备的作用是防止笔记本电脑被偷的,而另一些则是为了如果发生最坏的情况,比如笔记本电脑落入不法分子手里,尽量保护失窃信息不会被别人看到的。
如果你关心的只是保护昂贵的硬件,那么就应当认真关注可能合适的预防措施。除了著名的Kensington安全锁外,还可以使用报警系统和移动传感器。然 而,只有使用加密软件对存放在笔记本电脑上的文件进行保护,笔记本电脑才算得到真正的保护。这意味着,最有效的安全包括硬件和软件两方面的保护。
但别指望本文介绍的任何一个系统能够独立地确保全面的安全防护。你可以在许多系统中发现的免费、内置的机制是最起码的安全机制�! ��譬如Bios口令或者操作系统登录用户名/口令,目的主要是为了阻止偶尔窥视的那些人。
防护措施让窃贼无法得逞
最简单的硬件防护手段就是用锁把笔记本电脑锁在某个坚固物体上,譬如墙上的钩子,或者不能移动的桌腿。这样至少可以减小你在网吧、不安全的办公室或者火车上被人偷走笔记本电脑的风险。
如果你准备使用这样的锁,笔记本电脑的底座上就需要有一个加固的槽(Kensington安全锁槽),如今的大多数笔记本电脑上都内置了这种槽。与 Kensington安全锁槽兼容的锁插入后,可以用一条相连的钢缆系住。窃贼得有一把断线钳,才有可能偷走笔记本电脑。这种安全方法的缺点是,你需要用 什么东西把钢缆固定住; 当然,你还要随身带着锁。
移动传感器则比较灵活。这种防盗设备(如Targus Defco! n 1,50欧元)也使用钢缆锁在Kensington安全锁槽�! �; 你� �以在离开笔记本电脑时,开启这种设备。如果窃贼接近笔记本电脑,或者企图切断钢缆,移动传感器就会发出很响的报警声。不过只有你在离笔记本电脑不太 远,并且能马上赶回来的场合下,移动传感器才可以派上用场。另外如果它发出误报,你还需要通过遥控器关闭报警。
较为复杂的笔记本电脑报警系统(如Caveo公司的防盗系统,100欧元)工作原理相似,不过更加智能化。这种系统有一块装有移动传感器的PC卡。如果打 开了报警功能,要是窃贼把笔记本电脑移到你原先设定的范围外,警报系统就会发出很响的声音,而且PC卡阻止访问操作系统。你得输入安全代码,才可以重新获 得对系统的访问权。
免费的基本安全
存放在笔记本电脑上的数据可能比实际硬件还要来得宝贵,所以它们同样需要加以保护。你�! ��以获得最低级别的一些内置保护机制,具体取决于你使用的是哪种操作 系统。譬如说,Windows NT4、2000 和XP、Linux及Mac OS X都要求用户使用口令,这一关很难绕过。如果不知道这个口令,就无法进入系统。Windows 95、98和ME则没有这种基本的安全级别。
但不管在什么情况下,窃贼只要把笔记本电脑上的硬盘拆下来,作为从盘安装到另一台PC机上,这样不需要口令,就可以读出其中的数据。那样的话,任何未经加密的数据都完全可以读取。
另一项基本的防护技术就是,使用要求在Bios级进行验证的启动口令。只有输入正确的口令后,系统才会启动。笔记本电脑的Bios里面的这项功能通常可以通过像“Set Power-On Password”这类选项(具体名称取决于Bios的版本)来激活。
许多Bios还允许你另外增设口令,防止有人进�! �Bios设置菜单。然而,这种免费功能只能提供最! 起码� �保护机制。举例来说,有人只要使用相当简单的Windows实用程序,获得对登录后系统的物理访问权,就很容易读取口令。
更让人担心的是,只要把主板上的CMOS电池取出一小会,有些笔记本电脑上的Bios口令就会失效,因而Bios会恢复到出厂时候的缺省值。这样就无法阻止窃贼把你笔记本电脑的硬盘安装到台式PC上后读取里面的数据。
数据加密
对于已经铁了心的窃贼,大多数系统和Bios口令能够做到的只是暂时阻止他们。比较好的一种办法是采用加密工具,譬如Utimaco公司的 Safeguard。这种程序能够对文件、文件夹甚至整个分区进行加密,只有输入口令后,才能够访问数据。即使窃贼把笔记本电脑硬盘拆下来装到另一台PC 上,他所看到的也只是一堆毫无意义的垃圾。
这种程序使用起来特别简单,譬如Safegua! rd或者Steganos公司的Safe 6,用户无须干预,它们就会对文件进行实时加密。这意味着,你不会忘了对宝贵数据进行加密。此外,你也用不着长时间地等数据加密过程完成。然而,即便使用 实时加密产品,首次对硬盘进行全部加密也需要花好几个小时。
所有的商业加密程序都使用了下面介绍的编码方法。所有这些方法、就连有点过时的数据加密标准(DES)都针对攻击提供了足够的防护机制。从理论上来说,破解这些加密方法的办法不是没有,但实际上意义不大,因为单单破解一把密钥,就需要成千上万台PC。
口令过期
上面所述的这些软件如Safeguard只有在输入口令后,才提供对数据的访问。有些软件同时使用口令和特殊的USB令牌,其中之一就是 Securstar公司的Drivecrypt。从外表上来看,这种设备类似广泛使用的USB�! ��储棒,不过里面存放有你的个人软件加密密钥! 。
只有插入正确的USB令牌,加密软件才会对数据进行解密。这意味着,要想破解口令是不可能的任务。如果拔掉USB令牌,系统就会自动锁住,加密目录里面的文件就无法读取。这种验证方法的主要缺点是,如果笔记本电脑和USB令牌同时失窃,数据就暴露无遗。
尽管可以采用其他一些方法,但口令仍是应用非常广泛的一种方法,所以这里介绍确保口令安全的几个建议。我们建议口令至少要采用八位,其中包括诸如“$”、 “%”、“!” 或者 “?”此类的字符。你可以使用数位较多的单字或者短语,然后把部分字符换成符号。譬如说,Personal Computer World可以换成Pe350n/- 9degm9ute>; =r-c。为了进一步加强安全,使用不同的口令用于不同登录是个好办法,譬如登录Windows、网络访问、电子邮件等使用不同口令。最! 后,你应当定期更 换口令。
指纹验证
较之使用相对不安全的口令进行登录,使用指纹阅读器是一种切合实际的替代办法。有些笔记本电脑厂商如富士通西门子和三星把指纹扫描器集成到了各自的笔记本电脑上,这样就没必要使用口令进行登录了。
譬如,在富士通西门子的Celsius Mobile H笔记本电脑上,可以使用指纹来保护对Bios的访问。惠普和IBM为各自的笔记本电脑提供了指纹阅读器,作为一种额外的选件(PC卡或者外置USB模 块)。还有一些第三方厂商的产品,譬如Sitecom PC-011 PC卡(250欧元)。然而,这些解决方案仅仅面向Windows系统,无法与Bios进行集成。
指纹阅读器的缺点在于,它们很容易上当受骗。只记录指纹图案、却没有记录指纹深度或者指纹温度的指纹扫描器特别容易受骗。简单的指纹印模! 就可以误导这些设 备。但是,如果你的手指温�! ��较低 ,或者指尖上一个小地方给割破了,指纹扫描器就有可能很难识别你,从而把你这个合法用户同样“拒之门外”。
除了指纹阅读器和USB软件狗外,还有各种各样的硬件产品可以阻止或允许对笔记本电脑的访问。宏和戴尔等制造商把智能卡阅读器做到了各自的部分型号的笔记 本电脑里面。如果你插入智能卡,就可以登录进去,访问经过加密的数据。智能卡的最大优点就是,它同信用卡一样大小,便于携带。
PC卡(如Ce-Infosys公司的Cryptcard)可以作为硬件密钥使用。这种卡能够对硬盘进行加密,从而在启动过程中保护系统。只有把卡插入后,才允许启动。你在正常工作时,硬盘上的数据加密过程就会实时进行。
提到笔记本电脑的安全,IBM的Thinkpad特别值得一提。可以给Thinkpad配备加密芯! 片,而加密芯片是IBM的嵌入式安全子系统的一部分。该系统由主板上集成的一块芯片和Windows软件组成。
该软件能够实现硬盘加密、带有口令管理器,而且支持安全的802.1x无线局域网。特别之处在于,软件和加密处理器紧密配合。因为进出芯片的数据流是安全 的,所以别人不可能截获存放在芯片上的口令。如果启用了这些功能,Thinkpad在默认状态下就可以非常有效地防范数据失窃.
细说高端服务器
高端服务器综述
服务器可以细分为两部分:一部分是IA(Intel Architecture)服务器,也就是我们常说的PC服务器或NT服务器;另一部分是比IA服务器性能更高的机器,如RISC/Unix服务器等,这种服务器被称为高端服务器。高端服务器的种类很多,从小型机、大型机到巨型机都有。
高端服务器领域的竞争很激烈,国外品牌有IB! M、HP、Sun、SGI等实力雄厚的大公司。国内的曙光公司背靠国家智能中心、中科院计算所,是"国家 863"计划的试点企业。诸如"曙光1000"、"曙光2000—I"和"曙光2000—II"等超级服务器称得上是里程碑式的产品。曙光的产品不仅仅局 限于高端产品,曙光是我国目前唯一拥有全系列服务器产品的生产商,产品系列包括:天阔PC服务器、天演UNIX服务器和天潮超级服务器。联想在前一段时间 推出了8路机架式服务器,显示了其具备的技术和进军高端服务器市场的信心。浪潮的小型机采用对称多处理器技术,主要用于国民经济部门,并有一定的销售数 量,浪潮是国内小型机产品的领头厂商。
目前,大多数高端服务器都是RISC/Unix服务器。所以,谈到高端服务器的发展历史,就不能不提到RISC(精简指令集计算! —Reduced Instruction Set Computing)技术。
� � 20世纪70年代,IBM发明了RISC技术。80年代后期,RISC结构逐渐代替了CISC (复杂指令集计算- Complex Instruction Set Computing),成为主流微处理器设计结构。使用
RISC技术是为了优化指令系统、加快程序编译、提高运行速度。RISC技术采用了更加简单和统一的指令格式、固定的指令长度以及优化的寻址方式,使整个 计算结构更加合理。一般来说,RISC处理器比同等的CISC处理器要快50%~75%,同时RISC处理器更容易设计和纠错。
在RISC架构的基础上,各厂家又研制出了自己的处理器。目前在使用的主要有PowerPC处理器、SPARC处理器、PA-RISC处理器和MIPS处理器。
PowerPC处理器
90年代,IBM、Apple和Motorola开发PowerPC芯片成功,并制造出基于PowerPC的多处理器计算机。PowerPC 架构的特点是可伸缩性好、方便灵活�! ��第一代PowerPC采用0.6微米的生产工
艺,晶体管的集成度达到单芯片300万个。1998年,铜芯片问世,开创了一个新的历史纪元。2000年,IBM开始大批推出采用铜芯片的产品,如 RS/6000的X80系列产品。铜技术取代了已经沿用了30年的铝技术,使硅芯片多CPU的生产工艺达到了0.20微米的水平,单芯片集成2亿个晶体 管,大大提高了运算性能。而1.85V的低电压*作(原为2.5V)大大降低了芯片的功耗,容易散热,从而大大提高了系统的稳定性。
现在,1GHz的Power4处理器已经完成设计。Power4除了将时钟频率从现在的500MHz提高到1GHz之外,还将率先采用 0.11微米工艺,晶体管集成度达1.7亿,以及7层铜和SOI(绝缘
硅-Silicon On Insulator)技术。这些技术将使Power4跃上服务器芯片的历史新台阶。
SPARC处理器
! 1987年,Sun和TI公司合作开发了RISC微处理器—! SPARC。 SPARC微处理器最突出的特点就是它的可扩展性,这是业界出现的第一款有可扩展性功能的微处理器。SPARC的推出为Sun赢得了高端微处理器市场的领先地位。
1999年6月,UltraSPARCⅢ首次亮相。它采用先进的0.18微米工艺制造,全部采用64位结构和VIS指令集,时钟频率从 600MHz起,可用于高达1000个处理器协同工作的系统上。
UltraSPARCⅢ和Solaris*作系统的应用实现了百分之百的二进制兼容,完全支持客户的软件投资,得到众多的独立软件供应商的支持。
在64位UltraSPARC处理器方面,Sun公司主要有3个系列。首先是可扩展式s系列,主要用于高性能、易扩展的多处理器系统。目前 UltraSPARCⅢs的频率已经达到750GHz。还有将推出的
UltraSPARC Ⅳs和UltraSPARC Ⅴs等型号。其中 UltraSPARC Ⅳs的频率为1GHz,UltraSPARC
Ⅴs则为1.5GHz�! �其次是集成式i系列,它将多种系统功能集成在一个处理器上,为单处理器系统提供了更高的效益。已经推出的UltraSPARC Ⅲi的频率达到700MHz,未来的UltraSPARC Ⅳi的频率将达到
1GHz。
PA-RISC处理器
HP公司的RISC芯片PA-RISC于1986年问世。第一款芯片的型号为PA-8000,主频为180MHz,后来陆续推出PA-8200、PA-8500和PA-8600等型号。
HP公司开发的64位微处理器PA-8700将于2001年上半年正式投入服务器和工作站的使用。这种新型处理器的设计主频达到800MHz 以上。PA-8700使用的工艺是0.18微米SOI铜CMOS工艺,采用7层铜
导体互连,芯片上的高速缓存达到2.25MB,比PA-8600增加了 50%。
HP公司未来还将推出PA-8800和PA-8900处理器,其主频分别达到1GHz和1.2GHz。PA-RISC同时也是IA-64的基础。在未 来的IA-64芯片中! ,会继续保持许多PA-RISC芯片的重要特性,包括P! A-RISC� �虚拟存储架构、统一数据格式、浮点运算、多媒体和图形加速等。
MIPS处理器
MIPS技术公司是一家设计制造高性能、高档次及嵌入式32位和64位处理器的厂商,在RISC处理器方面占有重要地位。1984年,MIPS计算机公司成立。1992年,SGI收购了MIPS计算机公司。1998年,MIPS脱离SGI,成为MIPS技术公司。
MIPS公司设计RISC处理器始于80年代初,1986年推出R2000处理器,1988年推出R3000处理器,1991年推出第一款 64位商用微处理器R4000。之后,又陆续推出R8000(于1994年)、R10000
(于1996年)和R12000(于1997年)等型号。之后,MIPS公司的战略发生变化,把重点放在嵌入式系统。1999年,MIPS公司发布MIPS 32和MIPS 64架构标准,为未来MIPS处理器的开发奠定了基础。新的
架构集成了所有原来MIPS指令集,并且增加了! 许多更强大的功能。MIPS公司陆续开发了高性能、低功耗的32位处理器内核(core)MIPS 32 4Kc与高性能64位处理器内核MIPS 64 5Kc。2000年,MIPS公司发
布了针对MIPS 32 4Kc的新版本以及未来64位MIPS 64 20Kc处理器内核。
现在,RISC芯片仍然在Unix系统平台上广泛应用,而且可以支持WindowsNT系统。基于RISC架构的多处理器在像数据库或专用服务器这样的对计算能力有严格要求的领域仍然占据一席之地。
IA-64处理器
自从1993年Intel及其伙伴企业推出基于486系统的IA服务器以来,IA服务器经历了486系统、PentiumPro系统、PII 系统、PIII系统、XEON系统等几个阶段。处理器系统的处理能力在大幅度提
高,而服务器系统的总线结构始终是IA-32总线体系。
IA-32服务器在发展到8路XEON服务器以后,体系�! �构已经开始成为制约服务器性能提高的瓶颈。�! ��是PCI 通道带宽瓶颈,现在是内存总线带宽瓶颈 和处理器系统扩展瓶颈。因此,HP和Intel自1994年开始合作开发IA-64架构的处理器,希望通过把HP在RISC领域的十年工作经验和超长指令 字结合起来,在微处理器级上改进性能,以增加指令级上的并行性。
IA-64结构既不是Intel的32位x86结构的扩充,也不是完全采用HP公司64位PA-RISC结构,而是一种全新的设计样式。IA -64基于EPIC(显性并行指令计算—Explicitly Parallel
Instruction Computing)技术。
IA-64主要特性表现在几个方面:
* IA-64的系统内存寻址空间更大,可以支持32GB以上的内存,而IA-32服务器目前可以支持的最大内存容量是16GB。
* IA-64的处理器寻址、处理能力更强、速度更快。安腾(Itanium)处理器主频起步至少1GHz,二级Cache在2MB以上。
!
* IA-64系统增强的128位浮点计算寄存器大大提高了系统的浮点计算能力。
* IA-64系统将使用基于Infiniband技术的总线结构,它是以交换式系统总线代替目前的共享式总线为核心,将NGIO和 FutureIO两种技术合二为一,使系统总线、内存总线带宽和I/O总线带
宽都将大大提高。IA-64系统带宽在2GB/s以上,而目前的SMPIA- 32服务器的系统带宽是1.06GB/s,PCI带宽一般是0.4GB/s。
* IA-64包括一系列的内置特征,以延长计算机的正常运转时间,减少宕机时间。机器检测体系在内存和数据路径中提供了错误恢复和纠错能力,它能让IA-64平台从预先导致系统失败的错误中恢复过来。
目前正式宣布支持IA-64平台的有Monterey、Linux64、HP-UX、Solaris、Win2000等*作系统。
高端服务器技术
�! �务器性能指标以系统响应速度和作业吞吐量为�! ��表。 响应速度是指用户从输入信息到服务器完成任务给出响应的时间。作业吞吐量是整个服务器在单位时间内 完成的任务量。假定用户不间断地输入请求,则在系统资源充裕的情况下,单个用户的吞吐量与响应时间成反比,即响应时间越短,吞吐量越大。为了缩短某一用户 或服务的响应时间,可以分配给它更多的资源。性能调整就是根据应用要求和服务器具体运行环境和状态,改变各个用户和服务程序所分配的系统资源,充分发挥系 统能力,用尽量少的资源满足用户要求,达到为更多用户服务的目的。
技术目标
服务器所要求的高扩展性、高可用性、易管理性、高可靠性不仅是厂商追求的技术目标,也是用户所需求的。
可扩展性具体表现在两个方面:一是留有富余的机箱可用空间,二是充裕的I/O带�! �。随着处理器运算速度的提高和并行处理器数量的增加,服务器性能的瓶 颈将会归结为PCI及其附属设备。高扩展性意义在于用户可以根据需要随时增加有关部件,在满足系统运行要求同时,又保护投资。
可用性是以设备处于正常运行状态的时间比例作为衡量指标,例如99.9%的可用性表示每年有8小时的时间设备不能正常运行,99.999%的可用性表 示每年有5分钟的时间设备不能正常运行。部件冗余是提高可用性的基本方法,通常是对发生故障给系统造成危害最大的那些部件(例如电源、硬盘、风扇和PCI 卡)添加冗余配置,并设计方便的更换结构(如热插拔),从而保证这些设备即使发生故障也不会影响系统的正常运行。
可管理性旨在利用特定的技术和产品来提高系统的可靠性,降低系统的购买、使用、部署和�! �持费用。最显著的作用体现在减少维护人员的�! ��时占 用和避免系统 停机带来的损失。服务器的管理性能直接影响服务器的易用性。可管理性是TCO各种费用之中所占比例最大的一项。有研究表明,系统的部署和支持费用远远超过 了初次购买所花的费用,而付给管理和支持人员的报酬又是其中所占份额最高的。另外,工作效率的降低、商业机会的丧失和营业收入的下滑所带来的财务损失也不 可忽视。因此,系统的可管理性既是IT部门的迫切要求,又对企业经营效益起着非常关键的作用。可管理性产品和工具可通过提供系统内部的有关信息而达到简化 系统管理的目的。通过网络实现远程管理,技术支持人员在自己的桌面上即可解决问题,不必亲赴故障现场。系统部件可自动监视自己的工作状态,如果发现故障隐 患可随时发出警告,提醒维护人员立即采取措施保护企业数据资产,故障部件更换的*! 作也非常简单方便。
说到可靠性,简单来说就是要求服务器必须稳定运行,也就是宕机率低。其中的关键在于*作系统与硬件设备的协作,如果待处理的资源控制在CPU 和*作系统上,而不是应用上,就会避免由于某项任
务处理出错而导致系统无法运行,服务器宕机率将大大降低,而这也恰恰是Unix/Linux系统的优势之一。导致日常维护工作的中断有:主机升级、硬件维 护或安装、*作系统升级、应用/文件升级或维护、文件重组、全系统备份等原因。意外的灾难包括硬盘损坏、系统故障、软件故障、用户错误、电源掉电、人为破 坏和自然灾害等因素。
SMP
SMP(Symmetrical Multi-Processor)就是对称式多处理器。在对称式结构中,机器里每一位处理器的地位都是一样的,它们连接在一起,共享一个存储器�! ��存储器里 有一个*作系统,每个计算机都能运�! ��这个 *作系统,都能响应外部设备的要求,即每个存储器的地位是平等的、对称的。在国内市场上这类机型的处理器一般以4 个或8个为主,有少数是16个处理器。但是一般来讲,SMP结构的机器可扩展性较差,很难做到100个以上多处理器,常规的一般是8个到16个,不过这对 于多数的用户来说已经够用了。这种机器的好处在于它的使用方式和微机或工作站的区别不大,编程的变化相对来说比较小,原来用微机工作站编写的程序如果要移 植到SMP机器上使用,改动起来也相对比较容易。SMP结构的机型可用性比较差。因为4个或8个处理器共享一个*作系统和一个存储器,一旦*作系统出现了 问题,整个机器就完全瘫痪掉了。而且由于这个机器的可扩展性较差,不容易保护用户的投资。但是这类机型技术比较成熟,相应的软件也比较多,因此现在国内市 场上推! 出的并行机大量都是这一种。
集群技术
通俗地说,集群是这样一种技术:它至少将两个系统连接到一起,使两台服务器能够像一台机器那样工作或者看起来好像一台机器。采用集群系统通常是为了提 高系统的稳定性和网络中心的数据处理能力及服务能力。自80年代初以来,各种形式的集群技术纷纷涌现。因为集群能够提供高可用性和可伸缩性,所以,它迅速 成为企业和ISP计算的支柱。
常见集群技术
1.服务器镜像技术
服务器镜像技术是将建立在同一个局域网之上的两台服务器通过软件或其他特殊的网络设备(比如镜像卡)将两台服务器的硬盘做镜像。其中,一台服务器被指 定为主服务器,另一台为从服务器。客户只能对主服务器上的镜像的卷进行读写,即只! 有主服务器通过网络向用户提供服务,从服务�! �上相� ��的卷被锁定以防对数据 的存取。主/从服务器分别通过心跳监测线路互相监测对方的运行状态,当主服务器因故障宕机时,从服务器将在很短的时间内接管主服务器的应用。
服务器镜像技术的特点是成本较低,提高了系统的可用性,保证了在一台服务器宕机的情况下系统仍然可用,但是这种技术仅限于两台服务器的集群,系统不具有可扩展性。
2. 应用程序错误接管集群技术
错误接管集群技术是将建立在同一个网络里的两台或多台服务器通过集群技术连接起来,集群节点中的每台服务器各自运行不同的应用,具有自己的广播地址, 对前端用户提供服务,同时每台服务器又监测其他服务器的运行状态,为指定服务器提供热备份作用。当某一节点因故障宕机时,集群系统中指定的服务器会在很短 的�! ��间内接管故障机的数据和应用,继续为前端用户提供服务。
错误接管集群技术通常需要共享外部存储设备—磁盘阵列柜,两台或多台服务器通过SCSI电缆或光纤与磁盘阵列柜相连,数据都存放在磁盘阵列柜上。这种 集群系统中通常是两个节点互为备份的,而不是几台服务器同时为一台服务器备份,集群系统中的节点通过串口、共享磁盘分区或内部网络来互相监测对方的心跳。
错误接管集群技术经常用在数据库服务器、MAIL服务器等的集群中。这种集群技术由于采用共享存储设备,所以增加了外设费用。它最多可以实现32台机器的集群,极大地提高了系统的可用性及可扩展性。
3.容错集群技术
容错集群技术的一个典型的应用即容错机,在容错机中,每一个部件都具有冗余设计。在�! ��错集群技术中集群系统的每个节点都与其他节! 点紧� �地联系在一起, 它们经常需要共享内存、硬盘、CPU和I/O等重要的子系统,容错集群系统中各个节点被共同映像成为一个独立的系统,并且所有节点都是这个映像系统的一部 分。在容错集群系统中,各种应用在不同节点之间的切换可以很平滑地完成,不需切换时间。
容错集群技术的实现往往需要特殊的软硬件设计,因此成本很高,但是容错系统最大限度地提高了系统的可用性,是财政、金融和安全部门的最佳选择。
目前在提高系统的可用性方面用得比较广泛的是应用程序错误接管技术,即我们通常所采用的双机通过SCSI电缆共享磁盘阵列的集群技术,这种技术目前被各家集群软件厂商和*作系统软件厂商进一步扩充,形成了市面上形形色色的集群系统。
操作系统
1.Unix
! Unix操作系统具有功能强大、技术成熟、可靠性好、网络及数据库功能强等特点,在计算机技术特别是操作系统技术的发展中具有重要的不可替代的地位和 作用。尽管Unix系统受到了NT的严峻挑战,但它仍是目前唯一能在各个硬件平台上稳定运行的操作系统,并且在技术成熟程度以及稳定性和可靠性等方面仍然 领先于NT。
Internet的出现对服务器提出了更高的要求,如何适应并满足不断变化、增强的网络应用需求成为服务器技术发展面临的重要问题。作为服务器核心技 术的处理器不能完全依赖主频的提高来提升处理能力,处理器结构成为提高服务器性能的瓶颈。Unix的重要厂商,如HP、IBM、Sun、SGI等的策略之 一就是采用新技术,不断加强性能和容量方面的领先地位,主要包括64位处理器及64位*作系统、快速可扩充的互连技术、大内! 存及高性能的集群以及高带宽 I/O技术等。
!
� �� IA-64体系结构出现后,Unix系统转向IA-64体系已成为业界的大趋势。最重要的是,诸多Unix厂商对IA-64的支持将打破以往 Unix和Wintel两大阵营的对立,将Unix所具备的开放性发挥到顶
峰,真正实现应用系统的跨平台使用,为用户提供最大的灵活性。Intel公司将设法建立不同Unix操作系统版本的通用标准,这是Intel为它的高端服 务器和下一代64位Merced芯片市场打下基础而必须达到的关键要求。这也是针对Microsoft与Intel在高端计算机领域存在着分歧而采取的一 个行动。Intel公司的开发战略旨在加速开发在基于Intel的服务器上运行的Unix系统。
在创建"统一的Unix"的过程中,Intel将与HP、IBM、Sun和SCO等公司展开合作。它们的合作表明,在高端"企业软件"市场上, Unix将继续担当关键的角色,而Microsoft则仍然在"伸缩性"等! 方面以一个后起之秀的面貌出现。伸缩性是衡量*作系统在处理较大数据量时的稳定 性的一个重要尺度。
2.Linux
Linux在企业计算方面的应用主要有下列几个方面:RAS(可靠性Reliability、可用性Availability、可服务性Serviceability)技术、冗余磁盘阵列(RAID)技术、集群计算(Cluster)和并行计算技术。
RAS、RAID、Cluster是企业运算中最尖端的部分,Linux如果试图进入银行、大型ICP等高端市场,不解决这些方面问题就没有任何可能性。
Linux这个新兴的操作系统,随着其普及程度的提高和自身的迅速发展,以及伴随今年IA-64这个新一代的企业运算平台而推出的IA- 64Linux和支持多达64个CPU和64GB内存的企业级核心2.4的发布,
Linux必将在企业计算领域发挥越来越大的作用。
在服务器操作�! ��统市场,Linux不断增强原有的优势,一方面抵�! ��Window s对低端市场的侵蚀,另一方面向Unix控制下的高端服务器市场发起进 攻。1999年10月,TurboLinux发布了世界上第一个商业集群Linux服务器,这种成本低廉、有着良好扩展性和灵活性、具有广泛应用范围的解 决方案为Linux进入企业级高端应用和大型网站铺平了道路。据统计,大约有20%的Internet服务网站采用集群解决方案,未来这个市场将有惊人的 增长。由于在集群性能方面的进展,Linux正在冲击长期处于Unix控制下的高端服务器市场。
高端服务器选购
面对市场上众多的品牌、各种专业技术、悬殊的产品价格,如何为网络建设选购功能强大、适应需求的高端服务器,往往让用户感到困惑。其实选购服务器有一些切实可行的方法,用户不妨遵循这样一条MAPSS原则,即M-可管理性;A-可用性;P-性能;S-服务;S-成本。
一、M-可管理性(Management)
网络管理员的一项重要工作就是对服务器的管理。服务器的管理工作一方面表现在可以及时地发现服务器的问题,进行及时的维护、维修,避免或减少因为服务 器的宕机造成用户系统的全面瘫痪;另一方面,管理员可以通过管理及时了解服务器性能方面的情况,对在运行中有问题的服务器进行及时的升级。所有这些都可以 大大地提高企业的工作效率。
二、A-可用性(Availability)
高端服务器是网络、数据的中心,很多企业(如金融、邮电、证券等)要尽量避免服务器在工作时间内宕机,服务器的宕机会造成企业内外信息的中断,对外收 不到定单、对内业务流程终止,这是现代企业不能允许的。另外,政府机关、医疗机构要保障自身工作的正常运转,也必�! �避免服务器在工作时间内宕机。选择产品 时,! 用户� �注意服务器能否保证24×7×365不间断工作无宕机,是否采用冗余技术。运行在关键环境下的中心主服务器一般要求多电源、热插拔硬盘、 RAID卡,必要时需提供双机热备份方案。
有多种原因会造成服务器宕机。硬件:AC供电故障、存储故障、内存、电源、风扇故障、处理器故障、系统板等;软件:系统软件、应用软件;使用:管理员、用户的误*作;环境:火灾、地震、洪水等。
既然宕机会给用户带来巨大损失,同时宕机的原因有多种多样,用户在选购时就要为有可能发生的最坏情况作好准备。
1.在AC供电故障问题上采用UPS加以解决。
2.在内存方面,服务器需支持错误检测和恢复(ECC-Error Checking &
Correcting)技术,此技术可以更正内存中的一位错。如果在ECC技术基�! �上增加了内存回写技术,就可有效避免两位错的出现。
3.服务器内部电源需要支持热插拔冗余电源,可避免因某一个电源的损坏而造成服务器的宕机。
4.服务器在运行时,内部温度会升高。系统温度过高极容易造成死机甚至硬件损坏。所以需要热插拔冗余风扇来帮助服务器进行有效的散热。
5.对于系统板、软件、使用等原因造成的系统宕机,用户可以采用更高一级的可用性解决方案,如集群技术等方案加以解决。
用户在为可用性确定服务器配置时,一定要注意两点:1.不可过分节约开支降低可用性,因为由此引发的宕机往往会造成更大的损失。2.选择务服器时,用 户应该详细了解服务器的具体特性和面向的应用环境是否与自己的需求吻合。从自己的实际需求出发,正确认识企�! �网络规模,合理利用资金,不要盲目追求高配�! �� 而� �成资金浪费。同时,用户也不要局限于仅满足当前需求。要有长远眼光,充分考虑到业务的增长,选择易升级、具有高可扩展性的服务器产品。要考虑到保护企 业投资。
三、P-性能(Performance)
由于企业的大量数据需要在服务器上运行,因此服务器的性能直接影响到企业的工作效率。一提到服务器性能,很多用户马上想到选用更高主频的CPU、更大的内存。其实这些仅仅是提高服务器整体性能的一部分。服务器整体性能的提高由以下几方面决定:
1.芯片组
芯片组用于把计算机上的各个部件连结起来,实现各部件之间的通讯,芯片组是计算机系统的核心部件。芯片组直接决定系统支持的CPU类型、支持的CPU 数目、内存类型、内存最大容量、系统总线类型、系统总线速度等等,归根结底�! ��一个计算机系统的最终性能应由芯片组决定。选择最先进的芯片组结构,就保证了 系统性能的领先。
2.内存类型、最大支持容量
由芯片组决定的内存类型、最大支持容量对于系统的运算处理能力也具有非常大的影响。同样,如果我们的应用需要大量的运算处理,如数据库、ERP等应用,建议根据实际情况配置较大的内存容量。
3.采用高速的I/O通道
I/O始终是计算机系统的瓶颈,采用高速的I/O通道对服务器整体性能的提高具有非常重要的意义。对于需要客户机经常与服务器交换数据的应用,如数据库、ERP、证券等应用需要更为高速的I/O性能。
4.网络支持
服务器必须通过其内部的网卡与客户机通讯,网络带宽对服务器的响应具有决定意义。所以,不要忽�! ��服务器对网络的支持情况。
四�! ��S-服� ��(Service)
性能、价格、服务一贯是用户选购服务器的三个主要因素。服务首先是维修,维修的重中之重是维修速度,因为用户不可能忍受服务器长时间得不到维修而影响工作。7×24的服务对用户来说是非常必要的。其次是技术支持。包括售前、售后电话支持,还有在网站上提供的支持软件。
五、S-节约成本(Saving Cost)
有时用户往往被产品本身的价格所迷惑,以为价格越低自己付出的成本越低。其实不然,对于成本,我们应考虑拥有总成本。因为价格不同往往意味着性能、品 质、服务的不同。对于服务器我们必须从MAPS(管理性、可用性、性能、服务)四个方面全面考虑,才可能得到一个真正的成本。服务器性能的每一点提升,都 是以金钱为代价的。在价格方面,过低的价格意味着用户的付出! 会更多。低价格意味着品质的下降、服务的下降。高端服务器不是普通的计算机产品,其质量的好坏 本身就是用户企业自身的生命,企业用户如果过多地追求低价格,必然会冒服务器宕机以及售后维修、服务周期长的风险。购买知名品牌、性价比合适的产品,意味 着用户在将来不必付出更大的代价,从而降低拥有总成本。
把sftp用户限制在自己的家目录中
SSH已经有了很多商品化版本,而且还有多种Unix/Linux系统平台上的免费版本。本文将主要以Linux操作系统为服务器(在其它的Unix或 Unix的派生操作系统上的操作也一样),Windows操作系统为客户端,介绍免费的商业SSH版本的安装及其实现。其重点是Linux服务器的配置。
软件的获得和安装
软件的获得可从http://www.openssh.org下载OpenSSH,当前最新版本为3.6.1,或者从http://www.ssh.com/ 下载针对Linux的非商业版本,当前最新版本为3.2,具体地址为:
SSH服务器地址 http://www.ssh.com/support/downloads/secureshellserver/non-commercial.html
SSH客户端地址 http://www.ssh.com/support/downloads/secureshellwks/non-commercial.html(这是一个For Windows的版本)。
不管是OpenSSh还是SSH Communications Security公司的SSH版本,在使用功能上基本一样,只是前者完全免费,而后者使用时要注意许可协议。从使用角度上可考虑,笔者认为后者更好用一些。本文着重介绍后者的安装和使用。
从SSH Communications Security公司下载的SSH服务器是源代码方式,文件名为ssh-3.2.3.tar.gz,必须对其进行编译和安装之后才能够使用。
我们假设软件的下载目录为root用户的宿! 主目录,即“/root”目录。解压缩完成后�! ��生成 一个“ssh-3.2.3”的源代码目录,然后切换到源代码代码目录,进行软件安装前的配置,编译和安装。
安装成功后,在“/etc/”目录下会增加一个“ssh2”目录,这个目录是用来存放SSH服务器的所有配置文件;在“/usr/local/”目录下会生成“ssh3.2.3”子目录,它是SSH程序文件和其它文件的存放位置。
基本配置和应用
默认安装,每次重新启动系统后都要重复上述操作才能启动SSH服务器。为了保证SSH服务器每次开机时自动启动,还要在“/etc/rc.d/rc.local”文件(此文件类似于DOS下的autoexec.bat文件令)的最后加入以下内容:
#start ssh3.2
/usr/local/ssh2/sbin/sshd &
其中第一行为注释内容,第二行为启动SSH服务器并作为后台守护进程运行。
接下来要做的是配置SSH服务器,所有�! ��配置都是通过修改“/etc/ssh2/sshd2_config”文件实现的。文件的默认配置已经能满足一般的要求。下面介绍几种比较常见的应用:
使超级用户root能够直接登录服务器
使用Telnet时root用户默认情况下不能直接从远程登录系统,一般要先以普通用户登录,然后,使用su切换到root身份,这也是出于安全性的考 虑。由于SSH使用了加密方式传输数据,所以可以放心地直接使用root登录服务器,那么我们需要将sshd2_config文件中的
#PermitRootLogin yes
取消注释,然后,重新启动SSH服务器,即可通过SSH以root身份登录Linux服务器。当然,如果您要禁止超级用户登录的话,可将“yes”改为“no”即可。
允许或禁止某些用户或组用户使用SSH登录
要实现禁止用户或组使用SSH登录服务器,只需要修改sshd2_conf! ig文件中的以下几行内容:
#AllowUsers sj.*,s[! [:digit: ]]*,s(jl|amza)
#DenyUsers skuuppa,warezdude,31373
#DenyUsers don@untrusted.org
#AllowGroups staff,users
#DenyGroups guest,anonymou
可以根据自己的实际需要,取消注释符“#”,加入实际的用户名或者组名,然后重新启动SSH服务器即可禁止(或允许)某些用户或者组使用SSH,具体操作这里不再详述。
使用SFTP代替FTP传输文件
FTP(文件传输协议)是一种使用非常广泛的在网络中传输文件的方式,但是,它也同样存在被网络窃听的危险,因为它也是以明文传送用户认证信息。 其实在SSH软件包中,已经包含了一个叫作SFTP(Secure FTP)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义 上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFT! P同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但 是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。若要开启 SFTP功能可以修改sshd2_config文件的下列内容:
# subsystem-sftp sftp-server
去掉行首的“#”,然后重新启动SSH服务器,这样在进行SSH连接时就可以同时使用SFTP传输文件。
关于客户端设置
以上是对服务器的设置,其实在SSH服务器中已经包含了一些客户端工具(如SSH,SFTP工具)。但是,更多的客户端用户使用Windows系统,下面就对Windows上的客户端系统设置加以说明。
首先从上文给出的网址下载“SSHSecureShellClient-3.2.3.exe”文件并安装。安装完成后,在桌面上会产成两个快捷方 ! 式,一个是“SSH Secure Shell Client”,用于�! ��程管 理,另一个是“SSH Secure File Transfer Client”,用于和服务器进行文件传输。在工具栏中点击“quick connnect”,输入正确的主机名和用户名,然后在弹出的对话框中输入密码完成登录,即可开始执行命令或者传输文件。在使用SFTP时,默认只能显示 用户的宿主目录的内容和非隐藏文件。但是,有时候您可能还要查看其它目录或者隐藏文件,这时只需要在菜单“eidt->setting-> file transfer”的选项中选中“show root directory”和“show hidden file”两个选项即可。
使普通用户仅使用SFTP而没有使用Shell的权限
默认情况下管理员给系统添加的账号将同时具有SFTP和SSH的权限。让普通用户使用shell执行命令也是有很大的安全隐患的,如果能够禁止用户使用shell执行命令而仅使用SFTP传输文件,就能消除这种安全隐患,�! ��全实现FTP的功能,
正如上文所述,SFTP没有单独的守护进程,只能借助于sshd守护进程,所以我们仍然需要使用SSH服务器,要保证sshd守护进程处于运行状态。具体实现方法如下:
首先,在编译安装时,编译中一定要有“--enable-static” 选项。安装成功后,在安装目录下的bin目录中执行下面的命令:
[root@localhost bin]# ls -l ssh-dummy-shell* sftp-server2*
将看到下列输出内容:
-rwxr-xr-x 1 root root 1350417 Apr 28 16:30 sftp-server2
-rwxr-xr-x 1 root root 3566890 Apr 28 16:30 sftp-server2.static
-rwxr-xr-x 1 root root 72388 Apr 28 16:30 ssh-dummy-shell
-rwxr-xr-x 1 root root 1813412 Apr 28 16:30 ssh-dummy-shell.static
其中带“static”后缀名,且比较大的两个文件就是加上“--enable-static”选! 项后生成的,后面我们将用到这里两个文件。 � �面以添加普通账号test为例讲述具体操作步骤。
1.在“/home”目录(或者将要存放普通用户宿主目录的目录)下创建“bin”子目录,并将两个static文件复制到此目录下(复制后改名去掉static后缀),执行如下命令:
[root@localhost bin]# cd /usr/local/ssh3.2/bin
[root@localhost bin]#cp ssh-dummy-shell.static /home/bin/ssh-dummy-shell
[root@localhost bin]# cp sftp-server2.static /home/bin/sftp-server
[root@localhost bin]#chown -R root.root /home/bin
[root@localhost bin]#chmod -R 755 /home/bin
2.添加一个组,使以后所有禁止使用shell的用户都属于这个组,这样便于管理更多的用户:
[root@localhost bin]#groupadd template
3.在添加系统账号时使用如下命令:
[root@localhost root]#useradd -s /bin/ssh-dummy-shell -g template test
[ro! ot@localhost root]#passwd test
[root@localhost root]#mkdir /home/test/bin
[root@localhost root]#cd /home/test/bin
[root@localhost bin]#ln /home/bin/ssh-dummy-shell ssh-dummy-shell
[root@localhost bin]#ln /home/bin/sftp-server sftp-server
[root@localhost bin]#chown -R root.root /home/test/bin
[root@localhost bin]#chmod -R 755 /home/test/bin
3.用户添加成功后,还需要修改/etc/ssh2/sshd2_config文件,将下列内容:
#ChRootGroups sftp,guest
改为:
ChRootGroups sftp,guest,template
修改上面这行内容,主要是为了禁止普通用户查看系统的其它目录,把其权限限制在自己的主目录下。重新启动SSH服务器程序,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其它的任何目录,而是把自己的主目录当作根目录。注意,这! 里使用的是按用户所属组限制,这样可以 使包�! ��在tem plate组内的所有用户都可以实现此功能。若您只要限制个别用户的话,可以修改下面的内容:
#ChRootUsers anonymous,ftp,guest
启动多个mysqld
步骤:
1、准备目录
mkdir /mysql1
chown mysql:mysql /mysql1
chmod 755 mysql /mysql1
2、准备新的服务要读取的数据库
cp /path/to/mysql/var /mysql1
3、创建mysqld启动脚本
#start_msyql
#!/bin/sh
rundir="$1"
port="$2"
echo "$rundir"
/www/mysql/bin/safe_mysqld --user=mysql --pid-file="$rundir"/mysql.pid
--datadir="$rundir"/var -O max_connections=500 -O wait_timeout=600 -O key_buffer=32M
--port="$port" --socket="$rundir"/mysql.sock &
说明:
脚本使用方法./start_mysql /mysql1 3307
./start_mysql dir port
dir:指的是mysql数据库及运行时产生的文件所在目录
port:指新的mysqld监听的端口
4、创建mysqld的停止脚本
#stop_mysql
#!/bin/sh
rundir="$1"
echo "$rundir"
/www/mysql/bin/mysqladmin -u root -p -S"$rundir"/mysql.sock shutdown
让PHPBB支持QQ
/language/所用语言/lang_main.php
$lang['ICQ'] = "QQ"; // 117行
$lang['ICQ_status'] = "QQ 状态"; // or "QQ Status" 249行
/viewtopic.php
注掉946-948行,添加
$icq = '<a target=blank href=http://wpa.qq.com/msgrd?V=1&Uin='.$postrow[$i]['user_icq'].'&Site="你的论坛名称"&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:'.$postrow[$i]['user_icq'].':5 alt="给我留言"></a>';
/include/usercp_viewprofile.php
注掉147-149行,添加
$icq = "<a target=blank href=http://wpa.qq.com/msgrd?V=1&Uin=".$profiledata['user_icq']."&Site=‘你的论坛名称’&Menu=yes><img border='0' SRC=http://wpa.qq.com/pa?p=1:".$profiledata['! user_icq'].":5 alt='给我留言'></a>";
模版目录下的profile_view_body.tpl
将71行开始的<tr>标记内的内容改为:
<tr>
<td valign="middle" nowrap="nowrap" align="right"><span class="gen">{L_ICQ_NUMBER}:</span></td>
<td class="row1"><span class="gen">{ICQ}</span></td>
</tr>
模版目录viewtopic_body.tpl
47行开始的<td>标记内容换为:
<td valign="middle" nowrap="nowrap">{postrow.PROFILE_IMG} {postrow.PM_IMG} {postrow.EMAIL_IMG} {postrow.WWW_IMG} {postrow.AIM_IMG} {postrow.YIM_IMG} {postrow.MSN_IMG} {postrow.ICQ}</td>
/privmsg.php
注�! �518-520行:
添加:
&n! bsp;&nbs p; $icq = '<a target=blank href=http://wpa.qq.com/msgrd?V=1&Uin='.$privmsg['user_icq'].'&Site=论坛名称&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:'.$privmsg['user_icq'].':5 alt="给我留言"></a>';
模版目录/privmsgs_read_body.tpl
54行最后一个<td>内容:{ICQ}
注:利用了QQ提供的“在线状态”图片,用TT浏览器的话可以直接给该用户发送消息,看看QQ的状态图片,似乎只有风格5与PHPBB的默认风格有点接近。
活用Linux的后台任务
对于耗时长的任务不应该让它在前台任务中执行,而应该交给后台任务去执行。这样前台任务可继续正常运作其它的操作,不用等待。示例如下:
# find / -name testing &
# fg
如果想要让上面例子中的任务转为后台执行,就使用"& "。不过,由于是后台执行的,所以该程序的输出并不会出现在屏幕上。当用户将数个任务放到后台任务执行时,要如何去管理这些后台任务?怎么知道后台任务的 执行情况?如何终止或暂时停止后台任务的执行?下面就来逐一说明。
控制管理
举例如下:
# du -a /user > user.data & |
如上通过"&"命令将三个任务放到后台中执行。用命令"jobs -l"显示后台任务的执行情况,举例如下:
#jobs -l |
首先介绍一个任务控制特有的名词:当前任务。上面的当前任务是"du -a /user > user.data",因为后台任务号码是"[1]"。如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号 码"[2]"的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入"fg"、"bg"和"stop"等命令时,如果不加任何引号,则所变动的 均是当前任务。
终止后台任务
命令总是有出错的时候。当出现这种情况时,用户可用Shell的内置命令"kill"来结束任务。假如想要结束后台任务"du -a /user > user.data",可以用下面的命令:
# kill 237
# kill %1
其中,237为第一个后台任务的PID号码。如果想终止第二个后台任务,以下两种�! ��法均可:
方法一:#kill %2
方法二:# kill %-
执行暂停任务
Shell的内置命令"stop"可用来暂停后台任务。示例如下:
stop % (停止第一个后台任务的执行)
stop %n (停止第n个后台任务的执行)
了解命令"stop"的使用后,便可将想要停止的后台任务暂停执行。例如用户要将一个年度报表用 "nroff"命令整理,因为文件量十分庞大,所以将它放到后台中执行。命令如下:
#nroff -ms moonth[1-12].acct > year2003.acct &
[4] 240
当命令处理到一半的时候发觉moonth12.acct文件是旧的需要更新,这时用"jobs"命令查看到后台任务"[4]"还在执行中,但无法知道命令已经处理到哪一个月份。此时可输入下面的命令,将后台任务"[4]"先暂停执行:
#stop %4
然! 后查看文件year2003.acct的尾部判断是否已经处理�! ��12月� ��如果还没有执行到,那么可以将moonth12.acct文件 的资料更新,再用命令"bg"将已被暂时停止执行的后台任务"[4]"接着继续执行下去。这样不但可更正错误文件,而且不用将已处理完的任务重新再执行一 次。
方便之处
前台、后台任务确实可以给日常操作带来方便。因为,我们在日常操作中肯定会遇到同一时间要进行多个操作。这个时候如果不使用前台任务和后台任务,那么将要花费很多时间。熟练运用前台和后台任务能达到"时"半功倍。
安装Linux无盘工作站
随着Linux的日益流行,使用Linux的人越来越多,其实Linux 对远程引导的支持非常好,Linnx内核自身又支持网络文件系统,因此非常适合做无盘工作站,本文将以一个实例向大家详细介绍无盘Linux工作站的安装办法。
这个网络是一个小的局域网,有1台服务器和4台 Linux 无盘工作站,彼此之间用双绞线通过HUB连接,服务器的IP地址定为192.168.0.80 ,名字是server ,5台无盘工作站的地址由服务器动态分配,地址范围从 192.168.0.1 到192.168.0.4 ,名字分别是c1,c2,c3,c4,服务器和无盘工作站使用的都是 NE2000 兼容网卡,无盘工作站使用的网卡上都安装了B! OOTROM 启动芯片,服务器操作系统安装的是 RedHat Linux 6.0 ,安装时选用定制安装,并安装了全部软件。
Linux的远程引导有两种方式,一是利用Bootp协议,有一个专门的项目EtherBoot 提供支持(http://www.slug.org.au/etherboot/),这种方式引导 Linux 的速度是最快的,但这种方式有一个最大的问题,就是在市场上找不到支持这种远程引导协议的 BOOTROM 启动芯片(除非自己刻录),因为市场上几乎所有的 BOOTROM 启动芯片都是遵循NOVELL远程引导协议的,于是有人提出另外一种方式,就是服务器端用 NetWare 服务器,客户端就可以用现有的BOOTROM 启动芯片了,说到这里大家一定胡涂了,作Linux无盘工作站岂不是还一台NetWare 服务器?不是的,因为神通广大的 Linux 可以模拟 NetWare 服务器,就象Samba可以把 Linux 模拟成 NT 一样,mars_nwe 可以把 Linux 模拟成 NetWare,不仅! 能提供NetWare 文件和打印服务,还能提供远程引! 导支� �(知道Linux的厉害了吧),本文讲述的Linux 无盘工作站就是用这种方式作远程引导的。
准备启动盘
由于在 Linux 下没有制作符合 NetWare 远程引导协议启动映象的工具,所以只能用早期的Win95()提供的工具(遗憾)。找一台装有 Win95 的机器启动后按 F8 进入纯DOS方式,格式化一张启动盘 format a: /s ,然后将RedHat Linux安装光盘上 dosutils 目录下的loadlin.exe复制到启动盘,在启动盘上作一个 autoexec.bat 文件,代码只有一行 loadlin.exe bzImage root=/dev/nfsroot从 Windows 95 安装光盘的 Win95 目录下的cab文件中解出 rplboot.sys 文件放在启动盘上,命令如下:
extract.exe /a /l a: win95-27.cab rplboot.sys
一张用来做启动映象的启动盘就作好了,保存好启动盘,以后作启动映象时会用到它。
编译内核
用于无盘工作站的Linux内核与用于从本地硬盘引导的Linux内核是不同的,无盘工作站的内核必须支持NFS作为根文件系统,即远程根文件系统,所以 必须编译无盘工作站专用的内核。笔者使用的内核代码版本是2.2.16,将内核源代码解压到/usr/src下,cd /usr/src/linux 进入内核子目录,执行命令make menuconfig 进行内核编译配置,下列项目必须按要求设置:
Processor type and features 该项目下面的选项必须根据无盘工作站的CPU类型设置,而不是根据服务器的CPU类型设置
Loadable module support 该项目下面的所有选项都禁止,即不支持模块功能
Plug and Play support 设置为有效
Block devices 该项目下面的
Loopback device support
Network block device support
都设置为有效
Networking option 该项�! �下面的
kernel level autoconfiguration
! DHCP s upport (NEW)
都设置为有效
Network device support 该项目下面的选项必须根据无盘工作站使用的网卡进行设置,本例中使用的是NE2000兼容网卡,选项
Ethernet (10 or 100Mbit)
Other ISA cards
NE2000/NE1000 support (NEW)
都设置为有效
Filesystems 该项目下面的Network File Systems子项目下面的
NFS filesystem support
Root file system on NFS (NEW)
都设置为有效
其它的选项可以不用理会,直接用缺省值就可以了,当然如果你的无盘工作站有些其它需要使用的设备,你也可以将有关的选项设为有效,比如,本例中的无盘工作站使用了声霸卡兼容的声卡,下面的选项
OSS sound modules (NEW)
100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support
FM synthesizer (YM3812/OPL-3) support (NEW)
都设置为有效 !
以上设置完成后,退出内核编译设置程序,会出现一个对话框
Do you wish to save your new kernel configuration?
回答 然后执行
make dep && make bzImage
进行内核编译,这个过程得花一点时间,特别是如果计算机的速度不快的话,花的时间会更长一些。编译内核如果没有错误,会得到内核映象文件/usr/src/linux/arch/i386/boot/bzImage ,将启动软盘插入计算机,执行下面的命令
mount -t vfat /dev/fd0 /mnt/floopy
cp /usr/src/linux/arch/i386/boot/bzImage /mnt/floppy
umount /dev/fd0
好了,启动盘上的文件都准备齐全了,等会儿用它到Win95环境下制作启动映象。
服务器设置
服务器端需要运行nfsd、dhcpd、mars_new等几个服务进程,这些软件在ReHat Linux 发行套件里都有,如果在�! �装 Linux 的时候选择全部安装,这些软件都会随! 着安� �操作系统而装好了,下面对这些软件进行设置,注意,下面的操作要以 root 身份进行。
1、 NFS 守护进程nfsd
首先要建立几个供无盘工作站使用的目录,并通过nfsd 导出,命令如下:
mkdir /tftpboot
然后编辑文件 /etc/hosts ,加入下面的内容
192.168.0.80 server server.domain
192.168.0.1 c1 c1.domain
192.168.0.2 c2 c2.domain
192.168.0.3 c3 c3.domain
192.168.0.4 c4 c4.domain
第一台工作站的工作目录设置方法如下:
mkdir /tftpboot/192.168.0.1
cd /tftpboot/192.168.0.1
c000p -a /bin .
cp -a /dev .
mknod dev/nd0 b 43 0
chmod 600 dev/nd0
cp -a /etc .
cp -a /home .
cp -a /lib .
rm -rf lib/modules
cp -a /root .
cp -a /sbin .
! cp -a /var .
mkdir proc
mkdir usr
mkdir tmp
chmod 777 tmp
touch fastboot
chattr +i fastboot
cd etc
编辑文件 sysconfig/network-scripts/ifcfg-eth0 保留其中的
DEVICE=eth0
ONBOOT=yes
其余的行全部删除,然后增加一行
BOOTPROTO=dhcp
编辑文件 rc.d/rc.sysinit ,在文件最后加上两行
mount -t nfs server:/usr /usr
/usr/X11R6/bin/xfs
编辑文件 fstab
保留其中的
none /proc proc defaults 0 0
其余的行全部删除,然后增加一行
server:/tftpboot/192.168.0.1 / nfs defaults 1 1
其它工作站的工作目录设置方法就简单多了
cd /tftpboot
cp -a 192.168.0.1 192.168.0.2
cp -a 192.168.0.1 192.168.0.3
cp -a 192.168.0.1 192.168.0.4
编辑文件 /etc/exports ,加入以下内容
/usr (ro,no_root_squash)
/tftpboot/192.168.0.1 (rw,no_root_squash)
/tftpboot! /192.168 .0.2 (rw,no_root_squash)
/tftpboot/192.168.0.3 (rw,no_root_squash)
/tftpboot/192.168.0.4 (rw,no_root_squash)
2、动态主机配置协议服务器 dpchd
检查一下文件/etc/dhcpd.leases是否存在,若不存在就用命令touch /etc/dhcpd.leases
创建一个,然后编辑文件 /etc/dhcpd.conf ,加入以下内容
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.1 192.168.0.4;
}
3、NetWare 模拟器 marsw_nwe
编辑文件 /etc/nwserv.conf,找到下面的行
# 4 0×10 eth0 802.3 1
将该行开头的’#'去掉,再找到
4 0×0 * 802.3 1
在该行开头加上’#’
制作启动映象
进入Win95,将Win95(早期的版本,可以用服务器安装方式安装)安装光盘的
adminnettoolsnetsetuprplimage.exe 复制到硬盘,将�! �动软盘插入软驱,然后在纯MSDOS方式下执行 rplimage a: 就会得到启动映象 net$dos.sys,再将启动映象
net$dos.sys 复制到启动盘上(如果启动盘空间不够,可以先删除启动盘上的一些文件以留出空间)。
启动 Linux 服务器,以 root 用户登录,将启动软盘插入软驱,执行下面的命令
mount -t vfat /dev/fd0 /mnt/floppy
cp /mnt/floppy/net$dos.sys /var/mars_nwesyslogin
umount /dev/fd0
然后执行 setup ,移动光棒至 System services 选项回车,出现 Services 设置画面,将dhcpd,nfs,mars-nwe 都设为有效,退出 setup 程序,执行以下的命令以启动上述服务进程:
/etc/rc.d/rc3.d/*mars-nwe restart
/etc/rc.d/rc3.d/*dhcpd restart
/etc/rc.d/rc3.d/*nfs restart
下一次再启动服务器时,上述服务进程会自动执行。
至此,所有的设置工作全部完成了,联�! �网络随便打开一台无盘工作站,稍等一下,
出现远程引导的信息,接着会启动 Win95 ,接下来很快就会装载 Linux ,在一大堆 Linux 的启动信息之后如果看到 Linux 的登录提示,就说明远程启动成功了。
Linux 无盘工作站虽然运转起来了,但还有一个问题,就是交换的问题,因为Linux是一个支持虚拟存储的操作系统,当机器内存不够时,Linux 就会把内存中暂时不用的数据换出到交换设备上,等需要时再换回来,刚才我们没有设置交换区,在无盘工作站上用 free 命令就会发现交换区为零,如果无盘工作站内存较大,运行一些不大的程序,没有交换区还是可以的,但若运行大型程序就会出问题,下面介绍在服务器上设置交换 区即远程交换的方法。
对于2.1.101版以前的内核,要实现远程交换可有点费事,得从网络上下载有关的补丁来修改内核代码,然后再编译内核映象,从2.1.101版后内�! ��支 持网络块设备,实现远程交换就容易了,首先编译内核时要使 Network block device support 选项有效(刚才编译内核时就是这么作的),再从http: //atrey.karlin.mff.cuni.cz/~pavel/nbd/nbd.html
下载实用程序 nbd.14.tar.gz ,执行下面的命令
tar zxvf nbd.14.tar.gz
cd nbd
./configure
make
编译完后会得到文件 nbd-server 和 nbd-client,将它们复制到 /usr/sbin 下面:
cp nbd-server nbd-client /usr/sbin
然后编辑文件 /etc/rc.d/rc.sysinit,在文件最后加上一行
/usr/sbin/nbd-server 7999 /tftpboot/%s/swap > /dev/null &
执行刚才的命令激活nbd服务:
/usr/sbin/nbd-server 7999 /tftpboot/%s/swap > /dev/null &
下一次服务器启动时,上述命令会自动执行。
再在服务器上每个工作站目录(/tftpboot/192.168.0.1,/tftpboot/192.168.0.2等等)下为各个无盘工作�! �建立交换文件,命令如下(本例中交换区大小为! 32M): dd if=/dev/zero of=swap count=32768 bs=1024
mkswap swap
在每个工作站目录下文件 /etc/rc.d/rc.sysinit 的最后加上两行
/usr/sbin/nbd-client server 7999 /dev/nd0
swapon /dev/nd0
就这么简单,再打开无盘工作站试一试启动成功后登录系统,执行命令 free 就会看到在显示信息的最后有这样一行:
Swap: 32764 XX XXXX
说明交换区设置成功了。
这样,一个完整的 Linux 无盘工作站网络就作好了,Linux 无盘工作站的用法很灵活,既可以象使用普通有盘工作站一样使用,还可以把无盘工作站当成别的 Unix 主机的终端,特别是可以作为 X 终端,运行远程 Unix 主机上的 X 应用。


