分类: '故障分析' 的归档
gentoo下的pppoe拨号
最近,无线路由坏了,所以只能先用自己的电脑拨adsl了。
其实这本也没什么,我的win7和ubuntu都只要稍微设置一下就OK了。
这里再稍微提一下ubuntu的pppoe设置:记得以前的版本(应该是6.xx的时候吧),NetworkManager是不直接支持pppoe的,还要自己手工设置,然后执行pon/poff来拨号,但是现在进步了,直接在NM里输一下用户名和密码就可以上了。
但是我的gentoo是用wicd来管理网络的,而wicd至今都还不支持pppoe,于是只能用原始的命令行来拨号了。
于是eix一搜,发现有个net-dialup/rp-pppoe,安上,看到有 pppoe-setup、pppoe-start、pppoe-stop。啥都不用说了,先pppoe-setup,再pppoe-start,本以为会很顺利,但是几次尝试都在最后一步出错了,而且提示的错误都没啥价值,不知道从何查起~
正当我无计可施,想妥协安个NetworkManager的时候,忽然灵感一现,发现了可能的错误原因,那就是──内核模块。原来,之前我的gentoo内核基本上也是按需配置的,以前我一直都有路由器拨号,所以没有在内核选项里打开ppp的支持,才导致了这一郁闷的结果,哈哈,既然发现了可能的原因,那就好办了,make menuconfig 里面选上 Device Drivers —>Network device support —>PPP (point-to-point protocol) support 下面的所有项,编译完再重启。再 pppoe-start ,果然看到了 Connected!
记一下我的ubuntu升级到10.04时遇到都问题
今天,为了测试一下阿里拼音,很难得地进了一次ubuntu,后来发现居然还是9.10的版本,看不下去了,就顺手升级了一下。
本以为这种升级历史上已经做过很多次,应该不会有什么问题的,但是今天还是遇到问题了,就在这里记一下吧。
我升级的思路比较老土,就是先
sudo sed 's/karmic/lucid/g' -i /etc/apt/sources.list
再apt-get update,再一直交替进行upgrade和dist-upgrade,直到完全没有错误,再重启。如果中间遇到某个包有问题,一般是先卸载这个包,升级完成以后再给安装上就好了。
但是今天遇到一个无法先卸载的包,到某步的时候,出来这样一个错误:
E: Could not perform immediate configuration on ‘util-linux’.Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)
很明显,这个是 util-linux 包出问题了,但是这个包太底层了,如果卸了这个,整个ubuntu就差不多没了,我可不敢保证我还能给折腾回去。
解决问题的思路:
先试着手工dpkg安装这个包:
sudo dpkg -i /var/cache/apt/archives/util-linux_2.17.2-0ubuntu1_i386.deb dpkg:对于含 util-linux 的文件 .../util-linux_2.17.2-0ubuntu1_i386.deb 来说,有预依赖(pre-dependency)方面的问题: util-linux 预依赖于 libc6 (>= 2.11) 已安装了 libc6,不过安装的版本是 2.10.1-0ubuntu17。 dpkg:处理 /var/cache/apt/archives/util-linux_2.17.2-0ubuntu1_i386.deb (--install)时出错: 预依赖(pre-dependency)问题 - 将不安装util-linux 在处理时有错误发生: /var/cache/apt/archives/util-linux_2.17.2-0ubuntu1_i386.deb
看来其实是libc6这个包版本有问题,于是查到这个包及其依赖包的deb,手动下载并安装:
wget http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/libc6_2.11.1-0ubuntu7.2_i386.deb wget http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/libc-bin_2.11.1-0ubuntu7.2_i386.deb sudo dpkg -i libc6_2.11.1-0ubuntu7.2_i386.deb libc-bin_2.11.1-0ubuntu7.2_i386.deb
这样成功以后,就比较好办了,虽然直接dist-upgrade仍然不行,但是执行
sudo apt-get dist-upgrade -f
就可以成功解决此问题了。
现在分析看来应该是由于我的sources.list里面没有security部分造成的,如果在里加上
deb http://security.ubuntu.com/ubuntu lucid-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu lucid-security main restricted universe multiverse
应该就不会错了吧~
都说ubuntu的大版本升级比较折腾,看来还真是,呵呵。幸好咱也算老手了,不然遇到这种问题,还不被整成重装啊?
vsftpd只能匿名登录,本地用户出现530错误的一个实例
网上很多教程,在介绍vsftpd的本地用户的配置的时候,大意都是这样的:
建立一个xxx用户,家目录为/yyy/zzz,并把这个用户的shell(/etc/passwd里对应行的最后一列)设置成/sbin/nologin或者是/bin/false,再设置一个密码。
然后修改vsftpd的配置文件,一般是/etc/vsftpd.conf,加上:local_enable=YES
write_enable=YES
local_umask=022然后重启vsftpd就可以了。
对于出现530 Login incorrect. 的解释一般是两种:
1. xxx用户对 /yyy/zzz 没有权限。
2. xxx用户被加到 /etc/vsftpd.user_list 列表里了。
但是我今天的操作中,这个新建的用户并没有发现以上两种现象,仍然出现了可恶的530错误,但是匿名用户正常登录。
折腾半天以后,发现用一个shell是/bin/bash的用户却是可以登录ftp的。于是,试着把xxx用户的shell也改成/bin/bash,果然也可以登录了。但是这样显然还没有解决我的问题,因为这样一来,xxx这个用户都可以通过ssh登录服务器了,安全就没有保障了。
于是再找更详细的原因,终于发现了:
其实vsftpd对本地用户鉴权的过程中是可以检查用户shell的合法性的,而且默认就启用了。虽然你可以在配置文件中通过添加
check_shell=NO
来取消vsftpd对shell的检测,但是这个配置项要生效却有个前提:编译的时候不能包含PAM特性(一种*nix系统中的插件式身份鉴别模块),而ubuntu等发行版的二进制包并不能满足这点,所以除非你是自己编译的vsftpd,这个配置项是没有多少用的。
要解决这个问题,还得继续问:vsftpd是怎么检查一个shell是否合法呢?其实这个答案很简单,vsftpd读取 /etc/shells 这个文件,如果用户的shell在这个文件里存在,就认为合法,否则即使你输入了正确的密码,仍然会给你一个530,哈哈。
所以,解决办法就是:把 /sbin/nologin 或者是 /bin/false 加到 /etc/shells 中去!
grub故障一例
昨天,心血来潮进了一下许久没有使用过的ubuntu,然后顺手给它升级了一下,发现这个把月已经有200多M的更新了,其中也包括内核在内。
于是开开心心地dist-upgrade完了,也没啥异常。但是到了昨晚,再开机的时候,发现机器没有正常显示grub菜单,而是直接进入了GRUB>这样的命令行。幸好我还记得几个grub的命令,瞎蒙地还算是启动了我的gentoo,然后上网一google,发现这个问题和我之前把文件系统全面升级到ext4有关:在升级了文件系统以后,再升级内核的话,就会导致grub找不到某些文件而无法正常工作。
解决办法就是在gentoo里chroot到ubuntu的/分区(因为我的grub是在ubuntu下安装的),然后执行:
grub-install --recheck /dev/sda
如果没报什么错误的话,那恭喜你,你的grub又回来了。
当然,有人会问:如果我硬盘上没有gentoo或者记不住grub命令无法启动的话,怎么办呢?其实很简单,你只要随便找个linux的LiveCD,或者U盘系统之类的,启动以后,就一样可以chroot了。
哈哈,linux很灵活,所以基本是不死的(当然你要对它有足够了解才行)~
lafilefixer
前几天,对gentoo进行常规升级的时候,就有个别包没有编译过去,这对gentoo来说本不算什么的(谁让咱用的是 ~x86 呢),也就没太在意,但是近来越来越多的不同的包都出现了同一个错误:
报缺少 /usr/lib/libGL.la 文件,revdep-rebuild 也不能解决问题,甚至 revdep-rebuild 的过程中也有这个错误。
于是到sir里搜了一下,发现已经有人问过了,也得到了解决。
解决办法就是装上 lafilefixer ,运行一下
lafilefixer --justfixit其实,la文件本身就是一个记录同名动态库或者静态库文件信息的一个文本文件。而lafilefixer也仅仅是一个bash脚本,它把需要更新的la文件都重写了一遍,哈哈。
Gentoo换了profile以后,鼠标键盘不能动的解决办法
Gentoo 10.0 的profile出来已经蛮久了,但是我一直都没换,直到昨天才设置成了 default/linux/x86/10.0/desktop ,结果一大堆包需要重新编译了(呃。。好吧,其实我本来就有好几天没更新系统了。。)。
编译完重启就发现问题了:启动到gdm以后,鼠标键盘都动不了了,按什么键都无效,输不了用户名了,包括ctrl+alt+F1都不管用了,但是触摸板却是有效的。
第一个想到的 qlist -I -C x11-drivers/ 里面的几个包重新编译一下,发现无效;然后看elogv,发现hal说要把xorg.conf里的input相关的都删掉,试了也无效。
最后的解决办法是:在 /etc/make.conf 的 INPUT_DEVICES= 里加上 evdev ,然后安装 x11-drivers/xf86-input-evdev 这个包。
使用了ecryptfs的情况下,ssh的publickey登陆无效的解决办法
eCryptfs – Enterprise Cryptographic Filesystem 是linux下一个企业级的磁盘加密系统。
使用这个系统,可以使得用户的文件只有在用户登陆以后才是可见的,这样,即使你的硬盘被人偷走了,只要的你的密码足够安全不被破解,人家也无法读取你的私人文件(CGX真该用这个啊)。
目前,ubuntu 9.04 server 在安装时,已经可以选择用eCryptfs来加密用户的家目录了。
今天我装服务器的时候,觉得这个挺好玩的,就顺便启用了,却导致了一点点小问题,如下:
我在装好服务器openssh-server以后,很自然就把我的公钥复制到服务器上,来减少我输入密码的麻烦。没想到,登出了以后,再登进来时,原本应该不用密码的,却还提示我输入密码。后来还发现,只要有一个用密码登陆成功了以后,其他termianl再登陆的时候,就是正常的。于是想到可能就是 eCryptfs 搞的鬼,放google一搜,果然是的,已经有先例了。
那bug里解决办法也有了,我再贴一下:
方法一:
$ /sbin/umount.ecryptfs_private $ cd $HOME $ chmod 700 . $ mkdir -m 700 .ssh $ chmod 500 . $ echo $YOUR_REAL_PUBLIC_KEY > .ssh/authorized_keys $ /sbin/mount.ecryptfs_private
这样就可以把你的公钥加到服务器的还未解锁的家目录下了。ssh的鉴权自然也可以顺利通过了。
方法二:
修改服务器的 /etc/ssh/sshd_config 把authorized_keys放到用户家目录以外的地方,以避开此问题。
例如加上:
AuthorizedKeysFile /etc/.ssh/%u/authorized_keys
延伸阅读:另一起SSH服务器端不认RSA公钥的故障
GRUB故障一例
今天一早,MM就打电话来说,她的电脑启动不了了,开机只显示一个GRUB…
当时由于各自在公司,不好处理,于是她先用ubuntu liveCD撑着,下班了,把电脑背了回来~
我打开一看,乖乖,果然只有一个”GRUB “,注意不是”GRUB> “后面跟一个闪动的光标,而是纯粹的GRUB空格后一个不会闪的光标,按任何键都没有用了.
故障肯定是MBR被破坏了,也不知道是不是windows下的病毒干的…
由于这电脑装的是原装的ubuntu+XP,恢复分区也已经在装XP时被我干掉了.之前备份的MBR也不知道去哪了…于是首先尝试用liveCD恢复grub.然而,可能由于之前装的grub2,jaunty liveCD里的grub仍然是老的,所以 grub-install 一直都没能成功.
后来我是在liveCD里这么做才成功的:
sudo mkdir /mnt/sda3 sudo mount /dev/sda3 /mnt/sda3 sudo mount -t proc none /mnt/sda3/proc sudo mount -o bind /dev /mnt/sda3/dev sudo chroot /mnt/sda3 /bin/bash sudo grub-install /dev/sda3 sudo update-grub
这个故事告诉我们,有时候用liveCD修改MBR不成功的话,可以chroot用原来的grub的可执行文件进行修复,成功的概率会高很多~
终于在开源驱动下开起了compiz
写之前那篇blog的时候,我还是刚用上开源驱动.但是怎么试性能都上不去:
xorg.conf 也改了很多次,把 /etc/make.conf 里的 VIDEO_CARDS 改成 radeon 和 radeonhd 都试过,mesa xorg-server也来回编译过好几次,包括1.6的xorg-server,但是 glxgears 始终只有100FPS左右(fglrx的时候可以到2500+).而且,更可恶的是开compiz不是没边框就是直接白屏…
后来,查看 Xorg.0.log ,发现里面有这么几行:
drmOpenDevice: node name is /dev/dri/card0 drmOpenDevice: open result is -1, (No such device or address) drmOpenDevice: open result is -1, (No such device or address) drmOpenDevice: Open failed [drm] failed to load kernel module "radeon" (EE) RADEON(0): [dri] RADEONDRIGetVersion failed to open the DRM [dri] Disabling DRI.
这种/dev/xxx的东西,马上就想到了是内核的原因,后面wd告诉我说要打开这个内核选项: Device Drivers -> Graphics support -> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) 并选中下面的A卡模块.
马上重新编译了内核,再启动,果然那几行错误没有了, glxgears 已经到 1100FPS 以上了.开compiz也正常了,整体感觉还是比较流畅的.
先就这样用着吧,不折腾了~目前我的情况是:
Mobility Radeon X1700 (RV535) VIDEO_CARDS="radeonhd" sys-kernel/gentoo-sources-2.6.30-r1 media-libs/mesa-7.4.2 x11-base/xorg-server-1.6.1.901-r3 x11-drivers/xf86-video-radeonhd-1.2.5 x11-wm/compiz-0.8.2-r2
gentoo升级后的若干问题
半个月前的某一天,我正在对gentoo进行常规更新的时候,记得当时emerge到了wine,突然屏幕一黑,机器就保护性关机了…用手一摸CPU附近,那是相当地热…
于是,最近一段时间都没有升级过gentoo.
直到后来,我把本本后盖打开,清理了一下里面的灰尘.听风扇的噪音,明显比之前小了很多了,温度也没那么夸张了.于是又开始升级了,一看已经积累了108个包要编译了.这还是我mask掉新内核的结果.
编译之后,nautilus 到了2.26.3,晚上下班后,重启进系统,就发现不对劲了,一堆的窗口把窗口列表塞满了… 后来经过试验发现,只要我一把 /apps/nautilus/preferences/show_desktop 这个勾去掉,就会启动N多个nautilus的窗口,下面的窗口列表里瞬间被挤满了..并且还在不断增加,直到内存耗尽…
问了keke他的情况刚好和我相反,是勾上那个勾勾才会出问题…这个估计是nautilus的bug了,没时间深究,等上头更新了,现在就先看着本不想看到的桌面吧…
还有一个好玩的问题,就是我的音量调节的图标没了,之前还以为是 gnome-volume-manager 这个包的问题,后来TX提醒我才想起这个volume是卷(磁盘分区)的意思,和音量根本没关系,汗了…这算不算英文词汇的匮乏呢?
其实,那个音量调节的applet是在 gnome-base/gnome-applets 里面的.重新编译了一下,又可以用了.而且,那调音量的滚动条变横着了…我怎么觉得还是没竖的好看呢?
====20090630更新====
nautilus疯狂打开窗口的问题终于好了…难道是昨天编译了gnome-base/gnome-session-2.26.1-r1的原因?不管怎么样,我的桌面总算又干净了~