2009-03
28

今天开始安装Solaris 10,跟Linux的差别挺多,真是不习惯啊。

阅读全文 »

2009-03
10

xsltproc的常用参数

xsltproc有许多实用的参数。有两种方法指定参数。一是在执行xsltproc时通过--stringparam参数来设置,如:

xsltproc --stringparam html.stylesheet "style.css" -o index.html chunk.xsl index.xml

另外一种方法就是写到XSL文件中,格式如下:

<xsl:param name="chunker.output.encoding" select="'UTF-8'"/>

常用参数有:

  • html.stylesheet,设置生成的网页所用的CSS样式表。
  • section.autolabel,设置为1可以对章节标题自动编号
  • section.label.includes.component.label,默认情况下节的编号中不包括章的编号,如“第二章->1->1.1”,将此项设置为1,即可让节编号中包含章编号,如“第二章->2.1->2.1.1”。
  • section.autolabel.max.depth,设置章节标题自动编号的深度
  • chunker.output.encoding,设置chunk输出时使用的字符编码

使用catalog

catalog有很多作用,最重要的就是

  • 可以给引用的xsl设置缩略名称
  • 可以指定DTD在本地的位置

下面是个catalog.xml的例子:

<?xml version="1.0"?>
<catalog  xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">

    <!-- define public DTD -->
    <public
        publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
        uri="file:///usr/share/sgml/docbook/xml-dtd-4.1.2-1.0-30.1/docbookx.dtd" />

    <!-- XSL location -->
    <uri
        name="html/docbook.xsl"
        uri="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/docbook.xsl" />
    <uri
        name="html/chunk.xsl"
        uri="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/chunk.xsl" />

</catalog>

这里首先将 "-//OASIS//DTD DocBook XML V4.1.2//EN" 这个id定义到了本地, 这样在xsl中引用这个id所指的DTD时,xsltproc就会使用这里指定的本地DTD,而不用去Internet上去获取。

接下来定义了两个xsl别名:html/docbook.xsl指向 /usr/share/..../docbook.xsl, html/chunk.xsl 指向 /usr/share/..../chunk.xsl。 这样在我们自定义的xsl文件中要包含上述xsl时,只需这样写:

<xsl:import href="html/chunk.xsl"/>

而不用写成繁琐的

<xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/chunk.xsl"/>

这样做的好处是,可以将样式表的安装路径统一在catalog.xml中规定,不用在每个xsl中重复书写完整路径了。 以后万一要升级样式表,也只需修改catalog.xml中的定义即可,不用去每个xsl中修改。

那么如何使用catalog呢?只需将它设置到环境变量 XML_CATALOG_FILES 中即可。 或者也可以这样:

XML_CATALOG_FILES=catalog.xml xsltproc -o index.html chunk.xsl index.xml


2009-02
21

GNU diff有很多功能平时我们不常用到,但若知道,在急需时还真能派得上用场。

最常用的功能莫过于生成patch文件了:

diff -urN old/ new/ > mysoft.patch

参数 -u 表示使用 unified 格式,-r 表示比较目录,-N 表示将不存在的文件当作空文件处理, 这样新添加的文件也会出现在patch文件中。

然后在需要应用patch的地方使用下述命令即可:

patch -p0 < mysoft.patch

