I am LAZY bones? AN ancient AND boring SITE

分类: '故障分析' 的归档

ubuntu下luit的警告解决办法.

luit对于终端下的编码转换很有用,在我的sssh脚本里面就是用的这个转换编码,很方便.
但是,在ubuntu中luit执行的时候,却会出现如下错误(其实只是个警告而已,但总归看着不爽):
Warning: couldn’t find charset data for locale *****; using ISO 8859-1
其实这个警告的原因是ubuntu把系统文件 locale.alias 挪了个位置而导致的,可能没有对应修改luit的代码,导致luit找不到那文件了.
解决办法就是做个链接到原目录:

sudo mkdir /usr/lib/X11/locale
sudo ln -s /usr/share/X11/locale/locale.alias /usr/lib/X11/locale/

ubuntu下ssh慢的解决办法

在ubuntu下ssh登陆某些服务器,会发生需要等到十来秒才提示输入密码下现象,其实这个是debian做的一个配置上的修改引起的.
ssh_config(5) 的man页上有这样的说明:

Note that the Debian openssh-client package sets several options as stan-
dard in /etc/ssh/ssh_config which are not the default in ssh(1):

o SendEnv LANG LC_*
o HashKnownHosts yes
o GSSAPIAuthentication yes

这个问题正是最后面那项 GSSAPIAuthentication 引起的,打开这个ssh的时候可能会先去尝试其他的认证方式.很多地方都会介绍说修改 /etc/ssh/ssh_config 文件,但是其实这并不是最好的办法,因为在下次升级的时候,也许会因为配置文件被修改过,而引起不必要的麻烦.我的解决办法是修改个人用户的配置文件,如下:
echo “GSSAPIAuthentication no” >> ~/.ssh/config

又解决了一个ssh的问题

经常要ssh到一个服务器里面,通过这个服务器再ssh到另一个服务器(出于安全考虑,后者没有公网IP,必须先ssh到前者,再跳转),以前都是手工输命令,想用一行命令解决,于是这样写:
ssh userA@hostA “bash -c ‘ssh userB@hostB'”
倒是登上去了,但是出现一行:
Pseudo-terminal will not be allocated because stdin is not a terminal.
就没有任何提示了,而且也可以正常执行命令,就是没了PS1,多少觉得有些不爽.
今天发现,只要这样写,就可以一起正常了:
ssh -t userA@hostA “bash -c ‘ssh userB@hostB'”
哈哈, -t Force pseudo-tty allocation.
上面的情况是两步登陆都有公钥的,下面要解决提示输入密码的时候,改怎么办了….难道非得用 expect ?
PS: 有没有人知道ssh命令里面能不能直接输入密码的? 就像 ftp ftp://user:password@host 一样.

链接期的”undefined reference to”问题又一解

今天拿到公司的一个程序,在本机(ubuntu8.04)编译了一下,编译起见是一堆的警告:” 警告: 不建议使用从字符串常量到‘char*’的转换”,可以跳过去,但是到了链接期间,就又是可恶的 “undefined reference to”问题了,网上查了一些资料说是因为找不到 *.a/*.o 之类的库文件,或者是库文件里面没有相关的符号导致,但是我这程序原样复制到服务器里面,借给是可以编译的,而且提示错误的那个 .a 文件也是从服务器复制的,可以保证是一模一样的,但为什么本机编译就是不行呢?后来想到服务器是RHEL4,
gcc –version 的输出是: gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-8)
g++ –version 的输出是: g++ (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-47.3)
而我本机的 gcc和g++确都是 4.2.3 的新版本,会不会是编译器的版本不兼容呢?看makefile里面用的是 g++ ,所以我先安装了 g++-3.4 ,然后把makefile里面的 PUBCC = g++ 改为 PUBCC = g++-3.4 ,再编译的时候发现编译期间的警告没了,但是链接还是照样报错;于是又卸载了 g++-3.4,换成了 g++-3.3,再编译的时候,居然是一切正常,和服务器上的表现一样了….
最后: 虽然是找到了 链接期的”undefined reference to”问题 的又一个答案,但个人对编译器的不兼容问题表示忧虑.

重装了8.04

从7.10升级失败了,重装了8.04…
升级过程非常顺利,下载安装一气呵成,而且也没有以往那种升级完了,update一下又有更新的情况,反正是出乎寻常的顺利,然后重启,进入X正常,输入用户名和密码,没有看到桌面图标,也没有看到gnome-panel,但是在会话里设为自动启动的pidgin却正常,还可以往外发消息,alt+f2也没有出现”运行”对话框,导致运行不了其他的程序,切到tty1,pstree看到所有进程都正常,包括 nautilus和gnome-panel也有,就是没看到界面.由于不会在tty1下面启动gnome-terminal(按理设置了DISPLAY后,应该可以起来的啊,不知道为什么不行?),不知道怎么设置自动启动(现在知道是在 ~/.config/autostart 里面加个desktop文件了.),所以想了个偏招,因为pidgin会自动起来,就替换了 /usr/bin/pidgin ,在里面启动 gnome-terminal,结果倒是起来了,但就是一个空白的框框,不能输入任何东西,后来再换成 xterm ,终于可以正常输入命令了.
后来尝试过删除compiz,结果一样;删除gdm,手工startx,结果一样;把 ~/.* 的配置文件都移走,结果还是一样…郁闷…还有就是 新建一个用户,居然又是正常的,真不知道移走 ~/.* 以后的用户和新建的用户有啥区别…唉…无奈之下只能重装了…好在之前早就刻好了安装盘,安装也算快,还有/home的东西都在,损失也还不算大…
但是,从此 ubuntu 在我心里有个疙瘩了…

ntp服务器端的配置

上次我有篇文章写了本机如何和标准时间服务器进行同步的,这次是局域网里面的几个服务器之间的时间需要同步,因为仅需要同步,不需要是标准时间,所以随便选了一台当时间服务器,以它的时间为准.
服务器断需要启动ntpd这个服务,通过udp123这个端口和客户端进行通讯.由于服务器装的不是ubuntu,而是RHEL3,幸好ntpd已经默认装了,不用我去找rpm包了,嘿.于是以为执行下 srevice ntpd start 就好了,但是在其他机器上执行时却出错了:

  1. [root@localhost ~]# ntpdate -q 192.168.2.234
  2. server 192.168.2.234, stratum 0, offset 0.000000, delay 0.00000
  3. 15 Apr 11:36:20 ntpdate[30044]: no server suitable for synchronization found

网上查了很多帖子,最后发现问题了,是由于默认的配置文件拒绝了其他机器的连接.解决办法就是修改 /etc/ntp.conf ,注释了一开始的 restrict default ignore,然后重启一下服务就可以了.其实后来仔细研究了下,其实可以做到只开放某些机子有权限访问.比如只允许局域网访问的话,可以这样:

  1. restrict default ignore
  2. restrict 192.168.0.0 mask 255.255.0.0 notrust nomodify notrap

然后再执行 ntpdate -q 192.168.2.234
或者 ntpdate 192.168.2.234
就不会再出错了.

PS: 如果服务器是ubuntu的话,就不用这么麻烦了,我在自己的7.10上面实验过,直接 apt-get install ntp 就可以安装并启动 ntpd 了,而且也不用修改任何配置,就可以作为ntp服务器啦.ubuntu就是先进,嘿嘿.
参考资料: 鳥哥的 Linux 私房菜

SSH服务器端不认RSA公钥的故障实例分析

服务器端是RHEL3,客户端是ubuntu7.10,按正常方法,把客户端的RSA公钥放到了服务器端,之前也一直正常,一直能直接登录.
但从最近的某一天开始,RSA钥匙突然失效了,提示要输入密码,输了密码以后,又可以正常登录,看了服务器上的 ~/.ssh 下, authorized_keys 还在,内容也正常.以为是谁改了sshd的配置,于是使劲看 /etc/ssh/sshd_config ,都没发现什么问题.
因为经常要登录此服务器,经常要输密码.郁闷了,一时无从下手.irc问了一下,才想起查看日志,于是打开 /var/log/secure 一看,马上就茅塞顿开了,里面有这么一行:
Mar 24 09:50:39 hostname sshd[31640]: Authentication refused: bad ownership or modes for directory /home/username
呵呵,一看 /home/username 目录的权限,居然被谁设置成777了,马上改成 700 ,再试了一次,果然就正常了. :)
这也说明了出现未知问题的时候,日志文件的重要性.

compiz和fcitx冲突的解决办法

其实准确的说不能算是”冲突”,我机子上的现象是这样的:自从换了这个A卡机器后,装了开源驱动和xserver-xgl,成功打开compiz,但是一直存在一个问题,就是输完用户名和密码后的一瞬间可以看到fcitx的主窗口,但是随机就是黑屏(剩一个鼠标指针),估计是在加载xgl,然后进入桌面后,fcitx的主窗口就不见了,ctrl+space也打不开输入法,但是这时候,只要杀了fcitx再启动一次,就又好使了.大概是因为fcitx启动时间太早了,和后启动的xgl有冲突.
我的fcitx是通过im-switch配置的,于是有了下面的解决方法:
修改 /etc/X11/Xsession.d/80im-switch 找到最后包含有”eval”的两行,加#号注释掉,这样fcitx就不会随X启动了.
然后在gnome的会话里面加上fcitx,重新登录一次,就一切正常了.
要点是fcitx不随X启动,而是谁gnome启动,嘿嘿.

防止10分钟无动作屏幕自动黑掉

本来10分钟无任何鼠标键盘动作,就自动黑屏或者进入屏保也挺好的.但是我的机子上在用mplayer看电影的时候,居然也会黑掉,搞得我过一会就要去动动鼠标.
这可能是因为我的本本acpi有点问题,反正到现在,都还不能正常关机断电的…而且mplayer的时候也有这样的输出:
xscreensaver_disable: Could not find XScreenSaver window.
不知道有没有关系,既然搞不清楚,那大不了就不用那个自动黑屏的功能了,于是修改 /etc/X11/xorg.conf 在 Section “ServerLayout” 一段里面添加一下4行:
Option “BlankTime” “180”
Option “StandbyTime” “180”
Option “SuspendTime” “180”
Option “OffTime” “180” #据说只要有这行就行了,但不确定,反正我都加上了,嘿嘿.
以上时间的单位都是分钟,也就是3个小时后再黑屏,对于一般的电影来说已经足够了,哈哈.

刚又学了一招

以前一直用locate查找文件,也没想过它的工作原理,知道我那恢复过的gentoo系统里面出现了这种状况:
locate xxx
locate: warning: database /var/lib/slocate/slocate.db’ is more than 8 days old
什么都查找不了,google了一下,发现需要updatedb一下,嘿嘿,原来这个也有数据库的啊…以前见过updatedb这个进程,还在纳闷是什么进程呢,呵呵.