Tag Archives: Linux

nginx的IPv6支持

感谢Jtr帮忙,给我新租的linode VPS加了he.net的IPv6 tunnelbroker,但是marsteel说IPv6访问不了网站,只能ping通和访问ssh端口。我又去nginx的邮件列表问了半天,才发现原来只需要 listen [::]:80; 这一句就可以,而不需要分别在IPv4和IPv6上设置listen。具体讨论参见这里。

Posted in 默认分类 | Tagged , , | 9 Comments

RedHat 网络安装,对NFS URL的格式要求很高哦

今天用nfs://host/dir的格式安装失败了。后来看了python-virtinst-0.400.3-5.el5包里面DistroInstaller.py文件的源码,发现其中有一步是转换NFS URL的格式: def _sanitize_url(url): “”” Do nothing for http or ftp, but make sure nfs is in the expected format “”” if url.startswith(“nfs://”): # Convert RFC compliant NFS      nfs://server/path/to/distro # to what mount/anaconda expect  nfs:server:/path/to/distro # and carry the latter … Continue reading

Posted in 默认分类 | Tagged , , , , , | Leave a comment

RedHat 升级好猛烈啊

今天发现手头的一台 RHEL 5 的 libvirt、libvirt-python、python-virtinst 包比另一台机器的版本高,比 CentOS 里也高,而且那几个包还是原装正版 RedHat 出品的。奇怪…… 后来问了 Oralce Linux 的技术支持熟人,发现 Oracle Linux 从5到5.4,里面包含的这几个包的版本确实有过较大变化,这也解释了我手头的这个 RHEL 版本变动是咋回事。 看来 RHEL 的所谓 update 还是挺猛烈的,几乎相当于发行一个新的大版本了。CentOS 今天很让我失望,竟然没有跟进 5.4。

Posted in 默认分类 | Tagged , , , , | 3 Comments

yum的$releasever真是太反动了

来看这篇文章的人,大都应该同意《Unix编程艺术》中提到的那些观点吧。今天就给大家看一个反例:yum 的 $releasever 变量 在 /etc/yum.repos.d/ 目录下的软件库定义文件中,常常会在 baseurl 的路径中提到 $releasever 这个变量,表示当前发行版的大版本号,但大家知道这个变量是在哪设置的吗?我 grep 了整个 etc 目录都没找到,还是看了 yum.conf 才知道的,是在 yum.conf 文件里 distroverpkg 选项定义的。但这个选项就很有问题: distroverpkg 和 releasever 名字不同,且看不出什么联系 distroverpkg 的值,并不是明文,而是“redhat-release”。不知道大家看到这个会有什么想法,反正我是首先想到了 /etc/redhat-release 文件,但我错了。实际上指的是 redhat-release 这个RPM包。所谓“distroverpkg=redhat-release”的意思,其实是将 $releasever 设置为 redhat-release 这个RPM包的版本号 够变态吧?别人都是直接赋值,或者 include 一个各种变量定义的文件进来,而yum竟然用某个包的属性作为值,违反了“everything is file”的原则。烂!用属性实现,则相关软件必须能读取属性。这个功能对于yum来说无所谓,但是对于别的软件呢?还得特地加入rpm相关的代码才能实现,加入了平台相关特性,降低了可移植性,麻烦。正确的方法是以文件内容作为表示形式。当然了,这样的话用属性就没意义了,yum还能减点肥。 … Continue reading

Posted in 默认分类 | Tagged , , , | 13 Comments

Redhat真是太buggy了,竟然连OpenSSL的脚本少一句话都没看出来

这两天在考虑HTTPS撤销证书的问题,需要学习OpenSSL签X.509证书的流程,其中用到OpenSSL自带的CA.pl和CA.sh脚本。有个很奇怪的现象就是我用ubuntu里的CA.pl -newca可以生成正确的根证书,而同事用CentOS就不行。一起对比了一下配置文件、脚本,发现CentOS里的CA脚本少一句,导致签发出来的所谓根证书其实只是终端用户证书。然后看了一下RHEL 5,也有这个毛病。 于是就去centos网站提交了bug报告 http://bugs.centos.org/view.php?id=3860 另外,发现nginx只有0.8.7以上版本才支持CRL(证书撤销列表),唉…… 补录: 下午验证了一下,发现OpenSSL原版源代码就那样。奇怪的是redhat为啥选择了有bug的CA.sh而不是正确的CA.pl呢? https://bugzilla.redhat.com/show_bug.cgi?id=524780 2010年3月30日补录: 今天有新闻说 OpenSSL 终于发布 1.0 了,我看了一下,我提交的那个 bug 报告也被标记为已修复状态了。

Posted in 默认分类 | Tagged , , , | 2 Comments

这几天玩了一下kexec

