kraftsrv.net

Raspberry Pi 上での OpenBSD 6.9 環境の構築

Raspberry Pi 3 Model B 上に OpenBSD 6.9 の環境を構築する手順です。
※Model B+ は OpenBSD のサポート対象外の機器です。
インストール後の基本的な設定までを行います。

事前準備

シリアルコンソール接続の環境準備

Raspberry Pi に OpenBSD をインストールする場合はシリアルコンソール接続が必須となるため環境を準備します。

UART-USB 変換アダプタの用意

Raspberry Pi の UART 端子 (GPIO ピン) と PC の USB ポートを接続する変換アダプタを用意します。
本稿では CP2102 Chipset を搭載した変換アダプタを使用します。

CP2102 ドライバのインストール

SILICON LABS 社のサイトから CP210x Universal Windows Driver を取得します。
CP210xVCPInstaller_x64.exe を実行して CP2102 ドライバをインストールします。

SD カードイメージファイルの取得

miniroot69.img を取得します。
※miniroot69.img はインストーラならびにその関連ファイルが含まれたイメージファイルとなります。

SD カードイメージファイルの SD カードへの書き込み

SD カードイメージファイルの書き込み』を参照して SD カードイメージファイル (miniroot69.img) を SD カードに書き込みます。
書き込みを行った SD カードを Raspberry Pi に挿入します。

ネットワーク機器への接続

本稿ではネットワーク機器へは有線での接続を行うこととします。
LAN ケーブルを Raspberry Pi に接続します。

UART-USB 変換アダプタの接続

PC への接続

変換アダプタを PC の USB ポートに接続します。
『デバイスマネージャ』画面内の『ポート (COM と LPT)』を展開して、『Silicon Labs CP210x USB to UART Bridge』に表示される COM の番号を確認します。

Raspberry Pi への接続

UART-USB 変換アダプタを Raspberry Pi に接続します。
使用する GPIO ピンは以下の通りとなります。

  • GPIO 14 (TXD)
  • GPIO 15 (RXD)
  • GND

※GPIO ピンの配置図は Raspberry Pi の DOCUMENTATION に掲載されています。

ターミナルソフトの設定

以下例の情報の通りターミナルソフトのシリアルポートの設定を行います。

ポート ※『デバイスマネージャ』で確認した COM の番号
スピード 115200
データ 8 bit
パリティ none
ストップビット 1 bit
フロー制御 none

OpenBSD のインストール

Raspberry Pi に OpenBSD をインストールする手順の概要は以下の通りとなります。

  1. SD カードからインストーラを起動
  2. ファイルセットをインターネット上のサーバから取得
  3. SD カードにインストール (イメージファイルが書き込まれた SD カードを上書き)

電源投入

Raspberry Pi の電源を投入 (micro USB ケーブルを接続) します。

インストール

ブートローダ画面が表示されます。
そのまま 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 19 ms (8.5 MiB/s)
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Booting /efi\boot\bootaa64.efi
disks: sd0*
>> OpenBSD/arm64 BOOTAA64 1.4
boot>

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

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

ターミナル種別選択のプロンプトが表示されます。
そのまま 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 を押下します。

System hostname? (short form, e.g. 'foo') raspberrypi

設定対象とするネットワークインタフェース選択のプロンプトが表示されます。
『smsc0』を入力して Enter を押下します。

Available network interfaces are: bwfm0 smsc0 vlan0.
Which network interface do you wish to configure? (or 'done') [bwfm0] smsc0

IPv4 アドレス入力のプロンプトが表示されます。
IP アドレスを入力して Enter を押下します。

IPv4 address for smsc0? (or 'dhcp' or 'none') [dhcp] 172.16.0.220

ネットマスク入力のプロンプトが表示されます。
ネットマスクを入力して Enter を押下します。

Netmask for smsc0? [255.255.255.0] 255.255.255.0

IPv6 アドレス入力のプロンプトが表示されます。
本稿では IPv6 の設定は行わないこととします。
そのまま Enter を押下 (『none』を選択) します。

IPv6 address for smsc0? (or 'autoconf' or 'none') [none]

設定対象とするネットワークインタフェース選択のプロンプトが再度表示されます。
そのまま Enter を押下 (『done』を選択) します。

Available network interfaces are: bwfm0 smsc0 vlan0.
Which network interface do you wish to configure? (or 'done') [done]

IPv4 ゲートウェイ入力のプロンプトが表示されます。
ゲートウェイの IP アドレスを入力して Enter を押下します。

Default IPv4 route? (IPv4 address or none) 172.16.0.1

DNS ドメイン名入力のプロンプトが表示されます。
本項では一旦デフォルトの『my.domain』を設定することとします。
そのまま Enter を押下します。

DNS domain name? (e.g. 'example.com') [my.domain]

