免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2341 | 回复: 3
打印 上一主题 下一主题

[OpenBSD] [原创]OpenBSD Current版本更新系统核心和已安装软件包的方法! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-11 16:18 |只看该作者 |倒序浏览
本文来自http://onmp.cublog.cn,欢迎转载!

开始之前,先说下OpenBSD的几个版本以及他们之间的关系。

-release:OpenBSD开发团队每隔六个月推出的版本,通俗意义上的“正式版”。

-stable:稳定版,在“正式版”的基础上打上补丁和进行部分修正的版本。受限于人力和精力,此版本的支持时间为一年,一年后不再进行新的修正。

-current:开发版,“正式版”+补丁+修订+新功能等等,会在几个月后变成新的”正式版“。

可以用下面的图表来形象的表示三个版本之间的关系:

       ,------o-----------o----X                    4.1 Stable
       |      .           .
       |      .    ,------o---------o----X          4.2 Stable
       |      .    |      .         .
       |      .    |      .    ,----o----------o--> 4.3 Stable
       |      .    |      .    |    .          .
       |      .    |      .    |    .    ,-----o--> 4.4 Stable
       |      .    |      .    |    .    |     .
       |      .    |      .    |    .    |     .
-->4.1Rel----->4.2Rel----->4.3Rel----->4.4Rel---=-> Current

          Time --->


从上面的版本关系看,使用current版本可以得到最全面的支持和安全保证。但是缺点也很明显,就是要不停的cvs源码,不停的wget软件源码,make && makeinstall......确保跟踪系统各个部分的变化。另外,使用current版本是得不到”官方“技术支持的,这意味着你要自己解决所有可能出现的问题。

那么,有没有一种办法可以既跟上官方的步伐,不至于落得太远,又能够保证和官方方向一致,不至于自己一个人落进代码的”黑洞“?最简单的办法是使用OpenBSD FTP里面的snapshots。

再来说说snapshots。其实官方FTP的这个目录里面保存的是current版本某个时间点的”快照“,上图用个红色等号表示出来了。而且snapshots的更新是比较快的,通常系统核心是3~5天更新一次,packages半月左右更新一次。

当snapshots更新时,该如何跟进呢?

一、系统核心更新

方法一:你可以只下载bsd.rd这个文件,放在根目录,用它启动,然后选择upgrade,到定位OpenBSD的位置时选择snapshots目录,它会去下载最新的系统核心文件到你的机器上,然后halt重启即可。这个方法应该是最”官方“的方法,不过如果你管理着几十上百台机器,还不等你这次upgraded,新的核心又来了。。。那么请你接着往下看。

方法二:

先说思路

其实snapshots中保存的已经是编译好的核心,直接wget下来,覆盖旧的核心文件不就行了吗?就算有几十上百台机器,用其中一台开通FTP或HTTP服务,wget下来,其他机器再来这里wget,速度会更快!

具体步骤这里就不详细讨论了,因为涉及到系统各个部分的更新。原则上更新过的文件需要覆盖,未更新过的则不需要覆盖。OpenBSD从4.4版开始,提供了一个sysmerge工具可以帮助确定/etc目录系统文件的修改,一个示例在:http://www.openbsd.org/faq/upgrade44.html

另外,一定记得备份/etc目录,因为这个目录太重要了!下面贴段偶自己用的脚本(最近几个月在用):

