2010年12月31日星期五

折腾VPS

1)VPN
在RapidXen买的VPS,PPTP和OpenVPN的转发都有问题。就是在这个诊断方法中的第6步挂了。从客户机ping某个因特网主机,然后一切都正常,但是从该主机应答的包回不来。具体就是开VPN的情况下,ping g.cn,在VPN服务器端抓包是如下结果:
# tcpdump -n -i tun0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 96 bytes
19:56:47.576331 IP 10.8.0.10 > 203.208.39.99: ICMP echo request, id 5592, seq 18, length 64
19:56:48.576924 IP 10.8.0.10 > 203.208.39.99: ICMP echo request, id 5592, seq 19, length 64
19:56:49.576452 IP 10.8.0.10 > 203.208.39.99: ICMP echo request, id 5592, seq 20, length 64
19:56:50.575835 IP 10.8.0.10 > 203.208.39.99: ICMP echo request, id 5592, seq 21, length 64
可以看到,只有echo request却没有从g.cn的echo reply。
所有的数据包都回不来,导致VPN没法用来翻墙了。

2)VPS
在VPS的客服里面提问,他们说可能是内核有问题,让我用PV-GRUB后使用发行版的内核。用PV-GRUB可以在Xen虚拟机中使用发行版的内核,而不是Xen提供的内核。

话说RapidXen的支持实在是太烂了,管理界面改成PV-GRUB,从操作界面里面的Send shutdown signal再Start the VPS不行,要用Immediately stop VPS才能在提供的内核和PV-GRUB之间成功切换。整个Web管理应用功能非常之简陋,而对VPS的配置也没有任何文档积累,到服务商的支持IRC里面问,也半天没人说话。

最后是根据Linode的文档,用上了Ubuntu 10.04 LTS(Lucid Lynx)自带的内核。但VPN的问题仍然没有消失。没办法啊,只好用SSH了,反正SSH也比较方便。

更新:2011年1月2日。客服回复说在library里面有PV-GRUB的设置文档,让我才知道他们也有知识库,不过里面只有3篇文章。

中文输入法

为了进入GNOME自动启动中文输入法,我都是在~/.gnomerc里面添加类似如下的内容:
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
export QT4_IM_MODULE=ibus
ibus-daemon &
如果是fcitx或者SCIM,就相应做修改。
今天发现去掉这些内容,ibus也是能启动的,只要在主菜单的System->Administration->Language Support里面把Keyboard input method system设置为ibus即可。

2010年12月30日星期四

Bash的输出重定向

直接在Bash中执行
ssh -v -N -f -D 7070 user@1.2.3.4 &>out.ssh
那么stdout和stderr都被定向到了out.ssh文件中。
但是如果分像下面这样分两步(在脚本中会这么用):
SSH_COMMAND="ssh -v -N -f -D 7070 user@1.2.3.4 &>out.ssh"
$SSH_COMMAND
那么就看不到out.ssh,似乎&>out.ssh被理解为在1.2.3.4的主机上重定向。
必须这么改:

SSH_COMMAND="ssh -v -N -f -D 7070 user@1.2.3.4"
$SSH_COMMAND &>out.ssh
才能得到和交互执行一样的结果,即定向到本地文件。是什么原理呢?

Update:2/28/2011 用eval "$SSH_COMMAND"是可以的。或者放到一个函数里面再执行。

2010年12月26日星期日

GNOME没有窗口边框的问题

这个Bug有好多年了吧。就是用了Compiz,还用Emerald窗口边框的话,有时候进到GNOME里面没有窗口边框。要停用、再启用桌面特效才会出来。网上搜索了下,有的方法是把Emerald删除掉。我现在的最简单的解决方法(有点dirty),就是在GNOME的启动程序里面,加上一行命令:

emerald --replace &
这样在进入GNOME时,再强制执行一次Emerald。这么做后,目前还没有出现过窗口边框消失的问题。

SSH Tunnel不能自动启动,2

上次研究了SSH Tunnel不能自动启动的问题,没想到用了autossh后还是有问题,进入桌面后没有建立起来。于是用

ssh -v -N -D 7070 user@1.2.3.4 &>out.ssh
的命令来观察。ssh的-v参数打开详细输出,&>out.ssh把stdout和stderr都重定向到out.ssh文件。

观察发现out.ssh的如下内容:
debug1: Connecting to 1.2.3.4 [1.2.3.4] port 22.
debug1: connect to address 1.2.3.4 port 22: Network is unreachable
ssh: connect to host 1.2.3.4 port 22: Network is unreachable

如果在启动ssh命令前,加上sleep 5再试验,就发现网络可以正常连接。本文通过观察ssh的输出,再次验证了原文中的假设是正确的。

2010年12月22日星期三

同步Chromium和Firefox的书签

一般情况我是用一个浏览器的,只有出了问题才换成另一个。今年下半年,从用了多年的Firefox转到了Chromium, 为的就是Chromium快。但是最近Chromium很不靠谱,用久了会很慢,把电脑也拖很慢。而且Proxy Switchy!插件很不靠谱,明明不用翻墙的网站比如豆瓣电台,也要用代理,导致听歌都不爽。就这样换回Firefox,书签的同步是要考虑的问题。

我在Chromium里面设置了和Google同步,在Firefox里面和Chromium里面都装了Xmarks来同步书签。这样子Chromium里面有两种同步机制,如果两种同步之间本身不能同步,就会搞乱书签。在Firefox里面又会出问题。

目前总结出的如下方法,可以正确地同步。

Chromium仍然和Google同步,但是两个浏览器的Xmarks都禁用。需要从Chromium换回Firefox的时候,把Chromium里面的Xmarks启用,Xmarks同步好后再禁用,然后关闭Chromium。打开Firefox,启用Xmarks,再同步,就可以把Chromium里面的书签完美同步到Firefox了。如果再要从Firefox换回去,可类似的过程进行。

2010年12月11日星期六

GNOME小技巧——文件命名

刚发现的。按一下F2给文件命名,只选中后缀前的部分;如果再按一次F2,则选中整个文件名。很贴心啊。

2010年12月7日星期二

Vim中的^M

今天在Ubuntu下编译安装Xen,中途下载了一个给git设置代理的脚本,执行时出现下面的错误:
tux@Neverland:~/bin$ ./gitproxy
bash: ./gitproxy: /bin/sh^M: bad interpreter: No such file or directory
看起来是行末有^M,是DOS格式的文件。但是Vim不显示行末的^M,让我没注意到是DOS格式的。如果用vim -u NONE来打开文件(不读取任何vimrc文件),就会显示^M。我想一定是我vimrc里面的某行设置,导致vim不显示^M的。我到Freenode的#vim频道咨询,得到了答案:
<Fossilet> I want to find which init line causes ffs to be set.
<mgedmin> -u NONE tells vim not to look for vimrc files
<mgedmin> which line? no line
<mgedmin> I repeat myself: the mere presence of a vimrc turns off 'compatible' which in turn sets 'fileformats' to "unix,dos"
就是说只要有vimrc存在,就会把兼容模式关闭。这种情况下,在Linux平台fileformats是unix和dos,vim会自动检测unix和dos格式的文件。

我是希望Vim能够在文件中显示^M的,这样就很明显,不用运行了脚本才知道了。可以用set fileformats="unix"来关闭对DOS格式文件的自动检测,这样^M就原样显示了。不过没有必要的,如果打开的是DOS格式文件,Vim窗口最下面的状态栏会显示[DOS]的 。