用iptables做本机端口转发

代码如下:

  iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
估计适当增加其它的参数也可以做不同IP的端口转发。

如果需要本机也可以访问,则需要配置OUTPUT链:

  iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080
原因:

外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT,或者POSTROUTING。

POSTROUTING不行,需要看看。

如何建立自己的Apache扩展

 

假设有一个扩展Apache功能的模块mod_foo.c ,使用下列命令,可以将C源程序编译为共享模块,以在运行时加载到Apache服务器中:

$ apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
$ _
然后,必须修改Apache的配置,以确保有一个LoadModule 指令来加载此共享对象。为了简化这一步骤,apxs 可以自动进行该作,以安装此共享对象到"modules"目录,并更新httpd.conf 文件,命令如下:

$ apxs -i -a mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[activating module 'foo' in /path/to/apache/conf/httpd.conf]
$ _
如果配置文件中尚不存在,会增加下列的行:

LoadModule foo_module modules/mod_foo.so 如果你希望默认禁用此模块,可以使用 -A 选项,即:

$ apxs -i -A mod_foo.c 要快速测试apxs机制,可以建立一个Apache模块样板及其对应的Makefile :

$ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/modules.mk
Creating [FILE] foo/mod_foo.c
Creating [FILE] foo/.deps
$ _
然后,立即可以编译此样板模块为共享对象并加载到Apache服务器中:

$ cd foo
$ make all reload
apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
apxs -i -a -n "foo" mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[activating module 'foo' in /path/to/apache/conf/httpd.conf]
apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _

如何解决时间同步引起oracle 不稳定的问题

数据库服务器的时间与真实时间一旦出现差异,就要对数据库服务器进行时间同步。很多地方都把ntpdate放到cron中,5分钟自动同步一次。然而,这么做,常常会引会数据库ORA-01555,甚至db crash。

找到一种方法据说可以解决这个问题。即使用ntpd -x来同步时间 instead of ntpdate。
实际上ntpd,不只是一种时间服务器的server端,同时也可以做client端,相当于ntpdate。当它做client时,与ntpdate的差别是,ntpdate已近淘汰,ntpd则可看作是它升级版。
  下面的方法是讲如何在linux的环境中设置ntpd:

1. 修改/etc/ntp.conf

2. 加入time server。每个数据库中心都应用会有一组时间服务器,可以找sa要, 比如国际站,加入:

server ntp1.alibaba.com
server ntp2.alibaba.com
server ntp3.alibaba.com

ntp.conf有很多参数,都忽略就行。

3. 修改/etc/sysconfig/ntpd, 加入-x参数,变成:

OPTIONS="-U ntp -x -p /var/run/ntpd.pid"

这据说是为db同步所要求的。

4. 首先同步一次时间:
ntpdate time.nist.gov; hwclock --systohc

如果数据库还要在运行,建议不要这么做。待例行维护时再处理。

5. 然后启动ntpd:
/etc/init.d/ntpd start

6. 最后加入到自动启动列表:
chkconfig --level 2345 ntpd on

多台slave的mysql Replication的配置

 5.1.24版本的配置请看:http://www.masalife.com/archives/173

一、先修改服务器的配置文件

       1、Master服务器配置简单,修改my.cnf为:

       server-id       = 1

log-bin

set-variable=binlog-ignore-db=mysql

2、slave1的配置加入

server-id       = 2

master-host = 172.16.20.135

master-user = rep

master-password = cnrep

master-port = 3306

log-bin

set-variable=replicate-ignore-db=mysql

set-variable=replicate-do-db=AliSMS

set-variable=replicate-do-db=lcd

set-variable=replicate-do-db=loginmanager

set-variable=replicate-do-db=samis

set-variable=replicate-do-db=sareport

set-variable=replicate-do-db=syslog

set-variable=replicate-do-db=web_speed

log-slave-updates

3、slave2服务器的配置

server-id       = 3

master-host = 172.16.20.3

master-user = rep1

master-password = cnrep

master-port = 3306

