OpenBSD in USB memory

OpenBSD in USB memory

前回2回に渡り、FreeBSDをUSBメモリーに焼き、それを10年前のパソコンThinkpad SL510に挿して、楽しんだ。

今度は、同じ事をOpenBSDでやってみよう。但し今回はUSBに焼き込む時にVirtualBoxを使ってみる(前回はVMwareを使用)。焼くと言うと語弊が有るんで、言い直すと、USBにインストールだ。

暫くIOSなメディアを使わなかったんで、インストール方法を忘れているな。ってな事で、 {OpenBSD} USBメモリーを使ってLet’s note CF-S8にインストールする。 を参照した。この方は、ISOなメディアじゃなくて、イメージをddでUSBにコピーして、それをISO代わりに使い、直接実機のHDDに焼いている。まあ、インストーラーが起動してしまえば、出てくる案内は一緒だよ。

USBを挿すとWindows10が余計なお節介をしてくるけど、そこはキャンセル。仮想マシンの設定で、USB3.1を選んでおく。それからインストールを始める。

OpenBSDインストーラーのメニューが出た所で、vboxのメニューから挿してあるUSBを選ぶ。認識したよと案内が出て、画面が乱れるけど、かまわずinstallを選べばおk。後は指示に従う。

今回はインストール先がUSBなので、そこだけ注意。どのDISKにインストールするかって案内が 出てくる、デフォはvboxの仮想HDDであるwd0が選ばれている。それは違うんで、? を入力して、認識されてるHDDのリストを出す。USBはsd0と認識されてるんで、そちらをターゲットにする事。

無事にインストールが完了したらHaltさせてから、vboxの電源を切ればよい。

続いて、そのUSBを有線LAN接続されてるThinkPadに挿して起動。初回は fw_update が自動実行されて、無線LAN関係やらのファームウェアがDLされる。

初回の儀式であるsyspatchを行って、OSを最新にしておこう。

obusb$ uname -a
OpenBSD obusb.localhost.jp 6.9 GENERIC#2 i386

次は無線関係設定。

obusb$ cat /etc/hostname.iwn0
dhcp nwid BSD-house  wpakey (Free|Open)BSD
# inet6 autoconf

のような設定ファイルを用意。コメントを外すとIPv6対応になるはずなんだけど、残念ながら亀ダンスは見られなかった。

obusb$ ifconfig iwn0
iwn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:24:d6:be:fe:ed
        index 1 priority 4 llprio 3
        groups: wlan egress
        media: IEEE802.11 autoselect (HT-MCS7 mode 11n)
        status: active
        ieee80211: nwid BSD-house chan 36 bssid bb:12:38:a9:22:94 -65dBm wpakey wpaprotos wpa2 wpaakms psk wpaciphers ccmp wpagroupcipher ccmp
        inet aa.bb.cc.7 netmask 0xffffff00 broadcast aa.bb.cc.255

こんな具合に無線LANが認識された。やけに設定が簡単だけど、どんな秘密が有るの? /sbin/ifconfig内の一節。

/* Parse a WPA passphrase */
if (passlen < 8 || passlen > 63)
        errx(1, "wpakey: passphrase must be between "
            "8 and 63 characters");
if (nwid.i_len == 0)
        errx(1, "wpakey: nwid not set");
if (pkcs5_pbkdf2(val, passlen, nwid.i_nwid, nwid.i_len,
    psk.i_psk, sizeof(psk.i_psk), 4096) != 0)
        errx(1, "wpakey: passphrase hashing failed");

肝は pkcs5_pbkdf2 だな。調べてみたら、誰でも使えるように公開されたものだった。

SYNOPSIS
     #include <util.h>

     int
     pkcs5_pbkdf2(const char *pass, size_t pass_len, const char *salt,
         size_t salt_len, u_int8_t *key, size_t key_len, u_int rounds);

DESCRIPTION
     The pkcs5_pbkdf2 function converts a password into a byte array suitable
     for use as an encryption key.  The password and salt values are combined
     and repeatedly hashed rounds times.  The salt value should be randomly
     generated beforehand.  The repeated hashing is designed to thwart
     discovery of the key via password guessing attacks.  The higher the
     number of rounds, the slower each attempt will be.  A minimum value of at
     least 1000 is recommended.

とんだ道草だったな。直ぐに調べておかないと忘れてしまうのでね。

obusb$ df -k
Filesystem  1K-blocks      Used     Avail Capacity  Mounted on
/dev/sd1a     7099118    992926   5751238    15%    /

インストール直後のHDD内容。軽いOSだ。

install app

次は、生活に必要な、icewm,firefox,emacs,w3m,mltermあたりを入れてあげた。やっぱり相手がUSBだと時間がかかるね。アプリの構成はFreeBSDのそれと同じなんで、設定ファイルも悩まずにほぼ同一で良い。

