博文

目前显示的是 一月, 2008的博文

嘿嘿,zfs,开玩

嗯,首先用uname查看下版本。
bash-3.00# uname -srv
SunOS 5.10 Generic_120012-14
然后,卸载各分区。
bash-3.00# umount /data1
bash-3.00# umount /data2
bash-3.00# umount /data0
然后,创建zpool
bash-3.00# zpool create snnn_data mirror /dev/dsk/c1t1d0s2 /dev/dsk/c1t2d0s2
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t1d0s2 contains a ufs filesystem.
/dev/dsk/c1t1d0s2 is normally mounted on /data1 according to /etc/vfstab. Please remove this entry to use this device.
/dev/dsk/c1t1d0s2 overlaps with /dev/dsk/c1t1d0s8
修改/etc/vfstab,注释掉相关行后重试
# zpool create snnn_data mirror c1t1d0s2 c1t2d0s2
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t1d0s2 contains a ufs filesystem.
/dev/dsk/c1t1d0s2 overlaps with /dev/dsk/c1t1d0s8
嗯,是的,以前有一个ufs了。那么,强制重试
bash-3.00# zpool create -f snnn_data mirror c1t1d0s2 c1t2d0s2
嗯,看看结果:
bash-3.00# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
snnn_data 68G 89K 68.0G 0% ONLIN…

去腾讯玩~

今天去腾讯北京分部玩,参加一个salon,在银科那边。嗯,去洗手间的时候,顺便四处溜达了下,发现这里工作环境蛮不错的嘛。起码,每个人的工位面积比我现在的大。角落里有一个休息室,有桌上足球和饮料机,看起来要比我们17层的休息室丰富些。嗯,其实,要是我,最想要的就是一排大沙发,软软的,红色的。最好,可以不脱鞋直接躺着睡。
腾讯的洗手间比较好玩,门口的标志,不是靠是否带有短裙来标示男女,也不是汉字,而是QQ GG和QQ MM。嗯,那个,头上戴有一朵小花的,嗯,不要进。
话说,周末的缘故,没有看到多少员工,亦,没有遇到真正的QQ MM啊。salon来了很多媒体,咔嚓,咔嚓。估计明天,就可以在各网站和媒体上看见这次活动了。很荣幸,我是第一个站起来提问的,嘻嘻。

计划:买IBM X61

计划买IBM X61的本子,装今年1月的open solaris或者indiana,在网上查了下硬件兼容性,只找到一条关于ThinkPad X61 7673LN2的纪录,貌似所有的设备都有驱动?如果能找个X61的本子运行下sun的那个设备检测工具就好了。
选择solaris而不是freebsd,主要是考虑它有Xen,可以作为dom0运行。理论而言,这样的运行方式要比vmware效率高很多。但是不知道windows作为domU在xen下的表现如何。
比较不爽的是,要离我亲爱的Freebsd远一步了。
谁有比较可靠的代理?敬请介绍下。
另外,一个外置的USB光驱大概多钱?

原来新浪也在做开源

怎么说呢,待了这么久,对这个公司了解的还是太少,没想到新浪还有开源项目。今天发现几个不错的开源项目,推荐一下:
项目名:xbaydns
网址:http://code.google.com/p/xbaydns/
负责人:黄冬
简单来说,是对bind9的一个增强,为其增加一个web管理界面,新浪研发的老大级人物倾力而作。
项目名:ncache
网址:http://code.google.com/p/ncache/
负责人:不详
简单来说,就是在nginx的基础上实现cache
项目名:memcachedb
网址:http://code.google.com/p/memcachedb/
负责人:不详
简单来说,就是memcache + berkeley db。

用tasklist找出隐匿在系统进程之后的病毒

windows很多病毒,它是通过rundll32.exe或者svchost.exe(系统服务)运行的。
如果是通过rundll32.exe,那么,用这样的方式查它运行了哪些dll
tasklist /m /fi "IMAGENAME eq rundll32.exe"
如果是通过svchost.exe执行的,那么
tasklist /svc
tasklist是windows中使用极其复杂、参数超多的一个命令,威猛啊。但是貌似,home版下没有。

gmirror+ggate != DRBD

