Potable FreeBSD

とある友人から、相談を受けた。

Windows98が入っている、古いノーパソのFMVから、EXCELファイルをレスキューしたいとの事。 古いマシンなんで、付いているIOは、3.5インチのFDD、読み出しのみのCDドライブ、USB、ネットワークへの接続は出来ないとの事。

さすがにこのノーパソを現役で動かしている訳ではなく、VISTA以降のパソコンを3台所有してるとか。

こんな現状なんで、USBメモリーにEXCELファイルを書き出して、それを他のパソコンに入れれば よい話。本当か? M$の陰謀で、古いEXCELファイルは、新しいので読めるのか? EXCELなんて、もう20年ぐらいは触っていないので、よう知らないけど。

USBに焼こうととしたら、FMVは生意気にUSBのドライバーを要求するとか。USBメモリーなんて、マスストレージなんだから、ドライバーは既にWindows98に内蔵してると思うんだけどな。 それとも、FMVに初めてUSBメモリーを刺した?

彼の解決策は、USB接続のFDDをオークションで競り落として(1280円で売りに出てたそう)、それを他のパソコンに刺して、読み込むとな。FMVのFDDは、けなげにも動いていて、メディアに書き出せたとか。今時、3.5のフロッピーなんて、良く持ってたな。レア物ですよ。

オイラーの提案は、USB接続のSDメモリーカードリーダーをFMVに刺す。USB接続のwifiをFMVに刺す。(どちらも、ドライバーを要求されるか)

どんな大事なデータが入っているか、どれぐらいの個数が有るか知らないけど、スパイがやる方法が有るよ。FMVでEXCELファイルを開き、その画面を写メ。他のマシンにAIなりOCRリーダーを 入れて、復元。写メの代わりにプリンターに吐き出すのも可。

暫くして結果の連絡があった。結局USB接続なFDDを手に入れて、吸出しに成功。いざ開こうとしたら、パスワードロックがかかってて開けない。昔の事でパスワードなんて忘れてる。

で、オイラーから助け舟。 excel パスワード 解除

パスワードクラックには、マクロだかVBAが使われてるみたいで、正統なEXCEL環境じゃないと動かないとか。(取り出した場所には、OpenOfficeが入ってる。)しょうがないので、クラックソフトを、FDD経由でFMVに持ち込み。

どれぐらい待ったか知らないけど、 ExcelUnpassword で、無事にクラック(解除)出来たそうな。

windows98時代のパソコンったら、非力なはず。そんなパソコンで解除出来ちゃうって、よっぽど弱いパスワードを設定してたのかな。ちゃんと保護するなら、EXCELファイルごと、外部の専用暗号化ソフトを使って、パスワードを強固にするしかないな。

オイラーのPC遍歴

上記の友人は、現有するパソコンが4台。全て稼働可能なもの。Windows98ったら、へたしたら20年も前のパソコンじゃん。物持ちが良いと言うか、何と言うか。

オイラーがマイコンを持ったのは、シャープのMZ80が最初だ。国民機のPC98だったかがデフォだった頃の話だ。何でPC98を選ばなかったかと言うと、BASICが入っていたから。こういう押し付けは大嫌い。何色にもそまっていない、クリーンコンピューターじゃなきゃ、コンピューターと 呼べないよ。

その伝で言えば、WindowsかLinuxかってのは頂けないな。M$はWindowsじゃ儲からないんで、 盛んにLinuxに食指を伸ばしてる。それと稼ぎ頭のオフィスなんとかですか。

MZ80に始まって、FM-11でフロッピーオペレーティングシステム(残念ながらOS9じゃなくて、FLEXってやつだったかな)、そしてMACユーザーになった。随分とお布施したな。PowerBookの 玉を回す形式のマウスは楽しかったな。

それから、*BSDをやりたくなってMAC信者を止めた。コスパのよかったAKIAってメーカーの パソコンを2台渡りあるいた。

次はキーボードが英語版をチョイス出来るって理由でThinkPadに鞍替え。今使ってるWindows10入りのやつが3台目。2台目は、この間Windows7からDebianに鞍替えしちゃった。