DNS サーバ入力のプロンプトが表示されます。
DNS サーバの情報を入力して Enter を押下します。

DNS nameservers? (IP address list or 'none') [none] 8.8.8.8 8.8.4.4

root ユーザのパスワード設定画面が表示されます。
パスワードを 2 回入力します。

Password for root account? (will not echo)
Password for root account? (again)

sshd 起動選択のプロンプトが表示されます。
インストール後は SSH 接続でのログインを想定して、本稿では sshd の起動を行うこととします。
そのまま Enter を押下 (『yes』を選択) します。

Start sshd(8) by default? [yes]

一般ユーザ作成のプロンプトが表示されます。

Setup a user? (enter a lower-case loginname, or 'no') [no]

本稿では以下例の情報の通り一般ユーザの作成を行うこととします。

ユーザ名 admin
フルネーム admin
wheel グループに所属 ※OpenBSD ではインストールの際に作成するユーザはデフォルトで wheel グループに所属
shell ※OpenBSD ではインストールの際に作成するユーザはデフォルトで /bin/ksh に設定

作成するユーザ名を入力して Enter を押下します。

Setup a user? (enter a lower-case loginname, or 'no') [no] admin

フルネーム入力のプロンプトが表示されます。
フルネームを入力して Enter を押下します。

Full name for user admin? [admin]

パスワード設定画面が表示されます。
パスワードを 2 回入力します。

Password for user admin? (will not echo)
Password for user admin? (again)

root ユーザの SSH 接続でのログイン設定のプロンプトが表示されます。
本項ではパスワード認証と公開鍵認証の何れも禁止することとします。
そのまま Enter を押下 (『no』を選択) します。

WARNING: root is targeted by password guessing attacks, pubkeys are safer.
Allow root ssh login? (yes, no, prohibit-password) [no]

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

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

ディスクパーティション選択のプロンプトが表示されます。
そのまま Enter を押下 (『Whole disk』を選択) します。

Disk: sd0       geometry: 1927/255/63 [30965760 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: 0C      2  10   9 -      3  15  12 [       32768:       16384 ] FAT32L
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: A6      3  15  13 -      5 122  53 [       49152:       38912 ] OpenBSD
Use (W)hole disk or (E)dit the MBR? [whole]

パーティションレイアウトの設定画面が表示されます。
本稿ではディスクパーティションは自動分割を行うこととします。
そのまま Enter を押下 (『Auto layout』を選択) します。

Creating a msdos partition and an OpenBSD partition for rest of sd0...done.
/dev/rsd0i: 32668 sectors in 8167 FAT16 clusters (2048 bytes/cluster)
bps=512 spc=4 res=1 nft=2 rde=512 mid=0xf8 spf=32 spt=63 hds=255 hid=32768 bsec=32768
The auto-allocated layout for sd0 is:
#                size           offset  fstype [fsize bsize   cpg]
  a:           365.3M            65536  4.2BSD   2048 16384     1 # /
  b:           510.6M           813664    swap
  c:         15120.0M                0  unused
  d:           464.5M          1859392  4.2BSD   2048 16384     1 # /tmp
  e:           639.8M          2810592  4.2BSD   2048 16384     1 # /var
  f:          1930.6M          4120832  4.2BSD   2048 16384     1 # /usr
  g:           513.2M          8074688  4.2BSD   2048 16384     1 # /usr/X11R6
  h:          1669.9M          9125664  4.2BSD   2048 16384     1 # /usr/local
  i:            16.0M            32768   MSDOS
  j:          1386.1M         12545600  4.2BSD   2048 16384     1 # /usr/src
  k:          5292.2M         15384352  4.2BSD   2048 16384     1 # /usr/obj
  l:          2315.9M         26222848  4.2BSD   2048 16384     1 # /home
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a]

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

Let's install 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]

ファイルセット取得元サーバ入力のプロンプトが表示されます。
サーバの一覧は OpenBSD Mirrors に掲載されています。
本稿では Japan (Wako-City, Saitama) から取得を行うこととします。
『ftp.riken.jp』を入力して Enter を押下します。

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

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

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

