BSD を試してみよう、第 4 部/全 7 回: NetBSD、おじいちゃんの懐中時計で動く BSD
これは、BSD シリーズのオペレーティング システムに関する 7 部構成のシリーズの第 4 部です。
さて、 NetBSDについてですが、このオペレーティングシステムについてはほとんど知りません。1996年頃、ミシガン大学の自分の机で古いMac 68Kを使ってUnixサーバーとして動作させたことがあります。これがNetBSDに関する最後の思い出です。
私にとって、NetBSDの「アイデンティティ」は、ほぼあらゆるプラットフォームで動作することです。Tier IIシステム(「オーガニックポートはNetBSDプロジェクトから高く評価されていますが、フォーカスポートほど開発が厳密に義務付けられていません。一般的に、オーガニックポートのハードウェアプラットフォームは産業的重要性を失っているか、コミュニティ活動が不十分でポートがTier IIに到達できないためです」)を含めると、NetBSD 10.0(最新バージョン)は54種類のハードウェアプラットフォームで動作します。
Tier I システムのみを数える場合 (「Focus ポートは NetBSD が戦略の一環としてターゲットとするアーキテクチャです」)、この記事の執筆時点では、OpenBSD は NetBSD (8) よりも多くのプラットフォーム (12) で実行されています。
豆知識!NetBSDはかつて、1989年に作られた伝説の自作コンピュータボード、pc532で動作していました。このボードはわずか200台しか製造されませんでした。2008年にgccのサポートが終了したため、NetBSDも残念ながらサポートを終了しました。
NetBSD 10.0 をインストールするつもりです。

さあ行こう!

ちょっと寄り道して、ユーティリティ メニューをチェックしてみました。

はい、基本的な救助ツールですね。

はい、続けましょう。

まあまあ。GPTがデフォルトだって?NetBSDはFreeBSDより少し進んでいるみたいだね。オレンジフラグ1、レッドデビル0。
振り返ってみると、これが NetBSD と私の関係の最高潮だったと思います。

ああ、なんてことだ、ハードドライブのジオメトリなんて知らない。知りたくない。ハードドライブのジオメトリの仕組みを覚えておきたくない。

NetBSD インストーラー、私はあなたの手に委ねられています。

ああ、残念です…すべてを 1 つのパーティションに入れるのではなく、何か凝ったことをするつもりだと思っていました。

最後のチャンス!
YOLO。

針の傷。
何をインストールしますか…
ブートブロックって何だか知ってるけど、ポートの文脈で聞いたことない。 調べてみて「BIOSコンソールを使う」を選んだ。

カスタム?オプションにはどんなものがあるんですか?

これを次のように変更しました:

それでは、出発です。

その後:

「起動できるようになりました…」
それについては調べてみます。

この画面は私に地獄を与えました。
まず、「ユーザーを追加しよう」と思い、それを選択すると、この画面が表示されました。

すると、どういうわけかキーボードが大文字に固定されてしまいました…?
はい、Caps Lock を確認しました。

まあ、そういうこともあるけど、結局Ctrl+Cを押すしかできなかった。するとシェルに落ちてしまった。キーをあれこれいじくり回し、どうにか元に戻った。ChromeウィンドウとSublime Textで入力している時はキーはちゃんと動いていたので…
とにかく、シェルから抜け出すために「exit」を押したら、最初からやり直しになってしまったので、インストールを最初からやり直さなければなりませんでした。ああ。その後、最終設定画面に戻って、ネットワークの設定をすることにしました。
それは私に尋ねました:

ええと、答えは「イーサネット」でも「自動」でも、他に思いつく選択肢でもないと言えます。そして、中止したり戻ったりする方法もありません。
それで、Ctrl + C…3 回目のインストール…
これで今回は終了です。CDを取り出し、再起動して…

完全に起動に失敗しました。
さて、3 回の起動後、おそらく NetBSD はパーティションの再設定によってどこかの時点で混乱したため、さらに努力しました。
そのVMを全滅させて、全く新しいVMをプロビジョニングしました。インストールは4回目。その後…

