2008年10月26日星期日

如何将fedora code 1整合一张光盘(转)

用了两天时间研究如何将fedora code 1整合一张光盘,结果昨天竟然发现做了2天无用功。白吃那么多饭了。
问题就出在comps.xml 和hdlist上了。

恩,啥问题呢?comps.xml只是一种解释列表,并没有太大意义。改不改两可。

因为看网上文章说要改comps.xml,然后重构hdlist,我就按照网上的步骤走,怎么都过不去,看着comps.xml那么多东西就烦。

后来居然只用一个命令就解决了我2天的困扰。

具体怎么做呢?(以下未说明均在windows下操作)


1,因不同需要,安装一遍linux,然后将/root下的install.log提出来看里边的文件列表,前边的都是已安装的,也就是你需要做单盘linux安装盘需要的那些文件。后边有列出未安装的列表。


2,根据log显示将3张光盘中需要部分提取,放到一个目录下。准备进行分解iso,哈哈


3,在安装好的linux里增加一个目录

#mkdir /home/linux_cdrom
然后用将第一张光盘放进光驱,用scp软件将整张光盘拷贝到/home/linux_cdrom里。然后将/Fedora/RPMS/目录下所有包删除,将你拷贝下来提出的那些有用的rpm包拷贝进去。


4,在这个linux系统上安装anacronda-runtime这个rpm包,一般fedora1以后的都有,具体那张盘上自己找。然后执行命令
#/usr/lib/anaconda-runtime/genhdlist --productpath Fedora /home/linux_cdrom/
这步是要重建hdlist和hdlist2文件。


5,用scp软件将hdlist和hdlist2拷出来,用winiso打开fedora1的第一张盘,将/Fedora/base/目录下的hdlist和hdlist2删掉,将刚才scp过来的那个新的hdlist和hdlist2放进去。再把/Fedora/RPMS/目录下所有文件删除,将刚才提出的那些rpm包放进去,保存。


6,这样就生成了一个新的单cd linux安装盘了。

----亡灵的内心世界

2008年10月25日星期六

一个HA结构的防火墙+二层交换机结构设定(工作笔记)

为了安全问题,VLAN把WEB与SOCKET层和DB层都隔开了。访问DB的话必须要走10.100.100.0段,而WEB段全部是192.168.100.0段,防火墙本身地址是92,转发地址为91。VPN直接连进192.168.100.0,但是WEB层和SOCKET层都是双网卡,另一块网卡地址都是10.100.100.0段的,在WEB、SOCKET层的机器只为eth0设上192.168.100.0段的网关,另一个eth1不设网关。于是内网通讯没问题。但是访问DB的话,除了VPN以外,外网不易进入。

2008年10月20日星期一

关于Lvs管理包和Cluster的关系

做Lvs的时候,如果勾选了Cluster。就不用再装以下的包了。http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24-6.src.rpm

2008年10月19日星期日

Jmeter压力测试工具介绍

  Apache JMeter 是100%的Java桌面应用程序。用于对软件做压力测试(例如Web应用)。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。
  另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
  特点
  在设计阶段,JMeter能够充当HTTP PROXY(代理)来记录IE/NETSCAPE的HTTP请求,也可以记录apache等WebServer的log文件来重现HTTP流量。当这些HTTP客户端请求被记录以后,测试运行时可以方便的设置重复次数和并发度(线程数)来产生巨大的流量。JMeter还提供可视化组件以及报表工具把量服务器在不同压力下的性能展现出来。
  相比其他HTTP测试工具,JMeter最主要的特点在于扩展性强。JMeter能够自动扫描其lib/ext子目录下.jar文件中的插件,并且将其装载到内存,让用户通过不同的菜单调用。
  测试结果字段的意义
  1、Label: 定义的HTTP请求名称
  2、Samples: 表示这次测试中一共发出了多少个请求
  3、Average: 访问页面的平均响应时间
  4、Min: 访问页面的最小响应时间
  5、Max: 访问页面的最大响应时间
  6、Error%: 错误的请求的数量/请求的总数
  7、Throughput:每秒完成的请求数
  8、KB/Sec: 每秒从服务器端接收到的数据量
  历史
  Apache Software Foundation 的 Stefano Mazzocchi 是JMeter的最初开发人员。他编写它主要用于测试Apache JServ的性能(一个后来被Apache Tomcat项目替代的项目)。我们重新设计了JMeter,增强了它的GUI和添加了功能测试支持。
  远景
  我们希望看到随着开发人员利用插件架构的优势,JMeter的能力能够迅速扩展。将来开发的主要目标是使得JMeter尽可能地变成一个有用的衰退测试工具,而不损失JMeter地压力测试能力。

2008年10月18日星期六

包管理命令yum

如果您使用过debian系列操作系统,对apt-get命令一定不会陌生,同样地,Fedora系列为我们提供了与apt-get类似的包管理命令yum,它可以从一个软件库里调出用户指定的软件,然后进行安装,并且也具备卸载功能。

以下是对yum的简单说明:如果是第一次使用yum命令,请不用担心,现在将介绍yum的命令行

1、搜索应用程序

#yum search 程序名

可以搜索所有的启动仓库,告诉用户从哪里可以得到需要的软件包。



2、了解包安装信息

#yum info 程序名



3、安装应用程序

#yum install 程序名



4、列出rpm清单

#yum list extras



5、删除rpm包

#yum remove 程序名



6、系统升级

#yum update



7、 查看是否有升级

#yum check-update



8、列出最近升级的RPM包

#yum -qa--last |tac



9、本地安装

#yum localinstall RMP包



10、查看yum的帮助文件

#man yum

2008年10月14日星期二

Linux邮件sendmail+openwebmail配置方案

【IT168 服务器学院】纲要:

  1. 关于Linux邮件服务

  2.启动安装sendmail

  3.openwebmail的安装

  4.企业实战方案

  5。通过Web收发邮件效果演示

  一,关于Linux邮件服务

  sendmail作为一个优秀的MTA,一直是UNXI系统中缺省的邮件服务器。因为sendmail只是一个邮件代理传输软件,并不附带常见的WEB接收发送的功能,所以我们可以利用第三方软件实现,如下安装openwebmail,也可以,利用outlook等软件来收发邮件。

  二,启动安装sendmail

  # rpm –ivv sendmail* (在第一张光盘,和第三张光盘上。)

  #/etc/init.d/sendmail start 启动服务

  1. 添加邮件虚拟主机

  #cd /etc/mail

  # vi local-host-names ,在里面添加邮件虚拟主机

  linuxhero.com

  2.打开SMTP的外部连接

  #vi /etc/mail/sendmail.cf

  将O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA,改为如下:

  O DaemonPortOptions=Port=smtp,Addr=192.168.0.230, Name=MTA

  这样是为了在192.168.0.230端口上监听请求

  3.打开SMTP发信认证

  #vi /etc/mail/sendmail.mc

  dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

  将其改为如下:

  TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

  重启sendmail

  service sendmail restart

  4.打开系统POP3功能

  #vi /etc/xinetd.d/ipop3

  将disable = yes, 将yes改为no

  #service xinetd restart 重新启动xinetd进程

  添加虚拟用户

  #useradd –s /sbin/nologin nestseek

  #passwd netseek

  #vi /etc/mail/virtusertable

  webmaster@linuxhero.com linuxhero_com

  cnseek@linuxhero.com netseek

  5.运行makemap命令为virtusertable重新建立数据库映谢。

  #cd /etc/mail

  #makemap hash virtusertable.db < virtusertable

  三.OpenWebmail的安装:

  安装支持软件

  # rpm -Uvh perl-CGI-2.81-88.i386.rpm

  # rpm -ivh perl-Text-Iconv-1.2-RH80.i386.rpm

  # rpm -ivh perl-suidperl-5.8.0-88.i386.rpm

  安装OpenWebmail:

  #rpm -ivh openwebmail-2.51-1.i386.rpm

  warning: openwebmail-2.51-1.i386.rpm: V3 DSA signature: NOKEY, key ID cfb164d8

  Preparing... ########################################### [100%]

  1:openwebmail ########################################### [100%]

  安装完后,会在/var/www/cgi-bin目录下创建一个openwebmail(该目录保存系统运行是需要的数程序),在/var/www/data目录下也创建了一个openWebmail的目录,该目录保存了一些页面。

  OpenWemail的设置

  # cd /var/www/cgi-bin/openwebmail/etc

  #vi defaults/dbm.conf

  将如下:

  dbm_ext .db

  dbmopen_ext none

  dbmopen_haslock no

  改成

  dbm_ext .db

  dbmopen_ext .db

  dbmopen_haslock yes

  保存退出。

  #cd .. 退到上一级目录

  #./openwebmail-tool.pl -–init

  出现如下信息:

  Base64.pm /usr/lib/perl5/5.8.0/i386-linux-thread-multi/MIME/Base64.pm

  Your MIME::Base64 module is too old (2.12),

  please update to 3.00 or later.

  ./openwebmail-tool.pl –init

  说我的Base64 module 版本太低,要下载更新3。0或以上的版本:

  我下载了一个新包:CGI.pm-3.05.tar.gz,进行安装.

  # tar -zxvf MIME-Base64-3.05.tar.gz

  # cd MIME-Base64-3.05

  #cat REDME 查看安装说明,按照里面的说明做

  [root@linuxhero CGI.pm-3.05]# perl Makefile.PL

  Checking if your kit is complete...

  Looks good

  Writing Makefile for CGI

  # make

  # make test 测试

  # make install

  安装完后,现在执行上面的操作:

  #cd /var/www/cgi-bin/openwebmail

  #./openwebmail-tool.pl –-init

  安装完成

  四,企业实战方案:

  要求:1,启用虚拟域名mail.linuxhero.com(DNS设置见“linux全能web服务器”)

  2.将linuxhero_com用户映射成为webmaster.

  3.通过web收发邮件测试

  配置Openwebmail的虚拟主机(mail.linuxhero.com)

  #vi /usr/local/httpd/conf/httpd.conf ,在里面添加如下:

  #mail.linuxhero.com

  

  ServerAdmin webmaster@linuxhero.com

  DocumentRoot /var/www/cgi-bin/openwebmail

  ServerName mail.linuxhero.com

  DirectoryIndex openwebmail.pl

  ErrorLog /home/linuxhero_com/logs/error_log

  CustomLog /home/linuxhero_com/logs/access_log common

  alias /data /var/www/data

  alias /cgi-bin /var/www/cgi-bin

  

  Options ExecCGI

  


  

  Options ExecCGI

  


  


  保存退出。

  五,通过web收发邮件效果演(略)

