2008年8月11日星期一
ubuntu 终端乱码的解决方法
2.sudo locale-gen zh.CN.GBK
3.重启后重新登录
"the account is locked"的解决方法
2008年8月9日星期六
基于centos4.3的linux发行版制作过程
基本过程:
定制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.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.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包内的文件
linux下建立关机帐户
尹老师由于是给我们补课,还是很多东西没有讲,唉,无奈还是有很多东西不会,不知道怎么办!~~问别人好了,这个是尹老师给我讲的一个小技巧。拿出来表一表。
首先,进入root超级帐户,然后在终端里面用命令建立一个帐户,并给与密码。这个很简单,大家都会,直接上图。
在另一字符界面登陆gj帐户,没有问题,可以登陆。
首先,这里要介绍一下思路,要建立这个帐户就是一个原因,自己不在的时候,让另一个人帮忙关机,但是也不想让他动用root帐户,感觉这个帐户赋予的权限太大,要是在敏感岗位上就不好说了,所以这个帐户最好登陆的时候只能做一件事情,那就是关机。
要关机就要执行关机命令,一般的关机命令init 0也只有root这样的用户使用,那么这个关机帐户就必须要是超级用户,那就能不能想办法让这个用户成为管理员,但是只要这个帐户一登陆就关机,可以么?可以。我们知道gj帐户文件在/home/gj下,而且也要加载gj文件夹下面的.bash_profile文件,那么我们就可以把关机命令加载到这个文件中,那么这个帐户就会一启动就关机。
首先是赋予gj超级用户的权限,按照以下命令操作。
vi /etc/passwd
打开这个文件
修改gj帐户的账户属性和组属性都为0和root帐户相同。
然后存盘退出。
下面就是修改.bash_profile文件了。
这里面的命令都要加载的,顺序是由上至下,所以在某一行加一段关机命令就可以了。
保存退出,这样关机的时候直接登陆gj帐户就ok了。
Oracle 11g R1下的自动内存管理(AMM)
【51CTO.COM独家翻译】Oracle在简化内存管理方面过去几年做了巨大的努力,从Oracle 9i通过PGA_AGGREGATE_TARGET参数实现PGA自动管理开始,Oracle 10g通过SGA_TARGET参数实现了SGA的自动管理,Oracle 11g更是惊人地实现了数据库所有内存块的全自动化管理,它使得动态管理SGA和PGA成为现实。
写本文时,自动内存管理(AMM)已经在主流平台上得到支持,包括Linux,Windows,Solaris,HP-UX,AIX。
AMM参数
自动内存管理是用两个初始化参数进行配置的:
MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。
MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。
使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。
AMM配置
在数据库创建过程中,数据库配置助手(DBCA)允许你配置自动内存管理。
在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。
在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算:
| MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated") |
下面的查询语句向你展示有关的信息,以及如何计算出需要的值:
| -- Individual values. COLUMN name FORMAT A30 COLUMN value FORMAT A10 SELECT name, value FROM v$parameter WHERE name IN ('pga_aggregate_target', 'sga_target') UNION SELECT 'maximum PGA allocated' AS name, TO_CHAR(value) AS value FROM v$pgastat WHERE name = 'maximum PGA allocated'; -- Calculate MEMORY_TARGET SELECT sga.value + GREATEST(pga.value, max_pga.value) AS memory_target FROM (SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'sga_target') sga, (SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'pga_aggregate_target') pga, (SELECT value FROM v$pgastat WHERE name = 'maximum PGA allocated') max_pga; |
假设我们需要的设置是5G,那么我们可以执行下面的语句:
| CONN / AS SYSDBA -- Set the static parameter. Leave some room for possible future growth without restart. ALTER SYSTEM SET MEMORY_MAX_TARGET=6G SCOPE=SPFILE; -- Set the dynamic parameters. Assuming Oracle has full control. ALTER SYSTEM SET MEMORY_TARGET=5G SCOPE=SPFILE; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE; ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE; -- Restart instance. SHUTDOWN IMMEDIATE; STARTUP; |
当数据库重启后,MEMORY_TARGET参数就可以在不重启实例的情况下随意改变大小了。如:
| ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE; |
AMM调整
除现有的用于内存管理的V$视图外,Oracle 11g还新增加了下面4个视图用于自动内存管理:
◆V$MEMORY_CURRENT_RESIZE_OPS
◆V$MEMORY_DYNAMIC_COMPONENTS
◆V$MEMORY_RESIZE_OPS
◆V$MEMORY_TARGET_ADVICE
为每个动态组件分配的内存大小使用视图V$MEMORY_DYNAMIC_COMPONENTS显示:
| COLUMN component FORMAT A30 SELECT component, current_size, min_size, max_size FROM v$memory_dynamic_components WHERE current_size != 0; COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE ------------------------------ ------------ ---------- ---------- shared pool 197132288 192937984 197132288 large pool 4194304 4194304 4194304 java pool 41943040 41943040 41943040 SGA Target 318767104 285212672 318767104 DEFAULT buffer cache 71303168 41943040 75497472 PGA Target 104857600 104857600 138412032 6 rows selected. SQL> |
V$MEMORY_CURRENT_RESIZE_OPS和V$MEMORY_RESIZE_OPS分别显示了组件当前改变大小操作的信息和上一次改变大小操作的信息。
V$MEMORY_TARGET_ADVICE提供了帮助调整MEMORY_TARGET参数的信息,它显示了一段MEMORY_TARGET设置可用的范围,根据当前的设置,估算完成当前负载所需要的DB Time值。
| SELECT * FROM v$memory_target_advice ORDER BY memory_size; MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR VERSION ----------- ------------------ ------------ ------------------- ---------- 303 .75 3068 1.0038 2 404 1 3056 1 2 505 1.25 3056 1 2 606 1.5 3056 1 2 707 1.75 3056 1 2 808 2 3056 1 2 6 rows selected. SQL> |
内存顾问)企业管理器中也包括了内存管理配置和顾问功能,位于“内存顾问”页面(顾问中心
点击“建议(Advice)”按钮显示“内存大小建议”屏幕,它包括了一个来自视图V$MEMORY_TARGET_ADVICE的图形显示界面。
http://www.oracle-base.com/articles/11g/AutomaticMemoryManagement_11gR1.php
2008年8月3日星期日
教你关闭Linux下不必要的系统服务
Cron(看情况,有时会需要)
Anancron
Apmd
Atd
Autofs
Cups(有打印机可以不关)
Gpm
Isdn
Kudzu
Netfs
Nfslock
Pcmcia
Portmap
Rawdevice
Rhnsd
Sendmail(要做邮件服务器可以不关)
ipsec(没有配置,根本就没有提供安全的作用)
.... 还有一些,这里不列出了。
我电脑上的redhat9.0 只启动了下列的系统服务
vmware-tools(虚拟机)
syslog(日志记录)
network(上网用)
randow (起保护作用)
keytables(扩展键盘)
iptables(linux上的防火墙)
xfs(图形窗口)
xinetd(超级进程,向外提供网络服务)
这样开机速度蛮快的。
可以通过2种方式修改服务:
1. chnconfig指令:
通过chkconfig --list 查看系统所有的系统服务是关闭还是打开。
通过chkconfig iptables on 设置随机启动服务
通过chkconfig iptables off 设置不随机启动服务
2. 通过setup启动图形设置工具来设置要不要随机启动服务
注意:这样修改需要重启机器后才能生效。如果只是这次需要某个服务,但是下次开机后不
需要,可以通过service 服务 start 来手工启动该服务。
系统服务的配置文件在/etc/syslog中,与服务的可执行文件同名,服务通过读取配置文件来提供服务,可以修改配置文件来定制服务。例如,在/etc/syslog有iptables的配置文件iptables,里面存放防火墙规则,可以拒绝其他ip地址对本机的访问等。
2008年8月2日星期六
FreeBSD下解决Nagios不发报警短信的问题
FreeBSD下解决Nagios不发报警短信的问题
田逸
最近在一个新安装的Freebsd 7系统部署一套nagios监控系统,主要用来监控主机的存活状态、网络服务的状态以及远程主机的资源利用情况。尽管Freebsd安装源码有些麻烦,但最终还是把nagios正确安装上了,并且能正常工作,通过web方式也能看见监控对象的状况。
如上图所示,真有一个服务器的443端口对应的服务发生故障了,可是等了半天就是收不到报警邮件。登录nagios所在的系统,检查与邮件发送相关的情况,其基本操作是:检查sendmail是否起来(ps aux grep sendmail),结果正常;用mail程序手动发一封邮件给我的一个邮箱(mail –s “This is a mail test project” sery@163.com < ip_scan ),能发送和接收到这封邮件。问题在哪里呢?
由上面的排查,基本可以断定sendmail没什么问题,域名解析也是正常的(专门为这个监控服务器解析MX及A记录),现在可能的原因只能在nagios这边了。进入nagios配置文件所在的目录,挨个察看配置文件。我的nagios配置目录的情况如下:
[root@nagios /usr/local/nagios]# pwd /usr/local/nagios/etc [root@nagios /usr/local/nagios/etc]# ls *.cfg cgi.cfg contacts.cfg localhost.cfg services.cfg commands.cfg hostgroups.cfg nagios.cfg timeperiods.cfg contactgroups.cfg hosts.cfg resource.cfg |
没看见有什么异常的情况,改了其中的某些设置,如cgi.cfg文件,重启nagios,还是不能发报警邮件。可是,但我点击web管理界面的时候,确实是有邮件报警行为,如下图所示:
既有主机故障通知,又有服务故障报警通知,而且都应该按我的定义发送邮件的呀!
查去查来,找不到头绪。再查sendmail 的日志/var/log/maillog,只发现我手动发送邮件的记录,而没有其他发送记录---只有下面这么一条记录:
Jul 27 14:27:48 nagios sm-mta[37141]: m6RERkYR037139: to=<sery@163.com>, ctladdr=<nagios@nagios.sery.com> (1003/1003), delay=00:00:02, xdelay=00:00:01, mailer=esmtp, pri=30623, relay=163mx02.mxmail.netease.com. [220.181.12.66], dsn=2.0.0, stat=Sent (Mail OK queued as mx16,QsCowLDbPSxWFYxIb6TzGw==.27600S2 1217140055) |
看来nagios并没有调用sendmail发送邮件。
差点忘了,nagios自己也有日志记录呢!赶快打开看一眼,发现里面有不少Warning,抽一个出来,其内容如下:
[1217166816] HOST NOTIFICATION: sery;mail-server;DOWN;host-notify-by-email;CRITICAL - Plugin timed out after 10 seconds [1217166816] Warning: Attempting to execute the command "/usr/bin/printf "%b" "***** Nagios 2.9 *****nnNotification Type: PROBLEMnHost: mail-servernState: DOWNnAddress: 211.155.115.66nInfo: CRITICAL - Plugin timed out after 10 secondsnnDate/Time: Sun Jul 27 13:53:36 UTC 2008n" /bin/mail -s "Host DOWN alert for mail-server!" sery@163.com" resulted in a return code of 127. Make sure the script or binary you are trying to execute actually exists... |
其他的行也更这个类似;最有用的信息我用红色标记,其大意是不能执行上面的2进制或可执行文件。在这个条目中,只有2个执行文件—printf及mail。我把它按原样单独拿出来执行,操作过程如下:
(1)/usr/bin/printf “"%b" "***** Nagios 2.9 *****n” 输出 ***** Nagios 2.9 *****,这是正常的结果。
(2)/bin/mail -s "Host DOWN alert for mail-server!" sery@163.com 输出su: /bin/mail: No such file or directory,没找到路径或目录。前面还手动发了邮件的,明明有mail这个客户端程序呀!可能这个路径不对,是linux的mail路径。查一下freebsd的mail路径,执行find / -name 得到mail在freebsd的路径为/usr/bin/mail 。
到这里,我们知道了为啥不能发邮件的根本原因,接下来,我把nagios的配置文件commands.cfg的host-notify-by-email、service-notify-by-email的”/bin/mail”替换为“/usr/bin/mail”。其完整形式为:
# 'host-notify-by-email' command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios 2.9 *****nnNotification Type: $NOTIFICATIONTYPE$nHost: $HOSTNAME$nState: $HOSTSTATE$nAddress: $HOSTADDRESS$nInfo: $HOSTOUTPUT$nnDate/Time: $LONGDATETIME$n" /usr/bin/mail -s "Host $HOSTSTATE$ alert for $HOSTNAME$!" $CONTACTEMAIL$
}
# 'notify-by-email' command definition
define command{
command_name service-notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios 2.9 *****nnNotification Type: $NOTIFICATIONTYPE$nnService: $SERVICEDESC$nHost: $HOSTALIAS$nAddress: $HOSTADDRESS$nState: $SERVICESTATE$nnDate/Time: $LONGDATETIME$nnAdditional Info:nn$SERVICEOUTPUT$" /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
修改完配置文件commands.cfg后重启 Nagios,再查看nagios日志,不再有“Make sure the script or binary you are trying to execute actually exists...”报错,并且有发送报警邮件的记录了:
[root@nagios /usr/local/nagios/var]# tail -f nagios.log
[1217170467] SERVICE ALERT: mail-server;check_tcp 995;CRITICAL;SOFT;1;CRITICAL - Socket timeout after 10 seconds
[1217170534] Auto-save of retention data completed successfully.
[1217170577] HOST ALERT: mail-server;DOWN;SOFT;1;CRITICAL - Plugin timed out after 10 seconds
[1217170587] HOST ALERT: mail-server;DOWN;SOFT;2;CRITICAL - Plugin timed out after 10 seconds
[1217170597] HOST ALERT: mail-server;DOWN;SOFT;3;CRITICAL - Plugin timed out after 10 seconds
[1217170607] HOST ALERT: mail-server;DOWN;SOFT;4;CRITICAL - Plugin timed out after 10 seconds
[1217170607] HOST ALERT: mail-server;UP;SOFT;5;PING OK - Packet loss = 0%, RTA = 111.63 ms
[1217170607] SERVICE ALERT: mail-server;check_tcp 995;CRITICAL;SOFT;2;CRITICAL - Socket timeout after 10 seconds
[1217170687] SERVICE ALERT: mail-server;check_tcp 995;OK;SOFT;3;TCP OK - 3.137 second response time on port 995
[1217171057] SERVICE NOTIFICATION: sery;fav-0;check_tcp 443;CRITICAL;service-notify-by-email;CRITICAL - Socket timeout after 10 seconds
收邮件,迫不及待,哈哈,我的163邮箱收到久违的报警信息了。再回去瞧一眼邮件日志/var/log/malllog,也记录了这个发送情况。
经验总结:通过日志记录,对于我们排查故障确实有着不可估量的好处。在实际的工作中,我们应该随时检查系统日志以及应用程序相关的日志,从记录项中寻找蛛丝马迹,从而得出解决问题的方法。