virtualbox in Debian 9

ふとDebianでもvirtualboxしたくなった。インストーラーを取ってきた。

debian:Downloads$ ls
virtualbox-5.2_5.2.10-122088~Debian~stretch_i386.deb

約65Mの代物。debってどうやってインストールするんかな? 過去の記憶をサーチして、dpkg -i hoge.debってのを思い出した。で、virtualboxって叩くと、一応起動した。

でも、不穏なメッセージが出てる。このままじゃ、VMを起動出来ないので、/sbin/vboxcfgをsudo権限(変な言い回しだな)で実行せいとな。

その通りに実行すると、失敗したんでもう一度。でもメッセージを斜め読みすると、モジュールを作るには、あれこれのリナヘッダーを入れろとな。お前に適したヘッダーバージョンは、これだと言ってくる。しょうがないので、そいつを入れてから、やり直し。

こうして無事にvitualboxが出来上がった。LXDEのシステムツールの所にも、メニューが自動登録されてた。仮想マシンったら、これが定番なのね。

で、試運転は何にする? そりゃ、勝手知ったるFreeBSDでいいしょ。入れてみたら、普通に動いた。次は、今まで手を出していなかったNetBSDあたりかな。

Debianを今までWindows7が入っていたDISKにゆったりと鎮座させたものだから、幾らアプリを 入れても、Diskの10%ぐらいしか消費していな。終いには、goの新しいやつとかjuliaとかまで 入れたけど、余裕が有りすぎですよ。一体、Windowsでは何が入っていたんだろう? 不思議。

で、残念ながらvirtualboxもvmwareもwifiなNICはサポートしていない。なかなか面白いのにね。特にFreeBSDはifconfigのマニュアルに、わんさかとwifiの事が書いてあったり、/sys/net80211なんて具合に、まとまりが作られていたりして、面白そう。これはもう一度やってみる鹿。

ポータブル FreeBSD

ポータブルOpenBSDを以前にやったので、同じ方法でFreeBSD版を作ってみよう。

UbuntuをUSBメモリにフルインストール。作成/保存したデータをWindowsで読めるようにしてみる。 こういう人の方が普通なんだろうけど、オイラーはへそ曲がりですから。。。。。

Windows10のvirtualbox上にFreeBSDを入れる。環境を整える(pkgを入れる)。ddコマンドで、Disk全体をUSBメモリーへ焼くって方法。後追い試験です。

xorg xf86-video-intel ja-font-stdぐらいを入れて、Xに再挑戦する事にする。(どうせついでですから)他には、tmux,emacs-nox-emacs25とかね。 それから、勿論iwn0関係の設定も済ませておく。

dd if=/dev/ada0 of=/dev/da0 bs=1M

2158秒かかって、USBメモリーに焼いた。OpenBSDと違って、DISK全体の扱い方法が違う事に注意。(FreeBSDの方が近代的と思う、OpenBSDの方は、伝統を大切にって方針。てか、動いてるなら、そのままにしとけってのがポリシーみたい)

で、焼いたのを刺して起動すると、( 立てば芍薬座れば牡丹歩く姿は百合の花をもじると、 刺せば*BSD、刺さねばDebian走る姿はUnixって言う、クリーンコンピューターの思想)、ルートパーテションのマウントの所で、落ちた。mountconfとかいうメニューがちらっと出て来たぞ。

それによると、ufs:/dev/ada0s1aをマウントしようとして、失敗してる。ガーンと頭を殴られましたな。virtualbox時代のfstabをそのまま持ってきてしまったんで、そんなデバイスは 無いとな。元に戻って、焼く時だけ、fstabを書き換えるか。また、2158秒我慢か。

でも、ヒントが出てきた。カーネルに渡すパラメータをローダー変数に書いておくといいよって 。(ローダーのOKプロンプトを出して、set xx=yyy してから boot)

vfs.root.mountfrom=ufs:/dev/da0s1a

へぇ、こんな変数が有るんだと感心しながら、指示に従う。どうやらrootパーテションは無事に マウントされた。が、/homeが見つからないと言って、shに落ちるぞと言われた。 今回は、欲を出して、/homeは別にしたのが裏目に出た。

vi etc/fstab して、書き換えちゃ。コマンドを発したら、リードオンリーでマウントされてますぜって注意を受けた。困った時のman頼み。mount -w すれば、rw出来る状態で(再)マウント出来るのね。で、書き換えて、事無きを得た。

$ cat /etc/fstab
# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/da0s1a     /               ufs     rw      1       1
/dev/da0s1b     /home           ufs     rw      2       2
tmpfs           /tmp            tmpfs   rw,mode=1777    0 0

bパーテションって、普通はswapに割り当てられるんだけど、最近のインストーラーは、頓着しないのね。

OpenBSDに比べてFreeBSDは重装備なので、ログインプロンプトが出て来るまで、余計に時間がかかるよ。まあ、しょうがないけどね。

iwn0 のトラブル

iwn0がDHCPでアドレスを貰えていない。キャリアー検出してないんだ。前回は、すんなり動いたんだけどな。こんな状態でも、scanはそれなりのデータを返してくるよ。ちゃんと認識してるけど、何処かに齟齬が有るんだな。

じっとifconfigの結果を見てたら、周波数を表すちゃんねるが、138とかになってた。はてって事で、/etc/rc.conf を見る。

hostname="fb"
# ifconfig_em0="DHCP"
# ifconfig_em0_ipv6="inet6 accept_rtadv"
sshd_enable="YES"
dumpdev="NO"
sendmail_enable="NONE"
dbus_enable="YES"
keymap="us.pc-ctrl"

wlans_iwn0="wlan0"
ifconfig_wlan0="country J WPA DHCP"

最後の行の、国を表す、J が抜けてた。そうすると、FCCで言う最後のチャンネルに固定されてしまったようだ。

/usr/sbin/wpa_supplicant -s -B -i wlan0 -c /etc/wpa_supplicant.conf -D bsd -P /var/run/wpa_supplicant/wlan0.p

お願いファイルの監視役が動いているな。

wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:11:22:33:44:55
        hwaddr 00:11:22:33:44:55
        inet xx.xx.xx.xx netmask 0xffffff00 broadcast xx.xx.xx.xx
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: IEEE 802.11 Wireless Ethernet MCS mode 11na
        status: associated
        ssid hoge channel 52 (5260 MHz 11a ht/40+) bssid 98:76:54:32:10:01
        regdomain NONE country JO authmode WPA2/802.11i privacy ON
        deftxkey UNDEF AES-CCM 2:128-bit txpower 24 bmiss 10 mcastrate 6
        mgmtrate 6 scanvalid 60 ampdulimit 32k ampdudensity 16
        -amsdutx amsdurx shortgi -stbc wme roaming MANUAL
        groups: wlan

これが、以前取り忘れていた魚拓。

そして、FreeBSD風のscan

$ ifconfig wlan0 scan | head -3
SSID/MESH ID    BSSID              CHAN RATE    S:N     INT CAPS
abcdefghi-ssid  33:55:55:66:77:01    1   54M  -81:-95   100 EP   RSN HTCAP WPS WME
mufumufunet...  12:34:56:78:90:bf    1   54M  -90:-95   100 EPS  HTCAP WME RSN

X Window and keyboard

無事にtwmが起動出来たので、喜びいさんでfirefoxを入れた。引き連れてくる物が多すぎて、インストール完了まで、死ぬほど時間がかかった。(死ぬのはお前だじゃなくて、死ぬのはUSBだ状態。USBの寿命を縮めてどうすると)vbox側の母艦でひな型を作る時に入れるべきだったな。

それはそうと、起動するとcoreを吐く。メッセージを眺めていたら、dbusが動いている事を期待してるようだ。そんな訳で、/etc/rc.conf に、dbus_enable="YES" を追加しといた。

XのキーボードでCapsキーが邪魔。下記の設定でctrlキーに割り当てたよ。

$ cat .xinitrc
setxkbmap -option ctrl:nocaps &
exec twm

firefoxは、履歴を自home下にどんどんため込む。ため込むと言う事は、遅いUSBに書き込むという行為に他ならない。おまじないとしてプライベートモードで起動するように、メニューに 追加したよ。

$ grep exec .twmrc
"Xterm"         f.exec "exec xterm -fn 8x16 -r &"
"Firefox"       f.exec "exec firefox -private &"

syscons の Capsロックも邪魔だな。何とかしたい。

コンソールでキーボードの Ctrl キーと Caps Lock キーを交換

keymap="us.pc-ctrl" を、rc.confに書いておけばいいんだな。それにしても、外部のFAQを探さないと出てこないとは、OpenBSDと大違いだな。OpenBSDの場合はmanだけで形が付いたのに。

$ df -k
Filesystem  1024-blocks    Used   Avail Capacity  Mounted on
/dev/da0s1a     5942620 3811396 1655816    70%    /
devfs                 1       1       0   100%    /dev
/dev/da0s1b     1158264  175260  890344    16%    /home
tmpfs           2625112       4 2625108     0%    /tmp

必要そうなemacsとか/usr/srcを入れて、上記のようになった。本当はportsも入れたかったんだけど、あいつは1G近くDISKを消費するんで、止めておいた。

これで、ソースを閲覧、疲れたらネットサーフィン(死語)って環境がほぼ出来上がったな。

hugs98の移植

このままでもいいんだけど、ネットサーフィンだけが息抜きって、少々カッコ悪いと思う。 遊べるように、軽い言語を一つ入れておくか。候補は、schemeかな。まてまて、カッコ悪いそう なので、hugs98を入れるか。

取り合えず母艦側に入れてみた。昔のソフトのくせに、色々と関連品がインストールされたよ。 どうもポータブルgccとかが入って、GUI系のアプリを作る事を目標にしてるみたい。そんな重装備いらないんだけどな。

