2011年1月24日星期一

多个A记录

最近尝试了一下多域名。域名是在name.com上放的,共两个A,但是两个地方的网页内容不同。

用w3m/0.5.2上,每刷新一次地址都变,很规律。Opera/11也变得比较勤,Firefox/3.6和Chromium/8要迅速刷几下才变。ping每次都变,OpenSSH是每次都调换顺序,如果第一个连接失败就换到下一个IP。Opera mini/5会变,Android/2.2(虚拟机)没见到变。Windows XP下的Safari/4、Chrome/8和IE/8都没看到变的。

我只是试验了下几个客户端的表现,其实还不知道服务端的策略呢。其实下面的回答就很概括了:
moi: 那客户得到的哪个?
任晓磊: 服务器可以按多种顺序输出,客户端也可以对顺序有自己的理解
如果www.example.com指向两个服务器,而这两个服务器同时也有SSH服务,那么SSH的时候,就不能确定连接那个服务器了。这时候就需要新设置A记录了,比如给admin.example.com设置单独的A记录,来作为SSH连接的主机。

发送自我的Windows Mobile 电话

2011年1月22日星期六

智能DNS

DNSPod网站提供了智能DNS,免费版本可以设置默认、电信、联通和教育网四个类型。如果在不同区域都有服务器,可以把各区域的A记录列到对应线路类型里面:

上面的除了最后一个IP是教育网的,其它两个都在国外,只是为了试验这个功能。

在域名注册的地方把NS改为DNSPod的,等了一天了还有地方没有生效,相比在name.com那里,改了几乎马上生效。这样在我联通的宽带访问,对应的IP就是第二个;在国外访问,就是默认的第一个。

DNSPod号称提供宕机检测,就是如果发现一个记录失效后,自动从列表中移除该记录,以让客户端解析到正常的记录上。但是免费版的并不提供这个功能,上当了。我是找国外免费的DNS failover服务,什么zoneedit, editdns, dnsmadeeasy, dyndns, freedns都看了,都没有免费的。

实际上这样的DNS failover是很被诟病的。经过我试用DNSPod的免费服务,记录修改后传播非常慢,而且在这个过程中,不同ISP网段下DNS的解析结果都不一样,很混乱。如果实际使用中这么混乱,问题可能比麻烦还多。

备份服务

不小心把FreeBSD搞宕机了,上面有主页,还有一些自己的Web服务。这个机器一时还没人给我去看,既然还有别的机器,就搞个服务的备份吧。最简单的备份,就是宕机后把域名的A记录改到新地址,然后在新机器上从桌面电脑同步一份主页的内容上去。这样把主页恢复了。

几个动态的站点只有FreeBSD上有,现在没法复制,就弄了一个恢复页面。所有的URI都定向到maintenance.php文件,要保证URI是maintenance.php的时候可以正常显示PHP文件:
server {
    listen 80;
    server_name *.fossilet.org;
    access_log  /var/log/nginx/fossilet.access.log;
    rewrite ^(.*)$ http://fossilet.org$1 permanent;
}

server {
    listen 80;
    server_name fossilet.org;
    access_log  /var/log/nginx/fossilet.access.log;
    root /var/www/fossilet;

    location / {
        if (-f $document_root/maintenance.php) {
            return 503;
        }
        index index.php index.html index.html;
    }

    error_page 503 @maintenance;
    location @maintenance {
        rewrite ^(.*)$ /maintenance.php break;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME /var/www/fossilet$fastcgi_script_name;
        include         fastcgi_params;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/nginx-default;
    }
}

2011年1月20日星期四

nginx的问题

弄个维护页面(PHP),可是所有PHP都显示Temporarily unavailable。以为是配置的问题。看error.log,是fastcgi的网关处理超时。再检查配置文件的时候,发现fastcgi的网关写成了128.0.0.1。真是低级的错误啊。可能是远程登陆上去速度很慢,切换screen的时候在Vim里面Ctrl-A正好把127增加到了128。

Firefox崩溃

下了个Firefox 4 beta 9,结果插件都不认,AutoProxy没法用,遂退回3。可是之后3持续崩溃,安全模式(-safe-mode)也无助。发现Firefox还有一个-g选项用来debug,是用gdb调试的。打开后start命令开始,发现Segmentation fault,出在/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/IcedTeaPlugin.so。用dpkg -S查找,是icedtea6-plugin这个包里面的。这个包是给Firefox提供Java Applet支持的,现在很少有网页用Applet了(我是为了看time.gov网站的时间才装的)。卸载掉这个包Firefox就正常了。

Firefox诡异的问题

