我正在使用freebsd-update将 FreeBSD 8.3-RELEASE 系统升级到 FreeBSD 9.0-RELEASE 。这是我第一次在 FreeBSD 中执行主要版本升级。
在此过程中的某一时刻,freebsd-update 对与 9.0-RELEASE 预期不同的文件执行差异。它将系统上的当前版本与从 9.0-RELEASE 添加的新更改进行比较。我在 /etc 下修改了几十个文件,并且每个文件都会向我显示一次此差异。
因此,我看到了许多在 vi 窗口中打开的差异,如下所示:
The following file could not be merged automatically: /etc/ntp.conf
Press Enter to edit this file in vi and resolve the conflicts
manually...
### vi window opens
<<<<<<< current version
driftfile /etc/ntp/drift
=======
#
# $FreeBSD: release/9.0.0/etc/ntp.conf 195652 2009-07-13 05:51:33Z dwmalone $
#
# Default NTP servers for the FreeBSD operating system.
#
# Don't forget to enable ntpd in /etc/rc.conf with:
# ntpd_enable="YES"
#
# The driftfile is by default /var/db/ntpd.drift, check
# /etc/defaults/rc.conf on how to change the location.
#
>>>>>>> 9.0-RELEASE
restrict default notrust nomodify ignore
Run Code Online (Sandbox Code Playgroud)
它抱怨次要版本号:
--- current version
+++ new version
@@ -1,6 +1,6 @@
-# $FreeBSD: src/gnu/usr.bin/man/manpath/manpath.config,v 1.25.28.1 2009/04/15 03:14:26 kensmith Exp $
+# $FreeBSD: src/gnu/usr.bin/man/manpath/manpath.config,v 1.25.32.1 2010/12/21 17:10:29 kensmith Exp $
#
# This file is read by manpath(1) to configure the mandatory manpath,
# optional manpath and to map each path element to a manpath element.
# The format is:
#
Does this look reasonable (y/n)? y
Run Code Online (Sandbox Code Playgroud)
事实上,它在几十个文件中抱怨 RCS 版本字符串:
--- current version
+++ new version
@@ -1,4 +1,4 @@
-# $FreeBSD: src/etc/amd.map,v 1.10.8.1 2009/04/15 03:14:26 kensmith Exp $
+# $FreeBSD: release/9.0.0/etc/amd.map 164015 2006-11-06 01:42:11Z obrien $
#
/defaults type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
* opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev
Does this look reasonable (y/n)?
Run Code Online (Sandbox Code Playgroud)
甚至抱怨因为我从本地(自定义)/etc/passwd
文件中删除了 FreeBSD 版本号:
<<<<<<< current version
=======
# $FreeBSD: release/8.4.0/etc/master.passwd 243948 2012-12-06 11:54:25Z rwatson $
#
>>>>>>> 8.4-RELEASE
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
等等。
这要求我手动编辑每个文件并删除像<<<<<<< current version
>>>>>>> 9.0-RELEASE
和之类的字符串=======
,然后手动合并这些文件。后来我发现,如果我不删除这些字符串,它们之后就会出现在文件中。有几十个文件在 8.3 和 9.0 之间有所不同,我自己也有十几个本地修改。
似乎freebsd-update
正在使用某种 diff、sdiff 或mergemaster 函数,但我无法确切地知道它在做什么。
处理这些文件很乏味。有没有办法可以只说“接受新版本”或“保留旧版本”或“您的合并正确”?必须有一种更简单的方法来处理这些文件。我肯定错过了什么。
这对于一台机器来说不是一个大问题,但最终我会这样做几十次,我想找到一种更简单的方法。
我并不孤单。至少有其他管理员指出了这个问题。Zytrax.com的作者:FreeBSD 更新生存指南:freebsd-update 升级次要或主要版本也谈到了这种情况:
笔记:
- 当更新到新版本时,很多东西都会发生变化(小版本的变化更少)。当脚本和配置文件被修改时,freebsd-update 会比较它们,将它们加载到 vi 中并呈现它们以供协调。由于大多数更改都是简单的版本号注释字段更改,因此这可能是一个严重的问题(在我们的案例中,更改了 50 多个文件,40 多个只是注释更改)。但是,请注意 - 勤奋是必要的(没有 :wq 不看每个文件)。此外,除非文件明显较短,否则所有差异标记 (:/>>>/) 都需要查看和协调。如果不这样做将导致生成的文件包含差异指示符,并且许多基本系统文件在加载时只会发出吱吱声(在我们的例子中包括密码文件),从而导致寻找被修改文件的无穷乐趣(猜猜我们如何发现了这一点)。虽然真的没有替代真正的文件更改,但必须进行编辑协调以进行仅评论更改会导致该过程中出现严重缺陷。也许更好的是将替换的文件移动到一个特殊的位置,并让用户手动协调那些感兴趣的文件。您多久更改一次/etc/periodic/weekly/310.locate?必须经过编辑协调才能进行评论仅更改会导致该过程中出现严重缺陷。也许更好的是将替换的文件移动到一个特殊的位置,并让用户手动协调那些感兴趣的文件。您多久更改一次/etc/periodic/weekly/310.locate?必须经过编辑协调才能进行评论仅更改会导致该过程中出现严重缺陷。也许更好的是将替换的文件移动到一个特殊的位置,并让用户手动协调那些感兴趣的文件。您多久更改一次/etc/periodic/weekly/310.locate?
更新:
看起来这些差异是由merge(1)管理的,而不是 mergemaster。从合并(1)联机帮助页:
A conflict occurs if both file1 and file3 have changes in a common seg-
ment of lines. If a conflict is found, merge normally outputs a warn-
ing and brackets the conflict with <<<<<<< and >>>>>>> lines. A typi-
cal conflict will look like this:
<<<<<<< file A
lines in file A
=======
lines in file B
>>>>>>> file B
Run Code Online (Sandbox Code Playgroud)
我在这里没有得到太多回应,所以我在forums.freebsd.org上询问。
简短的回答是:不。没有简单的方法可以使用 freebsd-update 合并这些更改。freebsd-update 使用merge(1)来执行差异和合并,并且merge
不是很友好或灵活。
还有其他选项,例如 kworr 建议的 sysutils/etcupdate。但是,我不知道如何将其与 freebsd-update 集成。
据我了解,freebsd-update 是升级 FreeBSD 的一种便捷方法,但在其他方面却失败了。许多 FreeBSD 管理员根本不使用 freebsd-update,而更喜欢使用源和mergemaster(8) 的手动方式。
归档时间: |
|
查看次数: |
4780 次 |
最近记录: |