生OpenBSD

Table of Contents

raw OpenBSD

前回の計画に則り母艦のThinkPadにインストールしてみた。 最終的には、これにFuguItaを被せて使う予定。

ob$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd0a      989M    327M    613M    35%    /
/dev/sd0f      9.7G   22.0M    9.2G     1%    /home
/dev/sd0d     23.2G    2.8G   19.3G    13%    /usr
/dev/sd0e     38.7G    1.5G   35.3G     5%    /usr/local
/dev/sd0g      153G   61.6M    146G     1%    /var
mfs:3694       743M    7.0K    706M     1%    /tmp

悩んだ所

これが終の住処なんで、もう同じ事をしないだろうけど、メモとして残してお く。

Diskの区割りはどうするか? OpenBSDチームの経験値が反映されたレイアウト が提示されたけど、そこにはX用の区割りもあった。Xは重視しないんでそれは 却下。/usr/localは広めにした。/usrはもっと狭くてもいいかなと思ったけど、 突然に気が変ってbuild worldしたくなるかもと思い、/usr/objの為にお勧め サイズにしてる。

/homeが以外に狭いのは、眼につく所に色々な物をちりばめない対策。その代 わりに /var を広大にして、こちらをトランクルームに割り当てろ事にした。 俗名で、ごみすて場。

イメージをUSBに焼いた場合、cdじゃなくてhttpでもなくてdiskを指定するのね。そして、そ れはまだマウントされてないって指定すると、インストール元のsd1が選ばれ る。

/tmpは例によってtmpfsなんだけど、欲張って、1024m なんて指定しちゃうと、 イリーガルと言われて、/tmpがマウントされなかった(お勧めレイアウトでは、 独立してhddの領域を4G程指定されてた)。大量に必要になる場合が有ったら、 その時は別な手段を考えよう。

計画漏れ

一大目標だった、一度も有線に接続しないでもWiFi可能にするってのは、 FuguIataのおかげで無事に達成できた。

ただ、/etc/{wsconsctl.conf,sysctl.conf}の両者は、cpすべきリストから抜 け落ちていた。念入りに計画した積りでも、やはり穴が有るものだな。

計画漏れとは関係ないけど、今気づいたので、ちょっとOpenBSDを礼賛しとく。 OpenBSDのパッケージ・システムは見える化が実現されてて素晴しい。これが FreeBSDとかリナになると、パッケージの管理をデータベース(aqlite3とか)に 任せてしまっているので、簡易にはいかない。テキスト文化の申し子をきちん と守っているのがオイラー的には好感。(see /var/db/pkg)

memory usage

お勧めでは、swapに3Gを提案してきてた。swapのサイズって、搭載メモリー容量 の関数だったはず(係数は1だ、いや2だって議論はあったけど)。係数が1だと すると、OSはメモリー容量を3Gと認識してる事になる。

dmesgの冒頭が、こうなってた。4Gのメモリーを搭載してるマシンなのにね。

real mem  = 3047378944 (2906MB)
avail mem = 2974646272 (2836MB)

今迄気がつかなかったぞ。ローダーは、ちゃんと4Gのメモリーを検出している ので、カーネルの手抜きなんだろうか? 何かもったいない気がする。

FuguItaと結合方法

丁寧に結合方法が解説されてた。所詮、考える事は皆同じだな。

マウントするパーティションを追加する

その為の切り口まで用意されてて便利そう。母艦の装備がきちんど完了したら、 やってみよう。

母艦の装備って、ひたすら pkg_add するだけだけどね。あれこれ入れていっ ても、飽和する事はない(入れ過ぎ注意報を発令しとこう)。

常時接続しとかなければならないのは、/usr/localだけでいいかな。 あとの母艦側は、必要な時だけ、/mntに接続すればいいか。

オイラーが不定期に参照するのは、/usr/{src,ports} だ。メジャーバージョ ンのtar玉をあらかじめ展開してあるからね。展開した後、目障りなCVSを

find . -type d -name CVS -exec rm -rf {} +

して、消しておくのは、お約束事項だったりします。

現在進行形や過去形なやつは、CVS Repository で見れば事足りるね。

/etc/ssh/key

母艦の準備にまだ追われている。一度USBを差して出向してしまうと、もう母 港には帰れないからね。って、出港違いじゃん。サラリーマンの哀愁がただよ う誤変換だな。いやSKKは、基本的に、そんな誤変換はありえないんです。全 ては、操縦者の責任です。

