存档

文章标签 ‘RedHat’

使用perl包Net::SSH::Perl时的小问题

2008年12月1日 哈哈 没有评论

工作需要
用perl写了个程序ssh到一些机器上去做一些操作
于是就用了Net::SSH::Perl这个perl模块儿
感觉这个东西还挺好用的
但有一个需要注意的
就是redhat系列的系统
自带的ssh client的全局配置文件是/etc/ssh/ssh_config
Net::SSH::Perl认的是/etc/ssh_config
因为这样
所以有台机器我用ssh命令直接连没有问题
但是通过Net::SSH::Perl就连不上
后来通过把/etc/ssh/ssh_config拷一份为/etc/ssh_config
这才搞定

公网网卡上加绑一个教育网ip以及策略路由

2008年11月19日 哈哈 没有评论

公司某个保密项目需要打通一条从教育网到网通、电信乃至于国外的更宽广、通畅的道路
于是就从教育网拉了根儿光纤到某个非教育网的机房
然后在这个机房的某些机器的公网交换机端口上同时配上了教育网和以前公网地址的vlan的trunk
按照以前的文章http://www.haw-haw.org/node/5
很容易就在公网网卡上配上了教育网和以前公网网段的ip地址
剩下就只是策略路由的事情了
而这个策略路由的需求比较简单
只是需要把从哪个设备来的包还从哪个设备上回过去就ok了

假设公网网卡设备是eth0
教育网和原来公网网段的vlan id分别是100101
那么教育网和原来公网的网络设备就分别是eth0.100eth0.101
教育网和原来公网的ip分别是a.b.c.de.f.g.h
default gw分别是a.b.c.254e.f.g.254
然后,先添加2张路由表eduother
(这里的优先级100和101跟上面的vlan id没有关系,可以随便取,只要不跟已有的重就行)

echo -e “100\tedu\n101\tother” >> /etc/iproute2/rt_tables

接着,配置好新加的两张路由表eduother

ip route add a.b.c.0/24 dev eth0.100 src a.b.c.d table edu
ip route add default via a.b.c.254 table edu
ip route add e.f.g.0/24 dev eth0.101 src e.f.g.h table other
ip route add default via e.f.g.254 table other

最后,再配上路由选择的策略

ip rule add from a.b.c.d table edu
ip rule add from e.f.g.h table other

于是一切ok了
最后把这几条命令写入/etc/rc.d/rc.local
(因为最后没有找到改哪个配置文件可以实现以上命令的功能,所以只有写道rc.local里了)

snmpd往syslog里打n多的无用信息的问题

2008年11月4日 哈哈 1 条评论

rh系列的机器
radhat、fedora、rhel、centos等
系统自带的snmpd是会缺省往syslogd里打log的
而且遗憾的是:缺省的log级别是debug
所以
如果你开着snmpd
然后还有机器来连snmpd端口(mrtg、cacti等多半如此)
你会发现/var/log/messages里充斥着大堆的无用信息
像这样:

Nov 2 04:17:21 sohu snmpd[1748]: Connection from UDP: [127.0.0.1]:50841
Nov 2 04:17:21 sohu snmpd[1748]: Received SNMP packet(s) from UDP: [127.0.0.1]:50841
Nov 2 04:17:21 sohu snmpd[1748]: Connection from UDP: [127.0.0.1]:50841
Nov 2 04:22:21 sohu snmpd[1748]: Connection from UDP: [127.0.0.1]:51720
Nov 2 04:22:21 sohu snmpd[1748]: Received SNMP packet(s) from UDP: [127.0.0.1]:51720
Nov 2 04:22:21 sohu snmpd[1748]: Connection from UDP: [127.0.0.1]:51720
Nov 2 04:27:21 sohu snmpd[1748]: Connection from UDP: [127.0.0.1]:52622
Nov 2 04:27:21 sohu snmpd[1748]: Received SNMP packet(s) from UDP: [127.0.0.1]:52622
Nov 2 04:27:21 sohu snmpd[1748]: Connection from UDP: [127.0.0.1]:52622

这样一来
就有可能将有用的重要的log信息给冲掉
解决办法如下:
编辑一个文件/etc/snmp/snmpd.options(这个文件是在snmp的启动脚本/etc/rc.d/init.d/snmpd里启动时会去读的)
内容如下:

OPTIONS=”-LS 2 d -Lf /dev/null -p /var/run/snmpd.pid -a”

然后再重起snmpd
/etc/rc.d/init.d/snmpd restart
这样一来
就将snmpd缺省的log级别debug改成了2
再看/var/log/messages
里面再也没有snmpd的废话了
这世界清静了……

rpm出错:Program version 4.3 doesn’t match environment version

2008年10月14日 哈哈 没有评论

一台linux机器
输入命令
rpm -qa
的时候
系统报错:

rpmdb: Program version 4.3 doesn’t match environment version
error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch
error: cannot open Packages index using db3 – (-30974)
error: cannot open Packages database in /var/lib/rpm

解决方法:

cd /var/lib/rpm
rm -rf __*
rpm –rebuilddb

upgrading from rhel as4 to rhel as5

2008年10月13日 哈哈 没有评论

一台rhel as4的机器要升级成rhel as5
由于其包管理软件apt不在其repository(储藏室,库)里
所以不能通过apt-get来同时升级自己和所依赖的软件包
貌似as5u2里有了yum
但是我的as4下又没有,只有装的第三方的apt-get
本来我想的过程是
1,先装上as5的release的rpm包
2,再用apt-get升下rpm*相关软件包,尽量再装上yum
3,如果上一步能装上yum,那就好办了,直接update就ok了;否则只能rpm手工安装yum,最后再yum update
但是实际上
我第2步apt-get升级rpm*就出错了
于是只有用rpm手工升级rpm(听起来有点绕口:)
期间删了一大堆的rpm,以下仅是一部分

rpm -e openldap-clients cups-libs openldap elinks ckermit nmap cyrus-sasl-devel pwlib curl neon libwvstreams wpa_supplicant stunnel pyOpenSSL dhcpv6_client rhnlib wvdial openh323 openldap-devel nss_ldap libuser cyrus-sasl nss_ldap compat-openldap cyrus-sasl-ntlm cyrus-sasl-gssapi cyrus-sasl-plain cyrus-sasl-md5 libuser-devel usermode passwd nfs-utils autofs nfs-utils-lib kbd system-logviewer authconfig-gtk usermode-gtk –allmatches

后来当了一大堆的rpm包,用rpm –force装上了(这里的apt也是从第三方当下来的)

rpm -Uvh –force device-mapper-1.02.24-1.el5.i386.rpm lvm2-2.02.32-4.el5.x86_64.rpm device-mapper-event-1.02.24-1.el5.x86_64.rpm readline-5.1-1.1.x86_64.rpm apt-0.5.15lorg3.2-1.el5.rf.x86_64.rpm python-2.4.3-21.el5.x86_64.rpm rpm-libs-4.4.2-48.el5.x86_64.rpm db4-4.3.29-9.fc6.x86_64.rpm openssl-0.9.8b-10.el5.x86_64.rpm rpm-4.4.2-48.el5.x86_64.rpm elfutils-libelf-0.125-3.el5.x86_64.rpm sqlite-3.3.6-2.x86_64.rpm beecrypt-4.1.2-10.1.1.x86_64.rpm popt-1.10.2-48.el5.x86_64.rpm wget-1.10.2-7.el5.x86_64.rpm openssh-clients-4.3p2-26.el5.x86_64.rpm openssh-server-4.3p2-26.el5.x86_64.rpm openssh-4.3p2-26.el5.x86_64.rpm nss-3.11.99.5-2.el5.x86_64.rpm nspr-4.7.0.99.2-1.el5.x86_64.rpm pam-0.99.6.2-3.27.el5.x86_64.rpm libselinux-1.33.4-5.el5.x86_64.rpm libsepol-1.15.2-1.el5.x86_64.rpm mcstrans-0.2.7-1.el5.x86_64.rpm

这一步做完后,最麻烦的就算是过去了
然后用新的apt-get
apt-get update
然后报错,这个错误以前碰到过,见这里
于是按照上面的方法解决

反正最后是用apt-get update;apt-get check;apt-get -y upgrade;apt-get -y dist-upgrade搞定
(期间也出过n多的问题,幸好都一一解决了)

debian上的exim4开启往外(internet)发邮件

2008年8月20日 哈哈 没有评论

debian下缺省安装的mta是exim4
那天netstat -nap | grep LISTEN一看
exim4监听着127.0.0.1的25端口
用惯了redhat系列的我想当然的认为:
嗯,不错,监听本地25端口,接收本地邮件然后根据需要往外(internet)发
这个跟redhat缺省的sendmail是一样的
但后来
发现原来定时备份的邮件收不到了
一看系统退回的信件:

Mailing to remote domains not supported

老是报这个错误
这才发现
原来debianexim4缺省是不支持往internet上发信的

于是编辑下配置文件/etc/exim4/update-exim4.conf.conf

dc_eximconfig_configtype=’local’

改成

dc_eximconfig_configtype=’internet’

再重起exim4
/etc/init.d/exim4 stop;/etc/init.d/exim4 start

这时exim4还是监听着本地127.0.0.1的25口
但是已经支持往internet上发信了

squid的file descriptor

2008年8月13日 哈哈 2 条评论