kexec 是一个快速重启动 Linux 系统的工具,其快速主要体现在是从内核开始启动而不是从硬件初始化开始,在当今硬件越来越复杂,开机自检越来越慢的条件下,kexec 可算是提高生产力的一大发明。 kexec 的操作分为两步: 加载内核到内存 运行刚才加载的内核 第一步的语法为 kexec -l  内核文件名 –initrd=initrd文件名 –append=内核参数。注意等号必不可少,否则,虽然 kexec 不报错,但是内核启动时会失败;第二部用 kexec -e 即可。通过查看 /sys/kernel/kexec_loaded 的内容可以判断是否已经加载内核。 目前遇到的问题有这几个: cciss HP SmartArray驱动在重启内核时会失败,导致无法正常进行下去 没搞明白如何用 kexec 加载 xen hypervisor 相信很快就会搞明白的。 同时提一下,发行版提供的 kexec 软件包带有 /etc/init.d/ 脚本,可以把正常的 reboot 操作转变成 kexec … Continue reading

Posted in 默认分类 | Tagged , , , , | 3 Comments

优秀Linux发行版应该具备的基本素质(待续)

发行版内包含的软件足够多、足够新,以避免发生用户因为找不到合适的软件而被迫打破发行版风格的事件。具体的说,RedHat EL包含的软件太少,导致很多人必须编译才能弄到够自己用的软件,就是很不好的。 有优秀的软件包格式和依赖关系解决工具。举个例子,yum只考虑要安装的软件包及其依赖关系,却不考虑本机已经安装了的软件包,很容易发生解决不了的版本冲突问题;另外yum老版本的速度也太慢了。 配置文件的风格应尽量使用include conf.d/*风格,以实现最大的可扩展性,方便插件类的软件单独成为一个软件包 配置文件的文件名应该固定,不应在配置文件名上包含任何与具体情况相关的信息。大家可以对比一下,debian的/etc/network/interfaces文件,可以用man interfaces命令查看其格式;而/etc/sysconfig/network-script/ifcfg-eth0则无法man 配置文件的内容应该清晰明了,默认内容中应包含注释信息 文件系统目录树结构符合FHS规范。我很奇怪,在已经有一个/etc的情况下,为啥会二次发明一个/etc/sysconfig和/etc/default目录。特别是前者,简直包罗万象,已经包含了/etc几乎所有的功能。

Posted in 默认分类 | Tagged , , , , | 4 Comments

怒了,mysql真是太过分了,竟然改开发接口

今天编译 Courier-authlib 0.62.2 版本,编译出来都是残废,不支持 MySQL 查询。后来看了 config.log,发现其需要的 mysql_connect 函数在 libmysqlclient 库中找不到。nm 了一下那个库,还真的是没有。 后来到 http://dev.mysql.com 翻文档,说这个函数改成 mysql_real_connect 了。MySQL 真是太过分了,就不知道留个接口给老的代码吗? 这件事也教育我们:没事不要自己编译,浪费时间和精力。

Posted in 默认分类 | Tagged , , | Leave a comment

第一次用iSCSI,第一次装Oracle ASM

今天帮谢珮英装Oracle RAC和ASM,特地运行了FreeNAS作为iSCSI target,且在没了解过iSCSI和Oracle ASM的情况下安装成功,还发现oracleasm-createdisk的manpage里面的参数顺序是错误的。原来企业级就是在文档里保留部分未修正的错误,然后再偷偷告诉实施工程师。 说正经的,企业级软件考虑得还是很周全的,其集群控制机制,很多是我之前没有想到的。不过也要感叹,虽然我的经验比较少,但多年学习计算机技术的积累和聪明头脑也是难得一见的啊,为啥连找个工作都这么难呢?

Posted in 默认分类 | Tagged , , , | 2 Comments

无责任猜测某视频分享网站的系统架构

今天听了 lighty modcache 的讲座,晚上和 suchasplus 谈论这个讲座时,注意到以下细节,于是我开始自说自话的猜测他们的系统架构。 modcache 本身不会自动删除磁盘缓存文件,需要 tmpwatch 程序配合或者被动 PURGE 缓存目标的老化只根据 refresh-pattern 决定,没有多余的信息和缓存目标保存在一起,缓存目录中的文件格式很简单 从这些细节中,我猜测该视频分享网站有个主控端,负责通过发请求或者直接推送文件到缓存目录的方法推送文件到前端缓存服务器 ,而这些傻得可爱的前端缓存不会主动删除缓存文件。这样,主控端对“某台前端服务器拥有哪些内容”了如指掌,配合性能测量机制,可以动态的向客户端发送指向不同前端服务器的播放列表,从而达到均衡各服务器、各网段负载的目的。在网络流量低潮,还可以偷偷的向前端发送热门内容文件,或者遥控前端服务器删除过期内容等。 这样看来,其实前端的服务器并不能算做传统意义上的反向代理缓存服务器,而是 web 服务器,但为什么用缓存代理的方式来实现这个功能呢?我认为主要是可以通过向缓存代理发送一个 GET 请求的方式,轻松的向该前端服务器推送内容;缓存目录中的文件没有特殊格式和多余信息,恐怕也是出于这个考虑。 声明:本文为无责任猜测。如果与实际情况相同,并不表明我窃取了该企业的机密;如果不同,则说明我已经独立发明了一种较通用的大型网站系统架构。

Posted in 默认分类 | Tagged , , | 4 Comments