#!/bin/sh
cd /
rm /bsd.*
rm /*.tgz
wget ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/i386/bsd.*
wget ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/i386/base*.tgz

#此处请加入你自己的备份命令,通常情况下是备份/etc目录。视情况下载etc*.tgz这个文件。若有文件修改则下载,无则不下载。
#wget ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/i386/etc*.tgz[color]
#misc*.tgz貌似没有什么作用,可以不下载。
#wget ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/i386/misc*.tgz
wget ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/i386/man*.tgz
mv /bsd /obsd
mv /bsd.mp /bsd

#备份/etc目录中的所有文件以及你自己手动修改过的文件(软件包中的文件除外)!!!重要!!!
mkdir /var/bakup

cp -rf /etc/* /var/bakup/
tar xzvphf /base*.tgz

# etc*.tgz和misc*.tgz文件若无更新则无须下载,不用解压。
#tar xzvphf /etc*.tgz
#tar xzvphf /misc*.tgz
tar xzvphf /man*.tgz

#这里只是简单的把备份的/etc目录拷贝回去,实际应用中应该考虑此目录中文件更新的情况,对应拷贝。
#cp -rf /var/bakup/* /etc/
/dev/MAKEDEV all
rm /*.tgz
reboot


好了,等系统重启完毕,已经是最新的核心了。几十上百台机器的管理员们,请把上面脚本的地址换成你某个FTP或HTTP服务器的地址,更新会是非常的快!

需要说明的一点是,因为snapshots中的系统核心未经过大范围的验证,所以可能会有各个方面的问题(偶就在一个月中遇到过两次更新后无法启动的情况),请一定在测试系统中验证后再大批量更新!

二、软件包的更新

这个比较简单了,理论上是删掉旧的,安装新的。命令在下面:

export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386/
pkg_add -u -F installed -F update -F updatedepends


你可以把上面这两行命令加入/etc/rc.local文件的最前面,系统需要启动的程序放在后面。

这样,系统重启后就会进行update的工作,完成后再启动各个程序,保证系统所有的部分都是最新的!

例如:偶的O.N.M.P.环境,需要开机启动MySQL、PHP-Fastcgi、Nginx,那么/etc/rc.local文件就如同下示:

rdate -n 210.72.145.44
rdate -n 210.72.145.44 >> /var/run/pkgupdate


export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386/
pkg_add -u -F installed -F update -F updatedepends >> /var/run/pkgupdate


# Start MySQL
if [ -x /usr/local/bin/mysqld_safe ] ; then
   echo -n 'Starting MySQL...'
   su -c mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'
   echo "DONE"
fi
# Start php-fastcgi
if [ -x /usr/local/bin/spawn-fcgi ] ; then
   echo -n 'Starting php-fastcgi...'
   /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www -f /usr/local/bin/php-fastcgi > /var/run/fcgi.pid
   echo "DONE"
fi
# Start nginx
if [ -x /usr/local/sbin/nginx ] ; then
   echo -n 'Starting nginx...'
   /usr/local/sbin/nginx
   echo "DONE"
fi


同理,即便你管理着几十上百台机器,把PKG_PATH设成你某个FTP或HTTP服务器的地址,预先把要用到的packages down下来,从这个机器上进行软件包的update,速度绝对是非常快!

写在最后

其实,偶是因为在虚拟机中无法正常的make userland才逼出这么一个办法,不清楚是否已经有高人使用更好的方法来进行系统的更新了。

说几点需要注意的:

一、当系统核心更新后,你可以在测试系统上把bsd、bsd.rd、bsd.mp、base*.tgz、etc*.tgz、misc*.tgz、man*.tgz等文件down下来,在临时目录中解压后和较旧的文件进行对比(主要是文件的MD5值),把有更新的文件找出来,在系统核心更新的脚本文件中进行处理,以加快批量更新的速度。

二、如果你仔细一些,其实没必要备份整个/etc目录,查找一下,把有单独”印记“的文件备份即可(例如master.passwd文件,hostname.*文件等等),这样可以减少出错的几率。

三、一定一定要在测试系统中测试无误后再去应用到生产系统!

参考资料:

OpenBSD FAQ:http://www.openbsd.org/faq/index.html

OpenBSD Upgrade Guide:http://www.openbsd.org/faq/upgrade44.html

[ 本帖最后由 young_king 于 2009-2-20 12:58 编辑 ]

评分

参与人数 1可用积分 +2 收起 理由
OraBSD + 2

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2009-02-20 11:08 |只看该作者
很奇怪偶博客中的这篇文章,竟会有这么高的浏览量!

于是干脆就帖过来吧,让更多的人能看到!

论坛徽章:
0
3 [报告]
发表于 2009-02-21 20:17 |只看该作者
写的不错 另一个思路 你的O.N.M.P. zend搞定就完整了

论坛徽章:
0
4 [报告]
发表于 2009-02-22 13:50 |只看该作者
支持将O.N.M.P. zend搞完。顶。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP