tcp_window_scaling导致的windows服务器回应迟缓问题

工作遇到了一个奇怪的现象:windows下访问某个IIS服务器没有问题,有的Linux也可以正常访问,但有的Linux访问时,服务器回应十分迟缓。

后来在bbs里有人让我参考kernel相关的一篇文章,原来自从内核2.6.17版本后TCP window scaling的变动导致无法访问某些路由器。

我进行如下设置,解决了问题:
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling

文件反转命令tac和字符串反转命令rev

1. tac
将文件的最后一行当作第一行输出,以此类推,比如:

bash-3.1$ cat /etc/passwd | tac | tail -n 3
daemon:x:2:2:daemon:/sbin:/bin/false
bin:x:1:1:bin:/bin:/bin/false
root:x:0:0::/root:/bin/bash

2. rev
用法:rev [file …]
描述:反转文件每行里的字符串顺序,如果没有指定文件,则从标准输出读取

bash-3.1$ echo 123456789 | rev
987654321

通过ssh证书让putty自动登录

再复杂的密码也没有证书安全,再简单的密码也没有证书方便。有些人因为Putty无法保存密码,进而抛弃了这个免费、小巧的远程登录工具。条条大陆通罗马,其实可以ssh证书的方式让putty安全、方便的实现自动登录。

step0. 所需软件
putty.exe, puttygen.exe(官方)
step1. 生成密钥
运行puttygen.exe,按照默认即可:选择SSH-2 RSA1024位的key、空白的Key passphrase,然后点击Generate,在空白区域不断随机挪动光标,直到它产生key。将它生成的那一行Public key粘贴到文件里,比如叫id_rsa2.pub;然后点击”Save private key“,将对应的密钥保存下来,如id_rsa2.prv。
注意:不要直接使用点Save public key按钮后保存的文件,它的格式在后面没法用.
step2. 配置远程帐户
登录远程帐户,将Public key即id_rsa2.pub里的内容添加到相应的文件里:
mkdir ~/.ssh
cat > ~/.ssh/authorized_keys

(此时粘贴内容,然后在新行里按Ctrl + D结束)
同时应该确保~/.ssh目录的权限是700。
step3. 配置Putty
进行基本设置之后,在Connection / Data分类的Auto-login username里填写你远程的用户名;然后在下面的SSH / Auth分类的Private key file for authentication里选择刚才保存的密钥文件id_rsa2.prv。
然后保存设置,登录即可。
注意事项:
– 生成的文件,尤其是私有文件id_rsa2.prv, 应严加防范妥善保存
– 通过ssh-keygen命令生成的key没法在putty里直接使用,需要经过puttygen.exe转换
– ssh-keygen的使用方法请参考《基于SSH密钥对的自动登录

参考资料:

UTF-8、BOM、的问题

有些编辑器,比如M$ Windows的记事本,在创建UTF8编码文件时会在头部添加一个不可见字符。这个字符可以通过vim查看到,而且如果是一个php文件,php4、php5在解析时均会有输出。

原来这个被称作BOM(Byte Order Mark)的不可见字符,是Unicode用来标识内部编码的排列方式的,在UTF-16、UTF-32编码里它是必需的,而在UTF-8里是可选的。因此,才会出现有的编辑器在文件头部添加添加BOM、而有的语法解析器又不作处理的的混乱情况。

根据w3c里FAQ的建议,解决方法就是,删无赦!

btw, 刚才无意中发现,PHP 5.2.5的命令行下去除了BOM的显示,而 PHP 5.2.6确又显示出来了。

参考:

使用Slax Linux制作可引导的U盘

step1. 准备工作
 - 下载Slax,.iso或者.tar格式均可,当前是v6.0.7,约190M
 - 视主板BIOS具体选项,将U盘制作成相应格式(USB-HDD/USB-FDD/USB-ZIP)的可引导盘
    如果找不到U盘附带的转换软件,可使用USBoot v1.70(下载页面)。我使用的是USB-HDD。
 - U盘1个,我使用的是很普通的64M的

step2. 格式化U盘
   这里建议格式化成linux下的文件系统,因为后面我使用默认的FAT32文件系统制作好,发现中途因为找不到某些文件而失败。
    # mkfs.ext2 /dev/sdb1

step3. 拷贝文件
    下载后直接将其中的boot和slax目录拷贝至U盘里
    # cp boot slax /mnt/sdb1 -r
    这里假设U盘被mount到了/mnt/sdb1目录

step4. 安装lilo至U盘的主引导扇区(MBR)
    # cd /mnt/sdb1
    # boot/liloinst.sh
     根据提示操作即可。

至此,重启,更改启动顺序,即可享受通过U盘启动的Linux - Slax!:)

中间碰到了一些问题,在这里罗列一二:
* 确保U盘可写
* 刻录U盘?
别指望着想刻录光盘那样,把iso文件里的数据“刻录”到U盘上。虽然也可以全部写进去,但毕竟U盘和光盘是两种不同的设备,终究要以失败而告终的。
* 鉴于我64M的U盘容量太小,我只保留了slax/base下的第一个,也是最核心的文件:001-core.lzm

此外,slax/tools存放一些使用的脚本,可以操作神秘的.lzm文件

体验virtualbox的无缝模式

由于公司选择腾讯的RTX作为官方通讯工具,使用Linux后没少和虚拟机打交道。见识了MachineMa同学演示的VirtualBox无缝模式,根据网上的教程,比葫芦画瓢体验了一把,感觉不错,终于找到了个VirtualBox代替Vmware的理由了。

步骤:
step1. 下载并安装VirtualBox
VirtualBox是从去年的1.5.0版本开始支持无缝模式的,根据使用Vmware的经验,建议选择最新的版本

step2. 选择相应的guest additions程序
类似vmware里的工具包,不过这个是个单独的iso文件,需要单独下载。

step3. 安装guest additoins
开启虚拟机的情况下,通过菜单里的"device" / "mount CD/DVD" / "CD/DVD image",选择已下载完成的Vboxguestadditions.iso,然后在虚拟机的光驱里双击安装。

安装完成之后在虚拟机的菜单上选择"machine" / "seamless mode",进入传说中的无缝模式。相应的快捷键为Host + L(默认的Host键为右Ctrl)。

Enjoy it!

btw, 有意思的是,运行无缝模式的virtualbox时,通过选择激活的虚拟机程序截图,看到的是一张普通透明的图片(图1图2)。

参考:
Ubuntu中virtualbox解决无缝模式不能开启的问题

按计划行事

随着时间的积累,以前大家的工作方式逐渐变得混乱,领导审时度势组织大家开了一次小会。本没有对这场中午的小会抱多大希望,但“develop with pleasure”的主题货真价实,听完之后犹如醍醐灌顶般恍然大悟,感觉以前没有头绪的事情一下子有了眉目。

对于维护上线的web项目,以往的做法是发现错误随时更正。这种松散的方式看起来很辛苦,但效率总是不高,而且还极易处于被动的地位。另外一种方式的好处就显而易见了,根据各种需求、计划、决策、反馈制定一个短期的版本计划,定期发布。根据该计划,线上的每次改动都将对应代码仓库里的一个版本,这样即便是某次发布时出现错误,也可以很容易恢复到稳定版本。除了版本发布操作,不再零散更新线上的文件。如果想灵活一些,还可以缩短计划中的开发周期。

以前没有仔细考虑过类似的问题,或许这只是项目管理中的冰山一角。其实很多事情都是相通的,就拿上文中的按计划发布版本来说,早在大学时班主任就曾多次向我们灌输计划、总结的重要性,当时可能也听了,只是没真正体会到它的重要性。

总之一句话:事前计划,事后总结。
就这。

btw,新增一个”快乐开发 | developer”分类,今后用于存放类似问题。

Pure-FTPd配置笔记

以前曾用过Pure-FTPd提供的ftp服务,作为ftp的服务器端,其类似linux下useradd/usermod/passwd工具的用户管理方式,令人印象深刻。最近正好需要配置一台ftp服务器,当然首选这款有良好安全性口碑的Pure-FTPd。

基本需求是这样的:
虚拟用户 – 也就是说提供的ftp用户在系统里并不存在
权限 – 每个用户对自己目录拥有读写权限,但不允许访问其他目录
虚拟目录 – 每个用户目录下面需要添加一个只读的公有目录

以下为配置过程:
1. 安装
当前最新版本为1.0.21,可从官方网站下载。
wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
tar zxvf pure-ftpd-1.0.21.tar.gz
cd pure-ftpd-1.0.21
./configure --prefix=/usr/local/stow/pure-ftpd-1.0.21 --with-puredb
make
sudo make install

其中,--with-puredb 选项代表虚拟用户支持

2. 创建用户
出于安全以及管理方便,我们让虚拟用户共享同一个系统用户。
首先,在系统中添加相应的用户和组,这里以ftpuser和ftpgroup为例:
/usr/sbin/groupadd ftpgroup
/usr/sbin/useradd -g ftpgroup -d /dev/null -s /etc ftpuser

创建虚拟用户的命令是这样的:
pure-pw useradd smzz -u ftpuser -d /home/ftpusers/smzz -m
其中, -u将虚拟用户 smzz 同系统用户 ftpuser 关联在一起。-d参数使 smzz 只能访问其 home 目录。而如果想让他访问整个文件系统,可以用 -D 选项。

此外,pure-pw useradd 的选项还有:

-t 下载带宽限制
-T 上传带宽限制
-n 最大文件数目
-N 磁盘配额(单位M)
-q 上传速度限制
-Q 下载速度限制
-r 允许某些ip/网段的客户端访问
-R 拒绝某些ip/网段的客户端访问
-i 允许本地某些ip/网段访问(allow local host)
-I 拒绝本地某些ip/网段访问(deny local host)
-y 同时最大连接数目
-z 允许连接服务器的时间段,格式hhmm-hhmm,如 -z 0412-1618代表用户只能在凌晨4点12分至下午4点18分连接服务器
-f passwd_file
-F puredb_file
-m

2. 更改用户
pure-pw adduser 唯一不同的是,使用 pure-pw usermod 不是创建一个用户,而是更改已经存在用户的某些属性。
如果想禁用某些属性,可直接添加空值,比如pure-pw usermod -n ''代表不限制文件数目

3. 更改密码
pure-pw passwd smzz -m
所有这些参数都有一个共同选项 -m ,它代表修改完毕之后不必重启Pure-FTPd以及重新生成puredb_file文件

此外,还有类似userdel命令的子选项pure-pw userdel

4. 提交更改
所有用户操作必须提交更改,方能生效。目前有两种形式
a) 通过pure-pw mkdb重新生成数据文件(/etc/pureftpd.pdb)
b) 用户操作时带上-m选项,比如 pure-pw passwd smzz -m

5. 开启服务
/usr/local/sbin/pure-ftpd -j -lpuredb:/etc/pureftpd.pdb &
其中,-j代表用户第一次登录将会创建自己的home目录,-l代表验证方式
此外,匿名、配额、发呆设置、日志文件等选项均可通过相关参数在pure-ftpd启动时设置

6. 虚拟目录
Pure-FTPd并不支持类似windows下ftp服务器那样的虚拟目录,但可以通过其他方式变相实现,比如
mount --bind /home/my_apps/lib /home/ftpusers/smzz/lib

todo:
pure-ftpd的诸多参数

参考:
man pure-ftpd
man pure-pw
pure-ftpd用户管理

晒晒我的空间

都说狡兔三窟,其实我经常活动的地点远不止三个(大大地狡猾)。趁着这两天紧张工作一时停下来不知该做些什么,我决定晒晒这些空间们。

大学的班级网站
http://caoye012.org/zhouguoqiang/blog/
这里应该是我的主场
周家
http://zhoume.org/guoqiang/blog/
注册这个域名,是想提供给家里的兄弟姐妹们用的。本来想教育他们有空多接触点儿其他事物,别老是上qq。始料未及的是,曾几何时我都开通了自己的qq空间。信服力随时打了很多折扣。。。:(
qq空间
http://user.qzone.qq.com/16488112/
上面的地址是不是有暴露qq号码的嫌疑?随他去吧。关于qq空间,大家都比我熟,不多做解释。
沙漠之周的博客
http://smzz.org/blog/
名为博客,实际都快沦落成了我的工作笔记。可能十分枯燥,不喜者误入。
豆瓣
http://www.douban.com/people/smzz/
虽然最近读书越来越少。。。
del.icio.us(美味书签)
http://del.icio.us/smzz/
严格而言,这个书签算不上空间,但毕竟是个很不错的工具,干脆一块晒一下。btw,每每找房子的时候这个书签就摇身一变,成了我搜集房源的工具了… 有标签rent2006/2007/2008为证。

That’s all.
请大家对号入座。

对了,顺便借机做个广告,前段时间胡乱整理了一个关于俺们县城的网站枣乡内黄(http://neihuang.org/)。热烈欢迎诸位,尤其是枣乡游子们,多多光临!

(本文首发于沙漠之周@草业012)

根据搜索结果下载驱动之家某型号笔记本驱动程序

以Sony VGN-CR31这款为例,本脚本(实为命令集,笔者注)通过分析搜索页面、下载页面,最后将结果存放于相应文件(drivers_*.txt)中,同时并下载相应文件。详细见源文件:

#!/bin/bash

mkdir drivers
cd drivers/
echo > /tmp/zgq.txt
echo -n > drivers_url.txt
echo > drivers_id.txt
echo > drivers_title.txt

for i in $(seq 1 4); do
        curl http://drivers.mydrivers.com/drivers-1102-875-Sony/VGN-CR31/0-0-0-0/$i >> /tmp/zgq.txt
done

iconv -f gbk -t utf8 /tmp/zgq.txt > /tmp/zgq_1.txt

cat /tmp/zgq_1.txt | grep '<a href="/drivers/' | awk -F'</a>' '{print $1}' | grep desc > /tmp/zgq.txt

cat /tmp/zgq.txt | awk -F\/ '{print $3}' > drivers_id.txt
cat /tmp/zgq.txt | awk -F'>' '{print $3}' > drivers_title.txt


for i in `cat drivers_id.txt`; do
        curl http://drivers.mydrivers.com/download/$i > /tmp/zgq.txt 2>/dev/null
        cat /tmp/zgq.txt | grep dizhi | awk -F\" '{print $6}' | awk -F= '{print $3}' | head -n 1 >> drivers_url.txt
done

wget -i drivers_url.txt -N

注:本文章仅供学习研究之用,切勿用作非法用途,否则后果自负。
吃水不忘打井人,还是建议多点点人家的广告,如果有时间的话。:)