ファイルセットの一覧画面が表示されます。
本稿ではファイルセットは最小構成を行う (『bsd』『bsd.mp』『base69.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] base69.tgz    [X] game69.tgz    [X] xfont69.tgz
    [X] bsd.mp        [X] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
    [X] bsd.rd        [X] man69.tgz     [X] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done]

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

    [X] bsd           [X] base69.tgz    [X] game69.tgz    [X] xfont69.tgz
    [X] bsd.mp        [X] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
    [X] bsd.rd        [X] man69.tgz     [X] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done] -bsd.rd

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

    [X] bsd           [X] base69.tgz    [X] game69.tgz    [X] xfont69.tgz
    [X] bsd.mp        [X] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
    [ ] bsd.rd        [X] man69.tgz     [X] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done] -comp*

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

    [X] bsd           [X] base69.tgz    [X] game69.tgz    [X] xfont69.tgz
    [X] bsd.mp        [ ] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
    [ ] bsd.rd        [X] man69.tgz     [X] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done] -man*

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

    [X] bsd           [X] base69.tgz    [X] game69.tgz    [X] xfont69.tgz
    [X] bsd.mp        [ ] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
    [ ] bsd.rd        [ ] man69.tgz     [X] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done] -game*

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

    [X] bsd           [X] base69.tgz    [ ] game69.tgz    [X] xfont69.tgz
    [X] bsd.mp        [ ] comp69.tgz    [X] xbase69.tgz   [X] xserv69.tgz
    [ ] bsd.rd        [ ] man69.tgz     [X] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done] -x*

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

    [X] bsd           [X] base69.tgz    [ ] game69.tgz    [ ] xfont69.tgz
    [X] bsd.mp        [ ] comp69.tgz    [ ] xbase69.tgz   [ ] xserv69.tgz
    [ ] bsd.rd        [ ] man69.tgz     [ ] xshare69.tgz
Set name(s)? (or 'abort' or 'done') [done]

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

Get/Verify SHA256.sig   100% |**************************|  1544       00:00
Signature Verified
Get/Verify bsd          100% |**************************| 13333 KB    00:08
Get/Verify bsd.mp       100% |**************************| 13407 KB    00:06
Get/Verify base69.tgz    16% |****                      | 36736 KB    02:02 ETA

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

Installing bsd          100% |**************************| 13333 KB    00:03
Installing bsd.mp       100% |**************************| 13407 KB    00:02
Installing base69.tgz    18% |****                      | 40576 KB    01:44 ETA

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

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

タイムゾーン選択のプロンプトが表示されます。
『Asia/Tokyo』を入力して Enter を押下します。

What timezone are you in? ('?' for list) [Canada/Mountain] Asia/Tokyo

インストール完了画面が表示されます。
そのまま Enter を押下 (『Reboot』を選択) します。

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

CONGRATULATIONS! Your OpenBSD install has been successfully completed!

When you login to your new system the first time, please read your mail
using the 'mail' command.

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

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

OpenBSD へのログイン

SSH 接続でログインします。 以下のプロンプトが表示されます。

raspberrypi$

root ユーザにスイッチします。

raspberrypi$ su -
Password:
raspberrypi#

システムの環境設定

ドメイン名 (ホスト名) の設定

/etc/myname の設定を変更します。
以下はドメイン名『my.domain』を除去してホスト名を『raspberrypi』のみとする場合の例となります。

#raspberrypi.my.domain
raspberrypi

なお /etc/hosts にも設定したドメイン名を含むエントリが存在するため、適宜設定を変更します。

#172.16.0.220    openbsd.my.domain openbsd
172.16.0.220    openbsd

設定の反映を行うため OpenBSD を再起動します。

raspberrypi# shutdown -r now

時刻同期の設定

起動時の時刻補正と起動後の時刻同期

OpenBSD では ntpd (openntpd) は自動起動が行われます。
また ntpd の起動時に TLS 通信による時刻補正も行われます。
よって時刻補正と時刻同期を行うための対応は不要となります。

時刻同期先 NTP サーバの変更

本稿では時刻同期先をインターネットマルチフィード株式会社の PUBLIC NTP サーバに変更を行うこととします。
/etc/ntpd.conf の時刻同期先サーバの設定を変更します。

#servers pool.ntp.org
#server time.cloudflare.com
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

設定の反映

設定の反映を行うため ntpd を再起動します。

raspberrypi# rcctl restart ntpd

バイナリパッケージの管理操作

バイナリパッケージのインストール

本稿では操作例として bash のインストールを行うこととします。

インストールするパッケージを検索します。

raspberrypi# pkg_info -Q bash
bash-5.1.4
bash-completion-2.11
bashunit-20140327p0
checkbashisms-2.0.0.2p0
debug-bash-5.1.4

パッケージをインストールします。
pkg_add コマンドを実行します。

raspberrypi# pkg_add bash

ユーザの管理操作

一般ユーザの環境設定

ロケールの変更

本稿では操作例として UTF-8 への変更を行うこととします。
~/.profile に『export LANG=ja_JP.UTF-8』の設定を追加します。

export LANG=ja_JP.UTF-8

ログインシェルの変更

本稿では操作例として bash への変更を行うこととします。
chpass コマンドを実行します。

raspberrypi$ chpass -s /usr/local/bin/bash

事後作業

システムバックアップ

SD カード全体のバックアップ』を参照して適宜 OpenBSD 環境のシステムバックアップを行います。