怎样从OpenBSD4.7 升级到 4.8
发表于 : 2010-11-02 0:28
From http://www.openbsd.org/faq/upgrade48.html
OpenBSD 4.7 到 4.8 升级指南
说明: 唯一支持的升级方式是从一个发行版直接升级为紧跟其后的另一个发行版。不支持跨越版本的升级方式。
我们强烈呼吁在您进行实操前通读并完全理解这个步骤。 如果您要在一台关键的计算机或一台物理意义上的远程计算机上操作, 这里推荐您先在本地的一台相同的计算机上测试、校验您的升级步骤,并确保成功后再应用到关键的或远程的计算机上。
升级是将你的OpenBSD系统提升到最新版本的一个方便的方法。 不过, 升级的结果并非完全地擦除-重新安装一样。 特别是在升级过程中老的库文件并未删除, 因为老的应用程序可能仍需要这些库文件,而这些老的应用程序在升级过程中也许已经升级了、但也可能并未升级。如果你确实想淘汰这些旧文件, 你最好重装系统。
目录:
这不是一份从4.7升级到4.8的一个完整的变化清单, 仅列出了可能对多数升级用户有重要影响的地方。要查看完整的变化清单, 看这里 plus48.html 以及CVS变化logs.
通过安装内核升级
如果你可以访问系统控制台, 最简单也是最安全的升级方式是从安装介质或一个 bsd.rd 文件启动,然后根据提示步骤执行升级过程, 这个方法类似于安装过程。
最终, 按照下面描述的 最后步骤 完成升级过程。
从安装内核启动的一个简单的方法是将一个安装介质内4.8版本的 bsd.rd 文件放到启动磁盘的根目录下, 然后指示启动引导器使用这个新的 bsd.rd 文件启动。在amd64和i386平台上, 你只需在刚开始出现“boot>”提示符时键入 "boot bsd.rd" 。
不用安装内核的升级
这不是一个推荐的步骤。请尽一切可能使用安装内核来升级系统!
有时, 用户不能用正常的方式升级系统。最常见的情况是机器不在身边,而且用户不能轻易地访问系统控制台。这时你就需要仔细地按照下列步骤操作了:
无论你是通过安装内核来完成一个正式的“升级”步骤, 还是通过“替换”二进制文件的方式升级, 都需要执行下面的手动步骤。
1. 新的用户和组
你需要为4.8创建下列用户和组:
[INDENT]
[/INDENT]2. 升级 /etc
你需要将文件 etc48.tgz 释放到一个临时性的地方:
[INDENT]
[/INDENT]从 etc48.tgz 里拷贝出来的文件"是":
[INDENT]
[/INDENT]提示:这样可能会覆盖你的本地设置; 如果这步操作已经完成了, 不要不加思考地直接覆盖本地的这些设置文件, 你应该考虑使用sysmerge(8) 步骤 来做。这里我们拷贝/粘贴这些行的内容, 我们假设你在上面所提的推荐位置释放了文件 etc48.tgz :
[INDENT]
[/INDENT]3a. 通过patch文件整合本地修改过的文件
这些文件很可能在本地进行了修改, 但应该为4.8更新它们。如果你没有修改过这些文件,你可以用版本的文件直接覆盖它们, 否则这些修改应该用这些文件进行整合:
[INDENT]
[/INDENT]对这些文件的修改在 这个补丁文件里。请在应用到远程环境前先在本地进行测试。你需要以root身份运行:
[INDENT]
[/INDENT]这会测试这个补丁在你的系统上是否可以正常应用; 要真正应用这个补丁, 去掉 "-C" 选项。注意:有可能在你有自己定制过的文件或没有将这些文件更新到最新, 或者从一个4.7的snapshot升级系统的情况下, 这个补丁文件可能不被系统接受(译者注:应用补丁失败)。要确保曾经尝试应用了所有文件的修改; 如果一个文件让patch(1)程序觉得有些“糊涂”,它可能会过早退出, 这可能发生在你爹机器最初是用一个snapshots安装的、或者进行过一些临时性的修改。最后一个被修改的文件应该是sysctl.conf。删除无法应用补丁的文件可能会让余下的补丁应用正常进行,不过你需要手动将这些补丁应用到跳过的文件上。
下列文件的已有变化应该注意一下, 但是似乎你不应该直接拷贝或整合 (例如, 如果你正在使用文件pf.conf, 请详细参看重要的规则变化, 然后确定是否适合自己使用)。
[INDENT]
[/INDENT]最后, 使用 newaliases(8) 来更新 aliases 数据库, mtree(8) 创建所有新目录:
[INDENT]
[/INDENT](注意: /etc/mtree 下的文件现在已经是 base48.tgz 的一部分了, 不再需要像以往那样从etc48.tgz里拷贝了。)
3b. 通过sysmerge(8)整合本地修改过的文件
sysmerge(8) 工具会比较现有系统上的文件和要安装的文件, 然后协助你将变化整合进系统内。 请注意:不像补丁文件, 这里并没有对你的实际系统做假设性限制, 所以你可以用sysmerge(8)更自由地在 开发过程阶段性 的某两点间移动, 例如,从一个早期的 -current 到 4.8-release 、或者从一个 -current 到其后面的一个。Sysmerge(8) 用将新安装的文件来比较你当前系统内的文件, 然后仍你做出一个选择:保留旧文件、 安装新文件, 或者使用sdiff来帮助你手动整合新文件和旧文件。你可以选择使用 sysmerge 来进行进行修改, 或者你或许想先应用patch文件, 然后根据 sysmerge会话来清理整理所有零碎的文件。
谁应该用 sysmerge(8):
用户对系统做了很多修改时、或者系统并非从前一个发行版安装的 (例如, 两个发行版之间的一个snapshot), 将系统升级到一个 snapshot 的用户、或者那些过去并未认真升级自己系统的用户会发现使用sysmerge会比应用补丁更具优势, 因为它比我们预期效果更适合于你的实际系统。而且它可以让你更有效地控制升级过程, 以及更直接地参与到升级步骤中。
哪些用户可能不想使用sysmerge(8):
随着最近我们对 sysmerge 的改进, 我们希望不愿意使用sysmerge(8)的用户越来越少!
请在您使用前参阅 sysmerge(8) 用户手册。我们也建议您在继续前阅读 diff(1), sdiff(1) 甚至复习一下 more(1) 这些用户手册。
我们假设 etc48.tgz 和 xetc48.tgz 文件在 $RELEASEPATH, 运行这样的命令:
[INDENT]
[/INDENT]Sysmerge(8) 将显示一个统一的 diff(1), 通过运行你喜爱的 $PAGER (例如, more(1)) 然后询问你, 如果你希望这样,它会在操作绝大多数修改的文件时询问你:
[INDENT]
[/INDENT]如果你希望保持自己的现有文件, 就删除临时文件, 如果你希望将现有文件替换为新版本, 就选择安装临时文件。如果你希望将这两个文件整合到一起, 将会把你带入sdiff(1), 在那里你可以手动整合文件。默认选项是稍侯回来手动处理这个文件。
Sysmerge(8) 将你所有的被替换的文件保存到一个临时的目录里, 类似保存到 /var/tmp/sysmerge.24959/backups, 所以如果你错误地调整了某些设置, 你还有机会来恢复它们。注意 daily(8) 会清除这个目录内的旧文件。
4. 要删除的文件
有些文件需要从你的系统中删除。请注意这里的有些文件可能你的系统内并没有; 这并无不妥。 拷贝并粘贴下列行:
[INDENT]
[/INDENT]5. 检查内核
Note: 注意多数用户可以略过此步骤!
如果你不使用安装内核而是根据此步骤执行升级过程, 你已经执行此步骤了。但是, 如果你使用了安装内核, 并且如果你修改了原有系统内的4.7内核, 恐怕你需要修改原有的 4.8 内核。这可以和用config(8)来修改某个特定设备一样简单, 或者在你所需的选项没包含在默认的GENERIC内核里时,它可能需要包含一个重新编译的步骤。在考虑重新编译系统前请参考 FAQ 5 - 从源代码编译系统 。
6. 升级packages
如果你的系统上安装和任何packages, 你应该在完成基本系统的升级后升级它们。 要注意, 无论如何, 很多packages在升级前/后可能需要更进一步的设置,请参考该应用升级指南中的相关细节。
下列这些 packages 已知存在重大的升级问题,会影响大量的用户。事实是没有包含在本清单内的packages并不意味着就没有问题。你需要根据自己使用的packages做些功课。
[INDENT]
[/INDENT]这里 -u 指定了更新模式, 而 -i 指定了交互模式, 所以pkg_add将会在碰到模棱两可的选择时会给出提示。请阅读 pkg_add(1) 用户手册以及OpenBSD FAQ中文版里package管理 这一章以获取更详尽的信息。
OpenBSD 4.7 到 4.8 升级指南
说明: 唯一支持的升级方式是从一个发行版直接升级为紧跟其后的另一个发行版。不支持跨越版本的升级方式。
我们强烈呼吁在您进行实操前通读并完全理解这个步骤。 如果您要在一台关键的计算机或一台物理意义上的远程计算机上操作, 这里推荐您先在本地的一台相同的计算机上测试、校验您的升级步骤,并确保成功后再应用到关键的或远程的计算机上。
升级是将你的OpenBSD系统提升到最新版本的一个方便的方法。 不过, 升级的结果并非完全地擦除-重新安装一样。 特别是在升级过程中老的库文件并未删除, 因为老的应用程序可能仍需要这些库文件,而这些老的应用程序在升级过程中也许已经升级了、但也可能并未升级。如果你确实想淘汰这些旧文件, 你最好重装系统。
目录:
- 升级前
- Softraid metadata 改变
- ahci(4) 不再附加到 RAID 模式的磁盘
- 修改过的内核
- 升级过程
- 最后的步骤
- 新建的以及改变的用户及组
- 升级 /etc
- 通过patch文件整合本地修改过的文件
- 通过sysmerge(8)融合本地修改过的文件
- 要删除的文件
- 检查内核
- 升级packages
这不是一份从4.7升级到4.8的一个完整的变化清单, 仅列出了可能对多数升级用户有重要影响的地方。要查看完整的变化清单, 看这里 plus48.html 以及CVS变化logs.
- Softraid metadata change:
从OpenBSD4.7开始softraid(4)用的metadata格式已经发生了变化。 如果按照我们以前警告过那样,从4.7升级到4.8需要重新构建softraid(4)卷, 但现在可能不需要这个步骤了。因为后来的系统改进保证了升级过程中后端的兼容性, 但是不重新构建softraid(4)卷的代价是不能使用未来softraid(4)的新特性。我们仍旧推荐您重新构建您的RAID组件, 尽管这并非是必需的。 - ahci(4) no longer attaches to RAID-mode disks:
为了避免在某些Intel RAID设备上可能损坏metadata的风险, 当设置为RAID模式时,ahci(4)不再通过其控制器附加到PCI设备ID上。如果在RAID模式里,你的SATA磁盘被附加到一个 ahci(4) 控制器上, 它在升级过程中会“突然消失”,而你需要重新在bios里将控制器的类型设置为 AHCI 才能够将其找回来。 - 修改过的内核:
检查是否你对内核进行过任何修改。例如, 你可能用config(8)修改了网络设备的默认设置。记住你的修改, 这样你可以继续在4.8内核里重新应用它们。
通过安装内核升级
如果你可以访问系统控制台, 最简单也是最安全的升级方式是从安装介质或一个 bsd.rd 文件启动,然后根据提示步骤执行升级过程, 这个方法类似于安装过程。
最终, 按照下面描述的 最后步骤 完成升级过程。
从安装内核启动的一个简单的方法是将一个安装介质内4.8版本的 bsd.rd 文件放到启动磁盘的根目录下, 然后指示启动引导器使用这个新的 bsd.rd 文件启动。在amd64和i386平台上, 你只需在刚开始出现“boot>”提示符时键入 "boot bsd.rd" 。
不用安装内核的升级
这不是一个推荐的步骤。请尽一切可能使用安装内核来升级系统!
有时, 用户不能用正常的方式升级系统。最常见的情况是机器不在身边,而且用户不能轻易地访问系统控制台。这时你就需要仔细地按照下列步骤操作了:
- 将安装文件放在一个 "合适的" 地方。确保有足够的空间!
- 停止所有的相关应用: 在这个过程中, 所有的用户到应用程序将被替换,但可能还无法立刻运行, 也许会发生一些奇怪的事情。如果你碰到了这种情况, 停止所有可能影响升级的应用程序。 也许还有其它一些你希望升级完成后马上运行的应用程序, 同样也请先停止或禁用这些程序。
- 检查内核: 尽管 多数用户可以忽略这个步骤, 但是如果你使用一个修改过的 4.7 内核, 很有可能你还需要修改原有的 4.8 内核。特别是你在远程执行升级过程时, 现在是确认新内核可以在重新启动时正常工作的时间了。 无论你需要对新内核做任何修改,最安全的方式是先在本地4.8机器上应用你的修改进行测试。 这也许和用config(8)修改某些特定设备那样简单, 也可能因为你的选项没有包含在GENERIC内核里,从而还需要包含一个重新编译的步骤。请在决定重新编译内核前参阅 FAQ5 - 从源代码构建系统 。
- 安装新内核:
- 如果使用一个单处理器内核:
[INDENT][/INDENT](提示: 如果你的平台没有bsd.mp这个文件,你会看见一条无害的错误信息):代码: 全选
# export RELEASEPATH=/usr/rel # where you put the files # cd ${RELEASEPATH} # rm /obsd ; ln /bsd /obsd && cp bsd /nbsd && mv /nbsd /bsd # cp bsd.rd bsd.mp /
- 如果你使用多处理器内核:
[INDENT][/INDENT]代码: 全选
# export RELEASEPATH=/usr/rel # where you put the files # cd ${RELEASEPATH} # rm /obsd ; ln /bsd /obsd && cp bsd.mp /nbsd && mv /nbsd /bsd # cp bsd.rd / # cp bsd /bsd.sp
- 如果使用一个单处理器内核:
- 保留你自己的旧的reboot(1)命令(译者:这里应该是文件更妥帖): 你现在还在运行旧内核, 有可能新的reboot命令不能应用于旧内核。
[INDENT][/INDENT]代码: 全选
cp /sbin/reboot /sbin/oreboot
- 安装新的用户到应用。 现在请勿先安装 etc48.tgz 和 xetc48.tgz , 因为这会覆盖您当前的配置文件! 请注意,我们最后安装base48.tgz, 因为它包含了一个新的tar(1) 工具, 它也许能或不能运行在旧内核上。然后我们现在可以马上启动了,因为系统现在已经刚刚好可以运行了。
[INDENT][/INDENT]并非所有应用的每个组件都需要安装, 不过,如果你原来已经安装了某个组件, 你现在就应该使用新版本的组件升级它。代码: 全选
# tar -C / -xzphf xserv48.tgz # tar -C / -xzphf xfont48.tgz # tar -C / -xzphf xshare48.tgz # tar -C / -xzphf xbase48.tgz # tar -C / -xzphf game48.tgz # tar -C / -xzphf misc48.tgz # tar -C / -xzphf comp48.tgz # tar -C / -xzphf man48.tgz # tar -C / -xzphf base48.tgz #注意: 这个是最后安装! # /sbin/oreboot
在强调一次, 在 /etc 里的文件是在后面单独处理的, 所以我们在这里不解压缩 etc48.tgz 和 xetc48.tgz。 - 完成重新启动后, 升级 /dev。 新的 MAKEDEV 已经通过安装组件base48.tgz拷贝到 /dev 下了, 所以你只需完成下列简单步骤:
[INDENT][/INDENT]代码: 全选
# cd /dev # ./MAKEDEV all
无论你是通过安装内核来完成一个正式的“升级”步骤, 还是通过“替换”二进制文件的方式升级, 都需要执行下面的手动步骤。
1. 新的用户和组
你需要为4.8创建下列用户和组:
[INDENT]
代码: 全选
# useradd -u 99 -g =uid -c "sndio privsep" -d /var/empty -s /sbin/nologin _sndio
# useradd -u 100 -g =uid -c "LDAP Daemon" -d /var/empty -s /sbin/nologin _ldapd
# useradd -u 101 -g =uid -c "IKEv2 Daemon" -d /var/empty -s /sbin/nologin _iked
你需要将文件 etc48.tgz 释放到一个临时性的地方:
[INDENT]
代码: 全选
# export RELEASEPATH=/usr/rel
# tar -C /tmp -xzphf ${RELEASEPATH}/etc48.tgz
[INDENT]
代码: 全选
etc/daily
etc/disktab
etc/iked.conf
etc/ksh.kshrc
etc/ldapd.conf
etc/netstart
etc/rc
etc/rc.conf
etc/ldap/*
etc/systrace/usr_sbin_named
var/named/etc/root.hint
[INDENT]
代码: 全选
# cd /tmp/etc
# mkdir -p /etc/ldap/certs
# cp daily disktab iked.conf ksh.kshrc ldapd.conf netstart rc rc.conf /etc
# cp systrace/usr_sbin_named /etc/systrace
# cp ldap/* /etc/ldap
#cp ../var/named/etc/root.hint /var/named/etc
这些文件很可能在本地进行了修改, 但应该为4.8更新它们。如果你没有修改过这些文件,你可以用版本的文件直接覆盖它们, 否则这些修改应该用这些文件进行整合:
[INDENT]
代码: 全选
etc/changelist
etc/ftpusers
etc/mail/aliases
etc/man.conf
etc/newsyslog.conf
etc/remote
etc/services
etc/ssl/x509v3.cnf
etc/sysctl.conf
[INDENT]
代码: 全选
cd /
patch -C -p0 < upgrade48.patch
下列文件的已有变化应该注意一下, 但是似乎你不应该直接拷贝或整合 (例如, 如果你正在使用文件pf.conf, 请详细参看重要的规则变化, 然后确定是否适合自己使用)。
[INDENT]
代码: 全选
etc/ldpd.conf
[INDENT]
代码: 全选
# newaliases
# mtree -qdef /etc/mtree/4.4BSD.dist -p / -u
3b. 通过sysmerge(8)整合本地修改过的文件
sysmerge(8) 工具会比较现有系统上的文件和要安装的文件, 然后协助你将变化整合进系统内。 请注意:不像补丁文件, 这里并没有对你的实际系统做假设性限制, 所以你可以用sysmerge(8)更自由地在 开发过程阶段性 的某两点间移动, 例如,从一个早期的 -current 到 4.8-release 、或者从一个 -current 到其后面的一个。Sysmerge(8) 用将新安装的文件来比较你当前系统内的文件, 然后仍你做出一个选择:保留旧文件、 安装新文件, 或者使用sdiff来帮助你手动整合新文件和旧文件。你可以选择使用 sysmerge 来进行进行修改, 或者你或许想先应用patch文件, 然后根据 sysmerge会话来清理整理所有零碎的文件。
谁应该用 sysmerge(8):
用户对系统做了很多修改时、或者系统并非从前一个发行版安装的 (例如, 两个发行版之间的一个snapshot), 将系统升级到一个 snapshot 的用户、或者那些过去并未认真升级自己系统的用户会发现使用sysmerge会比应用补丁更具优势, 因为它比我们预期效果更适合于你的实际系统。而且它可以让你更有效地控制升级过程, 以及更直接地参与到升级步骤中。
哪些用户可能不想使用sysmerge(8):
随着最近我们对 sysmerge 的改进, 我们希望不愿意使用sysmerge(8)的用户越来越少!
请在您使用前参阅 sysmerge(8) 用户手册。我们也建议您在继续前阅读 diff(1), sdiff(1) 甚至复习一下 more(1) 这些用户手册。
我们假设 etc48.tgz 和 xetc48.tgz 文件在 $RELEASEPATH, 运行这样的命令:
[INDENT]
代码: 全选
sysmerge -s $RELEASEPATH/etc48.tgz -x $RELEASEPATH/xetc48.tgz
[INDENT]
代码: 全选
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
Sysmerge(8) 将你所有的被替换的文件保存到一个临时的目录里, 类似保存到 /var/tmp/sysmerge.24959/backups, 所以如果你错误地调整了某些设置, 你还有机会来恢复它们。注意 daily(8) 会清除这个目录内的旧文件。
4. 要删除的文件
有些文件需要从你的系统中删除。请注意这里的有些文件可能你的系统内并没有; 这并无不妥。 拷贝并粘贴下列行:
[INDENT]
代码: 全选
rm /usr/include/evdns.h
rm /usr/libdata/perl5/site_perl/*-openbsd/evdns.ph
rm -f /usr/bin/f77 /usr/bin/g77 /usr/include/f2c.h /usr/include/g2c.h \
/usr/lib/gcc-lib/*-unknown-openbsd*/3.3.5/f771 /usr/lib/libfrtbegin.a \
/usr/lib/libfrtbegin_p.a /usr/lib/libfrtbegin_pic.a /usr/lib/libg2c.a \
/usr/lib/libg2c_p.a /usr/lib/libg2c_pic.a /usr/share/info/g77.info \
/usr/share/man/cat1/f77.0 /usr/share/man/cat1/g77.0
cd /usr/X11R6/include/X11
rm Xaw/Print.h Xaw/PrintSP.h
rm -r XprintAppUtil XprintUtil
cd extensions
rm Print.h Printstr.h XEVIstr.h Xagstr.h Xcupstr.h Xdbeproto.h Xevie.h \
Xeviestr.h dpmsstr.h lbxdeltastr.h lbxopts.h lbxstr.h lbxzlib.h \
mitmiscstr.h multibufst.h securstr.h shapestr.h shmstr.h syncstr.h \
xteststr.h xtrapbits.h xtrapddmi.h xtrapdi.h xtrapemacros.h \
xtraplib.h xtraplibp.h xtrapproto.h
cd /usr/X11R6/lib/pkgconfig
rm evieproto.pc lbxutil.pc printproto.pc trapproto.pc xaw8.pc \
xevie.pc xp.pc xprintapputil.pc xprintutil.pc xtrap.pc
rm /usr/X11R6/share/aclocal/xaw.m4
Note: 注意多数用户可以略过此步骤!
如果你不使用安装内核而是根据此步骤执行升级过程, 你已经执行此步骤了。但是, 如果你使用了安装内核, 并且如果你修改了原有系统内的4.7内核, 恐怕你需要修改原有的 4.8 内核。这可以和用config(8)来修改某个特定设备一样简单, 或者在你所需的选项没包含在默认的GENERIC内核里时,它可能需要包含一个重新编译的步骤。在考虑重新编译系统前请参考 FAQ 5 - 从源代码编译系统 。
6. 升级packages
如果你的系统上安装和任何packages, 你应该在完成基本系统的升级后升级它们。 要注意, 无论如何, 很多packages在升级前/后可能需要更进一步的设置,请参考该应用升级指南中的相关细节。
下列这些 packages 已知存在重大的升级问题,会影响大量的用户。事实是没有包含在本清单内的packages并不意味着就没有问题。你需要根据自己使用的packages做些功课。
- kqemu: Must be kept in sync with the kernel. pkg_delete prior to the upgrade, then pkg_add the new package once the upgrade has been completed.
- Dovecot: Dovecot has been updated from 1.1.20 to 1.2.11. The configuration file changed and the old cmusieve plugin has been removed in favor of the new Dovecot sieve implementation. The commit log entry has more details.
- Samba: The default user database backend for the Samba port has changed. If you currently use smbpasswd, you must either adjust your configuration, or convert your database. See README.OpenBSD for more information.
- Firefox: The main mozilla-firefox package was updated from 3.0 to 3.6. Although most people will have no problem with the update, some have seen problems with Firefox not functioning correctly. In this case it may be necessary to create a new profile: see /usr/local/mozilla-firefox/README.OpenBSD for more details. Also note that the Java plugins do not yet support Firefox 3.6; in this case you should instead use the 3.5 package: pkg_add firefox35. Both versions of Firefox may be installed in parallel.
[INDENT]
代码: 全选
pkg_add -ui -D update -D updatedepends