で、母艦のみの整備って事で、 PuTTYからsshしたら、hostの鍵が違うケンどうするって警告が出てきた。 そりゃそうだ、DHCPは、同一MACに対しては、同一IPを割り振ってくるからね。

Debian/FreeBSDのディアルブートで使ってた時の同様問題があった。で、鍵を 同一にしてしまってた。

今回はどうする? 河豚板のそれをマスターキーにしたいんだけど、河豚板の 鍵の扱いが不明。作者さんが、すぐ近くにおられるので、聞いてみた。

> 1.生成は何時?

SSHのホスト鍵 /etc/ssh/*.keyk , /etc/ssh/*key.pub ですが、

起動モード0, 1, 2 → 起動時に毎回新たに生成されます("fresh boot"なので)。
起動モード3       → usbfadm sync でUSBに保存されていた鍵が読み出され、使用されます。
起動モード4       → fdadmでFDに保存されていた鍵が読み出され、使用されます。

> 2.マイナーバージョンアップで、ひきつがれるか?

fiupdateユティリティでマイナーバージョンアップをすると引き継がれます。

(fiupdateは、カーネルと/fuguita以下のシステムファイルツリーを書き換え
 るだけなので、/home/*, /etc/*, /var/* などは保護されます)


> 3.メジャーバイジョンアップ時もひきつがれるか?
> 同一USBを使った場合を想定しての質問です。

同じUSBメモリに新しい河豚板を書きこんでしまうと、古いバージョンで使っていた、
保存されていた鍵 /mnt/livecd-config/7.3/amd64/hoge/etc/ssh/*key* は勿論
消えちゃいますので、一旦他のメディアに保存して新しいバージョンの /etc/ssh に
コピーするなどして引き継ぐのが確実かと思います。

との事。さあ、将来を見据えてジックリ考えておこう。まて、そんなもん、考 える事もなかろう。ルーチン・ワークにしちゃうのが得策。

マスターキーは母艦の物とする。河豚板が変更されたら、母艦のキーをUSBに 転送。すかさず、usbfadm syncする。それから、rcctl restart sshdを実行。 そうしておいて、sshすれば良いはずだな。

mlterm

昔FreeBSDで使っていたんだけど、教えていただくまで蒸発してた。多言語対 応のX端末。

mlterm/doc/ja/README.ja

ob$ cat .mlterm/main
fontsize = 16
use_variable_column_width = false
use_anti_alias = true
not_use_unicode_font = true
use_scrollbar = false
bg_color = black
fg_color = #f6f3e8
letter_space = 1
line_space = 3
col_size_of_width_a = 2
mod_meta_key = alt
mod_meta_mode = esc
bel_mode = none

この設定でemacs(ddskk)も不自由なく使えるようになった。五月蝿い音もしな いしね。

ガッツリしたフォントを使うなら、ktermもお勧め。但し、ja-nkfを利用して、 昔懐かしい、EUC-jpな世界に戻ってからね。

.fvwmrc

河豚板の日本語導入ツールでは、icewm推しだった。オイラーも昔はよく利用 させてもたってた。結構カスタマイズ性があって、良い物なんだけど、貴重な メモリーエリア重視って事で、既存な物を流用。でも、少しはカスタマイズ。

ob$ locate fvwmrc
/usr/X11R6/lib/X11/fvwm/.fvwmrc

雛形を持ってきて、単に、mltermとkterm起動のメニューを付け足し。仮想画 面は、9面から4面に変更。若者でも短期記憶は7つぐらいと言われているし、 年寄なら、4つぐらいが、身の丈に合っているだろう。

ob$ diff -u /usr/X11R6/lib/X11/fvwm/.fvwmrc .fvwmrc
--- /usr/X11R6/lib/X11/fvwm/.fvwmrc     Mon Oct  9 02:04:05 2023
+++ .fvwmrc     Fri Feb  2 15:40:19 2024
@@ -19,7 +19,7 @@
 HilightColor #bebebe blue
 MenuStyle #4d4d4d #bebebe #e7e7e7 -adobe-times-bold-r-*-*-12-*-*-*-*-*-*-* fvwm

-DeskTopSize 3x3
+DeskTopSize 2x2

 ColormapFocus FollowsMouse

@@ -95,7 +95,8 @@
 ######################## Menus ###################
 AddToMenu RootMenu     "Root Menu"     Title
 +                      "XTerm%mini.xterm.xpm%"         Exec exec xterm
-#+                     "Rxvt"          Exec exec rxvt
++                      "MLTerm"        Exec exec mlterm
++                      "Kterm"         Exec exec kterm -r -fk 8x16 -fn 8x16
 +                      ""              Nop
 #+                     "Remote Logins" Popup Remote-Logins
 #+                     ""              Nop

wsconsctl

オイラーのPCの画面輝度は、

wsconsctl display.brightness=70

これぐらいで丁度良かった。どのハードを叩いているの? ちょっと調べてみ る。探索場所は勿論カーネル内ね。最初は軽く検索して全体像を把握する。

ob$ grep brightness -r -l .
./dev/acpi/acpithinkpad.c
  :
./dev/pci/drm/i915/i915_params.h
./dev/pci/drm/i915/display/intel_backlight.c
./dev/pci/drm/i915/display/intel_bios.c
  :
./dev/wscons/wsdisplay.c
./dev/wscons/wsdisplayvar.h

wsdisplay.cあたりが総括者で、個別なハードはインテル入っていますの i915/ だろう。後、気になるのはthinkpad.cってモロな名前が付いているファ イルぐらいかな。

/* set backlight brightness to level in range [0..max], assuming hw min is
 * respected.
 */
