2005-12-19

del.icio.us的官方解释来了

del.icio.us对最近事故的官方解释如下:

Due to the power outage earlier in the week, we appear a number of continued hiccups. We've taken everything offline to properly rebuild and restore everything. I apologize and hope to have this resolved as soon as possible. Thank you for your continued patience.

Updates will be posted on our blog as we have them.


不过我访问他们的blog有点问题,始终连不上。恩,此刻访问他们blog的人肯定不少。

Read more at del.icio.us/

C语言的代码检查及单元测试

最近写C比较多,不过C的单元测试一直也没做起来,只能用shell写一些功能测试顶上了。先把找到的一些资料放着里,回头再研究吧。有那位朋友有C Unittest的经验,给提点建议吧。

检查内存泄漏
http://www.gnome.org/projects/memprof/
http://valgrind.org/

代码安全性审计
http://directory.fsf.org/devel/build/RATS.html
http://www.dwheeler.com/flawfinder/

C语言单元测试
http://simplectest.sourceforge.net/index.php
http://gethos.net/opensource/cunit.php
http://www.recursism.com/s2004/zp/products/gnu%20autounit
http://cutest.sourceforge.net/
http://check.sourceforge.net/
http://www.falvotech.com/projects/cut.php
http://sourceforge.net/projects/cut
http://cunit.sourceforge.net/
http://c2.com/cgi/wiki?PoorMansTestingFramework

备份有多重要

即使是自己最信赖的服务,也会有出错的时候。航天飞机都不能幸免,何况del.icio.us呢:
del.icio.us is down for emergency maintenance. we'll be back as soon possible.

还好我前些日子把自动备份加到crontab里了,阿弥陀佛:
0 23 * * * curl --user myuser:mypassword -o /home/xyb/netbackup/delicious-xyb.xml http://del.icio.us/api/posts/all

每天一备,再加上Simple Backup,我基本上可以回朔到前一两个月的任何一个版本了。欧耶~
这事让我又温习到的一个教训是,该出事的总会出事。还有,对一个服务太依赖了不好:如果有很多理由离不开它,那最好在“上瘾”之前先确定一下,它是不是提供了良好的备份支持或者后背方案。

2005-12-18

SSH穿梭机

许多人都经常在Linux/UNIX/*BSD的系统中来回穿梭,这是他们的日常工作,是养家糊口的方法。我也是其中的一员。在系统中跳来跳去、来回登录、传输文件,是挺烦人的;为了减少点麻烦,让日子过得更舒服一些,大家都积累了一些小手段,让事情变得更简单一些。今天记录一下我自己做这些事的方法。我的系统是Debian,下面也以它来讲解;但在其他的大多数系统中也都差不多,Windows系统则可以通过Cygwin来得到下面的这些程序。

一般来说,这些系统都是通过ssh来维护的;要使用它,得先安装openssh-client:
sudo apt-get install openssh-client

然后为自己创建用来进行登录认证的密钥,它可以帮助我们在登录时更安全和方便,也可以让一些工作实现自动化:
test -d $HOME/.ssh || mkdir -m 0700 $HOME/.ssh
ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -b 2048

在创建过程中,要输入两次passphrase。passphrase是只有主人知道的密码,是密钥的最后一层安全屏障;有了它,即使你的.ssh/id_rsa文件被人偷走,盗贼不知道passphrase也一样不能冒用。

不过passphrase带来的一个问题是,每次使用密钥之前都要被提问,但ssh-add可以解决这个麻烦。不过我一般不直接使用ssh-add,有了更方便的Keychain,还可以更省心一些。安装Keychain:
sudo apt-get install keychain ssh-askpass

其中ssh-askpass是用来提问passphrase的小程序。也可以选择安装ssh-askpass-fullscreen或者ssh-askpass-gnome。然后
mkdir -p $HOME/.keychain

并把一下语句放入自己的shell rc。比如我是用bash,则加入~/.bashrc:
keychain ~/.ssh/id_rsa
. ~/.keychain/${HOSTNAME}-sh

这样,可以在第一次登录shell的时候,自动加载密钥,而后就再也不会提问它了。

至此我自己的工作环境就准备完毕了。为了登录到其他主机,还需要把密钥放入主机的~/.ssh/authorized_keys文件中。我通常使用下面的脚本来做这个工作:
#!/bin/sh
#sshpubkey.sh
#Here's a little one liner that'll do the trick (for passwordless auth) after you've done the ssh-keygen:
target="$1"
ssh "$target" 'test -d .ssh || mkdir -m 0700 .ssh ; cat >> .ssh/authorized_keys && chmod 0600 .ssh/*' < ~/.ssh/id_rsa.pub

给要访问的主机添加认证时,只需执行:
sh sshpubkey.sh xyb@my.host.com

就自动设置完毕了。

下面我们就可以开始工作了。要登录它,就:
ssh xyb@my.host.com

要上传文件时,执行:
scp -r mydir/ xyb@my.host.com:/path/to/save

要下载文件时,执行
scp -r xyb@my.host.com:/path/to/ mydir

这样就方便很多了。

不过,有些文件可能经常需要更新。比如,我喜欢在自己的机器上编写程序,然后在另一台主机上编译和调试。所以,我需要有个工具能帮我把文件和目录“同步”到主机上去。这是lftp的长项:
lftp -c "open sftp://xyb@my.host.com; mirror -R /my/dir /path/to/dir"

这一条命令就把数据从我的/my/dir目录“镜像”到了远程主机的/path/to/dir了;而且聪明的lftp会自动判断那些文件是被修改过的,它只更新那些新文件。实际上,我更喜欢这样使用:
lftp -c "open sftp://xyb@my.host.com; repeat 2 mirror -X '*.swp' -v -R /my/dir /path/to/dir"

这条命令会把我的目录每2秒向远程主机同步一次,同时显示它做过那些更新,并忽略所有.swp文件:那是我的编辑器vim创建的临时文件。这样,我就可以放心的编辑我的源代码,每次保存的新代码,至多2秒钟之后就会出现在我的调试主机上了。是不是很方便呢 :-D