搭建自己的 FreeBSD CVSup 镜像 Scheme 之美
jul 31

当你要管理的服务器不只是一、两台的时候,你会希望能够统一、便捷的管理系统配置文件,对此,可以使用 CVS + CVSup 来实现统一管理和同步。但这种方法只是简单的将文件更新到服务器指定位置,如果你在服务器上做出了实验性修改(没有通过 CVS),或者其他系统管理员修改了配置文件(也没有使用CVS),那么你可能很难处理 CVS 库和实际配置文件的差别。FreeBSD 下有一个 mergemaster(8) 的命令,本身是用于整合更新 FreeBSD 系统升级所需的配置文件的,我们完全可以利用 mergemaster 来实现我们 CVS 库配置文件的整合、更新。

mergemaster(8) 默认是通过 Makefile 来获取需要对比、更新的文件清单,但可以通过直接指定某个目录来确定源文件目录,而源文件目录的结构需要和目的目录结构相同。比如你的配置文件可能包含以下文件:

/etc/rc.conf
/etc/hosts
/etc/ipf.rules
/etc/make.conf
/usr/local/etc/lighttpd.conf
/usr/local/etc/php.ini

那么你需要在源目录中创建相同的目录结构,假设我们使用 /var/run/tmp_root 作为源文件目录,则应该存在以下目录结构:

/var/run/tmp_root/etc/rc.conf
/var/run/tmp_root/etc/hosts
/var/run/tmp_root/etc/ipf.rules
/var/run/tmp_root/etc/make.conf
/var/run/tmp_root/usr/local/etc/lighttpd.conf
/var/run/tmp_root/usr/local/etc/php.ini

然后,使用以下命令进行比对和更新:

mergemaster -r -m /var/run/tmp_root -t /var/run/tmp_root

就此,mergemaster 会自动检查源文件目录中的文件与系统实际目录中的配置文件是否存在不同,如果存在不相同的文件,mergemaster 会将不同部分显示,并让你决定是安装新文件、整合新旧文件或者直接放弃更新。你可以直观的看到你更新了哪些文件,这些文件和实际环境的配置文件又有哪些不同。

注意:

  • 实际操作中,由于 mergemaster 将删除类似 /var/run/tmp_root 的源文件目录,所以你应该使用 shell 脚本根据 CVS 库文件生成一个临时目录,将此目录作为源文件目录传递给 mergemaster;
  • 如果你熟悉 mergemaster 和 Makefile 命令,你可以考虑直接使用 Makefile 指定你需要更新的文件源;
  • 因为 mergemaster 需要进行文件的比对(diff),所以只能处理文本文件,对于二进制文件,这种方法没有意义;
dirk 发表于 2009-07-31 Friday

0 Responses to “利用 FreeBSD 的 mergemaster(8) 整合同步你的文件”

  1. No comments yet

Comment »