免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-20 13:59 |只看该作者 |倒序浏览

                               
原地址:http://bbs3.chinaunix.net/thread-1367771-1-1.html
开始之前,先说下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目录,因为这个目录太重要了!下面贴段偶自己用的脚本(最近几个月在用):
[color="#ff0000"]#!/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
[color="#0000ff"]#此处请加入你自己的备份命令,通常情况下是备份/etc目录。视情况下载etc*.tgz这个文件。若有文件修改则下载,无则不下载。
[color="#ff0000"]#wget ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/i386/etc*.tgz
[color="#0000ff"]#misc*.tgz貌似没有什么作用,可以不下载。[color="#ff0000"]
#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
[color="#0000ff"]#备份/etc目录中的所有文件以及你自己手动修改过的文件(软件包中的文件除外)!!!重要!!!
[color="#ff0000"]mkdir /var/bakup
[color="#ff0000"]cp -rf /etc/* /var/bakup/
tar xzvphf /base*.tgz
[color="#0000ff"]# etc*.tgz和misc*.tgz文件若无更新则无须下载,不用解压。
[color="#ff0000"]#tar xzvphf /etc*.tgz
#tar xzvphf /misc*.tgz
tar xzvphf /man*.tgz
[color="#0000ff"]#这里只是简单的把备份的/etc目录拷贝回去,实际应用中应该考虑此目录中文件更新的情况,对应拷贝。
[color="#ff0000"]#cp -rf /var/bakup/* /etc/
/dev/MAKEDEV all
rm /*.tgz
reboot
好了,等系统重启完毕,已经是最新的核心了。几十上百台机器的管理员们,请把上面脚本的地址换成你某个FTP或HTTP服务器的地址,更新会是非常的快!
[color="#ff0000"]需要说明的一点是,因为snapshots中的系统核心未经过大范围的验证,所以可能会有各个方面的问题(偶就在一个月中遇到过两次更新后无法启动的情况),请一定在测试系统中验证后再大批量更新!
二、软件包的更新
这个比较简单了,理论上是删掉旧的,安装新的。命令在下面:
[color="#0000ff"]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文件就如同下示:
[color="#ff0000"]rdate -n 210.72.145.44
rdate -n 210.72.145.44 >> /var/run/pkgupdate
[color="#009900"]export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386/
pkg_add -u -F installed -F update -F updatedepends >> /var/run/pkgupdate[color="#ff0000"]
# 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
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11818/showart_1836015.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP