技术

如何获得 RHEL kernel 的单个patch

记得以前 redhat 发布的 kernel srpm 包,里面是一个2.x.xx的原版kernel + 一大坨 RH 自己的 patch。后来不知道出于什么考虑,它只提供"混淆"版本的kernel源代码,对需要研究订制内核的开发者来说非常不爽。

想要拿到单个的patch,官方的说法是访问https://access.redhat.com/knowledge/sources/,但是需要成为红帽的订户才能登入...

于是就有了 RedPatch 这样的良心项目:它没有公开得把 patch 提供出来任意下载——估计这么做是违反协议的)——而是把 patch 一个个 commit 到源码树里,这样我们访问这个 git 树就能获得单个patch 了!

Topic: 技术

利用firefox修复pdf文件

某同事体检,留了QQ邮箱,体检结果寄到了邮箱里。

现在他需要把这个pdf文件交给另外的人,麻烦在于这个pdf在QQ邮箱里的preview是能看到的,但是下载下来是无法用Adobe打开。

上网搜了一下,倒的确有在线修复工具。尝试修复,无果。

后来想到firefox不是也内置一个pdf.js做PDF的在线查看么。。。于是用firefox打开之,结果还不错,5页的PDF,后四页都正确解析出来了,第一页是空白;所幸第一页就是这个体检机构的封皮,于是重新打印到PDF文件后面的4页生成新文件,搞定

Topic: 技术

一台老服务器上的 send(, , ,MSG_MORE) bug

上次研究完 HAProxy,觉得这东西搭配 Postfix 挺好,就安排给运维了,结果运维同学反馈,加持了 HAProxy 以后,返回 220 欢迎信息时间显著变长,于是昨天就抽时间和运维一起分析这个事儿

我的第一反应是 Postfix 处理 Proxy Protocol 有延时,比如反向DNS查询什么的,于是首先在 Postfix 服务器上执行 tcpdump

观察到,当客户端连接 HAProxy 之后,立即 HAProxy 就和 Postfix 完成了3WHS,然后足足等了 3 秒,才从 HAProxy 发来了 "PROXY X.X.X.X XXXX"

现在可确认延时发生在 HAProxy 上,接着去 HAProxy 机器上 strace -tt HAProxy进程

观察到,当完成和后台 Postfix 的 3WHS 之后,的确就立即把 "PROXY X.X.X.X ... "发送了,但是等了3秒,才recvfrom后面的 220

问题出在哪里呢??仔细看传送"PROXY X.X.X.X ..."的系统调用,原来是用的 send() syscall,而且,它使用了 MSG_MORE 这个参数... (不明白什么是 TCP_CORK 的同学可自行搜索,HAProxy 在这里使用 MSG_MORE 是很有道理的)

但为什么这个延时长达3秒实在理解不能,在我自己的机器上试了一下,是200ms,查看 sysctl 里面的 tcp 设置也没有头绪,对于这种古老的RHEL4服务器只能出大招了:因为这个HAProxy是为SMTP代理专用的,直接修改HAProxy源码,把MSG_MORE注释变成0就一切正常了

Topic: 技术

从搜狐的技术评级所想到的

下午和KCN领导聊天的时候随口提到这个事情,不完全是吐槽

总之,目前搜狐的技术委员会评出的3.1,比某度的某些T5还要靠谱一些。这个给业务在某些程度上造成了困扰,希望这个制度能越来越好,并且技术委员会能在2014年发挥除了考核之外,更大的作用

以当下的苛刻要求而言,在业务部门而不是研发部门的,年过30的同学,想在这条道路上精进到4.x,是一件很困难的事情——除非你做出一个牛逼的平台产品出来

目前搜狐技术委员会的标准,是:针对一个互联网服务需要的各项技术要求,你能带来什么价值

我严肃的思索了一下,当初我从eyou跳槽来搜狐的话,3.1或许能符合要求,3.2是绝对达不到标准的(应聘运维可能还能有4.x的机会)

所以,就只能和BAT竞争毕业生了,同时要给很好的机会,很好的导师,很好的环境,来帮助其成长