set-variable=replicate-ignore-db=mysql

set-variable=replicate-do-db=AliSMS

set-variable=replicate-do-db=lcd

set-variable=replicate-do-db=loginmanager

set-variable=replicate-do-db=samis

set-variable=replicate-do-db=sareport

set-variable=replicate-do-db=syslog

set-variable=replicate-do-db=web_speed

 

二、重启master数据库

 

三、然后锁定master数据库的表:

mysql>FLUSH TABLES WITH READ LOCK;

四、在master数据库中添加用于slave1同步的用户,并赋予相关权限:

mysql>GRANT REPLICATION SLAVE ON *.* TO rep@sa_cfengine1 IDENTIFIED BY 'cnrep';

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@sa_cfengine1 IDENTIFIED BY 'cnrep';

 

五、在slave1数据库中添加用于slave2同步的用户,并赋予相关权限:

mysql>GRANT REPLICATION SLAVE ON *.* TO rep1@sa_cfengine2 IDENTIFIED BY 'cnrep';

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep1@sa_cfengine2 IDENTIFIED BY 'cnrep';

 

六、同步数据库:

方法很多,可以打包之后scp,再解压,由于sa_cfengine1到mysql master服务器通道打通了,切sa_cfengine2到sa_cfengine1通道也打了,故直接scp整个数据库目录即可。

注意:此时要注意删除同步过来的日志文件,最好把与数据库无关的文件全删除(可以将非目录的文件全删了)。

 

七、重启salve1的mysql,起来之后锁定表

 

八、重启slave2的mysql,然后先后给slave1和master服务器的mysql表解锁

mysql> UNLOCK TABLES;

 

九、分别登录slave1和slave2的mysql,查看同步状态:

        mysql>SHOW SLAVE STATUS\G
*************************** 1. row ***************************

             Slave_IO_State: Waiting for master to send event

                Master_Host: 172.16.20.135

                Master_User: rep

                Master_Port: 3306

              Connect_Retry: 60

            Master_Log_File: mysql-bin.000051

        Read_Master_Log_Pos: 13856842

             Relay_Log_File: sa_cfengine1-relay-bin.000013

              Relay_Log_Pos: 624419

      Relay_Master_Log_File: mysql-bin.000051

           Slave_IO_Running: Yes

          Slave_SQL_Running: Yes

            Replicate_Do_DB: AliSMS,lcd,loginmanager,samis,sareport,syslog,web_speed

        Replicate_Ignore_DB: mysql,mysql

         Replicate_Do_Table:

     Replicate_Ignore_Table:

    Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

                 Last_Errno: 0

                 Last_Error:

               Skip_Counter: 0

        Exec_Master_Log_Pos: 13856842

            Relay_Log_Space: 624419

            Until_Condition: None

             Until_Log_File:

              Until_Log_Pos: 0

         Master_SSL_Allowed: No

         Master_SSL_CA_File:

         Master_SSL_CA_Path:

            Master_SSL_Cert:

          Master_SSL_Cipher:

             Master_SSL_Key:

      Seconds_Behind_Master: 0

1 row in set (0.01 sec)

注意标注为红色的地方,两个都是yes说明一切正常,否则要检查原因,可以看error log查找原因后做相应的处理。

 

十、测试:

       在master数据库中update在同步列表中的一个表的一个字段,如果slave服务器的做相应改变,则测试用过。

yahoo、taobao云计算利器之“云”端的小飞象—Hadoop

 

“云”端的小飞象—Hadoop

Hadoop简史

在搜索技术界,也许有人不熟悉Doug Cutting,但很少有人不知道Lucene这个著名的全文检索引擎。事实上,Lucene应该是Doug Cutting的成名作,它被广泛地应用在各种规模的网站和系统中,甚至Eclipse中的搜索功能也是Lucene来实现的。

 