squidfile descriptor是个非常重要的参数
他关系squid能同时打开多少个文件描述符
跟squid的性能密切相关
而linux下所有用户的file descriptor缺省都是1024
//汗
以前在squid2.5的时候
都是通过编译squid的之前
先手工强制加大file descriptor
ulimit -HSn 65536
然后再等编译完
启动之前
也加上
ulimit -HSn 65536
这样的方法来增大file descriptor
但这种方法在squid2.6的情况下
也不是不行
主要是这次我不想重新用用源码编译squid
我就想用rpm
哪怕把系统的srpm下下来rebuild下也行
反正我在rebuild的时候
ulimit -HSn 65536的方式没成功
不知道问题在什么地方
但我明白了一点
redhat系的squid2.6的rpm包里
其实有着一些redhat专门为squid打的补丁
其中就有对config参数”

–enable-fd-config

“的支持
以及相对应的在squid的配置文件里支持参数

max_filedesc

的支持
所以
如果是redhat系列的linux系统自带的squid2.6
只要在配置文件里设置max_filedesc就可以轻松解决file descriptor的问题

感受debian

2008年5月15日 哈哈 没有评论

linux里一直redhat一系用的比较多
最近ubuntu火起来后也在用ubuntu的桌面
这也才算是开始接触debian的东西(ubuntu算是debian一系的东西)
最近基于某种机缘
装了台debian的机器
版本是最新的4.0r3,07年出的
业界传说debian的人被ubuntu挖走了好多
导致版本发布变慢
看来还像这么回事儿
刚用,没啥其他感觉
就是安装的时候感觉比redhat一系的安装功能强大了不少
再有
就是用起来跟redhat一系很不一样(废话,一样的话那也是redhat一系了)
听以前用debian的同事讲debian比redhat稳定多了
我正好拭目以待

关于linux下bash的环境变量PROMPT_COMMAND

2008年4月21日 哈哈 1 条评论

问题提出

作为系统管理员
经常需要在模拟终端上远程登上服务器做各种操作
而且很多时候需要同时用不同的窗口登上不同的服务器
当登上服务器太多的时候
就偶然会发现突然不知道哪个窗口登的是哪台服务器了
这可是个大问题
如果在错误的服务器里执行了特定命令
有时候后果是非常严重的
因而就想能否有种办法能让人一目了然的分辨出哪个窗口登陆的是哪台机器
因为我们分辨机器大多是靠ip地址
就想能否在窗口的标题部分显示机器的ip就最好了

技术实现

bash支持环境变量PROMPT_COMMAND
将其设置为一个命令行字符串或者是包含命令行字符串的一个文件的文件名
命令行用来在显示prompt之前执行
而xterm又支持3种escape序列
可以用来更改xterm的“icon name”和”title”两者之其一或两者都改
还有
在redhat系列的机器上(redhat、fedora)
都支持文件/etc/sysconfig/bash-prompt-xterm来保存bash+xterm下的PROMPT_COMMAND环境变量的内容
结合这几点
我们就可以轻松实现“在窗口标题部分显示已登陆服务器的ip地址”这个功能
我当前用的是

echo -ne “\e]2;$(ifconfig | awk ‘/inet addr:/ && ! /inet addr:127\./ { sub (“addr:”, “”); print $2 }’ | sed -e :a -e ‘$!N;s/\n/\|/g;ta’):${PWD}\a”

这里的”\e]2″是xterm支持的第三种escape序列,用来设置窗口的标题
“$(.*)”的内容是shell命令,用来取出服务器的当前ip地址(除去127.x.x.x)列表,并用”|”连接起来
“${PWD}”是指当前的工作目录
“\a”是xterm支持的escape序列的结束符

引申一下

后来发现,所谓”xterm支持的3种escape序列”,基本上其他的term都支持
起码secure CRT里所带的term类型都支持(我测过)
而且redhat系列的服务器(redhat, fedora)除了支持/etc/sysconfig/bash-prompt-xterm外
还支持/etc/sysconfig/bash-prompt-screen、/etc/sysconfig/bash-prompt-default
用来存储当term类型是screen时和term类型不是xterm和screen时的PROMPT_COMMAND环境变量的值
于是乎

cp /etc/sysconfig/bash-prompt-xterm /etc/sysconfig/bash-prompt-default
cp /etc/sysconfig/bash-prompt-xterm /etc/sysconfig/bash-prompt-screen

这样的话
不管secure crt里term设成什么
都能在其标题里显示服务器ip

补充一下

为什么这里还有个term被设成screen的case呢
那是因为我们常用的命令screen
执行的时候会将环境变量PROMPT_COMMAND设成”screen”

cron的配置跑了2份!

2008年1月23日 哈哈 没有评论

前两天碰到个问题
某2台机器上某个log的logrotate总不对
上去看了看
一台fc3(fedora core 3)、一台RedHat9(够有年头了吧)
具体现象是xxxlog.1的大小为0,但是xxxlog.2倒是正常
而且时间正好是上一次做rotate的时间
再看了看/var/spool/mail/root和/var/log/cron
初步断定是xxxlog的logrotate跑了两遍导致的
但是哪里导致cron跑了2份呢

最后发现
crontab -l里有东西
而且跟/etc/crontab里的内容一样!
用crontab -e把里面的东西删掉
第二天早上log就正常了