/usr/local/bin/{hugs,runhugs}, /usr/local/lib/hugs/*, /usr/local/share/man/man1/hugs.1 ぐらいを、持ってきておけばいいのかな。

正確には、/usr/ports/lang/hugs/dest-plistっている、パッキングリストを眺めるのが吉。

/var を ramdiskにする

以前見かけた、 FreeBSD を read-only で起動に倣って、/varをramdiskに追いやってみた。設定は、/etc/rc.confに

varmfs="YES"
varsize="64m"

を追加するだけ。64mも必要無いかも知れないけど、ひょっとしてviで大きなファイルを扱う時に、悩まないように。

さっと使って、マシンを落とすので、ログをじっくり見る事も無いし、varの下がごっそり消えても、泣く事は無い。

じゃ、何故こんな事をする? USBを長持ちさせる為。不要な書き込みは避けたいのだ。それを 徹底したのが、上記の記事。

そして、運用上でも、/home下への書き込みを最低限にする。alias wd='cd /tmp' なんてのを定義しておいて、loginしたら、さっさとwdして、/tmpに移動。ここで作業。なんてったて、ここはRAMですから、早いしUSBに負担をかける事は無い。成果物で必要な物を/homeに書き戻すのさ。

オイラーに御利益が有るのは、viでファイルを更新した時、すっとプロンプトに戻る事。遅いUSBへの書き込みが無い分、さっと終了してくれる。

弊害として、lastコマンドで、過去のログイン情報が見れなくなった事ぐらいかなあ。今までは、定期的に cp /dev/null utx.log をして、履歴を消すのが楽しみだったけどね。

font

ググル途中で見つけたの。VGAな端末でも日本語が表示出来るらしい。OpenBSDには、そんなの 無かったけど、逆輸入出来るのかなあ?

FreeBSD 11のvtで日本語を表示する

日本語BDFフォントを変換してFreeBSD 10.xのvt(4)コンソールで使う

フォントの切り替えは、次のコマンドを使うとな。

# vidcontrol -f ufo

起動時から、フォントを指定するには、下記でよいらしい。 /etc/rc.conf

font8x16="ufo"

この場所にフォントを入れておくとな。

$ pwd
/usr/share/vt/fonts
$ ls -l
total 2068
-r--r--r--  1 root   wheel     8452 Jul 21  2017 gallant.fnt
-rw-r--r--  1 sakae  wheel   274264 May  5 07:22 jiskan16s.fnt
-rw-r--r--  1 sakae  wheel   273896 May  5 07:23 jiskan16u.fnt
-rw-r--r--  1 sakae  wheel  1424088 May  5 07:24 unifont-8.0.01.fnt
-r--r--r--  1 root   wheel    36408 Jul 21  2017 vgarom-16x32.fnt
-r--r--r--  1 root   wheel     8742 Jul 21  2017 vgarom-8x14.fnt
-r--r--r--  1 root   wheel     9864 Jul 21  2017 vgarom-8x16.fnt
-r--r--r--  1 root   wheel     5384 Jul 21  2017 vgarom-8x8.fnt
-r--r--r--  1 root   wheel     5400 Jul 21  2017 vgarom-thin-8x16.fnt
-r--r--r--  1 root   wheel     2704 Jul 21  2017 vgarom-thin-8x8.fnt

やや、お隣にkeymapsが有るぞ。色々な国用のキーボードが定義されてる。英語と言うかus版でも、10種置いてある。us.ctrl.kbdの他にus.emacs.kbdなんてのもあるなあ。何が違うんだろう?

ちょいと標準版の、us.kbdを眺めてみる。

# scan                       cntrl          alt    alt   cntrl lock
# code  base   shift  cntrl  shift  alt    shift  cntrl  shift state
# ------------------------------------------------------------------
  000   nop    nop    nop    nop    nop    nop    nop    nop     O
  001   esc    esc    esc    esc    esc    esc    debug  esc     O
  002   '1'    '!'    nop    nop    '1'    '!'    nop    nop     O
  003   '2'    '@'    nul    nul    '2'    '@'    nul    nul     O
   :

なる程、scanコードがハードから出て来て、同時押しのシフトキーとかが押された場合に、どんな文字を返すか定義してるんか。

$ diff -u us.kbd us.ctrl.kbd
   :
-  058   clock  clock  clock  clock  clock  clock  clock  clock   O
+  058   lctrl  lctrl  lctrl  lctrl  lctrl  lctrl  lctrl  lctrl   O

余計なキー、Capsのスキャンコードは058とな。そいつを、lctrlキーが押されたようにだましてしまうテーブル定義がされてる訳ね。

この伝で、標準キーの表とemacs用にカスタマイズされた表を比べてみると、差が有り過ぎた。 ずっとemacs用で使うのなら便利だろうけど、付き合う相手はWindowsだったりdebianだったりするんで、穏当な線で行きましょ。

BUFFALO USB と戦う

10年使った炊飯器が壊れると言う、一大事が発生。有無を言わせず電気屋へGo。女房に炊飯器選びを任せて、オイラーはUSBメモリーを物色。

8GでUSB3.0対応って条件で選んだら、バッファローのやつになった。バッファローのUSBは128Kのやつを持ってるけど、デザインは変わっていませんなあ。相変わらずスケルトンだし、書き込み禁止SWが付いてた。1415円也。

Windows10に刺してみると、FAT32、2.43M使用(おまけのアプリが入ってた)、未使用が、7.43Gですって。メーカーによって使える容量は変わってくるのね。

VMwareで認識するかと思ったら、不安定。何度かメニューの操作で抜き差しをしたら、場合によっては、da1と認識する事はあった。ドライバーって提供されてるのかな?

virtualboxでは、アドインを入れないとUSB1.1しか使えなかったけど、入れたらちゃんとUSB3.0を認識した。

アドインの入れ方だけど、ちょっと戸惑った。まずは、 Download VirtualBoxの所にある

VirtualBox 5.2.10 Oracle VM VirtualBox Extension Pack

 All supported platforms
 
Support for USB 2.0 and USB 3.0 devices, VirtualBox RDP, disk encryption,
NVMe and PXE boot for Intel cards. See this chapter from the User Manual for
an introduction to this Extension Pack. The Extension Pack binaries are
released under the VirtualBox Personal Use and Evaluation License (PUEL).
Please install the same version extension pack as your installed version
of VirtualBox.

を頂いてくる。対象がWindowsの場合は、DLしたファイルをダブルクリックし、後は指示に 従うだけ。Debianの場合は、ファイルメニューのプレファレンスを開いて、エクステンションを 選び、右側にあるプラスのアイコンをクリックして、DLしたファイルを指定。後は指示に従う。

ugen0.2: <BUFFALO USB Flash Disk> at usbus0
umass0 on uhub0
umass0: <BUFFALO USB Flash Disk, class 0/0, rev 3.00/0.01, addr 1> on usbus0
umass0:  SCSI over Bulk-Only; quirks = 0x8100
umass0:2:0: Attached to scbus2
da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
da0: <BUFFALO USB Flash Disk 1.00> Removable Direct Access SPC-4 SCSI device
da0: Serial Number CE80319600000407
da0: 400.000MB/s transfers
da0: 7626MB (15618048 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>

そして書き込み。書き込みの前後で、必ず/etc/fstabを編集する事。怠ると厄介な事になる。(経験者は語る)

root@fb:~ # vi /etc/fstab   ;; ada0 -> da0
root@fb:~ # sync
root@fb:~ # dd if=/dev/ada0 of=/dev/da0 bs=1M
7168+0 records in
7168+0 records out
7516192768 bytes transferred in 1230.592895 secs (6107782 bytes/sec)
root@fb:~ # vi /etc/fstab    ;; da0 -> ada0
root@fb:~ # sync

TOSHIBAの時よりずっと高速だな。これが、USB3.0の威力かどうかは分からんけど。

出来たUSBを実機に刺して使ってみると、USB2.0しかサポートしていないので、速さは並み。宝の持ち腐れでした。残念至極。でも、USBへのアクセスランプが、派手に青白く光るものだから、なるべく光らない(アクセスしない)ように運用するスキルが付くな。

firefoxなんて非常に重いので、CUIな端末でw3mって生活が適していると思うぞ。vt(4)のおかげで、Xが上がっていなくてもちゃんと日本語が読める。昔は、これをやろうとするとえらく苦労したものだ。

wlanstats

FreeBSDのwifiスキャンでは、信号強度がS/Nの形でしか得られない。OpenBSDやリナではちゃんと表示されているのにね。

調べてみると、/usr/src/tools/tools/net80211/wlanstats に、コードが置いてあった。 scanで得られるS/Nは、-79:-95 だった。これ、信号の強さが-79(単位は知らない)で、背景雑音が-95(メーカーの公表値)って意味。

これを無線屋が理解しやすいdBmに変換するのが、wlanstatsだ。

root@fb:~ # wlanstats
  :
12.0       current rssi
-86        current noise floor (dBm)
-74.0      current signal (dBm)

rssiって、良く見かける指標だけど、S/Nになる訳ね。ああ、wlanstatsは、信号強度系の他にも、山ほど色々な情報を表示してくれるよ。

root@fb:~ # wlanstats 20
   input     mgmt   output rxkid ascan bgscn bmiss   rssi noise    rate
    5461    31276     1461     0     5     0     0   12.0   -87  135.0M
      36      192        3     0     0     0     0   11.5   -87  135.0M
      36      196        2     0     0     0     0   12.0   -86  135.0M
       :

ノイズフロアーとrssiから、シグナルレベルを暗算する、フラッシュ暗算の練習機だな。ボケ防止にぴったり。一つの計算に20秒なんていらないでしょ。3秒間隔とか1秒間隔でやれよ。

/usr/src/tools/tools/iwn なんてのも有るな。 コンパイルして走らせてみたけど、大量のデータが出て来て、素人には意味不でした。