游野三坡

久居闹市,终日车声嘈杂人声鼎沸,不知自然之所谓。幸逢五一小假,举家乘车奔至郊外,欲享自然之野趣。一路颠簸,途中壅塞。昏昏沉睡,忽又惊醒。车行一渡至十渡,有山有水之处皆人头攒动,车队成龙。看景乎?数人乎?不得其解。十二渡更进数里,即为名曰野三坡处。一行十余人下榻农家,饮酒吃肉,不亦乐乎,惟余二人悯羊之所历,心有戚戚,不曾啖之。然丢丢有羊骨而食,大快。

夜里风吹窗棱,爆竹炸鸣,尚未熟睡,转即天明。乘房东三轮,颠至清泉山。清泉山者,野三坡之次景也,论景论名,百里峡应居第一。无奈丢丢好吠,余恐其见人惹是生非,遂弃百里峡而寻人稀处。二人一狗,绕水而行。丢丢数次引人侧目,夺人惊叹:有狗上山耶!水边遇开阔大石,席石而坐,饮食减负。适时丢丢口渴,某人带其饮河中之水,有好事者持摄像机而过,摄之曰:饮清泉山之水,得生百岁耶!清泉山有栈道一百又九十二级,丢丢见其依崖而立,深恐狗命不保,遂驻足不前。某人见其状,只得抱之,而丢丢愈加惊恐万分,四足紧蹬,圆目大睁,有照片为证。终未至峰顶而返,寻平坦阴凉处小憩片刻。而后见竹筏有趣,遂租一叶,飘于河上。某人善划,稳而快,顷刻即脱离人群,独至一幽静偏僻处。岸边小树林立,人谓之“野合佳所”。更进数米,河水碧绿,异于他处。持橹而探,橹竟全然淹没,深十余尺。某人示余按稳丢丢,防其晃动,而后慢慢划离此处,有惊无险。寻至源头,水声澹澹,有石遍布草间,似极桃花源。余二人本欲上岸,可惜远处垃圾隐现,臭味熏鼻,环境污染大乎哉重乎哉!情绪大跌,沿原路而返。

是夜返京,无话。


↑ 倚窗而眺


↑ 夺路狂奔


↑ 拾级而上


↑ 狗命休矣


↑ 意气风发


↑ 临流照影


↑ 轻渡重山


↑ 青山碧水

昨日黄花


↑ 纪念日的花拍照留念


↑ 这香味和骨头不一样...

Windows Live Writer 不错

我想尽一切办法节约这个 Mini VPS 主机的资源,用 lighttpd,mysql 和 php 几乎都是最弱的配置,装了 postfix 还得靠 crond 来查看有信要发了才启动几分钟,甚至连登陆 shell 都换成了 ksh。一切都好,就是一进 wordpress 后台,内存占用就嗖嗖上去了。得用离线 blog 发布软件了。

试了一下几种离线 blog 发布软件,Qumana Blog Editor 中文变成方块,我也没去看选项,直接卸载了;ScribeFire 作为 Firefox 插件 idea 不错,可惜显示 html 代码太多 bug,例如 <a href=...> 中 href 前面换个行它就歇菜了,也卸了。还是 windows live writer 功能最完整,支持 wordpress 2.5 的 tag(就是 keywords),修改 post slug,分类,pingback,也能直接编辑 html 代码,这一点是我始料未及的,甚至还能在编辑界面应用我的 theme。目前只发现它不能支持 socks 代理。我几乎从不夸奖微软的产品,不过对这个工具第一印象还真不错。

剽窃了一个模板

眼熟吗?只用了blog.meebo.com 的配色和图片,模板文件、css 全是自己写的,图片也使用我三脚猫的 gimp 功夫做了修改。将代码保持在 80 列以内又要可读对 HTML/PHP 代码来说要求太高了,我妥协了。



这里将有一些变化,老婆和我们的狗会作为成员加入,呵呵。

扬州炒饭


我亲自下厨。老婆赞不绝口。我的狗也肯吃了。

gnome-screensaver replacement

My favorite screensaver is "nose man" from href="http://www.tux.org/~bagleyd/xlockmore.html">xlockmore, but
gnome screensaver seems no way to use it. I don't want to spend time
to hack gnome-screensaver's configuration, instead, I found this
alternative screen lock program - xautolock. Xautolock can lock the
screen use any lock program, so it's possible to invoke xlockmore's
binary "xlock" with whatever mode you like.

Xautolock also has a cool feature, it can lock the screen when the
mouse is over a screen corner with a customized delay.

To install:

$ sudo apt-get install xlockmore xautolock

Here are the arguments to call xautolock, logged here to prevent read
the long man page again.

# replace gnome-screensaver, lock screen if idle for 5 minutes, or
# mouse over a corner for 3 seconds
#
msg="All money go my home :-)"
/usr/bin/xautolock \
-corners ++++ -cornerdelay 3 -cornerredelay 30 \
-time 5 -locker "/usr/bin/xlock -mode nose -message '$msg'" &

Put this to /etc/rc.local (for ubuntu), it will be
executed by /etc/rc2.d/S99rc.local on boot up.
Since it's an X11 program, it could be started only after a user logged in
to X. To start it automatically for gnome X manager, use session manager
tool to add an entry is a handy way, "System" -> "Preference" ->
"Sessions".

Also, you can create a shortcut point to command xautolock
-locknow
to lock the screen immediately.

Goodbye, gnome-screensaver.

$ killall gnome-screensaver
$ sudo apt-get remove gnome-screensaver

简单测了一下

一直对这个资源超紧张的主机上用 lighttpd + mysql + wordpress 拼凑起来的小站性能没谱,简单的测试了一下,竟然不比 DH 上的站点慢。测试很简单,没有用专业的httperf 之类的工具,就是用若干 wget 进程同时请求不同的页面。用的这个小脚本,同时请求 18 个页面。

$ cat abaseurl=$1

for y in 2006 2007 ; do
for m in 04 05 06 07 08 09 10 11 12 ; do
wget -q http://$baseurl/$y/$m/ -O $(dirname $baseurl)-$y-$m.html &
done
done

wait

运行时间 13 秒多点:

$ time bash a joyus.org/blogreal    0m13.462s
user 0m0.048s
sys 0m0.080s

运行的同时在主机上查看内存和 CPU 占用情况,内存和 CPU 占用情况没什么大问题,完全不超过主机服务商的限制。lighttpd 还真不错,做个 blog 好得很。就是起的那几个 php cgi 进程内存占用比较多,不敢多起。

$ vmstat 1procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 189896 0 0 0 0 0 0 0 1383 0 0 100 0
0 0 0 189896 0 0 0 0 0 0 0 1211 0 0 100 0
0 0 0 189896 0 0 0 0 0 0 0 1349 0 0 100 0
5 0 0 182072 0 0 0 0 0 0 0 1594 11 1 89 0
5 0 0 173536 0 0 0 0 8 0 0 1793 13 1 86 0
5 0 0 180636 0 0 0 0 0 0 0 1429 12 0 88 0
8 0 0 174716 0 0 0 0 0 0 0 1634 12 0 88 0
6 0 0 175352 0 0 0 0 0 0 0 1572 12 0 88 0
5 0 0 189380 0 0 0 0 0 0 0 1497 12 1 87 0
6 0 0 176212 0 0 0 0 16 0 0 2566 14 1 86 0
5 0 0 176536 0 0 0 0 16 0 0 1583 14 0 86 0
7 0 0 175916 0 0 0 0 16 0 0 2036 16 0 84 0
6 0 0 176532 0 0 0 0 24 0 0 1407 14 0 86 0
6 0 0 176492 0 0 0 0 16 0 0 1602 13 0 87 0
2 0 0 175900 0 0 0 0 32 0 0 2305 11 0 89 0
0 0 0 176052 0 0 0 0 16 0 0 1264 1 0 99 0
0 0 0 176052 0 0 0 0 0 0 0 1383 0 0 100 0
0 0 0 176052 0 0 0 0 0 0 0 1297 0 0 100 0
0 0 0 176052 0 0 0 0 0 0 0 1358 0 0 100 0