問題は続く
起動時にネットワークが使えなくなってしまいました。よし、dhcpcd を手動で実行してみることにします。
「インターフェイスにはキャリアがありません」と表示されます。
イーサネットアダプターを手動でifconfigしたらうまくいきました。その後、コンソールに表示されるメッセージで作業が面倒だったので、sshd_configを修正してrootがssh経由でログインできるようにしました。
ネットワーク設定の仕組みを調べてみました。/etc/ifconfig.XXX ファイルを作成し、rc.conf に変数を追加する必要があると思っていました。しかし、よく見ると auto_ifconfig がデフォルトで設定されているので、これは必要ないはずです…?
この古い設定の動作は、/etc/ifconfig.XXX ファイルを作成すると読み込まれて処理されるというものでした。インターフェースを設定したくない場合は、ファイルを作成しませんでした。
とにかく、それで遊んでみましたが、dhcpcd をもう一度試してみることにし、それがうまくいったので、それを採用しました。
次はパッケージについて
# $PKG_PATH をエコーする http://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0/All/ # PKG_PATH をエクスポートする # pkg_add パッケージ pkgin-23.8.1nb3: /usr/pkg/share/examples/pkgin/repositories.conf.example を /usr/pkg/etc/pkgin/repositories.conf にコピーしています # pkgin 検索 bash リモート サマリー (https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0/All) を処理しています... pkg_summary.gz 100% 6210KB 1.0MB/秒 00:06 bash-5.2.26nb1 GNU Bourne Again シェル bash-2.05.2.13 GNU Bourne Again Shell(バージョン2) bash-completion-2.11 bash のプログラム可能な補完仕様 bash-doc-2.05.2nb1 GNU Bourne Again Shell のドキュメント bash-preexec-0.5.0 zsh風のPreexecおよびprecmdフック関数 bats-0.4.0 Bash のテストフレームワーク dash-0.5.12 Debian Almquist シェル、bash よりも高速な POSIX 準拠シェル fff-2.2 bashで書かれたシンプルなファイルマネージャー git-sh-1.3 git作業に適したカスタマイズされたbash環境 memo-0.6nb1 bashで書かれたシンプルなメモツール py310-argcomplete-3.2.3 Bash および他のシェルの argparse のタブ補完 py310-bracex-2.4 Bashスタイルのブレースエクスパンダー py311-argcomplete-3.2.3 Bash およびその他のシェルの argparse のタブ補完 py311-bracex-2.4 Bashスタイルのブレースエクスパンダー py312-argcomplete-3.2.3 Bash および他のシェルの argparse のタブ補完 py312-bracex-2.4 Bashスタイルのブレースエクスパンダー py38-argcomplete-3.2.3 Bash および他のシェルの argparse のタブ補完 py38-bracex-2.4 Bashスタイルのブレースエクスパンダー py39-argcomplete-3.2.3 Bash および他のシェルの argparse のタブ補完 py39-bracex-2.4 Bashスタイルのブレースエクスパンダー shfmt-3.7.0nb8 bash をサポートするシェルフォーマッタ tree-sitter-bash-0.20.5 tree-sitterのBash文法 xonsh-0.10.1nb4 Python風、BASH風のシェル言語とコマンドプロンプト =: パッケージがインストールされ、最新です <: パッケージはインストールされていますが、新しいバージョンが利用可能です >: インストールされたパッケージのバージョンは利用可能なパッケージのバージョンよりも大きいです # pkgin インストール bash 依存関係を計算しています...完了。 インストールするパッケージ 1 つ: bash-5.2.26nb1 削除するには 0、更新するには 0、アップグレードするには 0、インストールするには 1 ダウンロードには1662KB必要で、9.9MBの追加ディスク容量が必要になります。 続行しますか? [Y/n] y [1/1] bash-5.2.26nb1.tgz 100% 1662KB 1.6MB/秒 00:00 [1/1] bash-5.2.26nb1 をインストールしています... bash-5.2.26nb1: /etc/shells に /usr/pkg/bin/bash を追加する pkg_install 警告: 0、エラー: 0 ローカル概要を読んでいます... ローカルサマリーを処理中... # # bash -o vi bash-5.2#
OK、パッケージは動作します。どうやら、pkg_add は抽出などを行う低レベルのコマンドのようです。pkgin は apt/yum/pkg に相当するものだと思います。
この PKG_PATH コマンドは NetBSD パッケージマネージャーのウェブサイトから取得しました。つまり、pkgin をインストールするには、このコマンドを実行してから pkgin をインストールする必要があります。しかし、ここで問題があります。pkgin をインストールしたら、この変数を設定する必要はありません。では、OS をインストールするときに pkgin をインストールすればいいのではないでしょうか。pkgsrc.org の例では pkgin が使われているので、よくわかりません。
最後の一滴
# パッケージインストール mariadb-server-10.11.6 (様々なメッセージ) [13/13] mariadb-server-10.11.6 をインストールしています... mariadb-server-10.11.6: グループ「mariadb」を作成しています mariadb-server-10.11.6: ユーザー「mariadb」を作成しています =========================================================================== mariadb-server-10.11.6 用に次のファイルを作成する必要があります。 /etc/rc.d/mariadb (m=0755) [/usr/pkg/share/examples/rc.d/mariadb] =========================================================================== pkg_install 警告: 1、エラー: 0 pkg_installのエラーログは/var/db/pkgin/pkg_install-err.logにあります。 ローカル概要を読んでいます... ローカルサマリーを処理中...
なんて魅力的でしょう。1 番目の警告が何だったのか教えてくれず、代わりに自分で探しに行かなければならないのですか?
そして私が見てみると:
useradd: 警告: ホームディレクトリ `/var/db/mariadb' が存在せず、-m が指定されていません
皆さん、これは実際には警告ではありません。
しかし、私が本当にイライラするのは次のことです。
mariadb-server-10.11.6 用に次のファイルを作成する必要があります。 /etc/rc.d/mariadb (m=0755) [/usr/pkg/share/examples/rc.d/mariadb]
つまり、起動時に実際に mariadb を実行するには、次の操作を行う必要があります。
- このサンプルファイルを/etc/rc.dにコピーし、権限が正しいことを確認してください。
- rc.confを変更する
うーん。
パッケージからソフトウェアをインストールする場合、セットアップスクリプトなどの基本的な設定は当然のことのように思えます。/etc/rc.d に手動でコピーして rc.conf をいじるよりも、もっとスマートな方法があるはずです。
bash-5.2# cp /usr/pkg/share/examples/rc.d/mariadb /etc/rc.d bash-5.2# vi /etc/rc.conf bash-5.2# !v /etc/rc.conf を vi で開きます bash-5.2# サービス mariadb を開始 MariaDB データベース システム テーブルを初期化しています。 '/var/db/mariadb' に MariaDB/MySQL システム テーブルをインストールしています... わかりました ブート時にmariadbdを起動するには、以下をコピーする必要があります。 support-files/mariadb.service をシステムに適した場所にコピーします 全権限アカウントが 2 つ作成されました。 1つはroot@localhostで、パスワードはありませんが、 接続するにはシステムの「root」ユーザーである必要があります。例えば、sudo mysql を使用します。 2番目はmariadb@localhostで、パスワードはありませんが、 接続するにはシステムの「mariadb」ユーザーである必要があります。 接続後、必要に応じてパスワードを設定できます。 パスワードとsudoなしでこれらのユーザーのいずれかとして接続できる MariaDB ナレッジベースについては、https://mariadb.com/kb をご覧ください。 MariaDB デーモンは次のコマンドで起動できます。 cd '/usr/pkg' ; /usr/pkg/bin/mariadb-safe --datadir='/var/db/mariadb' mysql-test-run.pl で MariaDB デーモンをテストできます。 cd '/usr/pkg/' ; perl mariadb-test-run.pl 問題が発生した場合は、https://mariadb.org/jira までご報告ください。 MariaDB の最新情報は https://mariadb.org/ で入手できます。 MariaDB の強力で活気のあるコミュニティに参加することを検討してください。参加するmariadb を起動しています。 bash-5.2# 240527 20:27:28 mysqld_safe '/var/log/mariadb/error.log' にログを記録しています。 240527 20:27:29 mysqld_safe /var/db/mariadb のデータベースを使用して mariadbd デーモンを起動しています
それを読んで、mariadb.service でさらに多くのことを行う必要があり、それを起動するには、/usr/pkg に変更してそこでコマンドを実行する必要があるという結論に達しました。
それは本当にそういう意味ではないですよね?
つまり、MariaDB は実行されています...
そこで、これを /etc/rc.conf に追加しました:
マリアdb=はいそして再起動しました。
MariaDBは動作していませんでした。Nginxは動作します(rc.confでnginx=YESと設定しています)が、MariaDBは動作しません。mysql=YESとすべきでしょうか?「service mariadb start」のサービス名は「mariadb」なので、これは意味がありません。
NetBSD は、あらゆる面で戦いの連続です。
非常に人気のあるパッケージをインストールして、起動時に起動するように設定するのが、こんなに難しいとは思いません。伝統や慣習、あるいは敬意といった理由で、たくさんの設定ファイルをいじくり回す必要があるなら、それはそれで構いませんが、その場合はきちんとしたドキュメント化がなされているべきです。
私は NetBSD に飽きてしまい、自分には向いていないと判断しました。