附:我自己觉得自己在技术上做得比较得意的事情

  1. 拿到了天大路由器的登录和enable口令
  2. eyou.com 的日历,把"事件"用一个链表数据结构很好的表示并存在硬盘上
  3. eyou MTA 第一版
  4. 写了一个 bridge,以及 SMP 下的各种坑
  5. 2004年,就建了一对很棒的前端CSS + JS组合
  6. eyou的编译脚本和安装脚本
  7. DV工具
  8. 搜狐通行证,Nginx Module + JS 我一个人全包
  9. web.py 的大工程
还有就是最近两个偶尔在具体事情上动动头脑动动手,还是能做一点点事情

最遗憾的事情,是进搜狐后,对运维的认识不够,很久很久以后,才形成认识和方法;否则很多事情能做得更好

Topic: 技术

关于 Proxy Protocol

在生产环境中,Load Balancer 相当重要。常见硬件有 F5,软件有 LVS,或者更偏应用层的 HAProxy。

但实际运用中,怎么把 source ip/port 传递给后端的 real server 是一个大问题。因为realserver通常是需要这些信息用来记日志,或者安全防护策略应用之类。。。

如果是 F5,需要 real server 把自己的 default gateway 指向过去;如果是 LVS/HAProxy 也类似,需要LB服务器打开 TPROXY 内核选项,同时 realserver 有网段的限制。

上述的方案虽然透明,但是对网络结构有特殊要求,所以后来 HAProxy 的作者提出了 Proxy Protocol

现在至少 Postfix 2.10,甚至 Haraka 都能支持这个协议了。

HAProxy 很值得尝试

什么是产品,什么是服务

这里说的是企业服务的领域,不是互联网的什么"工具vs服务"之争

现在在我看来,服务就是将产品和客户的业务流程对接的所做的努力。产品只是一块砖,服务是把这块砖砌在指定的地方。

说起来很浅显,以前自己未必不是这样理解的。但过去对"客户业务流程"的理解,和今天对这件事情的理解,还是不一样的。

在应用中使用第三方组件,现在也不是只想着什么开源、免费,某些情况下更愿意去购买有商业支持的。因为你的服务,也需要第三方的帮助,才能做得更好。

Topic: 技术

技术研发周期真长

假如是新技术,或者是新人,总之就是新进入一个领域。假如投入有限,按照大公司一般性的工作节奏和流程,需要大概18个月的时间,才能找到运营的方向。

回想最近2年多见过的工作:
SCE
Hadoop
SendCloud

PAN

还有别人的工作

Topic: 技术

PaaS 是什么

我前几天在邮件中心和研发中心的沟通会上说的:“对数据中心而言,机器的概念将来是以机柜为单位。好比我们现在以 N-Core 衡量服务器能力,将来就是以 N-机柜 为单位的交付。相应的,IaaS 就是这种机器的OS,OpenStack 就是未来的 Linux Kernel”

再斗胆接下来做类比,PaaS 就是将来的 Distribution。或者说 aPaaS 更偏重于 Distribution,而 iPaaS 这个概念应该是类似 WebLogic 这样的东西吧?

Topic: 技术

解决 Windows Server 2008 R2 上 gem install mysql2 时 collect2: ld returned 1 exit status

在 Windows Server 2008 R2 上安装 redmine 前要安装一堆依赖。

按照Redmine 安装笔记这篇网志里的步骤:

运行 bundle install --without development test rmagick 时报 undefined method `[]' for nil:NilClass (NoMethodError) 的错。

经查找,从 http://stackoverflow.com/questions/19014117/ruby-mysql2-gem-installation-on-windows-7 得知,需要下载 MySQL Connector C,然后解压到 C:\mysql-connector,再运行 gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\mysql-connector\lib" --with-mysql-include="C:\mysql-connector\include" --with-mysql-dir="C:\mysql-connector"'

运行后,又报了 collect2: ld returned 1 exit status 的错。

经查找,从 http://www.websofia.com/2011/08/installing-rubys-mysql2-gem-for-mysql-64-bits/ 这里得出是因为需要用 32 位的 MySQL Connector C。

重新去 http://dev.mysql.com/downloads/connector/c 下载 32 位 的 zip 包,解开,把 libmysql.dll 拷贝出来,替换掉 Ruby 里那个,删掉原来的 C:\mysql-connector,把这个 32 位的 zip 包解在 C:\mysql-connector 里,再执行刚才的命令。成功!

Topic: 技术
订阅 RSS - 技术 | BT的花