diff的 -y 命令(长格式为 --side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。 许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数就相当有用了。 如果要改变左右各部分的宽度,可以通过 -W (--width)参数来指定。 (这条技巧来自于bkブログ,谢谢)

此外,--strip-trailing-cr 参数可以去除行尾的换行,这样DOS格式和Unix格式的文件互相比较时, 就不至于因为换行符不一致而出现大量的差异。



2009-01
20

这两天在研究DocBook,打算以后用它来写点东西,可以方便地转换成任意格式。国内DocBook的入门文章不多, 推荐读读这篇:《DocBook 助你完成传世之作》, 虽然目前还没有完成,但一些入门的基础知识还是讲得不错的。

至于编译环境,我推荐使用Linux发行版自带的编译环境,一般都是已经配置好的。 我尝试了Fedora Core 6自带的环境,SGML和XML都能用,还不错。

阅读全文 »

2009-01
13

OpenNMS是个很强大的网管软件,用它可以监视服务器的资源使用状况, 并在必要的时候向管理员发出警告。(当然它的强大功能不止这些,我就用到这个功能而已)。 安装其实也不麻烦,基本上按照官方文档的安装过程都没问题。

网上流传的方法都是将OpenNMS装在Tomcat上,不过最新版的opennms-1.6.1内置了Web服务器, 所以Tomcat就不是必须的了,这样安装要方便许多。 下面这篇文章是在Redhat Liux Enterprise 4上安装的,其实RH系列的操作系统都差不多, 大家在安装时注意选择和操作系统匹配的软件包就行了。

阅读全文 »

2008-12
26

之前发过一篇在Windows下安装Trac的方法,不过Trac更多的是在Linux下使用, 所以这里介绍一下在Linux下的安装方法。时过境迁,Trac现在已正式发布了0.11版, 与之前的0.9、0.10相比,这个版本的代码浏览器增加了许多功能, 最好用的就是它支持subversion的Blame了,可以查看到源代码的每一行是在哪个版本由谁修改的。

这篇文章是在Fedora Core 8上进行的,其他的RedHat系的Linux应该大同小异。

阅读全文 »

2008-12
18

今天发现,制作的某个rpm包在执行 rpm -i --nodeps <packagename.rpm>时会出现以下的警告信息:

warning: cannot get shared lock on /var/lib/rpm/Packages

但如果不加--nodeps参数,就不会出现这个信息。

网上查了半天没找到相关资料,最后用排除法发现,SPEC文件的%post中有一行 rpm -qa,就是这行命令导致了该警告的发生。 原因尚且不明,估计是在安装过程中,rpm正在执行,此时在%post中再次启动rpm,当然会发生共享锁的错误。



2008-03
06

最近发现gentoo下pidgin经常会不能输入,表现在输入法切换不出来,甚至无法输入英文字母。没办法只能重启pidgin。不过今天突然发现了问题的所在。那就是,从聊天窗口用Alt-Tab键切换到好友列表窗口,再用Alt-Tab切换回来,这时一切键盘输入就都不管用了。解决方法也很简单:再用Alt-Tab切换一次,就行了。另外为避免出现这种情况,建议没事儿时把好友列表窗口关掉。


2008-03
05

前几天的这篇文章fcicq同学挑毛病,建议不要使用内核自带的ntfs, 而是使用ntfs-3g+fuse。查了一下,ntfs-3g可以完美支持ntfs分区的读写操作, 的确要比内核自带的ntfs好得多。

试试看。安装方法不难,直接emerge即可,它会自动安装 sys-fs/fuse:

# emerge ntfs-3g

我用的是gentoo 2007.0,内核版本2.6.23-gentoo-r8,还需要编译内核的FUSE支持:

# cd /usr/src/linux
# make menuconfig
勾选 File systems --->  <M> Filesystem in Userspace support
# make modules_install
# modprobe fuse

之后当然可以再打开 /etc/modules.autoload.d/kernel-2.6,把fuse加进去。

然后就可以mount ntfs分区了:

# mount -t ntfs-3g -o locale=zh_CN.UTF-8,silent /dev/sda6 /mnt/wine

进入分区后试试读写,均没有问题。

后来看了看ntfs-3g的官方主页的FAQ, 发现竟然允许大小写不同的同名文件,还有特殊字符(如\、?等Windows中不允许的字符)。 作者的理由是NTFS支持POSIX风格的文件名,也支持DOS、Windows格式的文件名, 为保持最大的兼容性,ntfs-3g就选择了POSIX——所以就出现上面这种现象了。 尝试者建立 ABC、abc、ab?c、abc\d等文件,均建立成功,重新启动到windows下试图打开这几个文件, 结果出现了问题:ABC正常打开,但一旦保存,ABC就会丢失,只剩下abc(因为同名),估计有可能需要chkdsk了; ab?c、abc\d文件无法保存、改名和删除。只能回到linux下面操作。

看来作者又是一个十足的协议派……为保险起见,还是先ro吧。

最后的/etc/fstab为:

/dev/sda6       /mnt/wine    ntfs-3g    auto,ro,locale=zh_CN.UTF-8,silent    0  0


2008-03
04

今天在配置nvidia的显卡时出现了一个很头疼的问题。

按照官方网站上的文章, 一步步地顺利地安装好了显卡驱动:

# 先配置内核,详情参考官方文档,省略
# USE=gtk emerge nvidia-drivers
# modprobe nvidia
# update-modules
# eselect opengl set nvidia
# 然后修改xorg.conf,略
# startx

结果startx时出现了这样的错误:

Backtrace:
0: X(xf86SigHandler+0x84) [0x80cca34]
1: [0xffffe420]
2: X(main+0x2af) [0x807067f]
3: /lib/libc.so.6(__libc_start_main+0xd8) [0xb7db5838]
4: X(FontFileCompleteXLFD+0xa1) [0x806fb81]

Fatal server error:
Caught signal 11.  Server aborting

查了半天资料未得到结果,后来想起我曾经安装过nVidia官方网站提供的驱动, 会不会是和portage的驱动冲突呢?于是卸载掉官方驱动:

# sh NVIDIA-Linux-x86-169.09-pkg1.run --uninstall

然后重新emerge:

# emerge nvidia-drivers

这样就可以顺利地启动X了。