2008年10月13日星期一

关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

摘要:在服务器管理中,经常遇到DDOS攻击WWW服务器。对于Apache(httpd)服务器来说,防御DDOS是通过mod_evasive来实现的。本文将介绍mod_evasive模块的安装、配置;


目录



1、 mod_evasive 介绍;
2、 mod_evasive 的安装和配置;

2.1 mod_evasive 的下载地址;
2.2 mod_evasive 的安装;
2.3 mod_evasive 的配置;
2.4 对mod_evasive测试验证 ;

3、mod_evasive 的高级配置;
4、关于本文;
5、参考文档;
6、相关文档;





+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++



1、 mod_evasive 介绍;


mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御DDOS攻击,但在一定条件下,还是起到缓服Apache(httpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用,可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙,所以是否这种组合效果有更好的效果,我没办法验证。

mod_evasive 的官方地址: http://www.zdziarski.com/projects/mod_evasive


2、 mod_evasive 的安装和配置;



2.1 mod_evasive 的下载地址;


mod_evasive_1.10.1.tar.gz


2.2 mod_evasive 的安装;


安装 mod_evasive 之前,你要用安装Apache(httpd)服务器软件包,还要安装httpd-devel或 apache-dev。在Slackware 12.0中,安装httpd软件即可;

对于Apache 1.x 请用下面的编译方法;


#/usr/sbin/apxs -iac mod_evasive.c

对于Apache 2.x 可以用下面的办法;


#tar zxvf mod_evasive_1.10.1.tar.gz
#cd mod_evasive
#/usr/sbin/apxs -i -a -c mod_evasive20.c

注:apxs 用于编译模块工具;如果是用系统自带的软件包,一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的,你应该自己来指定路径;

我们然后修改/etc/ld.so.conf 文件,把编译出来的动态模块的所在位置指定在 ld.so.conf中;比如我用的是Aapche 2.x ,编译完成后,模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中;那我们就要把 这个目录写入到ld.so.conf中。


#echo "/usr/lib/httpd/modules" >> /etc/ld.so.conf
#ldconfig

注: 具体要与你的系统环境为准,不要照搬照抄,如果你对Linux不太熟的话;


2.3 mod_evasive 的配置;


在编译安装完成后,会自动插入一行到Apache 配置文件中,对于Apache 2.x 版本中,应该在其配置文件中有类似下面的一行;


LoadModule evasive20_module lib/httpd/modules/mod_evasive20.so

对于Apache 1.x来说,也应该差不多,大体只是路径不同罢了;

然后我们再修改 Apache 的配置文件,配置文件名为httpd.conf;

在Apache v1.x 版本中,要加入;



DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10


在Apache v2.x加入;



DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10


如果您不知道把这些插入到哪,用下面的办法做也是可以的;

在/etc目录中创建一个文件,比如mod_evasive.conf;


#touch /etc/mod_evasive.conf

然后把根据自己的Apache版本来加入相应的内容;

接着我们再修改 httpd.conf ,在最后一行加入


Include /etc/mod_evasive.conf

修改完成后,我们要重启Apache服务器;

比如在Slackware 12.0中,Apache 2.x的重启,我们要用到


#/etc/rc.d/rc.httpd restart

在Redhat、Fededora、Debian、Ubuntu、CentOS中的Apache,可以用;


#/etc/init.d/httpd restart

#/etc/init.d/apache restart

大体上差不多是这样的……


2.4 对mod_evasive测试验证 ;


防DDOS的模块做好后,我们可以要验证,可以用Apache 自带的ab工具,系统默认安装在/usr/sbin目录中;比如;


#/usr/sbin/ab -n 1000 -c 50 http://www.google.com:80/

注:上面的例子的意思是,如果您的服务器是google的WEB服务器,我们要发送数据请求包,总共1000个,每次并发50个;

另外一个测试工具就是mod_evasive的解压包的目录中,有个test.pl ,你可以修改IP地址,然后用


#perl test.pl

是不是有效果,请根据 ab工具或 测试脚本出来的结果来查看;

因为我们编译mod_evasive时,用的是默认配置,所以日志被存放在/tmp目录中。如果有DDOS攻击,会在/tmp产生日志。日志的文件是以 dos-开头的;


3、mod_evasive 的高级配置;


如果想更改一些适合自己的参数,有些必要的参数,并不是通过配置文件修改就一下起作用的,我们要修改源码包中的 mod_evasive.c(Apache 1.x用之) 或 mod_evasive20.c (Apache 2.x用之);


#define DEFAULT_HASH_TBL_SIZE 3097ul // Default hash table size
#define DEFAULT_PAGE_COUNT 2 // Default maximum page hit count per interval
#define DEFAULT_SITE_COUNT 50 // Default maximum site hit count per interval
#define DEFAULT_PAGE_INTERVAL 1 // Default 1 Second page interval
#define DEFAULT_SITE_INTERVAL 1 // Default 1 Second site interval
#define DEFAULT_BLOCKING_PERIOD 10 // Default for Detected IPs; blocked for 10 seconds
#define DEFAULT_LOG_DIR "/tmp" // Default temp directory

比如我们改改其中的数字,根据英文很容易理解。比如修改日志存放目录,就把/tmp改成别的目录。如果您不知道放在哪好,还是用默认的吧;

如果您在这里更改了参数,不要忘记修改Apache 配置文件中关于mod_evasive 的参数;

如果您想加入一些其它的参数,请查阅源码包中的README,里面有详细说明,大多来说没太大的必要……

这个文件相当重要,如果您想更改某些设置,就要修改这个文件…… 


4、关于本文;


mod_evasive 还是有点用的,安装也不费力气。如果你需要的时候,会想到这个模块的 …… mod_evasive 是否有更高级的用法,也不是在这篇文章里能说的清楚的。如果不懂怎么办?请查看源码包中的README。

本文权当做软件说明 ……

北南 记之

From LinuxSir.Org


5、参考文档;


参考 mod_evasive 源码包中的README ……


6、相关文档;


《PHP加速器 eaccelerator 介绍》

2008年10月12日星期日

使用飞信为系统监控报警

一、飞信机器人软件
官网地址:http://www.it-adv.net/
需要Glibc2.4以上的版本;RHEL5默认安装的Glibc2.5,所不需要额外升级;


二、安装过程
下载包地址LINUX X86/32:支持库 最新程序fetion20080901004-linux.tar.gz
分别下载支持库和最新程序
1.安装支持库
[root@RHEL5 fetion]# tar -xvf lib_lin_32.tar.gz.tar
library_linux32/
library_linux32/libcrypto.so.0.9.8
library_linux32/libACE.so.5.4.7
library_linux32/libACE_SSL.so.5.4.7
library_linux32/libssl.so.0.9.8


[root@RHEL5 fetion]# cd library_linux32/
[root@RHEL5 library_linux32]# cp *so* /usr/lib


2.安装fetion
[root@RHEL5 fetion]# tar -xvf fetion20080901004-linux.tar.gz.tar
[root@RHEL5 fetion]# mv install/ /opt/fetion
3. 测试fetion是否可以正常使用
[root@RHEL5 opt]# cd /opt/fetion/
[root@RHEL5 fetion]# ldd fetion
linux-gate.so.1 => (0x00969000)
libACE.so.5.4.7 => /usr/lib/libACE.so.5.4.7 (0x00e35000)
libACE_SSL.so.5.4.7 => /usr/lib/libACE_SSL.so.5.4.7 (0x00110000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00393000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00791000)
libm.so.6 => /lib/libm.so.6 (0x00d55000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00940000)
libc.so.6 => /lib/libc.so.6 (0x00c0a000)
libdl.so.2 => /lib/libdl.so.2 (0x00d4f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d7e000)
librt.so.1 => /lib/librt.so.1 (0x00d97000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00510000)
libz.so.1 => /usr/lib/libz.so.1 (0x00da2000)
/lib/ld-linux.so.2 (0x00bec000)
所有的库文件都可以正常找到


[root@RHEL5 fetion]# ./fetion -h 查看帮助


三、实际测试
1.登录飞信默认是中文utf8的,如果linux系统不支持utf8会出现乱码:我使用english的方式来登录啦。
测试帐号:13713718888
密码:123456 (如果密码中含有特殊字符,请使用单引号)
./fetion -u 13713718888 -p 123456 -EN
登录后输入?获得帮助
****************************************************************
指令 指令说明
list 好友列表: list
sms 发送短信: sms 飞信号/手机号/编号 短信内容(换行请用\n代替)
chat 在线消息: chat 飞信号/手机号/编号 短信内容(换行请用\n代替)
status 在线状态: status online/busy/away/hidden [个性化信息]
add 添加好友: add 飞信号/手机号 申请信息 本地呢称
del 删除好友: del 飞信号/手机号/编号
invite 邀请好友: invite 手机号 您的姓名(邀请好友开通飞信)
autoaccept 自动接受: autoaccept on/off/status 自动接受加为好友申请
myinfo 修改资料: myinfo nickname/impresa 内容(呢称/心情)
help 帮助菜单: help/?
exit 退出系统: quit/exit
****************************************************************


sms 137******** "this is test message" # 这个就是我们需要的发送短信的指令啦!




2.脚本测试:
可以使用fetion的-b参数来实现p处理;
举例如下:
# vi p.sh
sms 137xxxxxxxx “msyqlserver is down”


保存后执行:
./fetion -u 137xxxxxxxx -p 123456 -b p.sh
就是一次发出报警信息。






3.配合监控脚本
#!/bin/bash
disk=$(df /dev/sda1 |grep /dev|awk '{print $5}'|tr -d "%")
if [ "$disk" -gt "80" ]; then
/opt/fetion/fetion -u 138xxxxxxxx -p 123456 -EN -b /opt/mon.sh >>/opt/fetion.log 2>&1
else :
fi




4.脚本实例
监控网站是否可以正常访问,有问题时报警,恢复后提示 (注:如果复制粘贴,运行出错,注意查一下是否是某些字符复制时格式改变了)


#!/bin/sh


#############################Var################################


errpath=/tmp/alert-err
okpath=/tmp/alert-ok
fetionum=13811012345
fetionpass=12345
admin=13811012345


############################function############################
scan ()
{
rm -rf /tmp/tmp.wget
(time -p wget --delete-after http://127.0.0.1) >/tmp/tmp.wget 2>&1


#setting realtime of run
realtime=$(cat /tmp/tmp.wget |grep "real"|awk '{ print $2}'|awk -F . '{print $1}')
#echo "Wget time is $realtime "


okstate=$(cat /tmp/tmp.wget |grep "OK"|awk '{print $5}')
#echo $okstate


}


alerterr ()
{
/opt/fetion/fetion -u $fetionum -p $fetionpass -EN -b $errpath
}




alertok ()
{
/opt/fetion/fetion -u $fetionum -p $fetionpass -EN -b $okpath
}
##############################Main###############################


while [ 1 ]
do
sleep 90
scan


if [ "$okstate" != "OK" ] ; then
if [ -f /tmp/err ];then
echo "`date +%Y/%m/%d-%T`wget not ok but has been alert"
#continue
else
echo "sms $admin `date +%Y/%m/%d-%T` wget is not OK " >$errpath
echo "exit" >>$errpath
alerterr
echo "`date +%Y/%m/%d-%T` -----------------------------------> wget is not OK "
touch /tmp/err
fi


else
if [ -f /tmp/err ];then
echo "sms $admin "`date +%Y/%m/%d-%T` Recover!! wget time is $realtime"" >$okpath
echo "exit" >>$okpath
alertok
rm /tmp/err
echo "`date +%Y/%m/%d-%T` ------------------------------------> Recover !!! wget time is $realtime"
#continue
else
echo "`date +%Y/%m/%d-%T` wget time is $realtime running ok"
fi




fi
done

使用htb进行流控

linux流控配置比较麻烦,一般都使用htb进行流控。



HTB 意味着是一个更好理解更容易掌握的可以快速替换LINUX CBQ 队列规定的队列, CBQHTB都可以帮助你限制你的链路上的出口带宽;他们允许你把一条物理链路模拟成几条更慢的链路或者是把发出的不同类型的流量模拟成不同的连接,在他们的实际应用中你必须指定怎么分配物理链路给各种不同的带宽应用并且如何判断每种不同的应用的数据包是怎么样被发送的。





htb本身的配置并不难,也就是配置htb
filter
是最复杂的,难点在于与iptables的结合。

通过webhtb可以进行图形化的配置。











webhtb最好的配置方式在于client,比较直观,
interface->class->client
很好的层次关系。



2008年10月11日星期六

mysql 主从复制读写分离实现

mysql 主从复制读写分离实现
作者:田逸


mysql主从复制
(一)安装mysql(主从服务器皆相同) 先创建用户 useradd mysql -s /sbin/nologin


tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client
注:配置过程指定数据文件的位置及另加的字符集.
make
make install
cp support-files/my-large.cnf /etc/my.cnf
cd /usr/local/mysql
chgrp -R mysql .
生成基本的数据库和表: /usr/local/mysql/bin/mysql_install_db --user=mysql
成功执行后察看数据目录/opt/data,看是否有文件或目录生成.
chown -R mysql:mysql /opt/data
记得给每个数据库设置root密码.
(二)修改配置文件
不同的地方就是server-id,主服务器配置文件不用修改,从服务器的配置文件server-id=10.其他的内容基本相同.
(三)启动服务
/usr/local/mysql/bin/mysqld_safe --user=mysql&
这个过程主辅服务器都相同.
(四)授权(在主服务器上进行)
GRANT REPLICATION SLAVE ON *.* to [email=]'rep1'@'192.168.8.100[/email] identified by 'mylqs';
(五)查询主数据库状态(主服务器上进行)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 235 | | |
+------------------+----------+--------------+------------------+
记下file及position的值,后面做从服务器操作的时候需要用.
(六)配置从服务器
mysql> change master to master_host='192.168.8.101', master_user='rep1', master_password='mysql', master_log_file='mysql-bin.000003', master_log_pos=235;
正确执行后再执行:
mysql> start slave;
就启用了复制功能.这里我们运行一下 mysql> show slave status\G 来检查一下,一个正常的输出结果应该如下面的形式:
mysql> show slave status\G
*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.8.101

Master_User: rep1

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 235

Relay_Log_File: -relay-bin.000009

Relay_Log_Pos: 235

Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

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: 235

Relay_Log_Space: 235

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.00 sec)

请注意:slave_IO进程及slave_SQL进程都必须正常运行,在状态输出重表现为: Slave_IO_Running: Yes 及Slave_SQL_Running: Yes 否则都是不正确的状态(如一个值Yes,另外一个是NO则不行).
(七)主数据库有数据的情况:
1、数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK;
2、察看主数据库的状态 mysql> show master status; 照第(五)步记录输出值。
3、把主服务器数据文件复制到从服务器,最好先用tar处理一下。
4、取消主数据库锁定 mysql> UNLOCK TABLES;
5、从服务器的操作。跟前面的步骤一样(略过)



mysql代理安装配置

一、安装mysql-proxy.需要按下列顺序安装其所依赖的包:
(一)安装LUA
tar zxvf lua-5.1.tar.gz
cd lua-5.1
用vi修改Makefile,使"INSTALL_TOP=/usr/local/lua",这样做的目的是为了是lua的所有文件都安装在目录/usr/local/lua/
make posix
make install

(二)安装 libevent
tar zxvf libevent-1.1a.tar.gz
cd libevent-1.1a
./configure --prefix=/usr/local/libevent
make
make install


(三)安装check
tar zxvf check-0.8.4.tar.gz
cd check-0.8.4
./configure
make
make install


(四)设置安装mysql-proxy所需的环境变量.把下面的内容追加到/etc/profile中
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
然后执行 source /etc/profile (安装完mysql-proxy不再需要这些变量,可以删除之)

(五)安装mysql(只安装mysql客户端即可)
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --without-server
make
make install

(六)安装mysql-proxy

tar zxvf mysql-proxy-0.5.0.tar.gz
cd mysql-proxy-0.5.0
./configure –prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua
Make
Make install

二、主要的命令行选项
--help-all显示所有的帮助选项
--admin-address=host:port 管理主机及端口,默认是4041
--proxy-address=host:port 代理服务器的监听地址及端口,默认4040
--proxy-read-only-address=host:port 只读连接时,代理服务器的监听地址及端口。默认4042
--proxy-backend-addresses=host:port连接真实服务器的地址及监听端口,默认是3306,这是mysql代理最重要的选项,多个主机之间用空格隔开。使用rr算法。
--proxy-lua-script=file
指定lua脚本的名称

三、
使用方法
2个mysql服务器的情形
mysql-proxy \




--proxy-backend-addresses=mysql_ip1:3306 \



--proxy-backend-addresses=mysql_ip2:3306

3个服务器的情形:一个主服务器,负责写入;2个从服务器,负责查询。
mysql-proxy --proxy-backend-addresses= :3306\

--proxy-read-only-address=:3306 \

--proxy-read-only-address=:3306


四、mysql-proxy启动
编写脚本/usr/local/bin/mysql-proxy.sh其内容如下:
#!/bin/bash
LUA_PATH="/usr/local/mysql-proxy/share/mysql-proxy/?.lua" mysql-proxy --proxy-read-only-backend-addresses=192.168.1.38:3306 --proxy-
backend-addresses=192.168.1.33:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log &
chmod 755 /usr/local/bin/mysql-proxy.sh; 执行命令/usr/local/bin/mysql-proxy.sh启动服务


配置验证
1、主从复制测试:在主数据库服务器上创建库和表,然后再插入记录,再登陆到从服务器,看是否也建立相一致的库和表以及记录。
mysql> create database first_db;
Query OK, 1 row affected (0.01 sec)
在主数据库服务器创建库first_db

mysql> create table first_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
在主数据库服务器创建表first_db

mysql> insert into first_tb values (001,'myself');
Query OK, 1 row affected (0.00 sec)
在主数据服务器的表first_db中插入记录


现在转到从数据库服务器,看是否同步了上面主数据库的数据
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| first_db
|
| mysql
|
| test
|
+--------------------+
4 rows in set (0.01 sec)
数据库自动生成了

mysql> use first_db;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_first_db |
+--------------------+
| first_tb |
+--------------------+
1 row in set (0.00 sec)
表也自动生成了

mysql> select * from first_tb;
+------+--------+
| id | name |
+------+--------+
| 1 | myself |
+------+--------+
1 row in set (0.00 sec)
记录也按照我们的意愿存在了


2、读写分离:用mysql客户端程序如mysql登陆到mysql代理,然后执行读写操作,以测试读写分离的正确性。

本文出自:http://sery.blog.51cto.com/10037/88526

2008年10月9日星期四

linux网络管理员指南读后对iptables的理解


iptables将通信数据分为3个处理点,分别是filter,nat,mangle

filter代表过滤操作.
nat代表转址
mangle代表拆分,其实也是转址的一种.

filter是过滤入站,出站包的检查站(可以叫检查站)
nat是转址之用,当你只有一个IP地址,而有数个电脑时.就需要用到NAT.
nat分为SNAT,DNAT.下面分别解释一下SNATDNAT
SNAT意思为源地址转换,如果只有一个合法地址,其它主机得用保留地址.保留地址是无法与外部通信的.保留地址为10.0.0.0/8  172.16-31.0.0/16  192.168.1.0/24  
保留地址的主机要与外部通信,必须要有一个合法的网络IP地址.为什么不行,原因很简单,因特网没有到这些地址的路由.
SNAT流程:
保留地址的主机---->执行源网络地址转换的主机---->将源地址改为合法地址,目的地址不变---->网关主机用合法地址去请求源码要请求的数据---->接着将数据返回给源地址.
实例:iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

将源络192.168.100/24访问internet转址成218.84.9.X
-p
参数为协议,只有ip标头为tcp的才执行转址,如果是udp,icmp就不干活了.可以将tcp改为ALL

DNAT意思是目的地址转换,这是地址转换的另一种,只不过用处不同.与保留地址也脱不了干系.这种转址也是为保留地址开发的
既然保留地址无法与外界通信,哪么外界主机要想与保留地址的主机通信,哪也得执行转址.
源地址:internet
目的地址:本地  端口:80  内部主机要提供http服务.internet主机的请求并不能进入内部主机.这时可在网关主机上执行DNAT.
实例:
iptables -t nat -A PREROUTING -p tcp -d 218.84.9.X --dport 80 -j DNAT
--to-destination
192.168.1.20

将外部请求218.84.9.X应答的HTTP服务转交给内部主机192.168.1.20
. -p
[tcp|udp|icmp|ALL]

nat正是iptables的拿手好戏,只需要几个命令,就可以实现一台路由器的功能.简单吧.

检查站的五个检查兵(应该可以这么理解的,他们与filter.net.mangle有着某着从属关系)
INPUT
OUTPUT FORWARD PREROUTING POSROUTING

input 
 internet
连接本地,意为输入.本地进程监听远程的连接
output  本地连接internet,意为输出.是本地进程所产生的包。
forward
这个命令应用在机器存在二块以上网卡的情形中.意思是当数据进入一块网卡,又离开,或者进入了别一块网卡.
prerouting
进入系统的有效包.说明在本地主机已经找到目的地址了.一般应用在SNAT/DNAT转址上.
posrouting
数据包已经进入,但马上要离开.该命令应用在ip伪装及snat.



防火墙规则匹配条件
iptables内置了osi协议模形.所以支持tcp/ip标头匹配条件.每个数据包里都有目的地址,源地址,源端口,目的端口.使用的协议等,讲到这,相信你也明白为什么防火必须在网络层了吧.防火墙对应用层的程序是一无所知的,应用层的程序如果发生网络应用,则要经过网络层,iptables就是内置在网络层的拦路虎,对过往数据按照规则逐一进行检查.如果匹配,放过.不匹配,拒绝.或者按默认设定的政策进行处理.

-s
(
代表源地址
 -s
 www.g.cn |
-s 191.1.2.4   
支持域名IP,0/0表示所有地址
-d
(
代表目的地址)
-d
 www.g.cn |
-d 218.84.9.251
支持域名IP,0/0表示所有地址
--dport(代表目的端口)
--dport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085 
--sport(代表源端口)
--sport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085

-p
(protocol
协议)
-p
[TCP | UDP | ICMP | ALL] ALL
选项表示匹配所有协议

-j
(operating
操作,对数据判断之后的后续操作)
-j
[ACCEPT | DROP | LOG | MARK | REJECT | TTL | MASQUERADE | SNAT |
DNAT]

-j的操作选项还有很多,这里并没有一一列出.挑选几个重要的说
ACCEPT
允许,让数据包继续进入下一检查点.
DROP 
 
拒绝,数据包在此检查点消失
LOG 
  LOG
当然是日志了,log还有许多选项的,比喻info
REJECT
抵抗,抵抗与拒绝不同,抵抗还表示与敌方有通话.DROP则表示不理睬你了.REJECT会给对方一个拒绝的回应
TTL 
 
数据包的生期周期,随你的爱好设置,微软的是64,google245,freebsd.org53,kernel.org51  设置过高浪费占用带宽.最高不要超过255
MASQUERADE
也是地址转换的一种,只不过是应用在动态地址上.它与网络接口存在着某种关系
SNATDNAT已经讲过了

-o
output  eth0
内网接口
-i  input 
   eth1
去往internet的接口


来几条命令吧,让你对iptables有点感觉
iptables
-P INPUT DROP

iptables
-t filter -a INPUT -s 0/0 -p tcp --dport 22 -j DROP

iptables
-t filter -a OUTPUT -d 0/0 --dport 80 -p tcp -j ACCEPT

iptables
-t filter -a FORWARD -d
 www.microsoft.com -p
ALL -j
DROP

第一条命令是设置INPUT检查点的缺省规则为拒绝
第二条命令是过滤internet来本地的22端口,协议为tcp,操作为拒绝
第三条命令是:本地请求internet80数据为允许
第四条命令是:去往www.microsoft.com的数据包全部拒绝


语法及用法FAQ:
问我写好了规则,我想保存规则怎么办
:/etc/init.d/iptables
save     //[stop | start]


问我想清空所有规则
iptables
-F       //
清空所有规则
iptables
-t nat -F   //
清空nat表规则

开机启动iptables
/etc/rc.d/rc.local 
 
添加/etc/init.d/iptables
start
或者chkconfig 

寻求帮助
iptables
-p tcp --help     //
单项帮助
iptables
--help          
   //
整项帮助
iptables
-s --help         
//
举一反三

实现路由器功能
将此行echo
"1" >
/proc/sys/net/ipv4/ip_forward
加入开机启动项或者去/etc/sysctl.conf更改
因定IP加此行,原理上面有
iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

动态ip加此行,原理上面有  iptables
-t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE
看到这行有个PPP0没有,留你个问题,你想去吧







继续编写中........ 
   
小弟并没有电脑,只有凭以前从书上看到的及偶尔能摸一次linux的机会去回忆这些命令,所以并不能保证命令的正确,这些命令并没有在实例中证实是否可行,如果哪位兄弟的机器不是生产用机。希望能提供个ssh环境,非常感谢
QQ:3645636
近期在研究squid
. Vs/dr









2008年10月8日星期三

自己定制CentOS5安装光盘

自己定制CentOS5安装光盘

参透http://www.thismail.org/bbs/viewthread.php?tid=2686&extra=page%3D1
最近在弄CentOS 5 的包裝,由於這個版本出來沒多久,
請咕狗大神出來找相關文件都沒幾篇,

http://lingxiang.tang.googlepages.com/customizecentos5

首先

準備一張 Centos5的DVD光碟,可到
http://ftp.isu.edu.tw/pub/Linux/CentOS/5.0/isos/i386/
下載ISo檔

第二步

準備一台電腦安裝Cntos5,安裝時把你要的套件都選一選。

第三步

安裝包裝Centos5時所需要的套件 anaconda
anaconda
anaconda-runtime
如果不知道要怎麼裝的話可以直接使用
yum install anaconda
讓系統幫你裝到好~

第四步

裝好後,我的習慣是在另一台桌機上使用pietty用ssh連線登入到剛裝好的主機working~

把CentOS光碟放到主機上,並mount起來,
並 mkdir /CentOS5 <=這個用來包裝centos的目錄
把光碟片的資料 cp 到剛才建立的 /CentOS5 目錄中

第五步

挑選需要的PRM檔案,在root家目錄中有一個install.log檔
這個檔案記錄著,我們在安裝過程中所選擇的套件,
所以我們要做的就是根據這個檔案,來替我們的Cntos5 DVD減肥
(只留下安裝時選所的套件,其餘都刪除)

之前我在做centos3.8 與FC3時都是使用現成的程式(
getGroupPkgs.py & removePkgs.py)來做,但
目前好像在centos5上好像不能使用(這點不確定)

所以這個步驟自己手動來弄的話,是比較麻煩點

以我的做法是
把install.log 複製一份到自己的電腦裡面來(MS windows主機)
使用UltraEdit來編輯檔案,裡面的檔案大概會跟下面的差不多

正在安裝 libgcc - 4.1.1-52.el5.i386
正在安裝 filesystem - 2.4.0-1.el5.centos.i386
正在安裝 basesystem - 8.0-5.1.1.el5.centos.noarch
...以下省略...

把上面這個用"搜尋"、"取代",的技巧

變成下面這樣

#!/bin/bash
cp -a /mnt/CentOS/libgcc-4.1.1-52.el5.i386.rpm /myRPM
...以下省略...

存成copyrpm.sh 丟回到Centos5主機裡,更改權限chmod +x copyrpm.sh
並執行。
本人这里用批处理循环在windows环境下把install.log每行文件复制到目标文件.
ps:請先確認有無該目錄
cp -a /mnt/CentOS/libgcc-4.1.1-52.el5.i386.rpm /myRPM
像這行,我是把Centos5光碟mount 到/mnt
並將RPM檔cp到/myRPM 這個目錄下,沒有的話請先建一個

第六步

cd /CentOS5/CentOS
把這個目錄清空,把/myRPM目錄下的rpm全都cp過來
cp -a /myRPM/* /CentOS5/CentOS

第七步

回到 /CentOS5 目錄下,執行createrepo這隻程式
createrepo -g repodata/comp.xml .

開始進行認套件的動作,通常如果出現以下的訊息

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Could not remove old metadata dir: .olddata
Error was [Errno 39] Directory not empty: '/centos/.olddata'
Please clean up this directory manually.

請先刪掉.olddata 這個隱藏目錄。
然後再執行一次
createrepo -g repodata/comp.xml .

第八步

如果上面的步驟ok的話,把repodata 與CentOS 這兩個目錄
連同/root/底下的anaconda-ks.cfg 給tar起來~下載到自己的MS窗主機裡面,
用winrar把剛tar的檔案解壓縮。
將anaconda-ks.cfg 改名 ks.cfg

開UltraISO編輯器,打開Centos5的ISO檔,
把剛解開的repodata 與Centos 兩個資料夾丟進去替換掉
把ks.cfg放在光碟iso檔的根目錄上。

打開isolinux資料夾裡isolinux.cfg
改第一行default linux
改成 =>default linux ks=cdrom:/ks.cfg

改好後就可以直接燒錄了。此步驟也可以直接在CentOS5主機上直接操作,
直接壓製ISO檔與燒錄。

第九步

把燒好的光碟片拿去安裝測試,成功的話就是一片自動安裝光碟了。

以上的過程應該就只有第五步篩選套件比較麻煩點,這篇就先寫到這邊。

附錄:我的ks.cfg檔內容

install
cdrom
lang zh_TW.UTF-8
langsupport --default en_US.UTF-8 en_US.UTF-8
keyboard us
mouse genericwheelps/2 --device psaux
rootpw --iscrypted $1$Iph2iG2r$nbJzPHvxf5PnBMyBFmMjB/
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone Asia/Taipei
bootloader --location=mbr
clearpart --all --initlabel
part /boot --fstype ext3 --size=100
part swap --size=1024
part / --fstype ext3 --size=100 --grow


%packages
@base
@chinese-support
@core
@dialup
@editors
@text-internet

-redhat-config-printer
-redhat-config-printer-gui

OK.这只是向光盘定制迈向一第一步.

2008年10月6日星期一

CentOS:美化中文字体

CentOS:美化中文字体

最简洁的方法是下载文泉驿(http://wenq.org/)的中文字体。

CentOS上的字体安装可参见 http://wenq.org/index.cgi?Fedora8_WQY

相应的字体RPM 虽然是针对Fedora定制的,但CentOS亦适用。如果找不到RPM,可以去 rpmfind.net 搜寻。

可以使用文泉驿正黑体
rpm -Uvh wqy-zenhei-fonts-0.6.26-0.fc10.noarch.rpm

也可以使用 文泉驿点阵宋体
rpm -Uvh wqy-bitmap-fonts-0.9.9-2.fc8.noarch.rpm

安装完字体后即可定制桌面字体,Firefox中默认的中文显示也会使用新的字体。


http://ftp.linux.ncsu.edu/pub/fedora/linux/development/x86_64/os/Packages/wqy-zenhei-fonts-0.6.26-0.fc10.noarch.rpm

2008年10月4日星期六

Linux内核参数proc

1) Linux Proc文件系统,通过对Proc文件系统进行调整,达到性能优化的目的。

2) Linux性能诊断工具,介绍如何使用Linux自带的诊断工具进行性能诊断。
二、/proc/sys/kernel/优化
1) /proc/sys/kernel/ctrl-alt-del
该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应。这两个值分别是:
零(0)值,表示捕获ctrl+alt+delete,并将其送至 init 程序;这将允许系统可以安全地关闭和重启,就好象输入shutdown命令一样。
壹(1)值,表示不捕获ctrl+alt+delete,将执行非正常的关闭,就好象直接关闭电源一样。

缺省设置:0
建议设置:1,防止意外按下ctrl+alt+delete导致系统非正常重启。
2) proc/sys/kernel/msgmax
该文件指定了从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。

缺省设置:8192
3) /proc/sys/kernel/msgmnb
该文件指定一个消息队列的最大长度(bytes)。

缺省设置:16384
4) /proc/sys/kernel/msgmni
该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列。

缺省设置:16
5) /proc/sys/kernel/panic
该文件表示如果发生“内核严重错误(kernel panic)”,则内核在重新引导之前等待的时间(以秒为单位)。
零(0)秒,表示在发生内核严重错误时将禁止自动重新引导。

缺省设置:0
6) proc/sys/kernel/shmall
该文件表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)。

缺省设置:2097152
7) /proc/sys/kernel/shmmax
该文件表示内核所允许的最大共享内存段的大小(bytes)。

缺省设置:33554432
建议设置:物理内存 * 50%

实际可用最大共享内存段大小=shmmax * 98%,其中大约2%用于共享内存结构。
可以通过设置shmmax,然后执行ipcs -l来验证。
8) /proc/sys/kernel/shmmni
该文件表示用于整个系统的共享内存段的最大数目(个)。

缺省设置:4096
9) /proc/sys/kernel/threads-max
该文件表示内核所能使用的线程的最大数目。

缺省设置:2048
10) /proc/sys/kernel/sem
该文件用于控制内核信号量,信号量是System VIPC用于进程间通讯的方法。

建议设置:250 32000 100 128
第一列,表示每个信号集中的最大信号量数目。
第二列,表示系统范围内的最大信号量总数目。
第三列,表示每个信号发生时的最大系统操作数目。
第四列,表示系统范围内的最大信号集总数目。
所以,(第一列)*(第四列)=(第二列)

以上设置,可以通过执行ipcs -l来验证。
11) 待续。。。
三、/proc/sys/vm/优化
1) /proc/sys/vm/block_dump
该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作。

缺省设置:0,禁用Block Debug模式
2) /proc/sys/vm/dirty_background_ratio
该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。

缺省设置:10
3) /proc/sys/vm/dirty_expire_centisecs
该文件表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。

缺省设置:3000(1/100秒)
4) /proc/sys/vm/dirty_ratio
该文件表示如果进程产生的脏数据到达系统整体内存的百分比,此时进程自行把脏数据写回磁盘。

缺省设置:40
5) /proc/sys/vm/dirty_writeback_centisecs
该文件表示pdflush进程周期性间隔多久把脏数据写回磁盘。

缺省设置:500(1/100秒)
6) /proc/sys/vm/vfs_cache_pressure
该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache。

缺省设置:100
7) /proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。

缺省设置:724(512M物理内存)
8) /proc/sys/vm/nr_pdflush_threads
该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。

缺省设置:2(只读)
9) /proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

缺省设置:0
10) /proc/sys/vm/overcommit_ratio
该文件表示,如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。
系统可分配内存=交换空间+物理内存*overcommit_ratio/100

缺省设置:50(%)
11) /proc/sys/vm/page-cluster
该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。

缺省设置:3(2的3次方,8页)
12) /proc/sys/vm/swapiness
该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

缺省设置:60
13) legacy_va_layout
该文件表示是否使用最新的32位共享内存mmap()系统调用,Linux支持的共享内存分配方式包括mmap(),Posix,System VIPC。
0, 使用最新32位mmap()系统调用。
1, 使用2.4内核提供的系统调用。

缺省设置:0
14) nr_hugepages
该文件表示系统保留的hugetlb页数。
15) hugetlb_shm_group
该文件表示允许使用hugetlb页创建System VIPC共享内存段的系统组ID。
16) 待续。。。
四、/proc/sys/fs/优化
1) /proc/sys/fs/file-max
该文件指定了可以分配的文件句柄的最大数目。如果用户得到的错误消息声明由于打开
文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。

缺省设置:4096
建议设置:65536
2) /proc/sys/fs/file-nr
该文件与 file-max 相关,它有三个值:
已分配文件句柄的数目
已使用文件句柄的数目
文件句柄的最大数目
该文件是只读的,仅用于显示信息。
3) 待续。。。
五、/proc/sys/net/core/优化
  该目录下的配置文件主要用来控制内核和网络层之间的交互行为。
1) /proc/sys/net/core/message_burst
写新的警告消息所需的时间(以 1/10 秒为单位);在这个时间内系统接收到的其它警告消息会被丢弃。这用于防止某些企图用消息“淹没”系统的人所使用的拒绝服务(Denial of Service)攻击。

缺省设置:50(5秒)
2) /proc/sys/net/core/message_cost
该文件表示写每个警告消息相关的成本值。该值越大,越有可能忽略警告消息。

缺省设置:5
3) /proc/sys/net/core/netdev_max_backlog
该文件表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

缺省设置:300
4) /proc/sys/net/core/optmem_max
该文件表示每个套接字所允许的最大缓冲区的大小。

缺省设置:10240
5) /proc/sys/net/core/rmem_default
该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。

缺省设置:110592
6) /proc/sys/net/core/rmem_max
该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。

缺省设置:131071
7) /proc/sys/net/core/wmem_default
该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。

缺省设置:110592
8) /proc/sys/net/core/wmem_max
该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。

缺省设置:131071
9) 待续。。。
六、/proc/sys/net/ipv4/优化
1) /proc/sys/net/ipv4/ip_forward
该文件表示是否打开IP转发。
0,禁止
1,转发

缺省设置:0
2) /proc/sys/net/ipv4/ip_default_ttl
该文件表示一个数据报的生存周期(Time To Live),即最多经过多少路由器。

缺省设置:64
增加该值会降低系统性能。
3) /proc/sys/net/ipv4/ip_no_pmtu_disc
该文件表示在全局范围内关闭路径MTU探测功能。

缺省设置:0
4) /proc/sys/net/ipv4/route/min_pmtu
该文件表示最小路径MTU的大小。

缺省设置:552
5) /proc/sys/net/ipv4/route/mtu_expires
该文件表示PMTU信息缓存多长时间(秒)。

缺省设置:600(秒)
6) /proc/sys/net/ipv4/route/min_adv_mss
该文件表示最小的MSS(Maximum Segment Size)大小,取决于第一跳的路由器MTU。

缺省设置:256(bytes)
6.1 IP Fragmentation
1) /proc/sys/net/ipv4/ipfrag_low_thresh/proc/sys/net/ipv4/ipfrag_low_thresh
两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。

缺省设置:196608(ipfrag_low_thresh)
     262144(ipfrag_high_thresh)
2) /proc/sys/net/ipv4/ipfrag_time
该文件表示一个IP分段在内存中保留多少秒。

缺省设置:30(秒)
6.2 INET Peer Storage
1) /proc/sys/net/ipv4/inet_peer_threshold
INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存
时间以及废物收集通过的时间间隔。条目越多,存活期越低,GC 间隔越短。

缺省设置:65664
2) /proc/sys/net/ipv4/inet_peer_minttl
条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低
存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies为
单位测量。

缺省设置:120
3) /proc/sys/net/ipv4/inet_peer_maxttl
条目的最大存活期。在此期限到达之后,如果缓冲池没有耗尽压力的话(例如:缓
冲池中的条目数目非常少),不使用的条目将会超时。该值以 jiffies为单位测量。

缺省设置:600
4) /proc/sys/net/ipv4/inet_peer_gc_mintime
废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。 该值
以 jiffies为单位测量。

缺省设置:10

2006-10-31 16:33 清水飘萍
5) /proc/sys/net/ipv4/inet_peer_gc_maxtime
废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。 该值
以 jiffies为单位测量。

缺省设置:120
6.3 TCP Variables
1) /proc/sys/net/ipv4/tcp_syn_retries
该文件表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。

缺省设置:5
2) /proc/sys/net/ipv4/tcp_keepalive_probes
该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。保持连接仅在
SO_KEEPALIVE套接字选项被打开时才被发送。

缺省设置:9(次)
3) /proc/sys/net/ipv4/tcp_keepalive_time
该文件表示从不再传送数据到向连接上发送保持连接信号之间所需的秒数。

缺省设置:7200(2小时)
4) /proc/sys/net/ipv4/tcp_keepalive_intvl
该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。

缺省设置:75(秒)
5) /proc/sys/net/ipv4/tcp_retries1
  该文件表示放弃回应一个TCP连接请求前进行重传的次数。
  
  缺省设置:3
6) /proc/sys/net/ipv4/tcp_retries2
  该文件表示放弃在已经建立通讯状态下的一个TCP数据包前进行重传的次数。
  
  缺省设置:15
7) /proc/sys/net/ipv4/tcp_orphan_retries
在近端丢弃TCP连接之前,要进行多少次重试。默认值是 7 个,相当于 50秒–
16分钟,视 RTO 而定。如果您的系统是负载很大的web服务器,那么也许需
要降低该值,这类 sockets 可能会耗费大量的资源。另外参考
tcp_max_orphans。
8) /proc/sys/net/ipv4/tcp_fin_timeout
对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能
会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在
2.2版本的内核中是 180 秒。您可以设置该值,但需要注意,如果您的机器为负
载很重的web服务器,您可能要冒内存被大量无效数据报填满的风险,
FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1,因为它们最多只吃 1.5K
的内存,但是它们存在时间更长。另外参考 tcp_max_orphans。

缺省设置:60(秒)
9) /proc/sys/net/ipv4/tcp_max_tw_buckets
系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,
time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯
粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果
网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。

缺省设置:180000
10) /proc/sys/net/ipv4/tcp_tw_recyle
打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求,请不要随
意修改这个值。

缺省设置:0
11) /proc/sys/net/ipv4/tcp_tw_reuse
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

缺省设置:0
12) /proc/sys/net/ipv4/tcp_max_orphans
系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那
么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这
个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降
低这个限制。

缺省设置:8192
13) /proc/sys/net/ipv4/tcp_abort_on_overflow
当守护进程太忙而不能接受新的连接,就向对方发送reset消息,默认值是false。
这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确
信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。

缺省设置:0
14) /proc/sys/net/ipv4/tcp_syncookies
该文件表示是否打开TCP同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES项进行编译。 同步标签(syncookie)可以防止一个套接字在有过多试图连接到达时引起过载。

缺省设置:0
15) /proc/sys/net/ipv4/tcp_stdurg
使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的
BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。

缺省设置:0
16) /proc/sys/net/ipv4/tcp_max_syn_backlog
对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于
超过 128Mb 内存的系统,默认值是 1024,低于 128Mb 的则为 128。如果
服务器经常出现过载,可以尝试增加这个数字。警告!假如您将此值设为大于
1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE,以保持
TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如
果tcp_adv_win_scale 128Mb 32768-610000)则系统将忽略所有发送给自己
的ICMP ECHO请求或那些广播地址的请求。

缺省设置:1024
17) /proc/sys/net/ipv4/tcp_window_scaling
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力。

缺省设置:1
18) /proc/sys/net/ipv4/tcp_sack
该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。

缺省设置:1
19) /proc/sys/net/ipv4/tcp_timestamps
该文件表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。

缺省设置:1
20) /proc/sys/net/ipv4/tcp_fack
该文件表示是否打开FACK拥塞避免和快速重传功能。

缺省设置:1
21) /proc/sys/net/ipv4/tcp_dsack
该文件表示是否允许TCP发送“两个完全相同”的SACK。

缺省设置:1
22) /proc/sys/net/ipv4/tcp_ecn
该文件表示是否打开TCP的直接拥塞通告功能。

缺省设置:0
23) /proc/sys/net/ipv4/tcp_reordering
该文件表示TCP流中重排序的数据报最大数量。

缺省设置:3
24) /proc/sys/net/ipv4/tcp_retrans_collapse
该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。

缺省设置:1
25) /proc/sys/net/ipv4/tcp_wmem
该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。

缺省设置:4096 16384 131072
26) /proc/sys/net/ipv4/tcp_rmem
该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的 默认值情况下,TCP 窗口大小为65535。
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,今天选择参数 SO_SNDBUF则不受该值影响。

缺省设置:4096 87380 174760
27) /proc/sys/net/ipv4/tcp_mem
该文件包含3个整数值,分别是:low,pressure,high
Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
High:允许所有tcp sockets用于排队缓冲数据报的页面量。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

缺省设置:24576 32768 49152
28) /proc/sys/net/ipv4/tcp_app_win
该文件表示保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。

缺省设置:31
29) /proc/sys/net/ipv4/tcp_adv_win_scale
该文件表示计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。

缺省设置:2
6.4 IP Variables
1) /proc/sys/net/ipv4/ip_local_port_range
该文件表示TCP/UDP协议打开的本地端口号。

缺省设置:1024 4999
建议设置:32768 61000
2) /proc/sys/net/ipv4/ip_nonlocal_bind
该文件表示是否允许进程邦定到非本地地址。

缺省设置:0
3) /proc/sys/net/ipv4/ip_dynaddr
该参数通常用于使用拨号连接的情况,可以使系统动能够立即改变ip包的源地址为该ip地址,同时中断原有的tcp对话而用新地址重新发出一个syn请求 包,开始新的tcp对话。在使用ip欺骗时,该参数可以立即改变伪装地址为新的ip地址。该文件表示是否允许动态地址,如果该值非0,表示允许;如果该值 大于1,内核将通过log记录动态地址重写信息。

缺省设置:0
4) /proc/sys/net/ipv4/icmp_echo_ignore_all/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
该文件表示内核是否忽略所有的ICMP ECHO请求,或忽略广播和多播请求。
0, 响应请求
1, 忽略请求

缺省设置:0
建议设置:1
5) /proc/sys/net/ipv4/icmp_ratelimit
6) /proc/sys/net/ipv4/icmp_ratemask
7) /proc/sys/net/ipv4/icmp_ignore_bogus_error_reponses
某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行
为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会
记录这种警告信息。

缺省设置:0
8) /proc/sys/net/ipv4/igmp_max_memberships
该文件表示多播组中的最大成员数量。

缺省设置:20
6.5 Other Configuration
1) /proc/sys/net/ipv4/conf/*/accept_redirects
   如果主机所在的网段中有两个路由器,你将其中一个设置成了缺省网关,但是该网关
   在收到你的ip包时发现该ip包必须经过另外一个路由器,这时这个路由器就会给你
   发一个所谓的“重定向”icmp包,告诉将ip包转发到另外一个路由器。参数值为布尔
   值,1表示接收这类重定向icmp 信息,0表示忽略。在充当路由器的linux主机上缺
   省值为0,在一般的linux主机上缺省值为1。建议将其改为0以消除安全性隐患。
2) /proc/sys/net/ipv4/*/accept_source_route
 是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。在
 充当网关的linux主机上缺省值为1,在一般的linux主机上缺省值为0。从安全性角
 度出发,建议关闭该功能。
3) /proc/sys/net/ipv4/*/secure_redirects
 其实所谓的“安全重定向”就是只接受来自网关的“重定向”icmp包。该参数就是
 用来设置“安全重定向”功能的。参数值为布尔值,1表示启用,0表示禁止,缺省值
 为启用。
4) /proc/sys/net/ipv4/*/proxy_arp
 设置是否对网络上的arp包进行中继。参数值为布尔值,1表示中继,0表示忽略,
 缺省值为0。该参数通常只对充当路由器的linux主机有用。
七、性能优化策略
7.1 基本优化
1) 关闭后台守护进程
系统安装完后,系统会默认启动一些后台守护进程,有些进程并不是必需的;因此,关闭这些进程可以节省一部分物理内存消耗。以root身份登录系统,运行ntsysv,选中如下进程:
iptables
network
syslog
random
apmd
xinetd
vsftpd
crond
local
修改完后,重新启动系统。
如此,系统将仅仅启动选中的这些守护进程。
2) 减少终端连接数
系统默认启动6个终端,而实际上只需启动3个即可;以root身份登录系统,运行vi /etc/inittab,修改成如下:
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
如上所述,注释掉4、5、6终端。
3) 待续。。。
7.2 网络优化
1) 优化系统套接字缓冲区
net.core.rmem_max=16777216
net.core.wmem_max=16777216
2) 优化TCP接收/发送缓冲区
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
3) 优化网络设备接收队列
net.core.netdev_max_backlog=3000
4) 关闭路由相关功能
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0

net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.eth0.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

net.ipv4.conf.lo.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.default.send_redirects=0
5) 优化TCP协议栈
打开TCP SYN cookie选项,有助于保护服务器免受SyncFlood攻击。
net.ipv4.tcp_syncookies=1

打开TIME-WAIT套接字重用功能,对于存在大量连接的Web服务器非常有效。
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1

减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。
net.ipv4.tcp_fin_timeout=30

减少TCP KeepAlive连接侦测的时间,使系统可以处理更多的连接。
net.ipv4.tcp_keepalive_time=1800

增加TCP SYN队列长度,使系统可以处理更多的并发连接。
net.ipv4.tcp_max_syn_backlog=8192

2008年10月3日星期五

基于centos4.3的linux发行版制作过程

以前研究的东西了,最近看到网上有很多人为了制作自己的发行版,苦苦挣扎而不得其道,所以把自己的笔记拿出来与大家一起分享!

注:其中路径/data/disk是我的制作光盘路径,各位可以根据自己的环境进行修改。

=======================================================

基本过程:

定制RPM包
修改 comps.xml
重编comps.rpm
重新生成hdlist
建立pkglist
利用buildinstall处理安装程序
利用mkisofs制作安装映象

------------------------------------------------
母系统是centos4.3,为了软件最新,先升级自己的系统相关软件
rpm --import http://mirror.be10.com/centos/4.3/os/i386/RPM-GPG-KEY-centos4
rpm --import /usr/share/doc/centos-release-4/RPM-GPG-KEY >> /dev/null
yum -y update

以下为制作安装光盘必须的包
yum install pump-devel gtk2-devel booty bogl-devel bogl-bterm elfutils-devel beecrypt-devel dietlibc
yum install anaconda anaconda-runtime busybox-anaconda

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
anaconda i386 10.1.1.37-1.centos4.2 base 4.3 M
anaconda-runtime i386 10.1.1.37-1.centos4.2 base 526 k
busybox-anaconda i386 1.00.rc1-5 base 177 k
Installing for dependencies:
anaconda-help noarch 10.1.0-1.centos4 base 800 k
bogl i386 0.1.18-4 base 93 k
booty i386 0.44.3-1 base 85 k
pyparted i386 1.6.8-2 base 22 k



检查RPM包依赖关系
cd /data/disk/EServer/RPMS
mkdir /tmp/testdb
rpm --initdb --dbpath /tmp/testdb
rpm --test --dbpath /tmp/testdb -Uvh *.rpm

以下是具体步骤:
1.设置python的系统环境变量
export PYTHONPATH=/usr/lib/anaconda
export PATH="$PATH:/usr/lib/anaconda-runtime"

2.更新光盘的文件树
genhdlist --productpath=EServer /data/disk


3.生成下一步需要的pkgfile文件
pkgorder --product EServer /data/disk/ EServer > /data/pkgfile

4.编译生成光盘引导文件和图形安装界面镜像
buildinstall --pkgorder /data/pkgfile \
--version "1.2" \
--product "EServer" \
--release "Beta" \
--prodpath EServer /data/disk

5.制作 ISO

mkisofs -r -T -J -V "EServer 1.2" -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
-boot-info-table -x "lost+found" \
-o /data/EServer.iso /data/disk


文件isolinux/boot.cat 会由mkisofs 程序随后产生
----------------------------------------------------

为光盘生成md5验证值
implantisomd5 /data/EServer.iso
Inserting md5sum into iso image...
md5 = b49c693f83c23d7e746dfe0f81a56016
Setting supported flag to 0



如果想将图形界面修改成个性化的界面,需要修改stage2.img(光盘引导镜像,如果硬盘安装,需要修改其他img文件……)

附注:
anaconda资源修改:

mkdir /data/anaconda
mount -o loop /data/disk/EServer/base/stage2.img /data/anaconda
cd /data/anaconda
tar -cvf /data/stage2.tar .
mkdir /data/stage2
cd /data/stage2
tar -xvf /data/stage2.tar
chmod +w -R ../stage2
#-----------修改资源-----------------#
.....
....
#重新打包img镜像
cd /data
mkcramfs stage2/ stage2.img.new
cp /data/stage2.img.new /data/disk/EServer/base/stage2.img




光盘启动画面修改:

yum -y install syslinux

The graphic is in a somewhat odd format, called LSS16. As the name indicates, it is limited to 16 colors. To edit the graphic, first convert it to a PPM:

lss16toppm < splash.lss > splash.ppm

Next, edit the file using The Gimp. Save the resulting file as an indexed gif with no more than 14 colors (plus black and white, for a total of 16). Then, convert the file to a pnm/ppm:

giftopnm < splash.gif | ppmtolss16 > splash.lss
cp splash.lss /data/disk/isolinux/splash.lss


yum install gcc xorg-x11-devel
编译gif2lss-0.4.tar.gz


保证光盘里面rpm目录下有以下包,这些包是图形化界面制作所必须的,没有他们,buildinstall将会报错。

anaconda
anaconda-runtime
anaconda-help
anaconda-product
busybox
busybox-anaconda
memtest86+
fonts-xorg-base
xorg-x11
joe
kernel*

附注:
rpm -qpi #显示rpm包的信息
rpm -Uvh #安装rpm包
rpm -qpl #列rpm包内的文件

:em18:
上面这些步骤,是经过实践之后的笔记,所以一般都能够成功,还有一些细节部分,如comps.xml的修改,语法,就不多介绍了。

制作Linux发行版光盘的方法

开源软件 /青牛

在很多场合,现有的linux发行版并不能满足您的要求,比如:

您需要根据自己的要求取舍安装包
您需要定制自动安装脚本(kickstart)
您需要加入自己的软件包
这时您需要建立自己的linux发行版光盘,当然完整地从零开始定制一个linux发行版是十分耗时耗力的,我们一般只需要在现有的发行版光盘上进行修改即可满足我们的要求。下面讲述如何来做一个利用kickstart进行自动安装的光盘映象:(所有的操作都是基于centos-4.3发行版来进行)

复制母盘文件

mkdir disk
mkdir tmp
mount -o loop centos-4.3.iso tmp
cp -rf tmp/* disk/
注意光盘根目录下有个隐藏文件.diskinfo,没有拷贝此文件在安装时刻将会告之,找不到cdrom


生成kickstart文件
利用 system-config-kickstart工具生成kickstart文件, 不过该工具是基于x界面的,centeros-4.3 server版不带X界面。可用其他版本的linux生成。如果没有该工具也没关系,可以找现成的修改一番,具体的语法参考相关文件

让系统从kickstart配置启动
修改disk/isolinux/isolinux.cfg文件,如下是我的一个配置文件
default ks
prompt 1
timeout 60
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=8192
label text
kernel vmlinuz
append initrd=initrd.img text ramdisk_size=8192
label expert
kernel vmlinuz
append expert initrd=initrd.img ramdisk_size=8192
label ks
kernel vmlinuz
append ks=cdrom:/ks.cfg initrd=initrd.img ramdisk_size=8192
label lowres
kernel vmlinuz
append initrd=initrd.img lowres ramdisk_size=8192
label local
localboot 1
label memtest86
kernel memtest
append -
注意:如果不想把kickstart文件放在光盘的根目录下,可以将其放在isolinux的initrd.img文件系统中,然后用 ks=file:/ks.cfg代替上面的 ks=cdrom:/ks.cfg. 具体参考 https://listman.redhat.com/archives/kickstart-list/2001-August/msg00029.html
大致方法如下
mount -o loop initrd.img tmp
cp ks.cfg tmp
umount tmp

建立启动画面
启动画面用的是一种比较奇怪的格式lss16,它限制图片使用16种颜色,除去前景和背景色只能有14种颜色。我们需要ppmtolss16 giftopnm等程序,系统一般默认都安装了。
一般用gimp生成一个index模式的gif图形,颜色限制为14, 然后通过如下的办法进行转:
giftopnm < splash.gif | ppmtolss16 > splash.lss
如果要编辑一个lss文件先用lsstoppm转成ppm格式,然后用gimp进行编辑.
另外你还需要修改isolinux/boot.msg文件如下
^L^Xsplash.lss - Babel Com Australia Fedora Core Linux installer. - Use the function keys listed below for more information.^O02[F1-Main] [F2-Options] [F3-General] [F4-Kernel] [F5-Rescue]^O07Note that in the above screen fragment "^L" means insert a control-L sequence. In vi you can do that by typing control-V control-L.

注意:上述显示的"^L"是一个控制序列,在vi中,你可以通过输入Ctrl-V 然后Ctrl-L来得到此字符。

生成ISO映象
我们需要将改光盘制作成 ISO-9660 格式的光盘映象,通过如下命令来实现
cd disk \mkisofs -o ../cdrom.iso -A 'ISOLINUX' -V 'ISOLINUX' \ -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table .这样我们就能得到一个自己定制好的linux 发行版安装光盘。

至于从头制作一个完整的centos发行版,可以参考另一篇转载的文章《基于centos4.3的linux发行版制作过程》。