void intel_backlight_set_acpi(const struct drm_connector_state *conn_state,
                              u32 user_level, u32 user_max)

intel_backlight.c に有ったコード。もうハード叩きの現場。ここまで来ると 仕様書が欲しい。そんな贅沢言わないで、ヘッダーファイルでも見てOK.

sag

SAG - System Activity Grapher

FuguItaの作者さんが200年11月に公開された息の長いソフト。その頃からの OpenBSDユーザーさんて、筋金入りのハッカーですね。

これを走らせて おけば、マシンの稼動状況が手に取る様に分かる、プロバイダー御用達の監視 ツールだ。異常を検出したらメールを飛ばすなんて事もできそう。

インストーラーが付属してるけど、手動でやってみるのが良い。

System Activity Grapher - インストール手順(手動)

実は現職の時、同様のシステムを作成した事が有る。IoTなんてバズワードが 流行するよりずっと昔の頃だ。

こちらのシステムにはperlが使用されてるけど、オイラーが使ったのは、確か ruby 1.4ぐらいだったかな。WEBサーバーは元祖CERNの奴だったか、ncsaの奴 だったか、apatchだったかは遠い昔の事なんで忘れてしまったわい。

cronなんて懐かしいな。このあたりから、どんな事をやってるか見ていくか。 データの収集系はcron(時の神)でしょう。グラフのpng作成もcron任せにしてる? たいしたデータ量ではなさそうななので、オンデマンドかな? そうなるとcgi が必要でやっかいな事が増えそう。

ずっとデータを蓄積する様だけど、過去の記録はWEBから参照できるのかな? 1年前に比べて、DISKにどれだけ垢が溜ったか確認したい、なんてのは、よく ある需要と思う。

血圧グラフ(nbld.go)

これ自分用に作った血圧データをグラフ化するアプリ。PDF出力なんで、コン ビニで印刷して医者へgoする。データはCSVで保存してるんでRを使うなり pythonするなりhaskellで解析するなり自在だ。実録データの分析って面白い。 このアプリ自身で、任意の年月日からのグラフ化が可能になってる。

ああ、golangも入れておこう。

ob$ doas pkg_add go
doas (sakae@ob.my.domain) password:
quirks-6.160 signed on 2024-01-30T14:02:46Z
go-1.21.1: ok

話が逸れた。で、このsagを実行してみたいんだけど、オイラーのパソコンの 使い方では、意味が無いなあ。朝に2時間、午後に2時間ぐらいの通電だものな。 パソコンを徹夜させるんじゃ、老人苛めになりそうなので、自重するよ。

ちょいと閲覧

って、ソースね。全部見ると疲れるので、一つだけ。 bin/t0001 この形のファイルは他にもあるけど、翻訳すると tHHMM この例だ と、毎分実行される、せわしないコマンドだ。中身は、

echo =la $(sysctl -n vm.loadavg)

な具合に、センサーを指定して、データをカーネルから引き出している。

ob$ sysctl -n vm.loadavg
0.61 0.52 0.44
ob$ sysctl  vm.loadavg
vm.loadavg=0.59 0.52 0.44

相変わらず、偽情報を返してくるな。困ったものだ。

httpd

その代わりに、httpdを起動して、各種ドキュメントを読めるようにしよう。

