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 form around internally
url = "nfs:" + url[6:]

# If we need to add the : after the server
index = url.find("/", 4)
if index == -1:
raise ValueError(_("Invalid NFS format: No path specified."))
if url[index - 1] != ":":
url = url[:index] + ":" + url[index:]

return url
于是按照它那个写成nfs:host:/dir 就成功了。估计是转换脚本没有正常运行造成的

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

浅谈“开发背景”

前一阵和某大型央企的同行交流,谈到“开发背景”这个词,他说我没有开发背景,找工作时易受歧视。我对此报之一笑:其实“开发背景”一词,和其代表的含义早已被剥离了。

传统意义上的计算机高手,都是编程高手,这些人往往出身名牌学府,在计算机尚未在国内普及时就已接触并掌握,其工作内容也是以开发为主。后来计算机应用范围变宽,上述高手也已经成为了行业中的技术领袖或管理人员,于是他们想招个同自己一样有开发背景的人来接班,虽然即使并不是招程序员。在这一代人眼中,开发背景代表了对计算机的理解程度。

但是,并非每个从业人员的成长经历都如同前辈一样单调。现在多如牛毛的培训班正批量把计算机专业的好学生、差学生,甚至非计算机专业的人生产成敢于自称为程序员的挨踢蓝领;而Java语言由于跨平台、开发效率高、企业级应用广泛而成熟、学习曲线较缓,成为这类培训班首选的培训课程。问题是,以Java作为进入计算机行业的第一课,竟然也能算作开发背景?

另一方面,不以开发为业的人不见得不符合所谓开发背景的技术要求。比如我在1995年时时用QBasic通过读写B800段的方式实现屏幕上绘图和保存载入功能,这时候上述培训学员尚不知计算机为何物;2000年在报纸上发表文章介绍用VisualBasic语言编制SMTP、POP3客户端的方法,上述培训学员仍不知计算机为何物。当我为不得不在某重要软件中写了一个不可重入的函数而深感开发工作之无奈,并决定不再多做开发工作时,上述培训学员刚进培训班。而现在我竟然不比他们有优势。虽不以开发为业,却并不比以此为业的人在此方面差,入行很多年却根本不知不可重入为何物的“程序员”也多着呢。做系统管理工作,更关注的是清晰的接口。虽然大家都知道清晰接口必有龌龊实现,但非到功能不正常我才不会去管它(开源软件的bug解决办法我也是报过几个的)。有人说这是不认真,但为什么你要关心一个东西为啥可以正常工作呢?难道它可以正常工作不是理所当然的吗?

Posted in 默认分类 | 10 Comments

突发奇想,发现现代虚拟化技术和LVM有点像

刚才和谢珮英同学讨论简易RAID(无卷组概念,逻辑卷直接建设在物理卷之上,常见于机内RAID)和高级RAID/LVM(有卷组概念,逻辑卷建设在卷组之上,常见于外挂盘柜类存储设备),然后就去厕所看虚拟化广告去了。看着看着,突然发现现代虚拟化技术构造的IT基础架构和高级RAID/LVM竟然有些像:

  • 物理机器对应物理卷
  • 虚拟化群集对应卷组
  • 虚拟机对应逻辑卷
  • 虚拟化群集的整体搬迁对应卷组的跨控制器迁移

区别仅仅在于磁盘管理的逻辑卷容量可以大于物理卷,而虚拟化技术中虚拟机的资源目前还不能大于物理机器,但具备了群集内自由迁移的特性。相信随着技术的发展,虚拟机将可以拥有比单台物理机器更多的计算、存储能力,从而让虚拟化的IT基础架构更像逻辑卷管理器。

——七月澡后补记

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

VMWare Forum 2009

昨天参加了VMWare Forum 2009会议,先说一下会议组织的问题:

组织不力的地方:

1 时间太早,早餐结束得也太早

2 有几个人,收到确认信,但数据库里没记录他们的信息,于是只好按临时来宾登记。但只有俩队伍可以录入临时来宾,而工作人员又给人家指错了队伍,于是悲剧发 生了。录入柜台用的是瘦客户机,连接VMWare View,其实这时候应该发挥虚拟化的优势,直接把瘦终端对应的虚拟机换一下,连接到全功能注册界面去录入信息,而不应该让人家再排队

3 午饭真简陋,更发指的是竟然在里面放了一瓶水配重,最不可容忍的是三明治、香蕉、水、餐巾纸竟然装在那么大的盒子里,让我想起了天价月饼……

好处:

1 有个passport活动不错,用更易于接受的方式让客人主动到各展位逛一圈

2 我在Riverbed的展位问的比较详细,后来走到别的展位之后,riverbed的工作人员又追上来送了个小礼品

3 Cisco展台不行,是外包的,只负责发资料

 

这次的讲座,鼓动的口号就是基础架构虚拟化,宣扬了用虚拟化技术作为中间层,掩盖硬件需要停机检修和会发生故障的事实,对用户提供连续可用、性能可以接受的系统视觉。

在此洗脑下,今天开始玩VMWare ESXi

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

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

nginx处理bug的速度太快了