ああ、Xが起動してて、ターミナル上でコマンド間違いすると、ブブーって五月蝿いのよ、女房に叱られた。そこで、.xinitrcに

xset b off

を追加したよ。

obusb$ df -k
Filesystem  1K-blocks      Used     Avail Capacity  Mounted on
/dev/sd1a     7099118   2220596   4523568    33%    /
mfs:15326     1014455    393661    570072    41%    /tmp

現状こんなもの。/tmpは例によってメモリーファイルシステム。ここに巨大なファイルをDLするテストをしてみた。やっぱりFreeBSDに比べて半分ぐらいのパフォーマンスのように思えるぞ。

obusb$ cat /etc/fstab
0c94074022d68643.a / ffs rw,wxallowed 1 1
swap /tmp mfs rw,nodev,nosuid,-s=1024m 0 0

こちらの方は、 3度目のOpenBSD って事で、色々な視点が楽しいなあ。

wscons

ほとんどの生活をX上でしてるんだけど、X無しの端末は何もしなくても文字が綺麗(FreeBSDは汚かった)。ちょっとした事なら、ここでやっても良い。けど、またブッブー問題で、女房に嫌われた。manをざっと見するも、音無しにする方法をにわかに発見出来なかった。聞いてみたよ。 How to disable pc speaker in openBSD?

obusb$ cat /etc/wsconsctl.conf
keyboard.map+="keysym Caps_Lock = Control_L"
keyboard.bell.pitch=600
keyboard.bell.volume=0
display.screen_off=300000    # 300sec

manを精査したら、/etc/example/wsconsctl.confを見て桶って出てた。そこに例が載ってたよ。灯台もと暗しだな。

mount linux

FreeBSDの時は、裏に潜むdebianなファイルシステムをマウントして使えた。OpenBSDもサポートしてるのかな? FAQと言うHandobookまがいの項を見ると、下記のようにして確認出来るよとの事。

ob$ man -k -s 8 mount
amd(8) - automatically mount file systems
amq(8) - automounter query tool
mount(8) - mount file systems
mount_cd9660(8) - mount an ISO 9660 filesystem
mount_ext2fs(8) - mount an ext2fs file system
mount_ffs(8) - mount a Berkeley Fast File System
mount_msdos(8) - mount an MS-DOS file system
mount_nfs(8) - mount NFS file systems
mount_ntfs(8) - mount an NTFS file system
mount_tmpfs(8) - mount an efficient memory file system
mount_udf(8) - mount a UDF filesystem
mount_vnd(8) - mount vnode disks
mountd(8) - service remote NFS mount requests
newfs, mount_mfs(8) - construct a new file system
showmount(8) - show remote NFS mounts on host
umount(8) - unmount file systems

それに倣ってやってみたけど、つれないエラーになる。何で?

Cannot see ext4 partitions

こんなのに出くわした。最近のリナはext4fsとの事。OpenBSDに意地悪してるんです。ex2fsを大幅に強化してるんです。そうデータベースみたいに、ファイルシステムに矛盾を生じないように、ジャーナリングしてるらしいんです。

obusb# disklabel sd0
# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: HITACHI HTS54502
 :
16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:        488397168                0  unused
  i:        480342016             2048  ext2fs
  j:          8050688        480346112 unknown

こんな風にパーテションが検出された。