ob$ find /usr/local/share/ -type d -name html
/usr/local/share/doc/libcerf/html
/usr/local/share/doc/pcre2/html
/usr/local/share/doc/ffcall/html
/usr/local/share/doc/R/html
/usr/local/share/gtk-doc/html
/usr/local/share/maxima/5.46.0/xmaxima/html
/usr/local/share/maxima/5.46.0/doc/html

例えば、次のようにコンテンツを設置する。

ob$ doas cp -r /usr/local/share/maxima/5.46.0/doc/html /var/www/htdocs/maxima
ob$ cd /var/www/htdocs/maxima
ob$ doas ln -s maxima.html index.html

Windows側からアクススするんで、hostsにサーバーアドレスを登録する。 何と言ってもブラウザーの更新は激しいので、迅速に対応されてるWindowsを 利用するのが得策だ。

hostsファイルの設定方法(Windows)

を見てOpenBSDのIPAddressと名前(ob)を登録。 C:\windows\system32\drivers\etc\hosts なんて、さっと出てくる訳がないか らね。

これで、http://ob/maxima/ すれば、Windows側からスイスイ。とは行かなくて、 一呼吸待たされる。本物のサイトにアクセスしてるみたい。/etc/resolv.conf に設定されてる、lookup file bind のWindows版はどうやるの?

hostsファイルとDNSサーバとの優先順位

WindwosではhostsファイルがDNSサーバより優先

大事な事だからセカンド・オピニオンを取ってみたけど、同じことが報告され てる。想像を外した訳だけど、次は何を調べよう?

Windows側のfirefoxだけでこの現象が出る。ググルやエッジ、Debian/WSL2の w3mでは、全く問題なし。よって、これ以上の探索は中止する。

kernel tags

カーネルを読む時に必要なタグ・ファイルなんだけど、普通にやるとvi用の奴 が作成されちゃう。そんでarch/i386のMakefileを改造。

ob$ diff -u Makefile eMakefile
--- Makefile    Sun Jan 22 12:27:31 2017
+++ eMakefile   Fri Feb  2 07:56:55 2024
@@ -34,7 +34,7 @@
        eval "SFILES=\"`make -V SFILES -f $${TDIR}/Makefile`\"" && \
        eval "CFILES=\"`make -V CFILES -f $${TDIR}/Makefile`\"" && \
        eval "AFILES=\"`make -V AFILES -f $${TDIR}/Makefile`\"" && \
-       ctags -wd -f ${TAGS} $${CFILES} $${HFILES} && \
+       etags $${CFILES} $${HFILES} && \
        egrep "^[_A-Z]*ENTRY[_A-Z]*\(.*\)" $${SFILES} $${AFILES} | \
            sed "s;\\([^:]*\\):\\([^(]*\\)(\\([^, )]*\\)\\(.*\\);\\3    \\1 /^\\2(\\3\\4$$/;" \
            >> ${TAGS} && \

いざ実行。tagsを指定しておかないと、普通にコンパイルを始めちゃうんで注 意。

ob$ doas make -f eMakefile tags

それらしいサイズのファイルが出来たんで、後は使ってみるなり。

ob$ ls -l tags TAGS
-rw-r--r--  1 root  wsrc  280070825 Feb  2 07:59 TAGS
-rw-r--r--  1 root  wsrc  275965551 Feb  2 07:59 tags

kern/init_main.c の中でズラズラと初期化してるうちの cpu_startup() へ、飛んでけー。

/usr/src/sys/arch/i386/i386/machdep.c
336:cpu_startup(
/usr/src/sys/arch/i386/include/cpu.h
217:#define CPU_STARTUP(

ちゃんと拾い出してくれて、飛んでくれた。以上、試食は終了。

懸念事項は、河豚板の狭いram上で、emacsが不満を言い出さないかだ。これ ばかりは、やってみるまで何とも言えないな。

FreeBSD上の残骸

VMWare player上のFreeBSDに入れていたOpenBSDのソース一式は、もう不要に なった。バッサリと消してしまう? そこに悪魔のささやきが、、、

せめて、カーネルのースだけは、残しておけ。で、その訳は?

河豚板なら、無茶振りしても大丈夫。ddbに落ちてヘマしても、それは無かっ た事にできる。ddb上に居る時は、ソースの参照は出来ない。よそのパソコン を参照するしかない。 だから、残しておけと。

もう一度 man ddb して、ヒントを見付けておけ。


This year's Index

Home