改nginx虚拟主机配置,改完后reload,可是Firefox里头还是旧的内容。反复检查nginx的配置也没看出问题,然后打开Chromium上就没有问题。把Firefox的缓存清了之后,Firefox也没问题了。有时候Ctrl-F5刷新也没有效果,必须手动清楚Cache才行。

有时候出了问题,关键是找到问题产生的来源在哪里。用同类的其他工具进行试验,或者换个环境、参数试验,往往会很有帮助。

发送自我的Windows Mobile 电话

Python序列索引

s[i:j:k]的i和j是头和尾,k是步长,我却把中间的j当成了步长,再加上负数索引就更纠结了。代码:
s="foobar"
k=3
''.join([chr(ord(c)+1) for c in s[-1:-k-1:-1]])
其实用range可读性更好:
''.join([chr(ord(s[-i-1])+1) for i in range(k)])
发送自我的Windows Mobile 电话

2011年1月19日星期三

Google Apps的域名设置

Google Apps Sites可以给站点设置地址映射,这样可以用自己的域名来提供网页访问,如http://www.example.com,而不用https://sites.google.com/a/example.com/<sitename>。

其他的服务也可以修改网址,我想把Docs的网址改成自己的域名,然后再改CNAME,就不用翻墙,手机可以直接用了。中午试了,可惜发现别的服务改的网址都是重定向到Apps的登录页面,而不是像Sites一样全面的网址映射。这也难怪,因为别的服务都是HTTPS的,如https://docs.google.com/a/example.com,如果域名换成用户自己的,如http://docs.example.com就没法提供SSL加密了,要加密就不能用Google的证书了。

发送自我的Windows Mobile 电话

2011年1月17日星期一

FreeBSD发行版的生命周期

昨天发现FreeBSD服务器上的6.3已经支持期过了,就要升级,才发现只能升级7.3了(7.1版1月31号就到期了)。原来FreeBSD的发行版支持期只有1~2年啊,比我想象得要短,我以为像FreeBSD这样的服务器系统,应该是很稳定的,支持期很长呢。这里有图示,还有Ubuntu发行版的生命周期图示做对比。

2011年1月16日星期日

开始用Google Sites

以前用Google Sites写过几个网页,都是试试玩的。最近看到Android x86的网站是在Google Sites上创建的,然后就打算把我的个人主页也转到Google Sites上,以后新加的网页将在Google Sites上建立。如果还像以前一样用Vim写,效率还是比较低下,而且要自己做所有的维护工作。

第一个网页要在里面嵌入一个Google电子表格,Google Sites都直接支持插入的,所以非常方便。但是Google Sites的容量没有Google Apps Sites的大,于是又把网站从Google迁移到Google Apps。

初步了解了下在网页里面可以使用的GadgetsApp Script。以前没有接触过这些东西,所以花时间研究了下才知道这些东西怎么用。感觉Google提供的服务,不仅用起来很好,而且深层次的二次开发手段也很丰富,真是好东西啊。

我想在网页下面自动显示网页的最后更新时间,用Gadgets和App Script都试验了一下,还没有搞定。

如果要用自己的域名来访问Google Sites或者Google Apps Sites,需要把域名的CNAME指到ghs.google.com,可是这个是被中国大陆的防火墙屏蔽的, 需要采取点手段才能让网站不翻墙也在国内使用。我是用的you8g.com提供的服务。

2011年1月12日星期三

Debian菜单

Ubuntu下的Debian菜单里面有时候会有无效的项目,它们在~/.local/share/applications/menu-xdg下面。在这个目录里面rm -rf *看起来没什么伤害,Debian菜单里面的项是用menu包的update-menus命令生成的。

2011年1月9日星期日

Ubuntu版本生命周期图

一直想画一个甘特图一样的Ubuntu版本生命周期图,这样就可以直观地看到当前哪些版本还是官方支持的,以选择使用的版本,或者升级过期的系统。

每次遇到画图,就不知道选啥工具。这次用Ipe画了画,要精确到月的话太费劲了,精确到天就更不能想象了。后来决定用甘特图工具画好了,这样可以自动地处理日期,生成生命周期图。其实我想到用PSTricks肯定可以画得既漂亮又精确,但是这个是Tex的,太花时间了,还是作罢。最后在Google Docs里面找了个甘特图模板画的。
下面是嵌入的甘特图,RSS订阅的可能看不到,要进入文章原始页面查看。

电子表格文件的Google Docs链接

VirtualBox的鼠标

装了Android,发现没有鼠标,后来Google了一下,要把Absolute pointing device去掉:
手册里面是这么写的:
 Enable absolute pointing device
If enabled, VirtualBox reports to the virtual machine that a USB tablet device is present and communicates mouse events to the virtual machine through this device. If disabled, mouse events are communicated through a traditional PS/2 virtual mouse device. Using the virtual USB tablet has the advantage that movements are reported in absolute coordinates (instead of as relative position changes), which allows VirtualBox to translate mouse events over the VM window into tablet events without having to "capture" the mouse in the guest as described in the section called “Capturing and releasing keyboard and mouse”. This makes using the VM less tedious even if Guest Additions are not installed.[11]
原来如果是触控板输入,那么这样可以把虚拟机和宿主机的位置统一起来,比较省心,但是如果是普通鼠标,不能勾上这一项。

修复GRUB

从第一次使用Linux(Red Hat 9.0)时候,就需要学会修复GRUB。因为安装Windows的时候,会把GRUB的引导信息覆盖掉。那时候是用Redhat 9.0的光盘启动,进入修复模式,光盘会找到已经安装的系统。chroot进去后,grub-install /dev/hda就可以了。

后来用了Debian,Linux用了udev,在/dev下的设备名是动态生成的,而不是像以前一样静态的,不管有几块硬盘,/dev/hda1、2什么的一堆都有。

这样子如果用Live CD启动,Live系统的/dev下面是没有硬盘设备名的。这里需要用mknod手动生成:
# mknod /dev/sda1 b 8 1
然后挂载要修复的系统再chroot进去:
# mount /dev/sda1 /mnt
# chroot /mnt
进去后还要再生成/dev/sda:
# mknod /dev/sda b 8 0
然后安装grub即可:
# grub-install /dev/sda
mknod要创建的设备名的大号和小号在/usr/src/linux/Documentation/devices.txt。

Android初体验

今天在VirtualBox里面装了Android玩,不用买手机就可以体验Android了。Android-x86这个项目把Android移植到了x86平台,在这里下载

一开始我用的froyo-vm-20100812.iso(2.2),用起来图形很卡,而且装到硬盘上之后进不去。后来用了一个现成的1.6版的虚拟器件,进去不卡,但是网络不通。再用froyo-eeepc-20110101.iso,不卡了,网络也正常。还用了老一点但是稳定版的android-x86-1.6-r2.iso,也没有问题。



台式机上没有WIFI网络,定位功能没法用,就试着在我的Dell Inspiron 14V上装1.6和2.2,Linux能进去,但是图形界面都出不来。毕竟不是拿个笔记本就能兼容的。

2011年1月8日星期六

VirtualBox的硬件3D加速

今天要在VirtualBox的Windows客户机下试验一个Vega Prime的例程,打开的时候vbox弹出如下的对话框:


是说要在客户机里面借用宿主机的硬件3D加速,Guest Additions的版本要和vbox的版本一致。我一看Windows状态栏Guest Additions的版本才是2.1.4,而vbox的版本是3.2.8。这个Guest Additions是宿主机里面的/usr/share/virtualbox/VBoxGuestAdditions.iso文件。Ubuntu不断升级vbox,这个ISO文件也更新了,但是客户机里面安装的Guest Additions不会自动更新,所以里面还是很老的版本。需要再装一次。

装完后Vega Prime的例程可以运行了。但是植物大战僵尸里面的硬件3D加速还是不能启用:



 查看了vbox的手册,有这样一段
For Direct3D support in Windows guests to work, the Guest Additions must be installed in Windows "safe mode". Press F8 when the Windows guest is booting and select "Safe mode", then install the Guest Additions. Otherwise Windows' file protection mechanism will interfere with the replacement DLLs installed by VirtualBox and keep restoring the original Windows system DLLs.
原来要在安全模式下装Guest Additions:

 

这样装过之后,植物大战僵尸里面还是不能启用3D加速。就装了一个Supertux 0.1.3,帧率在90以上。但是如果选择OpenGL模式就会崩溃掉:

这至少说明Direct 3D功能在Supertux里面用上了,不然FPS能达到90多吗。

看了下植物大战僵尸的说明书,系统要求是DirectX 8或者以上的版本,用的不是OpenGL。不能3D加速就不能吧,vbox的手册里面说对Windows客户机的3D加速还是试验性的,所以就别指望每个程序都能用了。

2011年1月2日星期日

优盘上的Ubuntu

用Ubuntu自带的usb-creator-gtk可以非常方便地在优盘上创建一个系统,用作安装盘或者应急系统使用。用这个优盘从别的电脑里面拷了点东西,然后在自己的Ubuntu桌面上打开这个优盘,系统的主要内容是在casper/filesystem.squashfs这样一个600多MB的大文件里面(Live CD里面也是一样的内容),这是一个squashfs格式的文件。把文件挂载上去,得到一个Linux系统的根目录,但是home里面是空的,没法找到我拷贝进去的文件。必须从这个优盘启动系统,才能看到拷进去的文件。