FreeBSD in USB memory
FreeBSD in USB memory
前回はOpenBSDでIPv6出来る事を偶然知った。Windows10やDebianにもIPv6のアドレスが来ている事は確認済みだけど、ぐるる様のお墨付けは得ていない。
当然、Windows10の中のvboxに入れてるFreeBSDでも駄目(親HostのWindows10が駄目なんで当然だ)。これ、ちと悲しいぞ。FreeBSDを単独で動かしたらどうなるか確認したい。ひょっとしたらって淡い期待です。
そんなのUSBに焼いて、そこから起動すれば、丸ごとFreeBSDなマシンになるじゃん。ターゲット機はDebian(32Bit)が入っている、SL510にしよう、と言う実験計画を立てた。
問題はどうやってUSBに焼くかだ。過去にはvboxにFreeBSDを入れ、それを丸ごとddを使ってUSBにコピーした。その後fstab関係の面倒臭い調整をした。もっと簡単に出来ないか? 自分ひとりで考えていてもアイデアが浮かばない。みんなに聞いてみたよ。そしたら、
FreeBSD - USB メモリへのインストール なんて事をやってる人が居た。へぇ、こういう事が出来るのね。オイラーも追試してみる。USBは取り敢えず8Mのやつを選んだ。
上記案内の通りにやれば良い。最初にUSBを刺す。Windows10が、フォーマット違う(OpenBSDが入っていたので)けどどうするって聞いて来るけど、そのままでいいよって指定。
VMWAREがファイルを分割しないように、仮想シングルDISKを指定。起動して、installってなったら、VMWAREのメニューから、USBを選ぶ。これでUSBメモリはVMWAREの配下になる。
次にDISKの選定の所で、マニュアル指定。ad0,da0が出てくるけど、USBの方da0を選んでからdを押してパーテションを削除。そしてcreateして、FreeBSD用にする。途中、GUIの画面に割り込んでCUIな警告が出てくるけど、かまわずGUIの指示(Installerのね)に従えば良い。
ネットワークは後でやるので、すっ飛ばして、普通にインストール。USBへ書き出しなんで、結構時間がかかる、けど2度手間にならないので助かる。
インストールが終わってrebootしたら、VMWAREを殺す。これで、USBに焼いたFreeBSDが手に入った。
後はDebian機のThinkPad SL510に挿して起動。有線で接続してDHCPでIPを貰い、最初の儀式を実行。そう、freebsd-update fetch; freebsd-update install 最新にする訳だな。 この状態で、
sakae@fb:~ $ df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0s1a 6956060 1147352 5252224 18% / devfs 1 1 0 100% /dev
sakae@fb:~ $ uname -a FreeBSD fb 13.0-RELEASE-p3 FreeBSD 13.0-RELEASE-p3 #0: Tue Jun 29 19:44:29 UTC 2021 root@amd64-builder.daemonology.net:/usr/obj/usr/src/i386.i386/sys/GENERIC i386
wlan
次は無線LANの設定。素晴らしく分かりやすい説明をされてる方がおられたので、それに従う。
sakae@fb:~ $ ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:24:d6:be:fe:ed inet aa.bb.cc.5 netmask 0xffffff00 broadcast aa.bb.cc.255 groups: wlan ssid BSD-house channel 36 (5180 MHz 11a ht/40+) bssid de:ad:be:ef:20:07 regdomain JAPAN country JP authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 2:128-bit txpower 23 bmiss 10 mcastrate 6 mgmtrate 6 scanvalid 60 ampdulimit 32k ampdudensity 16 -amsdutx amsdurx shortgi -stbc -ldpc -uapsd wme roaming MANUAL parent interface: iwn0 media: IEEE 802.11 Wireless Ethernet MCS mode 11na status: associated nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
心配したスピードなんだけど、Debian並に出てる。
add app
xorg,firefox,emacs,tmux,w3m 適当な日本語フォント あたりを、取り敢えず入れた。windows managerは何にするかな。twmじゃ原始的過ぎる。昔を思い出してicewmにした。
startxするだけーーと言う超やる気無し、もとえシンプル設定です。。なんたって、CUIな仮想端末のフォントはOpenBSDに比べて非常に汚い。見るに耐えないからね(ちゃんとすれば、ちゃんとなるみたいだけど、そんなに凝る必要無し)。
root@fb:~ # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0s1a 6956060 3501864 2897712 55% / devfs 1 1 0 100% /dev tmpfs 1048576 4 1048572 0% /tmp
USBへの書き込みが遅いんで、installに膨大な時間がかかる。まあ、スイカでも食べながら、ゆっくりと待つのみ。
IPv6
正式なIPv6クライアントはどう作るのだろう? こういう時は、 FreeBSD Handbook を見るのさ。
To configure a FreeBSD system as an IPv6 client, add these two lines to rc.conf: ifconfig_rl0_ipv6="inet6 accept_rtadv" rtsold_enable="YES" The first line enables the specified interface to receive router advertisement messages. The second line enables the router solicitation daemon, rtsol(8).
これを真似して/etc/rc.confを作成。WiFi用も含めた、カスタマイズ例。
wlans_iwn0="wlan0" ifconfig_wlan0="WPA DHCP" create_args_wlan0="country JP" ifconfig_wlan0_ipv6="inet6 accept_rtadv" rtsold_enable="YES"
起動してしばらく待つとIPv6が降って来る。暫くってのは、すぐの場合もあるし 10分かかる事もある。
root@fb:~ # ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:24:d6:be:fe:ed inet6 fe80::224:d6ff:febe:feed%wlan0 prefixlen 64 scopeid 0x3 inet6 2400:XXXX:XXXX:XXXX:224:d6ff:febe:feed prefixlen 64 autoconf inet aa.bb.cc.6 netmask 0xffffff00 broadcast aa.bb.cc.255 groups: wlan ssid BSD-house channel 36 (5180 MHz 11a ht/40+) bssid de:ad:be:ef:20:07 regdomain JAPAN country JP authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 2:128-bit txpower 23 bmiss 10 mcastrate 6 mgmtrate 6 scanvalid 60 ampdulimit 32k ampdudensity 16 -amsdutx amsdurx shortgi -stbc -ldpc -uapsd wme roaming MANUAL parent interface: iwn0 media: IEEE 802.11 Wireless Ethernet MCS mode 11na status: associated nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
動き出すと、こんなルーチィングテーブルが出来上がった。
root@fb:~ # netstat -nr Routing tables Internet: Destination Gateway Flags Netif Expire default aa.bb.cc.1 UGS wlan0 127.0.0.1 link#2 UH lo0 aa.bb.cc.0/24 link#3 U wlan0 aa.bb.cc.6 link#3 UHS lo0 Internet6: Destination Gateway Flags Netif Expire ::/96 ::1 UGRS lo0 default fe80::1eb1:7fff:fe26:14b8%wlan0 UG wlan0 ::1 link#2 UHS lo0 ::ffff:0.0.0.0/96 ::1 UGRS lo0 2400:XXXX:XXXX:XXXX::/64 link#3 U wlan0 2400:XXXX:XXXX:XXXX:224:d6ff:febe:feed link#3 UHS lo0 fe80::/10 ::1 UGRS lo0 fe80::%lo0/64 link#2 U lo0 fe80::1%lo0 link#2 UHS lo0 fe80::%wlan0/64 link#3 U wlan0 fe80::224:d6ff:febe:feed%wlan0 link#3 UHS lo0 ff02::/16 ::1 UGRS lo0
これで、ぐぐる様のIPv6テストに合格したよ。OpenBSDと同じ流れだね。USAGIより亀の幸ってもんです。まて、10分問題はどうした? rtsoldの挙動を観測。
[root@fb /tmp]# /usr/sbin/rtsold -a -d -D -f |& tee LOG rtsold: probing wlan0 rtsold: checking if wlan0 is ready... rtsold: wlan0 is ready rtsold: set timer for wlan0 to 0s rtsold: New timer is 0s rtsold: timer expiration on wlan0, state = 1 rtsold: set timer for wlan0 to 4s rtsold: New timer is 4s rtsold: received RA from fe80::1eb1:7fff:fe26:14b8 on wlan0, state is 2 rtsold: OtherConfigFlag on wlan0 is turned on rtsold: Processing RA rtsold: ndo = 0xffbfe530 rtsold: ndo->nd_opt_type = 1 rtsold: ndo->nd_opt_len = 1 rtsold: ndo = 0xffbfe538 rtsold: ndo->nd_opt_type = 3 rtsold: ndo->nd_opt_len = 4 rtsold: rsid = [wlan0:slaac] rtsold: stop timer for wlan0 rtsold: there is no timer rtsold: received RA from fe80::1eb1:7fff:fe26:14b8 on wlan0, state is 0 rtsold: Processing RA :
ふーむ、rtsoldが起動してから4秒以内にwlan0の用意が出来ていないと、自分が出した要求を受信出来ないのか。起動時は何かと忙しいから、タイミングを逃してしまう事が有るのだろうね。本気出して使う積りは今の所無いので、放置する。
kill -TERM `cat /var/run/rtsold.pid`; /usr/sbin/rtsold -a を、何処かに書いておいて、実行するだけだけど。
sakae@fb:/usr/share/doc $ lv IPv6/IMPLEMENTATION
心配なら、こういう文書が有るので、読んでおけ。
ああ、大事な事を忘れていた。亀さんダンスを何十年ぶりかで堪能したよ。https://www.kame.net へIPv6で接続出来ると、亀が踊るってやつ。
うさぎ美味しじゃなかった、うさぎ追いしの故郷もいいけど、亀さんブレークの方が何十倍も楽しいぞ。お盆は田舎に帰ってこないでね。特に都会のしと!
後は、IPv4 over IPv6かな。それはやらない。ありとキリギリスって馬鹿にされそうだからね。
ip6addrctl show
sakae@fb:~ $ ip6addrctl show Prefix Prec Label Use ::1/128 50 0 0 ::/0 40 1 316 ::ffff:0.0.0.0/96 35 4 0 2002::/16 30 2 0 2001::/32 5 5 0 fc00::/7 3 13 0 ::/96 1 3 0 fec0::/10 1 11 0 3ffe::/16 1 12 0
亀さん観察の功労者は、このテーブルか。OpenBSDはどうだったかな? IPv6でアクセス出来ると、もれなくポイントが貰えます。頑張ってアクセスしましょう。これって、五月蝿いぐらいに携帯屋から飛んでくる販促メールみたいだな。そんなのスルーしてるけどね。
rtsold
usr.sbin/rtsold/ をざっと見したらdump.cなんて言う、そそられる名前のファイルが置いてあった。何者? manによると、
FILES /var/run/rtsold.pid The PID of the currently running rtsold. /var/run/rtsold.dump Internal state dump file.
動作させる上に必要になる一時ファイル、かな? 詳しい事はソース嫁。
wpa_passphrase
無線LANを設定する時、お世話になった奴。
[sakae@fb /tmp]$ wpa_passphrase aa bb Passphrase must be 8..63 characters [sakae@fb /tmp]$ wpa_passphrase aa bbddddddddddd network={ ssid="aa" #psk="bbddddddddddd" psk=1ab2d5152a12d3756fac707753369f82871660e6d5c7757a7e5241117b19c615 }
使い方は、上記のように(悪い例)する。あんまりなのでman
NAME wpa_passphrase – utility for generating a 256-bit pre-shared WPA key from an ASCII passphrase
小さいプログラムだよって説明だ。多分opensslでも呼ぶshellスクリプトぐらいだろうと思っていたら、binaryになってた。悪戯対策? Makefileを見ると
PACKAGE= wpa PROG= wpa_passphrase SRCS= common.c md5-internal.c md5.c os_unix.c sha1-internal.c sha1-pbkdf2.c \ sha1.c wpa_passphrase.c
mainが有りそうな、 wpa_passphrase.c
を探すと、 /usr/src/FreeBSD13.0/contrib/wpa/wpa_supplicant/wpa_passphrase.c
に置いてあった。WiFi団体からの販促品?
/* * WPA Supplicant - ASCII passphrase to WPA PSK tool * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi> * * This software may be distributed under the terms of the BSD license. * See README for more details. */ int main(int argc, char *argv[]) { : pbkdf2_sha1(passphrase, (u8 *) ssid, os_strlen(ssid), 4096, psk, 32); printf("network={\n"); printf("\tssid=\"%s\"\n", ssid); printf("\t#psk=\"%s\"\n", passphrase); printf("\tpsk="); for (i = 0; i < 32; i++) printf("%02x", psk[i]); printf("\n"); printf("}\n");
個人の作品みたいだな。ちゃんと原本を当たれば詳しい事が分かるだろうけど、FreeBSDレベルでは、usr.sbin/wpa/って所に、まとめられているって事で、深入りは止めておこう。それより、OpenBSDはどうしてるかだな。そちらの方が面白そうだ。
mozc
icewmに付属の端末はxtermだ。えっ、日本語大丈夫? ちゃんと扱えた。でも、字が小さくて難儀だ。どこかをいじればフォント・サイズを変更出来るのだろうけど、ざっと見では不明。
ならば、日本語はemacsに限定しちゃえ。日本語入力も出来ると嬉しいな。カタログチェック。ええ、mozcさんね。
sakae@fb:~ $ pkg search mozc ja-boiled-mozc-emacs27-0.7_8 Wrapper to mozc.el that offers modeless ("boil"ed) input style ja-boiled-mozc-emacs27_canna-0.7_8 Wrapper to mozc.el that offers modeless ("boil"ed) input style ja-boiled-mozc-emacs27_nox-0.7_8 Wrapper to mozc.el that offers modeless ("boil"ed) input style ja-boiled-mozc-emacs28-0.7_8 Wrapper to mozc.el that offers modeless ("boil"ed) input style ja-boiled-mozc-emacs28_nox-0.7_8 Wrapper to mozc.el that offers modeless ("boil"ed) input style ja-fcitx-mozc-2.23.2815.102.01_3 Mozc engine for Fcitx ja-ibus-mozc-2.23.2815.102.01_3 Mozc engine for IBus ja-mozc-el-emacs27-2.23.2815.102.01_3 Emacs input method for Mozc ja-mozc-el-emacs27_canna-2.23.2815.102.01_3 Emacs input method for Mozc ja-mozc-el-emacs27_nox-2.23.2815.102.01_3 Emacs input method for Mozc ja-mozc-el-emacs28-2.23.2815.102.01_3 Emacs input method for Mozc ja-mozc-el-emacs28_nox-2.23.2815.102.01_3 Emacs input method for Mozc ja-mozc-server-2.23.2815.102.01_3 Mozc Japanese Input Method, Server ja-mozc-tool-2.23.2815.102.01_3 Mozc tool for IBus, SCIM, and others ja-uim-mozc-2.23.2815.102.01_4 Mozc engine for uim
今入ってるemacsに合わせればいいんだな。それを指定したら、mozcの本体とかも釣られて入ってきた。そして、下記をinit.elに書いておけとな。
(set-language-environment "Japanese") (setq default-input-method "japanese-mozc") (global-set-key (kbd "C-o") 'toggle-input-method)
これで動いたよ。取り敢えず楽なものだ。それはいいんだけど、emacsの画面が白地で辛い。何とかせいと、わがままな人が言ってるぞ。こういう時は、白黒反転技だな(オリンピックみたいな大技じゃないけど)。
sakae@fb:~ $ cat .icewm/toolbar prog "Emacs" emacs emacs -r -g 80x32 prog "Terminal" xterm xterm -r -fn 8x16 -g 80x44
ついでに、xtermも見やすく調整した。
sakae@fb:~ $ cat .icewm/preferences # WorkspaceNames=" 1 ", " 2 " TaskBarAutoHide=1 TaskBarAtTop = 1
ものはついでに、タスクバーの位置を上に配置、普段は隠れるように指定した。
それぞれのアプリのタイトル・バーのアイコンを叩くと、本体部分が隠れて、バーだけの表示になるって言う、素敵な機能が有ったのね。これはなかなか便利だ象。
sakae@fb:~ $ cat .xinitrc setxkbmap -option ctrl:swapcaps icewm
それから、emacs使いには、必修のCapslock問題も解決させた。普通はxmodemapを使うらしいけど、用途が限定なので、ファイルを増やさない方向です。
折角入れたw3mは出番が無いな。いや、emacsと組み合わせる手があるよ。設定忘れた。ewwがemacsには備え付けなんで、それを使え。使ってみたら、ドンドン先へ行って、戻って来るにはどうするんだっけ? 調べたら l(小文字のエル)が、戻りに割当られていた。検索はググるじゃないんで、データ奴隷から逃れられる(かも)。