一般的研发者用于定位、学习和调试配置文档的所花费的时间,比您预期的要更长。但是,使用一个您可能每天都在用的工具:CVS 树,您就能够节约那些时间——并减轻精力和挫折的负担。使用这些技巧来备份、发布最令您头痛的 Linux ™(和 UNIX ®)配置文档,并使其变得可移植。

使用 Linux 和电脑时,配置文档的用法通常是令人迷惑的。尽管已提出了一些,但现在还不存在标准。例如,Samba 和 rsync 使用 INI 风格的配置;passwd 用的是几十年前的用冒号隔开的格式,不允许冒号出现在任何域中;sudo 附带了一些 visudo 程式,让人们不会在 sudoers 文档中输入错误的信息;Emacs 使用 Lisp 作为配置文档。更有...

现在,我不再抱怨配置文档的多样性。我理解了这个配置通天塔(Configuration Tower of Babel)的历史原因和实践原因。例如,假如改变了 Samba 配置的格式,就会使上千的管理员面临麻烦。另一个例子,Emacs 的内部语言是 Lisp,这是一门强大的高层次语言,所以,使用任何其他东西作为 Eamcs 的配置文档都是荒谬的。

不,我要指出的是这一多样性对 Linux 用户造成的影响:Linux 用户的电脑时间有一大部分用在学习、编写和调试配置文档。这样,有必要拥有一个系统,在这个系统中这些配置文档(1)是自动备份的,(2)是自动发布的,(3)能够用于多种风格的 UNIX 和多种 Linux 的发行版本。本文阐明了如何达成前两个目标,并引导您走上达成第三个目标的途径。

计划

我们将使用 CVS 来控制配置文档。能够随意使用任何其他版本系统。Subversion 正在迅速流行。FSF 有 GNU tla( GNU arch),是另一个优秀的版本系统。任何那些连同很多其他系统,包括并不免费的 Rational ®ClearCase ® 等,都会提供您所需要的功能。

在我的配置模式中,每个配置文档在一个单独的目录或其子目录中。配置文档被唯一命名,目录表示的是 机器或平台,而不是 位置。这样,文档名唯一地映射到文档系统中的一个位置。例如, passwd 将总是用于 /etc/passwd,而 cshrc 将由用户 tzz用于 /home/tzz/.cshrc。

对于我日常使用的一些程式,我将展示如何在我的配置系统的帮助下来管理多个平台,使他们自己修改配置文档。

我展示的任何例子都使用 C shell 来配置环境变量。修改他们以使用 GNU bash 或其他 shell 应该不是特别困难。

安装配置 CVS

您可能已在您的机器上安装了 CVS。假如没有,那么获取(查看 参考资料 部分)并安装他。假如您正在使用另一个版本系统,那么尝试配置类似我下面展示的一些内容。

首先,您需要创建一个 CVS 仓库。我将假定您能够通过 OpenSSh 或 Pserver CVS access(Pserver 是 CVS 所使用的一个通信协议;查看 参考资料 以获得更多资料)访问一台能够用作 CVS 服务器的机器。然后,您需要创建一个名为 config 的模块,我将用他来管理示例配置文档。最后,您需要安排一个远程非交互地使用您的 CVS 仓库的途径,能够通过 OpenSSH、Pserver 或任何可行途径。最后一点极度依赖于您具体的系统管理技巧、偏执程度连同环境,所以我只是在 参考资料 中为您指出了一些资料。在本文的其余部分,我将假定您已配置了通过 OpenSSH 进行的非交互(ssh-agent)登录。

清单 1. 在一台机器上建立 CVS 仓库

# assume that /cvsroot is your repository's home

            > setenv CVSROOT /cvsroot

            # this will use $CVSROOT if no -d option is specified

            > cvs init

            # check that it worked

            > ls /cvsroot

            # you should see one directory called CVSROOT

            CVSROOT

既然仓库已建立起来,您接下来就能够远程使用他(您也能够在 CVS 服务器上执行下面的步骤——只是让 CVSROOT 仍是如清单 1 中所示)。

清单 2. 远程地向 CVS 添加 config 模块

# user tzz, machine home.com, directory /cvsroot is the CVSROOT

            > setenv CVSROOT tzz@home.com:/cvsroot

            # use SSH as the transport

            > setenv CVS_RSH ssh

            # use a temporary directory for the module creation

            > cd /tmp

            > mkdir config

            > cd config

            # tzz is the "vendor name" and initial is the "release tag", they can

            # be anything; the -m flag tells CVS not to ask us for a message

            # if this fails due to SSH problems, see the Resources

            > cvs import -m ' config tzz initial

            No conflicts created by this import

            # now let's do a test checkout

            > cd ~

            > rm -rf /tmp/config

            > cvs co config

            cvs checkout: Updating config

            # check everything is correct

            > ls config

            CVS

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!