Freebsd下没有类似的专有文件系统,但是可以通过gmirror和ggate达到类似的效果。
gmirror是geom中一个用于做软RAID的工具(RAID-0或者RAID-1)
ggate是一个类似于NFS的东西,用于把一块磁盘导出供另外一台机器挂载。
于是做法就是
首先在两台服务器,A和B上各找一块大小相同的物理硬盘,然后用ggated导出。(注意,这两块硬盘坚决不能在A和B上挂载)
然后在另外一台服务器C上,用ggatec挂载上这两块硬盘。挂载前首先要确认没有其它的服务器也挂载了这两块硬盘。
然后在C上用gmirror做RAID-1。
然后用把做好的RAID-1挂载在C的文件系统中。
如果某两台机器间的网络发生问题,如C和A之间,那么对于每个读写操作,ggate会返回EIO。于是gmirror就会自动把这台机器从RAID中移除出去。之后网络恢复后需要人工处理。
但是这样做有个问题。
文件的信息分两部分,meta data(inode等)和实际数据。而通常文件系统为了加速文件系统的性能都是采用的异步写的方式。例如要删除一个文件,它可能先修改inode信息,然后再在适当的时候刷新文件数据到磁盘。
此时,如果另外一台机器正在读这个文件,它应该是先读inode节点。然后再根据节点去找文件。由于主机间缺乏锁机制,如果这删除和读这两个操作在两台机器上交替进行,那么可能读到的就是不正确的数据。

小技巧:找出已安装的包中版本号重复的

pkg_info | sort | sed -e 's/-[0-9].*$//' | \
uniq -c | grep -v '^[[:space:]]*1'
例如我装了两个automake
> pkg_info -Ex automake
automake-1.10_3
automake-1.9.6_2
那么就会得到这样的输出:
> pkg_info | sort | sed -e 's/-[0-9].*$//' | \
uniq -c | grep -v '^[[:space:]]*1'
2 automake
但是未必就需要从重复的中删除一个,例如glib
> pkg_info -Ex '^glib'
glib-1.2.10_12
glib-2.14.4
glib1和glib2在ports中对应不同的目录,分别是两个port。它们区别很大,不能相互替代,所以经常需要两个都安装。

ffsdrv的大文件漏洞原来已经被补上了

今天迟钝的去了下ffsdrv的官方网站,http://ffsdrv.sourceforge.net/ ,若要在win下浏览freebsd的文件系统,这是唯一的驱动。但是它一直有个问题,就是不能读取大文件(50M以上)。今天迟钝的发现,在距离上一个版本发布2年半后,这个漏洞终于在众人的期盼和唾沫中被补上了。Apr 21, 2007。值得纪念的日子。

Freebsd安全漏洞:inet_network栈缓存区溢出

官方安全公告:http://security.freebsd.org/advisories/FreeBSD-SA-08:02.libc.asc
CVE: CVE-2008-0122
影响范围(我认为):
所有以静态方式链接了libc库并且使用了inet_network函数的程序。
探测:
测试代码#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <locale.h> #include <sstream> intmain(int argc,char* argv[]){ setlocale(LC_ALL,""); std::ostringstream oss; oss<<"127.1.1.1."<<(unsignedint)-1; in_addr_t addr=inet_network(oss.str().c_str()); return0; } 编译链接后用gdb载入,可以看见char c的值被意外覆盖。
Breakpoint 4, __inet_network (cp=0x804b0e0 "") at /usr/src/lib/libc/inet/inet_network.c:97
97 *pp++ = val;
(gdb) p c
$4 = 0 '\0'
(gdb) n
98 n = pp - parts;
(gdb) p c
$5 = -1 '\377'
测试环境是x86,freebsd 6.2。我觉得这不是什么大不了的漏洞。
解决办法:
1、cd /usr/src
2、wget http://security.FreeBSD.org/patches/SA-08:02/libc.patch
3、patch \libc.patch
4、然后按照<http://www.freebsd.org/handbook/makeworld.html
进行make world并重新链接受影…

VS8的CRT的调试功能太优秀了!

