在openbsd的官方文档中,建议在console的模式下升级,但是大部分人都不想下机房,或者服务器没有ipmi带外管理口,远程升级成为唯一的选择。

在升级之前,需要找一个版本全的镜像站点,推荐:http://ftp3.usa.openbsd.org/pub/OpenBSD/

在升级的过程中,以下步骤需要在root权限下操作
  • 备份

    每次远程升级的时候,都会在/usr/rel中创建一个新版本的目录,譬如从5.6升级到5.7的时候,就创建了/usr/rel/57,所以本次升级时,/usr/rel/57就已经存在,而且/usr/rel/57里面已经包含了上次升级时所下载的file set,譬如base57.tgz、bsd、bsd.rd等文件。所以不需要备份bsd和bsd.rd,但是需要备份/sbin/reboot

    cp /sbin/reboot /sbin/57reboot
  • 下载

    cd /usr/rel
    mkdir 58 && cd 58
    http://ftp3.usa.openbsd.org/pub/OpenBSD/5.8/i386/{SHA256.sig,bsd,bsd.rd,base58.tgz,comp58.tgz,man58.tgz,xbase58.tgz,xfont58.tgz,xserv58.tgz,xshare58.tgz}
  • 升级

    首先将新内核拷贝至根目录下:

    多核版本

    cd /usr/rel    # where you put the release files
    ln -f /bsd /obsd && cp bsd.mp /nbsd && mv /nbsd /bsd
    cp bsd.rd /
    cp bsd /bsd.sp

    单核版本

    cd /usr/rel    # where you put the release files
    ln -f /bsd /obsd && cp bsd /nbsd && mv /nbsd /bsd
    cp bsd.rd bsd.mp /    # may give a harmless warning

    接着执行下面的操作:

    cp /sbin/reboot /sbin/57reboot
    tar -C / -xzphf xserv58.tgz
    tar -C / -xzphf xfont58.tgz
    tar -C / -xzphf xshare58.tgz
    tar -C / -xzphf xbase58.tgz
    tar -C / -xzphf comp58.tgz
    tar -C / -xzphf man58.tgz
    tar -C / -xzphf base58.tgz # Install last!
    /sbin/57reboot

    重启后

    cd /dev
    ./MAKEDEV all
    installboot -v wd0    # wd0为第一块启动硬盘
  • 合并配置文件

    sysmerge

    接着根据提示做出相应的应答。

  • 删除过期文件

    每个版本均不相同,详见 http://www.openbsd.org/faq/upgrade58.html#upgrade

官方不建议跨版本升级,但是我曾成功地将两台openbsd4.9升至5.7,不过当时为了保险起见,还是通过小步跑跨版本的方式升级:4.9→5.1→5.3→5.5→5.7。