Doug Cutting并没有满足Lucene取得的成绩。2002年,他发起了一个基于Lucene的开源项目Nutch,其目标是构建出一个包括网络蜘蛛、文件存储等模块的网页搜索系统。经过2年的努力,Nutch虽然可以用4台机器支持1亿网页的抓取和检索,但系统的扩展性开始遇到瓶颈。恰在此时,发表了GFSMapReduce的论文,这两个创新性的思路点燃了Nutch 2名开发人员的斗志,他们又花了2年的业余时间实现了DFS(分布式文件系统)和MapReduce机制,这次改造使Nutch可以在20台机器上支持几亿的数据规模,其编程和运维的简易性也得到了大幅提升,但系统的吞吐能力与一个真正的网页搜索系统仍有不小的差距。

 

2006年,开源社区如火如荼,当佬雅虎在思索构建一个高度利用硬件资源、维护和开发都非常简易的软件架构时,Doug Cutting和他的Nutch进入了他们的视野。一方具有超强的技术前瞻性和实战经验,另一方能提供世界上数一数二的数据、硬件和人力资源,双方一拍即合,同年1Doug Cutting正式加入雅虎,2HadoopNutch中分离出来,正式成为Apache组织中一个专注于DFSMapReduce的开源项目。

 

20082月,又是两年,雅虎宣布搭建出一个世界上最大的基于Hadoop的生产集群系统—Yahoo! Search Webmap(简单地讲,就是雅虎网页搜索抓取的所有站点和网页及其关系的数据库),下面一组数据可以让我们对该系统的规模有个初步的认识:

Ø  页面之间的链接数超过1000亿;

Ø  Webmap输出的压缩数据超过300TBTerabyte);

Ø  有单一的MapReduce任务同时在1万多个CPU的核(core)上运行;

Ø  生产集群硬盘空间占用超过5PBPetabyte);

Ø  与原来没用Hadoop的方案相比节约了30%的时间。

 

这时候,可以说Doug Cutting想构建一个Web-scale级别系统的心愿也终于实现了!

 

Hadoop的系统架构

简单地讲,Hadoop是一个可以更容易开发和并行处理大规模数据的分布式计算平台。它的主要特点是:扩容能力(Scalable成本低(Economical高效率(Efficient可靠性(Reliable。另外,Hadoop是一款完全用Java开发的开源软件,因此它可以运行在多种作系统和商用硬件上。

 

Hadoop主要由两部分构成:Hadoop分布式文件系统(HDFS)和MapReduce的实现。

HDFSMapReduce的关系如下图所示:

MapReduce是依赖于HDFS实现的。通常MapReduce会将被计算的数据分为很多小块,HDFS会将每个块复制若干份以确保系统的可靠性,同时它按照一定的规则将数据块放置在集群中的不同机器上,以便MapReduce在数据宿主机器上进行最便捷的计算。

 

下面我们再深入一些看看HDFSMapReduce的实现细节:

 

HDFS

 

HDFS设计时基于如下的前提和目标:

1.         硬件错误是常态而不是异常HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据。任一组件都有可能失效,这意味着总是有一部分HDFS的组件是不工作的。因此错误检测和快速、自动的恢复是HDFS最核心的架构目标。

2.         流式数据访问HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。

3.         大规模数据集HDFS上的一个典型文件大小一般都在G字节至T字节。因此,HDFS被调节以支持大文件存储,并能提供整体上高的数据传输带宽,能在一个集群里扩展到数百个节点。一个单一的HDFS实例应该能支撑数以千万计的文件。

4.         简单的一致性模型:HDFS应用需要一个"一次写入多次读取"的文件访问模型。文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。MapReduce应用或者网络爬虫应用都非常适合这个模型。

5.         移动计算比移动数据更划算:一个应用请求的计算,离它作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。HDFS为应用提供了将计算移动到数据附近的接口。

6.         异构软硬件平台间的可移植性:这种特性方便了HDFS作为大规模数据应用平台的推广。

 

HDFS的系统架构如下图所示:

 

HDFS采用Master/Slave架构,一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(Namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。

 

从内部看,一个文件其实被分成一个或多个数据块(Block),这些块存储在一组Datanode上。Namenode执行文件系统的名字空间作,比如打开、关闭、重命名文件或目录,它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制。

 

单一节点的Namenode大大简化了系统的架构。Namenode负责保管和管理所有的HDFS元数据(Metadata),因而用户数据就不需要通过Namenode(也就是说文件数据的读写是直接在Datanode上)。

 从内部看,一个文件其实被分成一个或多个数据块(Block),这些块存储在一组Datanode上。Namenode执行文件系统的名字空间作,比如打开、关闭、重命名文件或目录,它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制。

 

单一节点的Namenode大大简化了系统的架构。Namenode负责保管和管理所有的HDFS元数据(Metadata),因而用户数据就不需要通过Namenode(也就是说文件数据的读写是直接在Datanode上)。

 

 

MapReduce

 

MapReduce是一种高效的分布式编程模型,同时是一种用于处理和生成大规模数据集的实现方式。其实,现实世界中很多计算任务都可以用这个模型来表达,熟悉Unix Shell的同学一定写过类似这样的命令行:

~> cat input | grep xxx | sort | uniq -c | cat > output

 

上面每个管道符中间正好对应了一个典型MapReduce的几个阶段:

Input | Map | Shuffle & Sort | Reduce | Output

 

下图表明了这几个阶段的工作流及结构关系:

1.       Input一个Hadoop MapReduce应用通常需要提供一对通过实现合适的接口或抽象类提供的MapReduce函数,还应该指明输入/输出的位置(路径)和其他一些运行参数。此外,此阶段还会把输入目录下的大数据文件切分为若干的数据块。

2.       MapMapReduce框架把应用作业的输入看为是一组<key, value> 键值对,在Map这个阶段,框架会调用用户自定义的Map函数处理每一个<key, value> 键值对,生成一批新的中间<key, value> 键值对,这两组键值对的类型可能不同。

3.       Shuffle & Sort为了保证Reduce的输入是Map排好序的输出。在Shuffle阶段,框架通过HTTP为每个Reduce获得所有Map输出中与之相关的<key, value> 键值对;而在Sort阶段,框架将按照key的值对Reduce的输入进行分组(因为不同map的输出中可能会有相同的key)。通常ShuffleSort两个阶段是同时进行的,Reduce的输入也是一边被取回,一边被合并的。

4.       Reduce此阶段会遍历中间数据,对每一个唯一key,执行用户自定义的Reduce函数(输入参数是<key, (list of values)>),输出是新的<key, value> 键值对。

Output此阶段会把Reduce输出的结果写入输出目录的文件中。这样,一个典型的MapReduce过程就结束了。

这里需要强调两点:

1.       整个过程中,Hadoop框架负责任务的调度和监控,以及重新执行已经失败的任务。

2.       虽然Hadoop框架是用Java实现的,但MapReduce应用程序则不一定要用 Java来写。比如:Hadoop Streaming是一种运行作业的实用工具,它允许用户创建和运行任何可执行程序(例如:Shell工具)来做为MapReduc作。另外,Hadoop Pipes是一个与SWIG兼容的C++ API(没有基于JNI技术),它也可用于实现MapReduc作。

基于Hadoop的其他开源项目

Pig - http://incubator.apache.org/pig/

PigYahoo!捐献给Apache的一个项目,目前还在Apache孵化器(incubator)阶段,目前版本是V0.1.0,但基本功能已经可用了。Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简易的作和编程接口。

 

ZooKeeper - http://hadoop.apache.org/zookeeper/

ZooKeeperHadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组(Group)服务等。ZooKeeper的目标就是封装好这些复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper的一些与Chubby lock service很相似。

 

HBase - http://hadoop.apache.org/hbase/

HBase也是Hadoop的正式子项目,它是一个面向列的分布式数据库,其源于BigTable论文。目前该项目的主要开发人员来自刚被Microsoft收购的Powerset公司。

 

Mahout - http://lucene.apache.org/mahout/

Mahout是一个利用Map/Reduce的机器学习算法库,其源于斯坦福大学的几个学者在06年的nips会议上发表的一篇文章"Map-Reduce for Machine Learning on Multicore"

 

Hive - http://mirror..com//hive/

HiveFacebook 088月刚开源的一个数据仓库框架,其系统目标与Pig有相似之处,但它有一些Pig目前还不支持的机制,比如:更丰富的类型系统、更类似SQL的查询语言、Table/Partition元数据的持久化。目前,Facebook已经提交了申请,希望Hive成为Hadoop的一个贡献项目(contrib project)。

有谁在用Hadoop

Yahoo!Hadoop目前除了被用于网页搜索中的Webmap中,还广泛地被用到Yahoo!的日志分析、广告计算、科研实验中。另外,2007年年底Yahoo!和卡耐基-梅隆大学发起的Open Academic Clusters--M45,至今已经发展为500多台的集群,并完成了多个颇具学术价值的项目。

 

Amazon的搜索门户A9.com中的商品搜索的索引生成就是基于Hadoop完成的。另外,Amazon最近发布的GrepTheWeb Web Service,内部使用了基于EC2Elastic Compute Cloud)的Hadoop集群,承担其中的并行计算工作。

 

著名SNS网站FacebookHadoop构建了整个网站的数据仓库,它目前有320多台机器进行网站的日志分析和数据挖掘。此外,在IBM 2007年年底的蓝云计算集群中也采用了Hadoop进行并行计算。

展望

必须承认,在Hadoop及其相关的开源项目中,可以看到系统架构中核心要素GFSMapReduceBigTableSawzallChubby的身影。因此,从某个角度来说,Hadoop目前还是一个模仿者、跟随者。当大家看到这篇文章时,Hadoop应该已经发布0.18了,从版本号来看,无疑Hadoop还是一只幼年的小飞象,但就是这只看似笨拙的小飞象,却承载着Doug Cutting及其伙伴坚持不懈的努力和造福开源社区的决心。因此,我们有理由相信,在“云计算”时代即将来临之际,Hadoop所营造的一个软件生态系统,必将成为一个最符合“、平等和分享”的互联网的云计算实践平台。

参考链接

1.         Hadoop项目主页:http://hadoop.apache.org/

2.         更多的Hadoop应用案例:http://wiki.apache.org/hadoop/PoweredBy

3.         YahooHadoop研发团队的Bloghttp://developer.yahoo.com/blogs/hadoop

台湾的零蛋月台

搜索一下“零蛋”搜索出来的照片,很拉风的样子,向作者致敬,不知道这简体台湾同胞看得懂不。

一二三 到臺灣 臺灣有個阿里山

有图为证。

51ditu等网站技术揭秘-利用开源框架搭建一整套的WEBGIS

[文章作者:陈臻 本文版本:v1.0 最后修改:2009.1.8 转载请注明原文链接:http://www.54chen.com/c/387]

感谢老早前李兄做的tech talk,一直有人在问及51ditu和mapbar什么的都怎么做的,老是记不住这些开源的东东都什么名字,特做下记录。

下图是一个完整的方案图:

其中所涉及的开源技术有:

 

软件名称 License 类型 编程 语言 运行环境 用途
PostGIS GPL Plpgsql Postgresql 存储数据
MapServer MapServer License C++ UNIX like/ Windows 提供地图相关服务
TileCache BSD Python All Platform 图片缓存
OpenLayers BSD Javascript IE/Firefox 客户端展现控制
GDAL/OGR MIT License C++ UNIX like/ Windows 数据格式导换

再简单解释下:

1.PostGis是PGSQL的一个扩展,在遵循OpenGIS规范下,提供空间对象、空间索引、空间作函数和空间作符等空间信息服务功能。

2.MapServer可以提供openGIS规范的各种接口。

3.MapServer根据参数中指定的路径读取mapfile文件和SLD文件。

4.使用SLD(Styled Layer Descriptors ), Mapfile控制地图显示样式。

5.根据SLDmapfile的样式参数,配合GD(Graphics Library)进行的图形制作。

6.查询只与pgsql有关

Eclipse远程调试JBoss应用设置(linux&win版本)

  • 修改JBoss启动配置
打开JBOSS_HOME/bin目录下的run.conf文件,找到:

 #JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"

将其修改为:

 JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"

(最后的y改成n)

其中:8787为调试的端口号;

WIN:

直接修改run.bat,找到这一行,删除前面的rem,修改suspend为n。

  •  启动JBoss
 ./run.sh -b192.168.1.x

其中192.168.1.x是Jboss所在机器的ip;

  • 新建调试配置
在Eclipse中,打开菜单“run”-〉“debug configurations...”;在出现的对话框中,选择“Remote Java Application”,右键单击,在弹出的菜单中选择“New”,在出现的对话框的“host”中输入Jboss服务器的ip(192.168.1.x),在“port”中输入调试的端口号(8787),选择“debug”开始调试;
  •   调试
在出现的“debug view”中,打开需要调试的Java源文件,设置相应的断点就可以了

轻点魔棒,瞬间安装上百台服务器

转自: 知道分子查看完整个人资料  http://hutuworm.blogspot.com

 

从前,我们一直在做装机民工这份很有前途的职业。自打若干年前 Red Hat 推出了Kickstart,此后我们顿觉身价倍增。不再需要刻了光盘一台一台地安装 Linux,只要搞定PXE、DHCP、TFTP,还有那满屏眼花缭乱不知所云的 Kickstart脚本,我们就可以像哈里波特一样,轻点魔棒,瞬间安装上百台服务器。这一堆花里胡哨的东西可不是一般人都能整明白的,没有大专以上学 历,通不过英语四级,根本别想玩转。总而言之,这是一份多么有前途,多么有技术含量的工作啊。

很不幸,Red Hat 最新发布了网络安装服务器套件Cobbler(补鞋匠),它已将 Linux网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学会。对于我们这些在装机领域浸淫多年,经验丰富,老骥伏枥,志在 千里的民工兄弟们来说,不啻为一个晴天霹雳(}雷{)。

Cobbler(https://fedorahosted.org/cobbler)声称可以快速建立网络安装环境(rapid setup ofnetwork installation environments),那么到底有多快呢?我在一台装有 Fedora 9的服务器上进行了测试,步骤如下:

1. 安装相关软件:
     yum -y install cobbler tftp-server dhcp httpd xinetd     # 注意 /var/www/cobbler 目录必须具有足够容纳 Linux 安装文件的空间(移动,建软链接)

2. 检查 cobbler 配置
     cobbler check   # 按提示解决相关问题,把 /etc/cobbler/settings 中的 server 和  next_server 设为本服务器的 IP 地址,manage_dhcp 设为 1,以便管理 DHCP

3. 导入 Fedora 9 安装 DVD ISO 中的文件:
     mount -o loop Fedora9/x86_64/Fedora-9-x86_64-DVD.iso /mnt/dvd/    # 将ISO文件挂载到 /mnt/dvd 目录
     cobbler import --mirror=/mnt/dvd --name=FC9-x86-64      # 从 /mnt/dvd 目录导入所有安装文件,命名为 FC9-x86-64
     cobbler distro list          # 查看导入结果,应显示 FC9-64-i386 和 FC9-64-xen-i386

4. 修改 DHCP 和 Kickstart 配置模板:
     vi /etc/cobbler/dhcp.template        # DHCP 配置模板,如果已经有一个 dhcpd.conf,可参照修改此模板
     vi /etc/cobbler/sample.ks            # Kickstart 配置模板

5. 生成并同步所有配置:
     cobbler sync

6. 启动相关服务:
     service xinetd start               # /etc/xinetd.d/tftp 中 disable = no
     service dhcpd start
     service cobblerd start

曹植七步成诗,而 Cobbler 居然只需要六步。启动另一台新服务器,通过 PXE 启动进入蓝色的 Cobbler 安装界面,选择 Fedora 9 安装项,几分钟之内就能一气呵成,自动完成系统安装。[OVER]