今天早晨部门同事告诉我说 nginx 的日志轮换有些问题。我观察了一下细节,发现 nginx 0.7.62 在收到 USR1 信号之后,会同时访问 error.log 和 error.log.1 两个错误日志文件,于是就加入了 nginx 的英文邮件列表,发了信过去。

20:46 作者确认是bug;22:05收到作者发来的补丁。

 

对比一下 OpenSSL 的官僚作风,我觉得有时个人比团队还好一些。

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

yum的$releasever真是太反动了

来看这篇文章的人,大都应该同意《Unix编程艺术》中提到的那些观点吧。今天就给大家看一个反例:yum 的 $releasever 变量

在 /etc/yum.repos.d/ 目录下的软件库定义文件中,常常会在 baseurl 的路径中提到 $releasever 这个变量,表示当前发行版的大版本号,但大家知道这个变量是在哪设置的吗?我 grep 了整个 etc 目录都没找到,还是看了 yum.conf 才知道的,是在 yum.conf 文件里 distroverpkg 选项定义的。但这个选项就很有问题:

  1. distroverpkg 和 releasever 名字不同,且看不出什么联系
  2. distroverpkg 的值,并不是明文,而是“redhat-release”。不知道大家看到这个会有什么想法,反正我是首先想到了 /etc/redhat-release 文件,但我错了。实际上指的是 redhat-release 这个RPM包。所谓“distroverpkg=redhat-release”的意思,其实是将 $releasever 设置为 redhat-release 这个RPM包的版本号

够变态吧?别人都是直接赋值,或者 include 一个各种变量定义的文件进来,而yum竟然用某个包的属性作为值,违反了“everything is file”的原则。烂!用属性实现,则相关软件必须能读取属性。这个功能对于yum来说无所谓,但是对于别的软件呢?还得特地加入rpm相关的代码才能实现,加入了平台相关特性,降低了可移植性,麻烦。正确的方法是以文件内容作为表示形式。当然了,这样的话用属性就没意义了,yum还能减点肥。

另外,如果/etc/redhat-release 文件和 redhat-release 包标示的信息不同,又该以哪个为准呢?redhat犯过不止一次这样的错误了,比如ifcfg-eth0里可以写DEVICE=eth1之类的。一个信息到处存放,则必将面临各处副本不一致的危险。

有人为心爱的 RedHat 分辩说是为了升级 redhat-release 包之后可以自动升级整个系统,但事实证明 RedHat 的选择一向都是很傻的。为什么不在软件库定义文件中 include 一个表示版本号的头文件,每次大升级的时候更改这个文件呢?

再举个例子:

Debian系里面,内核包的版本维护是利用一个虚拟的某个风格的内核包,比如 linux-image-generic 包,而该包又依赖于 linux-image-2.6.28-15-generic,后者就是真正的内核包,其版本号直接写在包名里,同时也表现在包属性里。系统升级的时候,由于 linux-image 和 linux-image-generic 的依赖关系变动,会依赖于新的 linux-image-2.6.xx-yy-generic 包,自然会装上。而新的 linux-image-2.6.xx-yy-generic 和旧的根本不是一个名字,因此旧的内核包不会“被升级”掉。apt后加入的删除无用包的功能可以指定不删除 linux-image 开头的所有包。

反观 RedHat系 的做法:各个内核包,只有若干个 kernel-<flavor> 的风格包名,版本号作为 RPM 的属性来实现,但是内核这么重大的包又不能轻易用新的代替旧的,于是再给 yum 新增一个 installonlyn 插件(没错,后面还有个n字母,表示数量)来抑制新的高版本 kernel 代替同名旧 kernel 包的动作。

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

妙手偶得的朝霞

10月2日早晨,去北京西站赶火车,路过龙腾五南边的工地时,突然看见朝霞美景。赶紧掏出手机拍下来

朝霞

可惜就是手机拍摄光影的效果还是太差,而我恰恰又是对光影的重视超过对色彩的重视的人。唉!

Posted in 默认分类 | Tagged | 6 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 的操作分为两步:

  1. 加载内核到内存
  2. 运行刚才加载的内核

第一步的语法为 kexec -l  内核文件名 –initrd=initrd文件名 –append=内核参数。注意等号必不可少,否则,虽然 kexec 不报错,但是内核启动时会失败;第二部用 kexec -e 即可。通过查看 /sys/kernel/kexec_loaded 的内容可以判断是否已经加载内核。

目前遇到的问题有这几个:

  1. cciss HP SmartArray驱动在重启内核时会失败,导致无法正常进行下去
  2. 没搞明白如何用 kexec 加载 xen hypervisor

相信很快就会搞明白的。

同时提一下,发行版提供的 kexec 软件包带有 /etc/init.d/ 脚本,可以把正常的 reboot 操作转变成 kexec 重启,从而加快速度。但是对于个人计算机、双操作系统的使用者来说,因为这样越过了 grub 阶段,所以无法正常进入另外一个操作系统。解决方法是修改 /etc/default/kexec 文件中的参数,禁止 /etc/init.d/kexec-load 脚本在关机前加载内核。

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