obusb# fdisk sd0
Disk: sd0       geometry: 30401/255/63 [488397168 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: 83      0  32  33 -  29900   8  60 [        2048:   480342016 ] Linux files*
 1: 05  29900  41  28 -  30401  75  10 [   480346110:     8050690 ] Extended DOS
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Disk: sd0       geometry: 30401/255/63 [488397168 Sectors]
Offset: 480346110       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 82  29900  41  30 -  30401  75  10 [   480346112:     8050688 ] Linux swap
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused

こちらは、昔からあるコマンド。

obusb# mount -r -t ext2fs /dev/sd0i /mnt
mount_ext2fs: /dev/sd0i on /mnt: specified device does not match mounted device

ext4fsは読み込みだけは出来るらしいけど、オイラーの所では絶望的だった。デストリによって微妙に違うのかな?

xfce with scim-anthy

OpenBSD 6.5 のインストール なんてのを見ていると、Desktop環境としてOpenBSDを使っている勇者の方が居る。xfceって色々なアプリのごたまぜだよな。一体どんな物が入るの? そしてそんなのをオイラーは使うの?甚だ疑問。

ports/meta/xfceへ行ってみたら、メタパッケージになってた。色々なパッケージの集合体。 一体どれだけHDDを消費するやら。

これより軽そうなやつって事でlxdeが有るかと思ったら、既にディスコンみたい。代わりにQtを使って同様な事を実現してた(lxqt)。こちらは、走り出し初めたみたいで、26個の集合になってた。でも、GUIの根底がQtになるんで、gtkとの二重投資になる。諦めろ。

でも日本語入力を何とかしたい。scim-anthy mixfont-mplus-ipa-20060520p7 mplus-fonts-063aを入れてみた。けど、icewmとは相性が悪くて使い物にならず。残念。

一体、日本語入力の仕組みってどうなってるの?ぐぐったら、 日 本語入力 環境なんてのが出てきた。大変なのね。

pkg_add xfce xfce-extras consolekit2

件の勇者の方は、こんな風にxfceを入れてた。オイラーは日本語関係がxfceで解決出来るか確認の為、xfceだけ(必需品のみ)を入れてみたよ。そして、.xinitrcは

 export LANG=ja_JP.UTF-8
 export XMODIFIERS="@im=SCIM"
 export GTK_IM_MODULE=xim
 export QT_IM_MODULE=xim
setxkbmap -option ctrl:swapcaps
xset b off
#icewm

scim -d
startxfce4

こんな風にして起動。

mousepadとか言うeditorは日本語入力出来るけど、firefoxは駄目だなあ。固まってしまうぞ。結局、OpenBSDでは、日本語入力諦めろって事だな。

悔し紛れに、sysのソースとgambitを入れて、emacsから使えるようにした。最近のgeiserは、それぞれのscheme用に分割されたのね。進化とみなして良いのだろうか?

obusb$ df -k
Filesystem  1K-blocks      Used     Avail Capacity  Mounted on
/dev/sd1a     7099118   3288152   3456012    49%    /
mfs:19197     1014455         9    963724     0%    /tmp

まだまだ入るなあ。何を入れようか。残念な事にi386版にはchromiumが提供されていないのよね。この石はもうそれそろお蔵入りなのかな。

fcitx-anthy

portsの一覧を見ていたら、scimに変わる入力メソッドを見つけた。変換エンジンも日本語対応のanthyがサポートされてる。これはもう、駄目元で入れてみる鹿。

pkg_add fcitx-anthy fcitx-gtk3

結構色々な物が釣られて入ってきた。何故かbashも来たよ。

obusb$ cat .xinitrc
 export LANG=ja_JP.UTF-8
 export XMODIFIERS="@im=fcitx"
 export GTK_IM_MODULE=fcitx
 export QT_IM_MODULE=fcitx

setxkbmap -option ctrl:swapcaps
xset b off
#icewm

fcitx-autostart
startxfce4

こんな設定でfirefoxへの日本語入力がでけた。でも設定メニューからfcitxを選んでも反応無いなあ。まあ、/home/sakae/.config/fcitx/config に、いやになる程親切な設定方法が書かれているから、良しとしよう。

変換のon/offがCtl+SPACEってのは慣れないと大変。日本語キーボードだといかにもって言う、全角半角キーが有るんだけどね。こだわりの英語キーボードには、そんな無様な奴は無いからなあ。

NAME
       fcitx - Free Chinese Input Toy of X - a Chinese IME for XIM

SYNOPSIS
       fcitx [OPTION]

DESCRIPTION
       This manual page documents briefly the fcitx command.

       fcitx is a Chinese IME for XIM intentionally designed not to depend on
       any Desktop Environment. It includes Pinyin and Table for input by
       default, but it can also support other Input Method.

へぇー、知らなかったぞ。中華の為のIMEだって。まあ、同じ漢字を使う国だから、感じは分かるよね。いや、本国の読めそうで読めない漢字より、古式ゆかしい漢字の方が、オイラーには感じがいいぞ。

dic in emacs

上で入れたanthyを精査すると、この変換エンジンをemacsから使えるようにするパッケージも提供されてた。一瞬、入れようかと迷ったよ。でも、ここで不思議発見である。

一切日本語変換関係を入れていないOS(のemacs)でも、Ctl-\ すると、日本語が入力出来る。これって、emacsに日本語変換と辞書が組み込まれているからだ(な)。

昔、ielmなんてのがあったなと思ったら、違った。これはemacsのelisp実験場だったよ。 んな事で、似てる単語で探してみたら、

ob$ pwd
/usr/local/share/emacs/27.2/lisp/leim/ja-dic

どうも、ぴったりなやつに出くわした。SKKの辞書らしい。これが使われているの? 一番簡単な確認方法は、この辞書を一時的に使えないようにして(renameとかね)、日本語変換出来るか確認する事だ。

でも、ちと面倒そう。辞書を開いて、つらつら見ていくと、

"けんいち 乾一 剣一 堅一 建一 研一 謙一 憲一 賢一 健一"

こんな、よみと漢字のセットがあった。変換してこの候補が出てくるか確認。見事に一致。 もっとしつこく確認。よく有りそうな名前。

"こういち 高1 高1 講一 興市 耿一 晃市 康市 鉱一 航一 巧一 幸市 好一 高一 剛一 \
孝市 興一 康一 功一 弘一 晃一 宏一 孝一 耕一 幸一 光一 公一 浩一"

確かにこの通りに、候補が出てきた。これで、6シグマの確率で、この辞書が使われていると確定していいかな? > CERNの物理学者御一同様。

;; この辞書は、SKK 原作者の佐藤雅彦先生が、第 1 版作成のために東北大学
;; 電気通信研究所佐藤研究室 (当時) の学生さん達とともに scratch から作
;; 成されたのをその起源とし、その後、無数のユーザからのユーザ辞書の提
;; 供やフォームによる追加・校閲によって今尚日々メンテナンスされている日
;; 本で最大規模の、GPL による copy free の辞書です。
;;
;; この辞書の作成にご尽力頂いた全ての方に感謝すると共に、これをお読み
;; のあなたのご協力を是非ともお待ちしております。
;;
;;   http://openlab.ring.gr.jp/skk/registdic.cgi
;;
;; にアクセスし、フォームに是非あなたの新語・誤登録指摘・コメントを書
;; いて下さい。

世の中では、ぐぐる発のmozcがもてはやされているけど、それに負けるな。どんどん新語を登録しろ。ギャル語とか方言とか。そういう趣味っぽいのは、個人辞書だな。

この日本語変換スタートのキーバインドは何処に有る? 結果をさっと表示するんじゃ、応用が聞かないので、調べ方を提示しておく(偉そうだな)。

Ctl-h k Ctl-\ のようにする。

C-\ runs the command toggle-input-method (found in global-map), which
is an interactive compiled Lisp function in `mule-cmds.el'.

It is bound to C-\, <menu-bar> <options> <mule> <toggle-input-method>.

(toggle-input-method &optional ARG INTERACTIVE)

  Probably introduced at or before Emacs version 20.1.

Enable or disable multilingual text input method for the current buffer.
Only one input method can be enabled at any time in a given buffer.
 :
(define-key global-map (kbd "C-o")  'toggle-input-method)
(setq quail-japanese-use-double-n t)

日本語切り替えを、使いやすいキーに変更してみた。ついでにnnで "ん" に変換するように設定してみた。

余り使う事は無いと思うけど、/usr/local/share/emacs/27.2/lisp/leim/quail/japanese.elに、変換時に使えるコマンドが解説されてる。

ひとつだけ便利に使えそうな変換があった。ひらがらをカタカナにする方法。あの人の口癖、ヤバいよヤバいよ を入力してみる。

日本語モードにしとく(statusラインが Aあ の状態で)。

yabaKiyoRETyabaKiyo

yabaまで入力すると、やばとなる。そこで大文字のKを入力。すると入力された文字列が ヤバ とカタカナに変換される。後は続けて入力しれば、ひらがなになる。Kでカタカナにしたけど、やっぱりひらがなでいいやなら、Kを入力すればよい(RETで確定しないうちはトグル出来るって事)。

きしゃのきしゃはきしゃできしゃした って、一気に入力しといて、文節を変更しながら漢字に変換するって事をしないオイラーは、えせSKK風な入力が楽だ。

きしゃSPC..のRETきしゃSPC..RET .....
貴社の記者は汽車で帰社した

細かいキーシーケンスは、変換中にCtl-h で参照出来るよ。

obusb$ zcat ja-dic.el.gz | egrep '^"' | wc
   79941  212486 2253764

この辞書に登録されてる見出しの数を数えてみた。結構有るね。使ってあげてください。

そして、 Q.4 Input Methods のあたりが、国際派を謳うemacsの変換についての解説。そして、現在と言うか去年までのemacsの系譜になります。 2020年代のEmacs入門

final4unix.txt(cjkvinput-table-wubi.txt):
        这是合并从海峰五笔整理得来的hfwb4unix.txt以及从黄宇等整理出来
        的五笔码表之补充部分所成的完整无重复版本。这是目前自由大词库
        项目正始对外公布的第一个版本,也将是自由软件项目 -- 自由输入
        平台上的五笔输入法首选五笔码表。

これ、fcitxに有った説明書の一部。難なくemacs君は表示してくれたよ。さすがmuleからの多大な資産を受け継いでいるな。オイラーには意味不だけど。

OpenBSDに入ってるやつは、4.2だけど今はFcitx 5 になってる。しかもリナばかりだ。 中華もリナにシフトしてんだね。


This year's Index

Home