[3.4 -> 3.5] | [3.5 -> 3.6] | [3.6 -> 3.7] | [3.7 -> 3.8] | [3.8 -> 3.9] | [3.9 -> 4.0] |
[4.0 -> 4.1] | [4.1 -> 4.2] | [4.2 -> 4.3] | [4.3 -> 4.4] | [FAQ Index]

处理时请务必小心!


注意: 升级只能够从一个发行版升级到到下一个紧邻的发行版。不支持跨版本的跳跃式升级。

强烈建议您在尝试操作前通篇阅读并完全理解此文档的内容。 如果您在很重要或远程的主机上执行此操作, 推荐您先在本地同样的系统上测试并校验成功后再尝试在重要或远程主机上进行操作。

升级是一种将你的OpenBSD系统提升为最新版本的方便途径。 然而, 升级的结果并非就是删除原系统-安装新系统。 在升级过程中某些旧的库文件不会被删除, 因为一些旧的应用程序可能会需要这些旧的库文件, 升级时这些旧的应用程序未必一定就会被升级。如果你确实想删除这些旧文件, 也许你最好的方式是全新安装一个新版本。

目录:


升级前: 需要考虑和知道的事情

我们在这里并未提供4.4到4.5版本之间的全部的变动列表, 但列出了一些升级过程中对大多数用户来说重要的事情。如果您想了解新版本中的所有变化, 请参阅 plus45.html 和 CVS 变更日志。

升级过程

通过安装内核升级

如果你可以访问系统控制台, 最简单和安全的升级方式是从安装介质或 bsd.rd 启动, 并且遵照升级步骤进行, 升级步骤类似于安装步骤

如果你安装了X, 请在升级前务必执行下列步骤:

rm -rf /usr/X11R6/lib/modules/*
然后, 在按照下面描述的 最终步骤 完成升级过程。

从内核启动的一个简单方法是将4.5版本的 bsd.rd 文件放到你的启动驱动器上, 然后指示启动引导器用这个新的bsd.rd 文件启动。在amd64和i386平台上, 你只需在出现 boot> 提示符时输入 "boot bsd.rd" 。

不安装新内核升级

这不是推荐的做法, 如果可能请尽量采用安装内核的方法!

有时候用户在完成升级过程时无法采用常规的升级方式。最常见的例子是一台远程主机, 你访问系统控制台有困难。用户可以小心地参照如下步骤进行:


最后的步骤

无论你是采用一个安装内核完成一个标准的"升级"过程, 还是采用"就地"二进制升级, 都还需要执行一些特定的手动步骤。

1. 新的用户和组

你需要为 Bluetooth 新建一个用户, 使用 useradd(8) 创建这个用户
useradd -u94 -g=uid -c"Bluetooth Daemon" -d/var/empty -s/sbin/nologin _btd

2. 升级 /etc

你需要提取 etc45.tgz 中的文件到到一个临时的位置:

export RELEASEPATH=/usr/rel
tar -C /tmp -xzphf ${RELEASEPATH}/etc45.tgz
这些文件将按照打包前的样式从etc45.tgz中提取出来:
netstart
rc
rc.conf
services
afs/CellServDB
mail/README
mail/submit.cf
mtree/4.4BSD.dist
mtree/special
/var/named/etc/root.hint
/var/named/etc/named*

注意很有可能以前你在本机修改了这些文件(老版本的), 如果你的确修改了它们, 就不要拷贝这些提取的文件, 而应该使用 sysmerge(8) process 代替。 下面的拷贝/粘贴行用来拷贝这些文件, 这里假设你将etc45.tgz解包到上面推荐的位置:

cd /tmp/etc
cp netstart rc rc.conf services /etc
cp afs/CellServDB /etc/afs
cp mtree/* /etc/mtree
cp mail/README mail/submit.cf /etc/mail 
cp ../var/named/etc/root.hint ../var/named/etc/named-*.conf /var/named/etc
cp ../var/named/etc/named.conf /var/named/etc/  # 假设本地原有文件没有更改!

3a. 通过一个补丁文件整合本地更改的文件Merging locally changed files via a patch file

这些文件可能在本地被修改过, 但是应该被升级到4.5。如果你没有修改过这些文件, 你可以直接把新文件拷贝过去, 否则这些修改应该被合并到你的文件中:

/etc/changelist
/etc/ftpusers
/etc/ksh.kshrc
/etc/lynx.cfg
/etc/mail/aliases
/etc/mail/trusted-users
/etc/shells
/etc/ssh/ssh_config
这些文件的更改在 这个补丁文件 里面。 你可以以root的身份运行下列命令尝试使用它:
cd /
patch -C -p0 < upgrade45.patch

这条命令将仅测试这个补丁在你的系统上应用的多好; 要实际应用这个补丁, 就去掉那个 "-C" 选项。 注意, 有可能你的系统定制了文件、或你最近没有更新系统、还有就是你从一个4.4的快照版升级到4.5, 这些情况下系统可能根本无法应用这个补丁, 此时, 你只能手动应用这些变动。 在一个你好不容易建立的系统上最好在应用这个补丁前先测试一下。

下面这些文件已经发生了变化, 你应该检查一下, 但它们不应被直接拷贝或整合 (也就是, 如果你使用了 pf.conf, 看一下建议的修正策略, 然后确定是否采用)。

etc/dhcpd.conf
etc/ntpd.conf
etc/pf.conf

最后, 使用 newaliases(8) 更新别名数据库, mtree(8) 产生所有新目录:

newaliases
mtree -qdef /etc/mtree/4.4BSD.dist -p / -u

3b. 通过sysmerge(8)整合本地修改的文件

新的 sysmerge(8) 工具将比较将要安装的文件和系统上的实际文件, 然后协助你将这些变动整合到你的系统内。注意, sysmerge不像补丁文件, 它不假定你系统的实际情况, 所以你可以用 sysmerge(8) 在版本发展线路图中的更多节点间升级, 例如从一个早期的当-current升级到4.5-release 或从一个 -current 到下一个。.

请在使用前先阅读 sysmerge(8) 的用户手册。 同样也建议您阅读 diff(1), sdiff(1) 甚至应该在继续之前复习一下 more(1) 的用户手册。

假设etc45.tgz和xetc45.tgz这两个文件已经在你的 $RELEASEPATH, 运行:

# sudo sysmerge -as $RELEASEPATH/etc45.tgz -x $RELEASEPATH/xetc45.tgz
Sysmerge(8) 将向你显示一个统一的 diff(1), 贯穿你喜爱的 $PAGER (也就是, more(1)) , 并且就多数的更改文件询问你, 如果你希望:
  Use 'd' to delete the temporary ./var/www/htdocs/index.html
  Use 'i' to install the temporary ./var/www/htdocs/index.html
  Use 'm' to merge the temporary and installed versions
  Use 'v' to view the diff results again
  Default is to leave the temporary file to deal with by hand

如果你希望保留你现有的文件, 就删除临时文件, 如果你希望用新版本的文件取代现有的文件, 就安装临时文件。如果你想将两者整合到一起, 选择 'm' 将带你进入sdiff(1), 你可以手动整合这个文件。 默认是先回来, 以后手动处理这个文件。

尽管sysmerge可以将新用户整合到你的系统内, 但是我们不推荐您使用它这样做, 我们还是建议您使用上面的useradd(8) 那行。我们相信这样可以减少出现错误的可能性。(提示: 不要用临时的master.passwd文件覆盖原有的文件!).

Sysmerge(8)将所有被替换的文件存在一个临时目录内, 有点像 /var/tmp/sysmerge.24959/backups, 所有如果你不小心搞乱了什么, 你还有机会复原它。注意使用 daily(8) 命令可从这个目录中清除就文件。

4. 检查内核

说明: 大部分用户可以跳过这步!

如果你按照不安装内核的说明升级系统, 你已经做完这一步了。 然而, 如果你使用4.5的安装内核, 并且你有一个修改过的4.4内核, 很有可能你需要更改4.5的原有内核。这就像用 config(8)修改一个特定设备那样简单, 或者如果一个选项没有包含在GENERIC内核内它可以包含一个重新编译。在准备重新编译你的内核前请参阅 FAQ 5 - 从源码构建系统

5. 升级 packages

如果你在你的系统上安装任何packages, 你应该在基本系统完成升级后升级这些packages。 要注意, 不管怎样, 许多packages在升级前和/或升级后需要进一步的设置, 请检查这个些package的升级指南以便获取更详尽的信息。

目前已经知道很多用户在升级下列packages时出现严重问题。 没有在此列出的package并不意味着就可以顺利升级。 你必须自己测试一下你的程序。

package工具支持使用 pkg_add -u 命令就地更新。 例如, 更细你所有的packages, 别忘了把PKG_PATH指向CD或FTP服务器上的4.5版本的的packages目录, 使用类似如下的命令

# pkg_add -ui -F update -F updatedepends
这里 -u 指定了更新模式, -i 指定了交互模式, 所以 pkg_add 在遇到不明确的地方会提示你输入选择。 请阅读 pkg_add(1) 用户手册以及FAQ中 package管理 那章。

以往一些Perl的模块在packages中提供, 现在已经包含在基本系统的Perl 5.10.0内, 所以更新完其它的软件包(packages)后, 这些原来包含perl模块的packages必须删除。另外, xcompmgr(1) 现在已经包含在系统组件 xbase45.tgz 内, 不再是一个package, 所以它也必须被删除。

pkg_delete p5-Archive-Tar p5-Compress-Raw-Zlib p5-Compress-Zlib \
p5-IO-Compress-Base p5-IO-Compress-Zlib p5-IO-Zlib p5-Module-Build \
p5-Module-CoreList p5-Module-Load p5-version p5-Digest-SHA \
p5-Locale-Maketext-Simple p5-Pod-Escapes p5-Pod-Simple \
p5-ExtUtils-ParseXS p5-ExtUtils-CBuilder p5-Module-Pluggable \
p5-Time-Piece p5-Module-Loaded xcompmgr
注意: 如果你拷贝和粘贴这些命令到你的系统运行时, 如果你没有安装这些软件会得到很多的错误信息, 但这对系统没有伤害。

[3.4 -> 3.5] | [3.5 -> 3.6] | [3.6 -> 3.7] | [3.7 -> 3.8] | [3.8 -> 3.9] | [3.9 -> 4.0] |
[4.0 -> 4.1] | [4.1 -> 4.2] | [4.2 -> 4.3] | [4.3 -> 4.4] | [FAQ Index]


[back] [email protected]
$OpenBSD: upgrade45.html, v 1.13 2009/04/02 23:36:47 nick Exp $