前几天在查Xen相关的配置时,发现了网上的关于xl的man page,而我在自己的测试机上'man xl'却没有任何man page输出。在xen-unstable.hg中的代码中,看到了如下目录:
1 2 3 4 5 6 7 8 9 |
[build@xen-build xen-unstable.hg]$ ll docs/man total 124 -rw-r--r--. 1 root root 4262 Feb 25 10:38 xend-config.sxp.pod.5 -rw-r--r-- 1 root root 30386 May 24 19:02 xl.cfg.pod.5 -rw-r--r--. 1 root root 2055 Feb 25 10:38 xl.conf.pod.5 -rw-r--r--. 1 root root 2488 Feb 25 10:38 xlcpupool.cfg.pod.5 -rw-r--r-- 1 root root 34429 May 24 19:02 xl.pod.1 -rw-r--r--. 1 root root 8678 Feb 25 10:38 xmdomain.cfg.pod.5 -rw-r--r--. 1 root root 28670 Feb 25 10:38 xm.pod.1 |
里面有关于xl和xl.cfg等的pod格式的说明文档,我就去找一个办法将这些pod文件转化为man命令和认识的文件的方法。
pod2man工具可以实现这样的功能;而且man说使用的目录一般在/usr/share/man/下面,其中很多.gz文件,比如:/usr/share/man/man1/grep.1.gz
将man的各种区域都做了分类(man1, man2, man5, man8之类的),而且都是gzip压缩的文件。
我就试图改进我们的build脚本,使其将man page也build好放到最后的Xen的RPM包中,遂有如下脚本(尽管后来发现Xen编译时有很简单的做法)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash dir=/home/nightly/builds_xen_unstable/xen-src-25388-20120524 cd $dir/docs/man/ rm -f *.gz for i in $(ls xl*.pod*) do gz_name=${i/.pod/}.gz echo $gz_name #gzip -c $i > $gz_name pod2man $i | gzip > $gz_name echo $(ls *.gz) done man1_dir=$dir/dist/install/usr/share/man/man1/ man5_dir=$dir/dist/install/usr/share/man/man5/ cp xl*.1.gz $man1_dir cp xl*.5.gz $man5_dir |
对于这个脚本,需要再提一下的是gzip这个命令,它默认是会将原文件删掉的,默认生成filename.gz文件,如果要避免原文件被删除,可以加-c参数,如:gzip -c file > file.gz 则既可以生成file.gz又会保存原文件file.
后来我才发现,Xen编译时很简单的一个命令"make docs"即可把Xen相关的man page都生成好。
make docs 生成的docs在:dist/install/usr/share/man/ 和 dist/install/usr/share/doc/xen/html/;
这里不得不说一下,这个html目录的文档是非常不错的东西,将这个html目录copy到web server上去就可以得到一个网页版的关于Xen的各种命令和配置说明文档(像本文开头的图片一样)。
而dist/install/usr/share/man/man1/下面已经有xl.1.gz这样的文件了,可以直接给man工具使用了。
(不好意思,后面都转移到Xen的文档生成了,有点和题目不相关了。)