而针对这哥们的站点(在 dreamhost 上)运行后返回的时间是 14 秒多点:

$ time bash a gopherwood.inforeal    0m14.403s
user 0m0.052s
sys 0m0.072s

这是 top 按内存占用排序:

$ toptop - 21:35:27 up 5 days,  5:29,  1 user,  load average: 0.01, 0.25, 0.17
Tasks: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 262144k total, 86280k used, 175864k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29979 www-data 15 0 21964 12m 2884 S 0 4.8 0:01.05 php5-cgi
29818 www-data 15 0 21936 12m 2812 S 0 4.8 0:01.27 php5-cgi
29819 www-data 15 0 21896 12m 2800 S 0 4.8 0:01.18 php5-cgi
29993 www-data 15 0 21916 12m 2792 S 0 4.8 0:00.60 php5-cgi
29990 www-data 15 0 21860 12m 2796 S 0 4.7 0:00.57 php5-cgi
12271 mysql 15 0 20144 8696 4188 S 0 3.3 0:04.05 mysqld
24432 www-data 15 0 13636 3968 2636 S 0 1.5 0:00.01 php5-cgi
24431 www-data 18 0 4688 2544 1276 S 0 1.0 0:00.14 lighttpd
28359 root 16 0 7476 2420 2004 S 0 0.9 0:00.03 sshd
28389 XXXXXX 15 0 3216 1852 1200 S 0 0.7 0:00.00 bash
28384 XXXXXX 15 0 7476 1528 1108 S 0 0.6 0:00.01 sshd
12207 root 21 0 2384 1196 960 S 0 0.5 0:00.01 mysqld_safe
31891 XXXXXX 15 0 2140 1072 864 R 0 0.4 0:00.02 top
22159 root 15 0 4692 1060 760 S 0 0.4 0:00.00 sshd
20248 syslog 18 0 1700 704 584 S 0 0.3 0:00.03 syslogd
1 root 15 0 1488 528 460 S 0 0.2 0:08.46 init
12272 root 18 0 1472 500 432 S 0 0.2 0:00.00 logger

一些配置记录如下,其中 mysql 的配置尤其关键:

fastcgi    "max-procs" => 1
"PHP_FCGI_CHILDREN" => "5" "3"php.ini memory_limit = 16M 24Mmy.cnf key_buffer = 32K
key_buffer_size = 32K
max_allowed_packet = 2M
thread_stack = 128K
table_cache = 8
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 16K
query_cache_limit = 4M
query_cache_size = 8M
query_cache_type = 1
skip-bdb
skip-innodbwp-config.php define('WP_MEMORY_LIMIT', '10MB' '20MB');

Unauthorized login attempt

This host is built up just for 3+ days, but the system logged some
unauthorized ssh login attempt. Someone was trying to login with guessed user
names from IP 213.192.59.x and 222.73.18.x.

Here's a list of the user names he/she used, interesting.

aaron     cvsuser   fluffy    iraf      moshutzu    stud     valas
admin cyrus fred javi nagios student video
amanda dank frei je nick svn visitor
apache delta gary jean nickelan swsoft vmware
armen denis gast juan oliver test vnc
backuppc der genoveva kor oracle test2 vwalker
benjamin diane gt05 lab production tomcat5 wei
bernd fabrice guest mama sid toto william
blog farrell hallo martin sirsi trash wolfgang
carlos festival hans michaels spamd ts wrestling
core files hermes michel stats ubuntu
cvsroot first im mom stephanie user

I have reconfigured sshd to use public key authentication only so that
further attempt will fail. I would like to address something here in case you
are happened to be the evil guy - this host is just a tiny website hosting my
personal weblog and homepage, the host resources are very limited since I am
too poor to rent a better one ;-), it's not worth to take as a zombie system
for other evil usage. So please stop.

ssh over http?

公司查封了端口 22,除了 80 和 443 也只有少数端口开放,ssh 登陆远程主机成了奢侈的愿望。依靠代理是不能想的,free vpn 也没戏,tor?开放的 tor 服务器早就被掐了。当然远程管理有很多 web 程序,但我的最终目的是要用 ssh -D 做 socks proxy。

为此我想了一个途径,就是 web 服务器上放一个 cgi,通过 HTTP POST 发送 ssh 数据包,大体上思路是这样:

               SSH                HTTP POST             SSH
ssh client <=====> http agent <===========> web cgi <=====> sshd

其中 http agent 就是一个转换程序,listen 在 localhost 某个端口,接收 ssh client 的请求,再包成 HTTP POST 请求发送出去,接收应答发回给 ssh client,这个很简单,用 python 也就几十行就完工了。另一端一开始也不了解,边看资料边做,做着做着问题来了,cgi 是请求 - 响应工作模式,响应完了就结束了,就算 web 服务支持pipelining,也不能和 sshd 保持连接。

然后我要想了个土办法,web cgi 不直接和 sshd 打交道,实际上它也不能和其他进程打交道,鉴于 cgi 的生命周期特征,可以用原始的办法,那就是用文件和其他进程通信。cgi 把接收到的请求写到一个 input 文件,另外起一个 pickup 进程,和sshd 保持连接,轮询那个 input 文件,转发到 sshd,再把 sshd 应答写到 output 文件,cgi 从ouput 中取应答作为 http response 发回给 http agent。

想不到的土,但是总算完成了一个 proof of concept,用 python 做这种东西相当的方便,当然其中也有些地方很费脑筋了,比如这模型只是一个半双工的模式,要模拟成全双工的,http agent 还得用超时机制主动请求。

要做成一个真正可用的工具,至少还得解决这些问题:

  • 文件要加 lock 机制,php 里面不知道有没有这功能
  • 减少资源的占用,cgi 每次都要打开两个文件进行读写,有没有办法不用文件来通信?
  • 性能。半双工模式有很多等待,如何在资源和性能之间平衡?

PS: 在 dreamhost 运行了一下下,马上被当作 DoS 了,大概是 pickup 进程 I/O 请求太多,给合租伙伴制造了麻烦,真是对不住。

PS again: 如果真要在跟我一样的苛刻环境下远程 ssh,用 http://webssh.org 吧,不过程序是装在别人主机上,谁知道是不是安全。

让你出汗了,sorry

过路的看看,“Unix 熟练用户”、“能熟练编写 shell 脚本”、“熟悉 Unix 环境高级编程”,请问满足这个条件的人是不是应该答出下面这些小儿科的问题?

  • 用 root 执行“umask 022; mkdir -m 777 dir; date > dir/abc”,现在切换到一个普通用户,请问 dir/abc 的 permission bits 是什么?cat dir/abc 能成功吗? date > abc 能成功吗?rm -f dir/abc 能成功吗?
  • fork() 之后,子进程和父进程共享了哪些资源?对于 fork() 之前打开的文件,子进程移动了 current offset,父进程中也一样会被移动吗?
  • 子进程先于父进程结束时,ps 能看到子进程吗?它是什么状态?
  • 父进程先于子进程结束时,子进程的 PPID 会变成什么?
  • date >> log 这个命令背后都调用了哪些 syscall?
  • cmd > log 2>&1 和 cmd 2>&1 > log 有没有区别?列举背后的syscall 来解释一下?
  • C 语言中 static 关键字修饰全局变量、函数、函数内部变量时分别有什么意义?
  • 用一个工具、命令或者脚本,或者你知道的任何方法,占用住某个 TCP 端口。
  • 解释一下 Linux 中 VFS 的概念。

这两轮面试比较失望。今天下午就一个本来很不错的家伙,被这么一通问之后,眼看着他眼中自信的光芒就消失了,额头上也开始冒汗,罪过罪过。可是我觉得我的要求真的不高,这些人中有好多 kernel 开发经验的,有做过 Unix 系统管理员的,最差也是在Linux 下做了好几年开发的,为啥这样简单的问题都答不对哩?

PS: Wordpress 的每次升级都是 urgent、fixed security flaws,总共就那么些代码,怎么能制造出这么多安全漏洞,我已经厌倦了,爱咋咋的吧。

← Previous  1 … 5 6 7 8 9 … 26 Next →