LinuxCon 2010 会议视频

linux foundation

由 Linux Foundation 主办的 LinuxCon 2010 大会的视频已经上线,三天的视频内容需要注册和支付50刀才能看:

View one day of LinuxCon sessions for $20.00, or view all three days of sessions for $50.00.

VPSee 对好几个 topic 都很有兴趣,正在犹豫要不要掏钱,刚好昨天从 LinuxToy 看到一则消息,三天大会的 Sessions 可以免费注册,得到链接和密码 LFFRIENDS@2010! 后就可以免费在线看或者下载了,哈,还有这种好事,周末有事干了:)这是 VPSee 感兴趣的几个 topic:

Aug 10 2010 – Wim Coekaerts, A Technical Look at Linux at Oracle
Aug 10 2010 – David Ahern, Using KVM as a Transparent Hardware Abstraction Layer
Aug 10 2010 – Matthew Garrett, Android/Linux Kernel: Lessons Learned
Aug 10 2010 – James Morris, Linux Kernel Security: Adapting 1960’s Technology to Meet 21st Century Threats
Aug 10 2010 – David Rientjes, When the Kernel Runs out of Memory
Aug 10 2010 – Linux Kernel Panel
Aug 11 2010 – Marcus Rex, Empowering the Imagination For Tomorrow’s Linux Workloads
Aug 11 2010 – David Lutterkort, Deltacloud – Many Clouds, One API
Aug 11 2010 – Scott James Remnant, How We Made Ubuntu Boot Faster
Aug 11 2010 – Chris Mason, Btrfs File System: Status and Future
Aug 12 2010 – Martin K Peterson, Linux and Advanced Storage Technologies
Aug 12 2010 – Mark Hinkle, Open Source Tool Chains for Managing the Cloud
Aug 12 2010 – Jon Corbet, The Kernel Report

Evorack:£5.99 128MB Xen VPS

evorack

Evorack 是一家北爱尔兰的 VPS 服务商,其母公司 ABPNI Computer Solutions 是北爱尔兰的一家注册的公司,为个人和企业提供电脑、网络维护、网站托管之类的服务,近期刚加入了 VPS 业务。他们的服务器分布在英国的两个数据中心,如果在英国购买这个的 VPS 还需要加上税,年付有10%的优惠,他们免费提供 IPv6 地址。欧洲的服务器对中国大陆的线路都不是很好,所以购买前最好 traceroute 和测试一下 IP. VPS 配置如下:

128MB RAM
20GB 硬盘
150GB 流量
1个 IP
5.99英镑(约9.18美元)

没有服务器硬件配置信息。

中国光缆出口分布

Greg’s Cable Map 这个网站利用 Bing 地图和 Wikipedia 数据做了一个全球光缆分布图,从图上可以看到中国大陆的海底光缆有6条(除去重复的),连接点只有3个,分别在青岛、上海和汕头。而日本有至少11个连接点和15条光缆,香港弹丸之地也有11条光缆。中国4.2亿网民(2010年6月统计数据)就靠这3个点和6条光缆来和世界联系,随着大批网站移到国外服务器以及 VPN 的大量使用,使得本来就很窄的出口带宽变得更加拥挤,所以不管美国数据中心和机房有多么的好、服务器有多么的强大,如果不解决出口带宽和光缆容量瓶颈就解决不了上网慢(Internet,不是 Chinanet)的问题。不过公允的说和其他大部分国家比起来中国的出口带宽还是挺大的,只不过人多分的羹就少了。

china cable map

下面是2010年最新的海底光缆分布图,截自 TeleGeography

china cable map

在 Debian 上源码编译和安装 Nginx+PHP+FastCGI+MySQL

前天有一位新客户购买我们的 VPS 后多次在上面源码编译和安装 Nginx+PHP+FastCGI+MySQL 不成功,遇到一些问题,总的来说分为两类,一个是包依赖问题,一个是 MySQL 目录的权限设置问题。昨天这位客户给我们发来一个论坛链接很细致的描述了他的安装过程和遇到的问题,可惜后面回帖的人都没说到重点,还有一位回帖人居然是我们的客户,呵呵,世界好小。VPSee 决定花点时间写个教程,可能对其他的 Linux/VPS 用户也有帮助。我们的 VPS 和那些使用 SolusVM 控制面板和模版的 VPS 服务商不同,我们自己制作 VPS 模版,采用最小化安装,不添加任何乱七八糟的东西,保持最简和干净,所以 VPS 上只装有必备的软件包和库,在编译 Nginx+PHP+FastCGI+MySQL 之前必须先安装一些编译时需要的软件包和库。

记得以前有位客户问过为什么我们的 VPS 上连基本的 gcc 工具都没有?为什么我们采用最小化安装?为什么我们没有提供那些都安装好的模版?有3个原因,1、不需要 gcc Linux 也可以运行,所以 gcc 不是必须的,这满足我们最小化的要求;2、安全,如果有人得到 Linux 普通用户帐号可以下载、通过 gcc 编译和运行一些后门代码以得到 root 权限或者干坏事,所以不是必要的话不推荐安装 gcc 等编译工具,同样的道理也适用我们对其他工具的要求;3、定制,每个人的要求是不同的,有的人喜欢 nginx,有的人喜欢 apache,所以我们采用最小化安装,把选择留给客户。我们认为最小化可以带来简单、安全和灵活。

下面的操作步骤在我们的 256MB Debian 5.0 VPS 上测试通过,Nginx/PHP/MySQL 都采用当前最新稳定源代码版本。

安装必备软件包

# aptitude install libtidy-dev curl libcurl4-openssl-dev libcurl3 \
libcurl3-gnutls zlib1g zlib1g-dev libxslt1-dev libzip-dev libzip1 \
libxml2 libsnmp-base libsnmp15 libxml2-dev libsnmp-dev libjpeg62 \
libjpeg62-dev libpng12-0 libpng12-dev zlib1g zlib1g-dev libfreetype6 \
libfreetype6-dev libbz2-dev libxpm-dev libmcrypt-dev libmcrypt4 \
sqlite3 bzip2 build-essential libreadline5-dev libedit-dev autoconf

编译和安装 MySQL

下载和编译 MySQL,但是先不要安装:

# wget http://mysql.mirror.rafal.ca/Downloads/MySQL-5.1/mysql-5.1.50.tar.gz
# tar zxvf mysql-5.1.50.tar.gz
# cd mysql-5.1.50

# ./configure \
 --prefix="/usr/local/mysql-5.1.50" \
 --enable-thread-safe-client \
 --with-extra-charsets=all
# make

需要改几个权限问题才能安装 MySQL,否则会出现 Access denied for user ‘root’@’localhost’ (using password: NO) 经典问题:

# groupadd mysql 
# useradd -g mysql mysql

# cp support-files/my-small.cnf /etc/my.cnf
# vi /etc/my.conf
...
[mysqld]
user = mysql 
...

# chown -R mysql:mysql /usr/local/mysql-5.1.50/
# chmod 777 /tmp

安装和启动 MySQl,修改 root 密码,登录 MySQL:

# cd mysql-5.1.50
# make install

# /usr/local/mysql-5.1.50/bin/mysql_install_db --user=mysql
# /usr/local/mysql-5.1.50/bin/mysqld_safe &
# /usr/local/mysql-5.1.50/bin/mysqladmin -u root password 'new-password'
# /usr/local/mysql-5.1.50/bin/mysql -u root -p

编译和安装 PHP

先下载 PHP 软件包,然后配置、编译,这里采用 php 5.2 分支的最新稳定代码:

# wget http://www.php.net/get/php-5.2.13.tar.bz2/from/us.php.net/mirror
# tar jxvf php-5.2.13.tar.bz2
# cd php-5.2.13

# ./configure \
 --prefix="/usr/local/php-5.2.13" \
 --with-mysql="/usr/local/mysql-5.1.50" \
 --with-gd \
 --with-ttf \
 --with-openssl \
 --enable-mbstring \
 --enable-fastcgi
# make && make install

编译和安装 Nginx

下载、配置和编译安装 nginx,注意编译 nginx 需要额外安装几个软件包:

# wget http://nginx.org/download/nginx-0.7.67.tar.gz
# tar zxvf nginx-0.7.67.tar.gz

# aptitude install libgcrypt11-dev libpcre3 libpcre3-dev libssl-dev

# cd nginx-0.7.67
# ./configure  --prefix="/usr/local/nginx-0.7.67"  --with-http_ssl_module
# make && make install

编译和安装 FastCGI

Nginx 需要 FastCGI 的支持才能运行 PHP 脚本,从 lighttpd 下载、编译和安装 spawn-fcgi:

# wget http://www.lighttpd.net/download/spawn-fcgi-1.6.2.tar.bz2
# tar jxvf spawn-fcgi-1.6.2.tar.bz2

# cd spawn-fcgi-1.6.2
# ./configure --prefix="/usr/local/php-5.2.13"
# make && make install

启动 FastCGI:

# /usr/local/php-5.2.13/bin/spawn-fcgi -a 127.0.0.1 -p 9000 \
-u www-data -g www-data -f /usr/local/php-5.2.13/bin/php-cgi \
-P /var/run/fastcgi-php.pid

编辑 Nginx 的配置文件,让 php 脚本被发送到 FastCGI 服务器由 FastCGI 处理,然后启动 nginx:

# vi /usr/local/nginx-0.7.67/conf/nginx.conf
...
        # fix nginx/php/fastcgi important security issue
        # http://cnedelcu.blogspot.com/2010/05/nginx-php-via-fastcgi-important.html
        location ~ \..*/.*\.php$ {
            return 403;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            #root           html;
            root           /usr/local/nginx-0.7.67/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx-0.7.67/html$fastcgi_script_name;
            include        fastcgi_params;
        }
...

# /usr/local/nginx-0.7.67/sbin/nginx -c /usr/local/nginx-0.7.67/conf/nginx.conf

安装 Nginx+FastCGI+PHP 完后测试一下是否 PHP 页面能否被正确解析,在 html 下创建一个含有 phpinfo(); 函数的文件,最后打开浏览器检查下面的 index.php 能否被正确执行。:

# vi /usr/local/nginx-0.7.67/html/index.php
phpinfo();

编译源代码需要消耗大量内存,我们只建议 256MB 或以上 VPS 用户使用源码方式安装。

在 Mac OS X 上安装 ns-3

Ns-3 网络模拟器(network simulator)看上去像 ns-2 的升级版本,其实不是,ns-3 是全新的一套网络模拟器,ns-3 的最终目标是替代 ns-2,虽然 ns-3 和 ns-2 都是用 C++ 写的,但是 ns-3 不兼容 ns-2 的 APIs,这就使得在 ns-2 下写的程序可能就需要一定的移植才能在 ns-3 下运行。对于已经熟悉 ns-2 的人来说,ns-3 和 ns-2 最大的区别可能就是脚本语言的不同,ns-2 使用 OTcl 而 ns-3 使用的是 Python. 虽然 ns-3 的 models 没有 ns-2 多,但是 ns-3 有些我们需要的新功能,比如更细致的 802.11 models 等。最近一直在忙 paper 和一些数据,模拟器的事情被搁到一边很长时间了,ns-3 软件包很绿色,下载完源代码后所有编译过程都在一个目录里进行,编译完就可以用,不需要安装,也不会到处放置一些杂乱的配置文件,所以 VPSee 决定在自己 Mac 上编译一个,省得每次都要远程登录到办公室的电脑上。

下载和编译 ns-3

在编译和安装 ns-3 之前先确认 Mac 上已经装有 Xcode 开发工具,Xcode 是 Mac 的开发工具套件,可以在 Mac OS X 的安装 CD 上找到,如果没有可以去苹果官方网站免费下载。有了 Xcode 后就可以开始编译 ns-3 了。这里使用的 Mac OS X 版本是 10.6.4:

$ wget http://www.nsnam.org/releases/ns-allinone-3.9.tar.bz2

$ tar jxvf ns-allinone-3.9.tar.bz2

$ cd ns-allinone-3.9
$ ./build.py
...
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (22m12.303s)
Leaving directory `./ns-3.9'

测试 ns-3

22分钟后编译完成,在 Mac 上安装比在 Linux 上安装 ns-2 还简单,没有 trouble shooting,没有 workaround,编译完就可以用,难道 ns-3 的开发人员也在用 Mac?编译成功后,用测试用例测试一下:

$ cd ns-allinone-3.9/ns-3.9
$ ./test.py
...
145 of 145 tests passed (145 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)

运行第一个例子程序

没有问题后就可以开始自己的第一个程序了,拷贝一个例子程序,然后编译运行:

$ cd ns-allinone-3.9/ns-3.9

$ cp examples/tutorial/first.cc scratch/myfirst.cc

$ ./waf
Waf: Entering directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
[1160/1308] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_2.o
[1161/1308] cxx: scratch/simple.cc -> build/debug/scratch/simple_3.o
[1305/1308] cxx_link: build/debug/scratch/myfirst_2.o -> build/debug/scratch/myfirst
[1306/1308] cxx_link: build/debug/scratch/simple_3.o -> build/debug/scratch/simple
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (5.995s)

$ ./waf --run scratch/myfirst
Waf: Entering directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (0.848s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Apple 和 Steven Jobs 关于系统平台最正确的决定可能就是选择和迁移到了 Unix 平台(x86),使得大量的基于 Unix/Linux 的研究和开源项目可以很容易的运行在 Mac 上,这样吸引了大批 Unix/Linux 程序员、系统管理员、研究人员投靠 Mac 阵营

AutomatedVPS:$5 512MB Hyper-V VPS

automatedvps

AutomatedVPS 采用 Hyper-V 虚拟技术架构的 VPS 服务商。Hyper-V 是微软推出的类似 VMware 和 Citrix XenServer 一样的基于 hypervisor 的虚拟技术,Hyper-V 已经被集成到 Windows Server 2008 中。第一次在10美元 VPS 这一档看到采用 Hyper-V 虚拟技术的服务商是因为 Windows Server 2008 的版权很贵,算下来几乎不可能提供10美元的 VPS,Microsoft 官方网站上的 Windows Server 2008(带 Hyper-V)报价是 $3,999,比直接购买一台 PowerEdge R710/Intel Xeon E5530/12GB RAM 的服务器的价格($3,749)都贵。老实说 Hyper-V 提供的功能还是蛮强大,快照、容灾、迁移、伸缩、扩展都不错,更适合世界五百强这种不差钱的企业内部应用,拿来提供 hosting 有点不合适。AutomatedVPS 官方网站上的最低配置 1GB VPS 价格在49.95美元,现在 WHT 上的这款 512MB VPS 正在优惠中,只要5美元,不过这款 VPS 只有 50GB 流量,对于一个 512MB VPS 来说也太小了点,他们的数据中心在纽约。Microsoft Hyper-V 只支持 Windows 系列和企业版的 RHEL, SuSE Enterprise,不支持其他的 Linux,不过据说 CentOS 可以完好的在 Hyper-V 上安装和运行。VPS 配置如下:

512MB RAM
50GB 硬盘
50GB 流量
1个 IP
5美元

服务器硬件配置信息:

Each node is powered by 2 Quad-Core Intel Xeon processors for a total of 8 processing cores.

分享一个截网页的好工具:Paparazzi!

写博客的时候经常会对网页截图,比如对 VPS 服务商的官方网站首页进行截图等。Mac 自带的截图工具非常棒,截对话框、窗口、桌面都非常方便,可惜抓取网页的时候不能捕捉到完整的页面,现在的网页动不动就需要拖动很长的滚动条,如果整个页面不能在屏幕上显示出来的话就不能被完整抓到,Mac 自带的抓图工具只能抓 “看得见” 的部分。Paparazzi! 是 Mac OS X 上的一款开源(当然也免费)的抓图工具,可以方便截取长度超过一个屏幕的网页,只要输入网址,调整要抓图的大小和截取的大小就能拔一张完整的页面下来,非常好用。

paparazzi!

用 grep 恢复误删的文本文件

作为长期的电脑使用者,肯定会有误删文件的经历,在 Mac OS X 和 Windows 上删除的文件都会默认进 “回收站”。在 Linux 上如果事先没有用别名(alias)修改默认的 rm 功能,rm 后文件就会丢失,幸运的是,在一般的删除文件操作中,Linux 并不会立即清空存储该文件的 block 内容,而只会释放该文件所占用的 inode 和 data block,Linux 上 rm 的过程其实就是将 inode bitmap 和 data block bitmap 中的相应标识设为空闲状态的过程,并不涉及到真正的数据,这也是为什么在 Linux 下删除大文件这么快速的原因,因为大文件所占的磁盘根本就没有清空。所以,如果我们能找到文件对应的 inode,由此查到相应的 data block,就可能从磁盘上把已删除的文件恢复出来,很多文件/磁盘恢复工具都是这么做的。

一般来说二进制文件、库文件等删除后都可以从其他 Linux 拷贝恢复,不是很要紧,如果自己辛苦写的脚本或者配置文件误删了就杯具了。误删这种蠢事经常在 VPSee 身上发生,最近一次是在今年年初的时候,开了 screen 多次 ssh 到不同服务器上,在前后切换的过程中删除了一个很肯定的配置文件,后来发现删的文件是对的,可惜在一台错误的服务器上,本来应该在 A 服务器上删除 file.txt 结果在 B 服务器上删除了 file.txt,多个 screen 和 ssh 把自己搞晕了,而且主机名没有安排好,多台机器都是用的 localhost,不利于识别当时的环境。如果使用 Linux 的时候不幸误删了一个文本文件怎么办呢?

先临时建一个文本文件 vpsee.log 做测试,然后删除这个文件:

$ echo "important log file for vpsee.com" > vpsee.log

$ cat vpsee.log 
important log file for vpsee.com

$ rm vpsee.log

如果能记住刚才删除文件中的某个关键字的话可以用 grep 搜索整个 /dev/sda1,-a 标志位的意思是把 /dev/sda1 这个分区看成是文本形式的(分区本身是二进制形式的),-B 10 -A 100 的意思是如果找到关键字就打印出其前10行和后100行的内容:

# grep -a -B 10 -A 100 'vpsee.com' /dev/sda1 > tmp.txt

在一堆 @ 之间可以找到我们刚才删除的内容:

$ vi tmp.txt
...
@$^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@Ç^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@È^K^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^Q^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@È^K^@^@×^@
^@^@important log file for vpsee.com
@                                                                               
@            
...

当然,如果误删了二进制、doc、png/jpg/gif 之类的文件,可以用一些第三方 ext2/ext3 文件恢复工具帮助恢复文件,比如 TestDisk, PhotoRec 等。

Linux 遇到 kernel panic 后可自动重启

现在的 Linux 比10年前要成熟的多,但有时候还是会出现莫名其妙、无法解释的 kernel panic 情况。对于大部分 Linux 用户来说出现 kernel panic 重启一下就可以了,但是对于系统管理员和那些做虚拟主机、共享主机、OpenVZ VPS 主机的 hosting 服务商来说出现未知的 kernel panic、导致系统挂掉可能就不太友好,如果没有 KVM over IP 的话,系统挂掉后 hosting 服务商需要自己先反馈到上一级的独立服务器提供商,比如提交 ticket 或者打电话,然后独立服务器供应商还要时间验证你的资料、处理你的 ticket,最后才到真正的数据中心,一般晚上(中国的白天)数据中心只有几个人值班,到最后处理完你的重启请求可能已经过了20多分钟了,这20分钟的 downtime 时间你还要给你自己的客户写信解释情况,问题是这20分钟还是理想情况,如果你碰到一个很烂的独立服务器提供商或数据中心,处理 ticket 要以小时或天为单位来计,或者如果你是 one man、晚上正在睡觉没有收到 kernel panic 报警,这样的话花的时间就会更多。那么有没有办法让 Linux 服务器遇到 kernel panic 情况自动重启呢?VPSee 在这里介绍一个简单有效的小技巧:

编辑 /etc/sysctl.conf 文件,并定义遇到 kernel panic 20秒后自动重启 Linux:

# vi /etc/sysctl.conf
kernel.panic = 20

Linux 这么神奇?遇到 kernel panic 自己都挂了还能自己重启?来看看 Linux 内核里面这部分代码是怎么工作的,最好最权威的资料永远来自内核源代码:

# vi linux-2.6.31.8/kernel/panic.c

...
 if (panic_timeout > 0) {
                /*
                 * Delay timeout seconds before rebooting the machine.
                 * We can't use the "normal" timers since we just panicked.
                 */
                printk(KERN_EMERG "Rebooting in %d seconds..", panic_timeout);

                for (i = 0; i < panic_timeout*1000; ) {
                        touch_nmi_watchdog();
                        i += panic_blink(i);
                        mdelay(1);
                        i++;
                }
                /*
                 * This will not be a clean reboot, with everything
                 * shutting down.  But if there is a chance of
                 * rebooting the system it will be rebooted.
                 */
                emergency_restart();
        }
...

VPSBB:$4.95 128MB OpenVZ VPS

vpsbb

VPSBB 和 VPSEE 好像,一个 ee 一个 bb,不知道什么时候有 cc dd 出来。VPSBB 是 123Systems 旗下的一个新牌子,都是卖的是 OpenVZ VPS,123Systems 和 VPSBB 业务线、价位、面向的消费者、商业模式、技术都一样,不知道 123Systems 为什么要另开一个 VPSBB,VPSBB 的后台付费和管理系统依然是 123Systems 的。他们的数据中心在加州的 Fremont,其 VPS 采用 SolusVM 控制面板,和 123Systems 一样,他们的 VPS 也是 fully managed,老外的人力成本非常高,这个价格的 fully managed 算很便宜了,不知道他们对 fully managed 的定义是不是和我们想的那样。VPS 配置如下:

128MB RAM
256MB Burst
10GB 硬盘
1TB 流量
1个 IP
4.95美元

估计和 123Systems 的服务器硬件配置一样:

Core i5 (i5-750) Quad Core 2.66GHz | 16 GB DDR3 | RAID Protected Disks
Core i7 (i7-860) Quad Core 2.80GHz | 16 GB DDR3 | RAID Protected Disks