2009年4月18日星期六

thinkpad on screen display 修复

系统重装后, on screen display 居然坏了, 调节音量和屏幕亮度没有屏显很不习惯.

google了一下解决办法, 记录如下:

1、首先你要保证你的按键是可行的,也就是说你的键盘热键驱动装好了!
2、右键——属性——设置——On screen display 里把那个勾勾上,填上数据,你会发现size选项填了没用!
3、进注册表HKEY_CURRENT_USER\Software\IBM\TPHOTKEY\OnScreenDisplay把size改为00 00 10 10
4、重起机子就会发现进度条又回来啦!
出现这种得原因是安装了新版本的On screen display造成的,也可以改回原来的驱动!

2009年3月31日星期二

nginx基于域名的rewrite实现

工作中需要将一台server从lighttpd环境迁移到nginx上.
遇到一个问题,原来lighttpd.conf配置中:

$HTTP["host"] =~ "^([^.]+)\.test\.com" {
server.document-root = "/docroot"
url.rewrite = ( "^/$" => "/index.php?username=%1")
}

访问 http://abc.test.com/ rewrite 到 http://abc.test.com/index.php?username=abc

nginx 配置没有lighttpd灵活,rewrite 只能对url中path部分操作.

查看nginx 文档 发现,新版本已经内置了变量可以直接读取host了
设置如下:

http {
servername *.test.com;
...

if ($http_host ~* "^(.+)\.test\.com") {
set $user $1;
rewrite ^/$ /index.php?username=$user last;
}

...
}

搞定,收工!

后话: 根据文档 $host 和 $http_host 应该是等价的,但是开始的时候我用$host不成功,不知道为什么,没时间研究下去了,有人看看源码告诉我结果吧,嘿嘿.

2009年3月16日星期一

proftpd开发module 小记

工作中遇到一个需求,通过ftp server实现文件hard link.

首先想到的是找找有没有已经提供这个功能的ftp server,google了一圈,找不到.

自己动手,丰衣足食,既然找不到那就自己写吧.

服务器上面正在使用的是proftpd, 接下来要做的就是开发一个module来实现hark link了

以前没写过,先找开发资料看看吧.

再次google 一下 "proftpd develop", 找到http://www.castaglia.org/proftpd/

资料挺多的,要看好一会了了.

顺藤摸瓜 又找到这里 "On the FTP commands supported" .

SYMLINK
Used to create a symbolic link (a.k.a. a symlink) from the source path (src) to the destination path (dest).
Example:

SITE SYMLINK src dest
Supported by the mod_site_misc module.

OMG ,原来proftpd支持symbol link!! hard link实现近在咫尺了.

在proftpd source 目录 ,contrib/mod_site_misc.c 里面顺利找到 具体代码实现函数 site_misc_symlink
copy and modify增加一个函数 site_misc_link, 除了一些提示,日志信息修改(SYMLINK 改成 LINK)之外,就只需把最后做symlink 的调用改成 link调用.

略读了一下mod_site_misc.c 代码,发现跟apache module结构极其相似, 由此猜测增加一个命令实现函数,需要在某处钩子加上我新增的函数. search site_misc_symlink,找到:

static cmdtable site_misc_cmdtab[] = {
{ CMD, C_SITE, G_WRITE, site_misc_mkdir, FALSE, FALSE, CL_MISC },
{ CMD, C_SITE, G_WRITE, site_misc_rmdir, FALSE, FALSE, CL_MISC },
{ CMD, C_SITE, G_WRITE, site_misc_symlink, FALSE, FALSE, CL_MISC },
{ CMD, C_SITE, G_WRITE, site_misc_utime, FALSE, FALSE, CL_MISC },
{ 0, NULL }
}

site_misc_symlink 下面增加一行

{ CMD, C_SITE, G_WRITE, site_misc_link, FALSE, FALSE, CL_MISC },

按照 这里 的方法编译通过, 测试功能一切正常.

后记,mod_site_misc module并没有日志功能,为了提供日志,还改写了大量代码.实现过程比主功能(文件hard link)实现复杂多了, 感觉怪怪的.不过日志功能必不可少,也没办法了.

2009年1月26日星期一

过新年,洗键盘

网上淘回来的二手小茶轴键盘,转眼已经用了1年多了..

机械键盘就是好,手感依然没有变化,只是已经脏得不成样子了.
本来想换个HHKB用一下,无奈囊中羞涩..只好继续让这个发光发热了.

新年新气象,给它洗个澡吧
先上一张洗澡前照片:



把所有键帽拔下来,浸到清水里面:


以下是本次清洗大行动的强力武器, 纳米科技海绵,效果真不是盖的..感谢妈妈友情提供,哈哈.


经过一个多小时的搏斗,换水N次(N=1)之后,终于洗干净啦~~

晾干之后就可以装回去啦,在此之前,郑重感谢本人生活秘书老婆大人伸出援助之手,独立承担了清洁键盘主体的工作,希望再接再厉,来年承包整个键盘的清洗,咔咔.

是不是象新的一样? yeah~!

2009年1月7日星期三

mysql replication 故障处理一则

今早收到报警邮件,来至一台mysql slave

***_db : Slave io may not running.

 

 登陆到那台服务器上查看

mysql> show slave status\G

的确看到

Slave_IO_Running: No

 

不解,遂继续查看mysql slave 的error log

090107 11:57:41 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
090107 11:57:41 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log
090107 11:57:41 [Note] Slave I/O thread exiting, read up to log '***-bin.000147', position 660737192

 

slave 去读取binary log,但是超出了master 上实际log的大小, 奇怪,我再登陆到master上查看


-rw-rw----  1 mysql mysql  660726317 Jan  7 08:04 ***-bin.000147
-rw-rw----  1 mysql mysql    7791850 Jan  7 08:54 ***-bin.000148
-rw-rw----  1 mysql mysql   19955513 Jan  7 11:59 ***-bin.000149

明白了,***-bin.000147 只有660726317  bytes,但是slave 要读取的是第660737192个byte, 当然失败了.估计是master 曾经出错重启了,丢失了部分的binary log.


接下来是如何处理, 安全可靠的办法当然是重新copy一份master数据到slave上,初始化一遍,从头开始.
在数据完整性要求不是这么强的前提下,可以用另外一个方法.
强制slave读取下一个log文件

mysql> CHANGE MASTER TO MASTER_LOG_FILE = '***-bin.000148' , MASTER_LOG_POS = 0;
mysql> slave start;

 
搞定!