CentOS 6 RPM安裝python 2.7

先说第一种方法,通过rpmbuild编译XXX.src.rpm包([1]、[2]):

  1. 安装依赖:sudo yum install -y make autoconf bzip2-devel db4-devel expat-devel gcc-c++ gdbm-devel glibc-devel gmp-devel libffi-devel libGL-devel libX11-devel ncurses-devel openssl-devel readline-devel sqlite-devel systemtap-sdt-devel tcl-devel tix-devel tk-devel valgrind-devel zlib-devel
  2. 下载src.rpm: ftp://ftp.pycopia.org/pub/python/RHEL51/python2.7-2.7.1-1TH.src.rpm
  3. sudo rpmbuild –rebuild

然后等待漫长的编译过程。

……

……

……

在此期间我宣布一下实验结果:编译+tests跑了1个多小时,最后告诉我打包rpm时出错!坑爹啊!!

第二种是懒人大法,直接下载二进制rpm包安装:

  1. http://li.nux.ro/download/nux/dextop/el6/x86_64/python27-libs-2.7.3-6.2.el6.nux.x86_64.rpm
  2. http://li.nux.ro/download/nux/dextop/el6/x86_64/python27-2.7.3-6.2.el6.nux.x86_64.rpm
  3. http://li.nux.ro/download/nux/dextop/el6/x86_64/tkinter27-2.7.3-6.2.el6.nux.x86_64.rpm
  4. http://li.nux.ro/download/nux/dextop/el6/x86_64/python27-devel-2.7.3-6.2.el6.nux.x86_64.rpm

 

如果只需要python可以只安装1和2,不过通常未来安装python库时有时会需要头文件,所以一般推荐也安装上python27-devel.

含autoddvpn的Buffalo WHR-G300N v2 DDWRT固件

试验过按autoddvpn官方提供的文档自制固件[1]并不可行,会提示“ERROR: New firmware image will be larger than original image!”,可以删除一些语言文件来空余出部分空间[2],否则做出来的固件会直接把路由器变砖(当然也可以刷回来[3],但是过程纠结)。

自制固件下载:

https://www.dropbox.com/s/sk889vo7n89o8lo/new-firmware.bin

升级步骤:

  1. 下载buffalo-to-dd-wrt_webflash-MULTI.bin,通过路由器本身的管理界面把它刷成DD-WRT
  2. 再通过DD-WRT web界面更新固件为自制固件

设置:这个就必说的太细啦。

已知问题:我目前使用这个固件超过2个月,偶有不稳定状况发生在VPN中断并重连后,发生不稳定状况时局域网内的主机无法连接到国外网络,但路由器可以。调试发现是iptables有几条规则被清除的原因,但还未找到完美的解决方法。

参考:

  1. custom firmware自制韌體模式
  2. Buffalo whr g300n v2路由器刷dd-wrt 再刷回来
  3. 变砖之后的处理办法:通过tftp刷回原厂固件

SSH登陆响应慢的问题

同样的问题,有可能是两种情况:

第一种情况比较常见,也有很多资料提及到,就是在SSH登陆时服务器端会对客户端的IP进行反解析造成登陆响应慢的问题,通常改sshd_config的“UseDNS no”即可以。

第二种情况,服务器端启用了GSSAPI[1]。登陆的时候客户端需要对服务器端的IP地址进行反解析,如果服务器的IP地址没有配置PTR记录,那么就容易在这里卡住了。

对于这种情况,就有必要禁用GSSAPI认证以加速SSH登陆,具体有下面几种方式:

  1. 解法一:使用ssh命令时使用附加的参数:ssh -o GSSAPIAuthentication=no server_address
  2. 解法二:修改客户端ssh_config(/etc/ssh/ssh_config或~/.ssh/config):GSSAPIAuthentication no
  3. 解法三:修改服务器端的sshd_config(/etc/ssh/ssd_config):GSSAPIAuthentication no

参考:

怎样让Google在搜索结果呈现你的头像

效果:

第一步:创建Google Profile,修改头像。同时,修改Google Profile的“以下网站的撰稿者”,增加你的博客网址在上面。

第二步:在博客文章中增加你的Google Profile链接,有两种方式选其一:

  1. 方式一:将Google Profile链接附加在每篇博文中。同时,重要是的还要设置链接的rel属性为“author”,如:
    <a href="https://profiles.google.com/102865267049130142543" rel="author">肖斌</a>
  2. 方式二:
    1. 创建一个“关于作者”的页面,在该页面插入Google Profile链接,但是这次rel的属性是”me”,如:
      Google Profile:<a rel="me" href="https://profiles.google.com/102865267049130142543">Google Profile</a>
    2. 每篇博文增加一个指向“关于作者”页的链接,设置该链接的rel属性为“author”,如:
      <a rel="author" href="/about">About</a>
只需要两个步骤,完成之后,可以通过Google Rich Snippets测试。

参考:

更新:
11.27 – 看来Google还在测试这项功能,完成以上的步骤之后还需要提交一个表单

不停止ping的情况下取得统计信息

我们常常需要通过长时间ping服务器来判断服务器的稳定性,在这个时候,通常只需要按CTRL+C,或者是向ping进程发送SIGINT信号,该进程就会结束并同时打印出统计信息。

要怎样才可以在不停止ping的情况下取得ping的统计信息呢?

简单的做法就是使用按键“Ctrl+\”就可以(via);爱折腾的同学,可以向ping进程发送SIGQUIT信号试试。

在漫长的ping过程中,这个小小技巧会很有用。

在Windows下,也有对应的按键,是:”Ctrl+Pause Break” (via)。

Apache绑定子域到目录

刚看到一篇《Apache用mod_rewrite配置子域名》,用mod_rewrite来做子域名绑定到目录,我们之前也有尝试过,但是写在conf档里边RewriteEngine,容易与.htaccess中的RewriteEngine发生处突。后来找到一个很完美的解决方案:mod_vhost_alias

<VirtualHost *:80>
    ServerAlias *.xiaobin.net
    VirtualDocumentRoot /var/htdocs/xiaobin.net/%1
</VirtualHost>

是的,就这么简单。

一次神奇的MySQL优化

话说有这么一个表:

CREATE TABLE `user_group` (
  `id` int(11) NOT NULL auto_increment,
  `uid` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `uid` (`uid`),
  KEY `group_id` (`group_id`),
) ENGINE=InnoDB AUTO_INCREMENT=750366 DEFAULT CHARSET=utf8

看AUTO_INCREMENT就知道数据并不多,75万条。然后是一条简单的查询:

SELECT SQL_NO_CACHE uid FROM user_group WHERE group_id = 245;

Read the rest of this entry »

strace跟踪apache mod_php5的系统调用

如果跟踪php命令行,或者是fastcgi,应该相对容易多,因为这两种情况下都有独立的PHP进程。

但是跟踪Apache+mod_php5相对就麻烦一些,因为没有独立的PHP进程。如果对httpd守护进程进行strace的话,只会获取到Apache本身的一些系统调用,如查找.htaccess,得不到PHP的系统调用。

有个老外分享了一个视频,跟踪主要分三步:

  1. 通过Telnet与Apache建立连接,但是不要立刻就发送HTTP请求(可以写入头HTTP头,但不要连续两次回车),以免连接过快被断开了;
  2. 新开一个ssh session,root运行
    lsof -p `pidof telnet` | perl -nle 'print "netstat -anp | grep $1" if m/:(\d+)->/' | sh | perl -nle 'print "strace -p $1" if m/(\d+)\/httpd/' | sh
  3. 回到Telnet,发送HTTP请求

Read the rest of this entry »

高效的大文件拷贝

译自:Efficiently copying files to multiple destinations

当你要两台机器之间拷贝一些大文件的时候,把nc(netcat)和pigz(parallel gzip)组合起来会是一个简单高效的选择。不过,如果要把这些文件同时分发到多台机器,有什么好法子吗?在Tumblr,这还算蛮常见的需求,比如我们要快速的同时增加几台MySQL Slave的时候。

你可以从源机器逐个拷贝到逐台目标机器,但是往往时间也是成倍的。或者你也可以同时从源机器同时拷贝到多个目标机器,但是受制于源机器的带宽等因素,速度并不见得真的很快。 Read the rest of this entry »

include(“./file.php”)和include(“file.php”)区别

多数情况下,两种方式的区别可能在性能上有细微的区别(via)。 但是,在多重包含的情况下表现未必一样:

|-- index.php
`-- lib
    |-- a.php
    `-- b.php

假定有三个文件,入口文件index.php,包含lib/a.php。a.php又需要包含它同目录下的b.php:

  • 方式1:include(“./b.php”) – 不工作
  • 方式2:include(“b.php”) – 正常