来看一段不小心误写的代码#include <iostream> #include <fstream> unsignedcharlenToKey(short nLen){ ///取出长度的高位和低位 unsignedchar nLenLow= nLen && 0xFF; unsignedchar nLenHigh= nLen >> 4; return nLenLow ^ nLenHigh; } intmain(int argc,char* argv[]){ constchar* const filename="D:\\msg\\matrixdb"; std::ifstream ifs(filename); char rType; ifs.get(&rType,sizeof(rType)); short nLen; ifs.get(&rType,sizeof(nLen)); unsignedchar key=lenToKey(nLen); return0; } 变量nLen所在的内存,未经初始化便投入使用。如果是在Freebsd下,不借助于valgrind这样的错误要花很久才能调试出来。而在VS下按F5,瞬间得到这样的诊断信息:
“Run-Time Check Failure #3 - The variable 'nLen' is being used without being defined.”
试问,任何unix的libc,有哪个能做到这么智能?

dijit.form.Textbox不能设置size?

我想让dijit的那个textbox的长度变长点,试了很多种属性,都不成功。在网上搜了下,貌似所有的textbox都是一样长。即便把maxLength设置的特别特别短,它还是那么长。
奇怪ing~~~

小道消息,微软在搞emacs.net,似乎是GNU.net的前奏

嗯,如大家所知,emacs是一个相当出名的编辑器,gnu的代表作。emacs和Richard Stallman有很深的渊源。微软从开源社区挖了很多人过去,这当中有很多人都很喜欢emacs,连vs现在也提供了emacs风格的key bindings。现在,微软有人想搞emacs.net,用.net重写一个emacs。 http://www.douglasp.com/blog/2007/12/27/EmacsNet.aspx他们正在招人 http://www.douglasp.com/blog/2007/11/15/MyTeamIsHiring.aspx貌似连大名鼎鼎的Don Box(写XXX本质论的那个)也是emacs的忠实用户,并且,也参与了这个项目。微软的员工社区channel9上有一篇关于这个的讨论 http://channel9.msdn.com/ShowPost.aspx?PostID=369049

AMD 64 (1)

我一直告诫周围的朋友,买电脑千万别赶潮流迷信什么双核、64位。但是其实,我自己对这些新的CPU技术也不怎么熟悉。嗯,那么,就专心学学吧。 —————————————————————————————————————— AMD64的新特性: 一、寄存器扩展
1、增加了8个通用寄存器(以前已有8个)
2、所有通用寄存器(16个)都是64位的
3、8个128位的XMM寄存器
4、使用一个指令前缀,访问那些扩展寄存器 二、长模式
1、64位的虚拟地址空间
2、64位的指令指针 (RIP)
3、Instruction-pointer-relative寻址模式
4、平坦的地址空间 其指令集中的指令主要分为以下4类:
1、通用指令。指mov、add这些,通用的计算指令
2、128位多媒体指令。 (SSE系列,不过说实在的,amd的CPU对sse的支持显著的要比广告中的差)
3、64位多媒体指令。即MMX 和3DNow!
4、x87浮点指令。貌似是为一些老的应用程序专备的。现在还有人用吗? 三、模式
AMD64比较复杂,提供了好几类运行模式。
首先,总体上而言,分为长模式和遗留模式。64位的操作系统下的程序运行在长模式下,32位的操作系统及应用程序可以不经改动的运行在遗留模式下。 大体来说,长模式分为64位模式和兼容模式。
64位的应用程序在64位的操作系统下以64位模式运行。而以32位方式编译的应用程序在64位的操作系统下以兼容模式运行。
而遗留模式又可分为以下三种子模式:
1、保护模式。 支持16位和32位的程序的内存分段、可选的分页、以及权限检查机制。在保护模式下运行的程序最大可以寻址4G的内存。
2、虚拟8086模式。 虚拟的8086模式可以让16位的实模式程序以保护模式的方式运行,并为其提供最大1M的寻址空间。
3、实模式。不支持分页,不支持权限检查。最大1M的地址空间。 四、内存管理
在内存管理方面,传统的x86是采用基址+段偏移的方式进行寻址。在过去来说,这是一个很大的进步啊。386以前,那时候还不存在逻辑地址一说。所有的程序和系统本身一起共享同样的地址空间,共享所有的物理内存。在引入分段机制及地址转换单元后,相同的代码,被载入不同的内存地址运行的时候,需要改变的仅仅是段的基址,大大的提高了代码重用率和软件在不同环境下的适应性。但是呢,分段式内存管理的一个缺点就是易于…