kraftsrv.net

Raspberry Pi 上の OpenBSD 環境のアップグレード

Raspberry Pi 3 Model B 上の OpenBSD 6.9 環境を 7.0 にアップグレードする手順です。

本稿ではファイルセットの構成を最小とするため、アップグレードは自動 (sysupgrade コマンドを実行) ではなく対話式で行います。
なお Raspberry Pi 上の OpenBSD 環境で対話式のアップグレードを行う場合はシリアルコンソール接続が必須となります。
※環境準備や接続手順に関しては『Raspberry Pi 上での OpenBSD 6.9 環境の構築』を参照して下さい。

事前準備

/usr パーティションの空き容量の確認

/usr パーティションの空き容量を確認します。
ファイルセットの構成を最小とする場合は 100M 以上の空き容量を確保します。

raspberrypi# df -h /usr
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd0f      1.8G    605M    1.1G    34%    /usr

ファイルの取得

OpenBSD 7.0 の radmdisk kernel と checksum flle を取得します。
本稿では Japan (Wako-City, Saitama) から取得を行うこととします。

radmdisk kernel

raspberrypi# ftp https://ftp.riken.jp/pub/OpenBSD/7.0/arm64/bsd.rd

checksum file

raspberrypi# ftp https://ftp.riken.jp/pub/OpenBSD/7.0/arm64/SHA256.sig

取得したファイルを検証します。

raspberrypi# signify -C -p /etc/signify/openbsd-70-base.pub -x SHA256.sig bsd.rd
Signature Verified
bsd.rd: OK

radmdisk kernel の配置

radmdisk kernel をルートファイルシステム以下に配置します。

raspberrypi# cp bsd.rd /

再起動

OpenBSD を再起動します。

raspberrypi# shutdown -r now

以降の手順はシリアルコンソール接続で行います。

アップグレード

ファイルセットのアップグレード

ブートローダ画面が表示されます。
『boot>』プロンプト表示に『bsd.rd』を入力して Enter を押下します。

U-Boot 2021.01 (Apr 16 2021 - 15:39:01 +1000)

DRAM:  948 MiB
RPI 3 Model B (0xa22082)
MMC:   mmc@7e202000: 0, mmcnr@7e300000: 1
Loading Environment from FAT... *** Warning - bad CRC, using default environment

In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   No ethernet found.
starting USB...
Bus usb@7e980000: USB DWC2
scanning bus usb@7e980000 for devices... 3 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Scanning disk mmc@7e202000.blk...
** Unrecognized filesystem type **
Card did not respond to voltage select! : -110
Scanning disk mmcnr@7e300000.blk...
Disk mmcnr@7e300000.blk not ready
Found 3 disks
No EFI system partition
BootOrder not defined
EFI boot manager: Cannot load any image
Found EFI removable media binary efi/boot/bootaa64.efi
169000 bytes read in 11 ms (14.7 MiB/s)
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Booting /efi\boot\bootaa64.efi
disks: sd0*
>> OpenBSD/arm64 BOOTAA64 1.4
boot> bsd.rd

インストール種別選択のプロンプトが表示されます。
『U』を入力 (『Upgrade』を選択) して Enter を押下します。

Welcome to the OpenBSD/arm64 7.0 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? U

ターミナル種別選択のプロンプトが表示されます。
そのまま Enter を押下 (『vt220』を選択) します。

At any prompt except password prompts you can escape to a shell by
typing '!'. Default answers are shown in []'s and are selected by
pressing RETURN.  You can exit this program at any time by pressing
Control-C, but this can leave your system in an inconsistent state.

Terminal type? [vt220]

ルートディスク選択のプロンプトが表示されます。
そのまま Enter を押下 (『sd0』を選択) します。

Available disks are: sd0.
Which disk is the root disk? ('?' for details) [sd0]

ルート以外のファイルシステムに対するチェック要否の確認プロンプトが表示されます。
そのまま Enter を押下 (『no』を選択) します。

Checking root filesystem (fsck -fp /dev/sd0a)... OK.
Mounting root filesystem (mount -o ro /dev/sd0a /mnt)... OK.
Force checking of clean non-root filesystems? [no]

ファイルセットの取得元選択のプロンプトが表示されます。
そのまま Enter を押下 (『http』を選択) します。

Let's upgrade the sets!
Location of sets? (disk http nfs or 'done') [http]

Proxy サーバ入力のプロンプトが表示されます。
本稿では Proxy サーバは使用しないこととします。
そのまま Enter を押下 (『none』を選択) します。

HTTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]

ファイルセット取得元サーバ入力のプロンプトが表示されます。
デフォルトは /etc/installurl に記載されたサーバ (URL) となります。
※/etc/installurl に関しては『Raspberry Pi 上での OpenBSD バイナリパッチ適用』を参照して下さい。
本稿では『ftp.riken.jp』を選択することとします。
そのまま Enter を押下します。

HTTP Server? (hostname or 'done') [ftp.riken.jp]

ファイルセットのパス名選択のプロンプトが表示されます。
そのまま Enter を押下 (『pub/OpenBSD/7.0/arm64』を選択) します。

Server directory? [pub/OpenBSD/7.0/arm64]

ファイルセットの一覧画面が表示されます。
本稿ではファイルセットは最小構成を行う (『bsd』『bsd.mp』『base70.tgz』を選択) こととします。

Select sets by entering a set name, a file name pattern or 'all'. De-select
sets by prepending a '-', e.g.: '-game*'. Selected sets are labelled '[X]'.
    [X] bsd           [X] base70.tgz    [X] game70.tgz    [X] xfont70.tgz
    [X] bsd.mp        [X] comp70.tgz    [X] xbase70.tgz   [X] xserv70.tgz
    [X] bsd.rd        [X] man70.tgz     [X] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done]

radmdisk kernel の選択を解除します。
『-bsd.rd』を入力して Enter を押下します。

    [X] bsd           [X] base70.tgz    [X] game70.tgz    [X] xfont70.tgz
    [X] bsd.mp        [X] comp70.tgz    [X] xbase70.tgz   [X] xserv70.tgz
    [X] bsd.rd        [X] man70.tgz     [X] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done] -bsd.rd

コンパイラ関連の選択を解除します。
『-comp*』を入力して Enter を押下します。

    [X] bsd           [X] base70.tgz    [X] game70.tgz    [X] xfont70.tgz
    [X] bsd.mp        [X] comp70.tgz    [X] xbase70.tgz   [X] xserv70.tgz
    [ ] bsd.rd        [X] man70.tgz     [X] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done] -comp*

マニュアルページの選択を解除します。
『-man*』を入力して Enter を押下します。

    [X] bsd           [X] base70.tgz    [X] game70.tgz    [X] xfont70.tgz
    [X] bsd.mp        [ ] comp70.tgz    [X] xbase70.tgz   [X] xserv70.tgz
    [ ] bsd.rd        [X] man70.tgz     [X] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done] -man*

ゲームの選択を解除します。
『-game*』を入力して Enter を押下します。

    [X] bsd           [X] base70.tgz    [X] game70.tgz    [X] xfont70.tgz
    [X] bsd.mp        [ ] comp70.tgz    [X] xbase70.tgz   [X] xserv70.tgz
    [ ] bsd.rd        [ ] man70.tgz     [X] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done] -game*

X11 関連の選択を解除します。
『-x*』を入力して Enter を押下します。

    [X] bsd           [X] base70.tgz    [ ] game70.tgz    [X] xfont70.tgz
    [X] bsd.mp        [ ] comp70.tgz    [X] xbase70.tgz   [X] xserv70.tgz
    [ ] bsd.rd        [ ] man70.tgz     [X] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done] -x*

選択解除を終了します。
そのまま Enter を押下 (『done』を選択) します。

    [X] bsd           [X] base70.tgz    [ ] game70.tgz    [ ] xfont70.tgz
    [X] bsd.mp        [ ] comp70.tgz    [ ] xbase70.tgz   [ ] xserv70.tgz
    [ ] bsd.rd        [ ] man70.tgz     [ ] xshare70.tgz
Set name(s)? (or 'abort' or 'done') [done]

ファイルセットの取得が行われます。

Get/Verify SHA256.sig   100% |**************************|  1544       00:00
Signature Verified
Get/Verify bsd          100% |**************************| 13720 KB    00:05
Get/Verify bsd.mp       100% |**************************| 13782 KB    00:06
Get/Verify base70.tgz    19% |****                      | 44672 KB    01:20 ETA

アーカイブの展開が行われます。

Installing bsd          100% |**************************| 13720 KB    00:04
Installing bsd.mp       100% |**************************| 13782 KB    00:04
Installing base70.tgz    27% |*******                   | 65280 KB    02:52 ETA

ファイルセットの取得元選択のプロンプトが再度表示されます。
そのまま Enter を押下 (『done』を選択) します。

Location of sets? (disk http nfs or 'done') [done]

アップグレード完了画面が表示されます。
そのまま Enter を押下 (『Reboot』を選択) します。

Making all device nodes... done.
Multiprocessor machine; using bsd.mp instead of bsd.
Relinking to create unique kernel... done.

CONGRATULATIONS! Your OpenBSD upgrade has been successfully completed!

Exit to (S)hell, (H)alt or (R)eboot? [reboot]

本稿では以降の手順はリモート接続でログインした状態で行うこととします。

OS のバージョンの確認

アップグレード完了後の OS のバージョンを確認します。

raspberrypi# uname -a
OpenBSD raspberrypi 7.0 GENERIC.MP#1332 arm64

システム設定ファイルの更新

アップグレード完了後の再起動時には sysmerge コマンドがバッチモードで実行され、システム設定ファイルの更新が行われます。

更新が自動的に行われた設定ファイルの確認

更新が自動的に行われた設定ファイルが存在する場合、そのバックアップが /var/sysmerge/backups ディレクトリ以下に保存されます。

raspberrypi# ls -lR /var/sysmerge/backups
/var/sysmerge/backups/:
total 4
drwxr-xr-x  3 root  wheel  512 Oct 29 12:55 etc

/var/sysmerge/backups/etc:
total 24
-rw-r--r--  1 root  wheel  3077 Apr 18  2021 changelist
-rw-r--r--  1 root  wheel   548 Apr 18  2021 locate.rc
-rw-r--r--  1 root  wheel  2656 Apr 18  2021 login.conf
drwxr-xr-x  2 root  wheel   512 Oct 29 12:55 ssl

/var/sysmerge/backups/etc/ssl:
total 704
-r--r--r--  1 root  bin  335615 Apr 18  2021 cert.pem

以下は更新が自動的に行われた設定ファイルに関して、アップグレードで発生した差異の確認例となります。
※/etc/ssl/cert.pem の確認は省略します。

/etc/changelist

raspberrypi# diff -u /var/sysmerge/backups/etc/changelist /etc/changelist
--- /var/sysmerge/backups/etc/changelist        Sun Apr 18 16:06:45 2021
+++ /etc/changelist     Fri Oct 29 12:55:08 2021
@@ -1,4 +1,4 @@
-#      $OpenBSD: changelist,v 1.127 2020/09/13 10:03:46 ajacoutot Exp $
+#      $OpenBSD: changelist,v 1.129 2021/09/13 11:49:21 robert Exp $
 #
 # List of files which the security script backs up and checks
 # for modifications.
@@ -14,6 +14,7 @@
 /etc/bgpd.conf
 /etc/boot.conf
 /etc/bootparams
+/etc/bsd.re-config
 /etc/changelist
 /etc/chio.conf
 /etc/crontab
@@ -25,6 +26,7 @@
 /etc/defaultdomain
 /etc/dhclient.conf
 /etc/dhcpd.conf
+/etc/dhcpleased.conf
 /etc/disktab
 /etc/distfile
 /etc/doas.conf

/etc/locate.rc

raspberrypi# diff -u /var/sysmerge/backups/etc/locate.rc /etc/locate.rc
--- /var/sysmerge/backups/etc/locate.rc Sun Apr 18 16:06:45 2021
+++ /etc/locate.rc      Fri Oct 29 12:55:09 2021
@@ -1,6 +1,6 @@
-#      $OpenBSD: locate.rc,v 1.7 2015/08/14 03:02:07 rzalamena Exp $
+#      $OpenBSD: locate.rc,v 1.8 2021/08/06 19:14:55 tim Exp $
 #
-# /etc/locate.rc -  command script for updatedb(8)
+# /etc/locate.rc -  command script for locate.updatedb(8)
 #

 # temp directory

/etc/login.conf

raspberrypi# diff -u /var/sysmerge/backups/etc/login.conf /etc/login.conf
--- /var/sysmerge/backups/etc/login.conf        Sun Apr 18 16:06:45 2021
+++ /etc/login.conf     Fri Oct 29 12:55:09 2021
@@ -1,4 +1,4 @@
-# $OpenBSD: login.conf,v 1.9 2021/01/07 19:51:53 robert Exp $
+# $OpenBSD: login.conf,v 1.10 2021/04/25 16:36:56 mortimer Exp $

 #
 # Sample login.conf file.  See login.conf(5) for details.
@@ -95,6 +95,7 @@
        :datasize-cur=6144M:\
        :maxproc-max=1024:\
        :maxproc-cur=384:\
+       :stacksize-cur=8M:\
        :priority=5:\
        :tc=default:

設定ファイルの手動更新

sysmerge コマンドをオプション無しで実行して、更新が自動的に行われなかった設定ファイルの有無を確認します。

本稿では /etc/ssh/sshd_config の更新が自動的に行われなかったため、手動で更新を行うこととします。
『(END)』の表示にそのまま Enter を押下します。

raspberrypi# sysmerge

========================================================================

===> Displaying differences between ./etc/ssh/sshd_config and installed version:

--- /etc/ssh/sshd_config        Sun Apr 18 17:14:05 2021
+++ ./etc/ssh/sshd_config       Fri Oct  1 07:05:42 2021
@@ -1,4 +1,4 @@
-#      $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
+#      $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $

 # This is the sshd server system-wide configuration file.  See
 # sshd_config(5) for more information.
@@ -27,7 +27,7 @@
 # Authentication:

 #LoginGraceTime 2m
-PermitRootLogin no
+#PermitRootLogin prohibit-password
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -56,7 +56,7 @@
 #PermitEmptyPasswords no

 # Change to no to disable s/key passwords
-#ChallengeResponseAuthentication yes
+#KbdInteractiveAuthentication yes

 #AllowAgentForwarding yes
 #AllowTcpForwarding yes
- (END)

アップグレードで発生した差異に対する方針選択のプロンプトが表示されます。
本稿ではマージを行うこととします。
『m』を入力 (『merge the temporary and installed versions』を選択) して Enter を押下します。

  Use 'd' to delete the temporary ./etc/ssh/sshd_config
  Use 'i' to install the temporary ./etc/ssh/sshd_config
  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

How should I deal with this? [Leave it for later] m

最初の差異が表示されます。
本稿では右側に表示されたアップグレード後の内容を選択することとします。
『r』を入力 (choose right diff) して Enter を押下します。

===> Type h at the sdiff prompt (%) to get usage help

#       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22  | #  $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtuck
%r

次の差異が表示されます。
本稿では左側に表示されたアップグレード前の内容を選択することとします。
『l』を入力 (choose left diff) して Enter を押下します。

PermitRootLogin no                                         | #PermitRootLogin prohibit-password
%l

次の差異が表示されます。
本稿では右側に表示された内容を選択することとします。
『r』を入力して Enter を押下します。

#ChallengeResponseAuthentication yes                       | #KbdInteractiveAuthentication yes
%r

マージされた設定ファイルに対する方針選択のプロンプトが表示されます。
『i』を入力 (『install the merged file』を選択) して Enter を押下します。

  Use 'e' to edit the merged file
  Use 'i' to install the merged file
  Use 'n' to view a diff between the merged and new files
  Use 'o' to view a diff between the old and merged files
  Use 'r' to re-do the merge
  Use 'v' to view the merged file
  Use 'x' to delete the merged file and go back to previous menu
  Default is to leave the temporary file to deal with by hand

===> How should I deal with the merged file? [Leave it for later] i

設定ファイルの手動更新が終了します。

===> Merging /etc/ssh/sshd_config
raspberrypi#

設定ファイルのバックアップが /var/sysmerge/backups ディレクトリ以下に保存されます。
※前回の sysmerge コマンド実行分のバックアップが保存されたディレクトリは backups.0 にリネームされます。

raspberrypi# ls -l /var/sysmerge/backups/etc/ssh/sshd_config
-rw-r--r--  1 root  wheel  2258 Apr 18  2021 /var/sysmerge/backups/etc/ssh/sshd_config

設定ファイルの更新を反映します。

raspberrypi# rcctl reload sshd
sshd(ok)

バイナリパッケージの更新

バイナリパッケージの更新

本稿ではインストール済みの全パッケージを対象とした更新を行うこととします。

raspberrypi# pkg_add -u
quirks-4.53 signed on 2021-10-28T12:12:40Z
quirks-3.633->4.53: ok
bash-5.1.8:libiconv-1.16p0->1.16p0: ok
bash-5.1.8:gettext-runtime-0.21p1->0.21p1: ok
bash-5.1.4->5.1.8: ok
Read shared items: ok