たかちゃん。

7月 072017
 

タイトルの「SoundPEATS Bluetooth 買ってみました。」と言っても、実はずいぶん前に購入したんですね。この次に書くエントリに必要になったので慌てて今更書いている。と、いう状態なんですけども、まぁ、懲りずに読んでやってくださいf(^^;;。

僕にとっては二個目の Bluetooth イヤホンです。一個目は Anker SoundBuds Sport NB10 を購入したのですが、これは主にランニング用で利用する目的でした。まぁ、会社への通勤時に利用しても良かったのですが、デザイン的にはランで利用するみたいなのと、音的に重低音が強い傾向があるので『じゃ、別のをもう一個買ってみっかねぇ。』と、いうことになったのであります。

そして、購入したのが SoundPEATS の Q11 という Bluetooth イヤホンです。まぁ、価格が安かった。と、いうのもあるのですけどね;-)。

このイヤホン日本製です。取扱説明書が日本語だし、電源ボタン長押しで起動すると「電源をオンにします。」 Bluetooth 機器、僕の場合は SONY Xperia Z5 Compact ですが、これに無事に接続すると「接続が完了しました。」と女性の声で喋ってくれます。

ピロロロロォーン。と音ではなく、声が聞こえるのであります。この辺りは『お。日本製だねぇ。』などと思えて来るのであります。
日本製かは分かりませんが、日本の会社が作った製品。ってことですねf(^^;;。

この Q11 を購入してそこはかとなく嬉しいのが、収納ケース付き。ってところですね。よくある巾着袋ではなく、ハードケースが付いてきます。これは大きさも手頃で中々良いです。ケースだけあと 2,3 個欲しい。などと思えるのであります;-)。

Q11 は aptX に対応しているので高音質って言えるのかな? Xperia Z5 Compact も aptX に対応しているので恩恵が受けられます。

 
さてと。音に付いてですが、僕の感覚的センスで書いてみますが、上にも書いた通り Anker SoundBuds Sport NB10 と比べると自然な音がしますね。重低音がドカドカこないので安心して聞いていられる。

あと、 Bluetooth イヤホンなので、ある程度の音質は捨てています。

僕の Xperia Z5 Compact には 64GB の MicroSD カードを利用して約 55GB 分、曲数にすると 280 曲程度のハイレゾ音源を入れていますが、これを Bluetooth イヤホンで聞くのは本末転倒だぁ。などと思って入るのですが、通勤時の電車の中で聞く Bluetooth イヤホンの利便性と音質をトレードオフしたら、どっちがえんじゃい? となってしまうのでありました・・。
僕的は SoftBank SELECTION SE-5000HR を含めて二つのイヤホンと一個のスピーカーを持っていますが・・。

 
このイヤホンは耳にひっかけて、ケーブルを後ろにまわして利用するようなのですが、僕には首の後ろにケーブルを通すという文化が無いので前で垂らしています;-)。

二個目の Bluetooth イヤホンですが、最近はこれを主流に利用しているのでありました。

 

5月 182017
 

と、いうことで非常に簡単なエントリーですが、困っている人もたくさんいるのではないかと思うので書いておきます。あ。 ports-CURRENT を追いかけている人向けです。

Vmware ESXi 上で FreeBSD を動作させている人は ports から emulators/open-vm-tools/ もしくは emulators/open-vm-tools-nox11/ をインストールしているかと思われます。

これ、ずいぶん前から FreeBSD/amd64 10.3-RELEASE ではコンパイルが通らなくなっているんですよね・・。
lib/user/utilBacktrace.c の中でエラーが出ています。

FreeBSD な ML でも話題になっていますが、誰も相手にしてくれないようで・・。 orz

https://lists.freebsd.org/pipermail/freebsd-virtualization/2017-January/005186.html

けどもまぁ、一応、パッチを当てて FreebSD/amd64 でコンパイルが通るようにしたので、そのパッチをここに記載しておきます。
以下がパッチです。

--- lib/user/utilBacktrace.c.orig       2017-05-17 22:23:46.088791000 +0900
+++ lib/user/utilBacktrace.c    2017-05-17 22:23:53.932119000 +0900
@@ -54,7 +54,6 @@

 #ifdef VM_X86_64
 #   if defined(__GNUC__) && (!defined(USING_AUTOCONF) || defined(HAVE_UNWIND_H))
-#      define UTIL_BACKTRACE_USE_UNWIND
 #   endif
 #endif

 
これを patch-utilBacktrace.c という名で保存して emulators/open-vm-tools/files/ 辺りにでもほーりこんで make してみてください。

このパッチですが、注目点としてその上の行の ifdef VM_X86_64 の部分です。

実は手元に Vmware ESXi 上で動作する FreeBSD/i386 があるのですが、これでは無事に emulators/open-vm-tools-nox11/ のコンパイルが通りました。

ってことは、つまりはなんだい?

VM_X86_64 のとき(それはつまりはアーキテクチャが x86_64 のとき。と、いうことですね)に UTIL_BACKTRACE_USE_UNWIND が define されて lib/user/utilBacktrace.c をコンパイルすることになって、それがエラーになるのでコンパイルが通らない。と、いうことですね。

ならば UTIL_BACKTRACE_USE_UNWIND を define させなければ良いんじゃーねーのかい? FreeBSD/amd64 だからといってもデバッグ用のロジック(本当か? f(^^;)は FreeBSD/i386 にもないんだからいらねーだろ。って発想です;-)。

果たして、上記パッチを適用することにより FreeBSD/amd64 でも emulators/open-vm-tools-nox11/ のコンパイルが無事に通ったのでありました。

あ。コンパイルが通っただけでなく、利用もしていますが、今の所問題は出ていないです;-)。

 
すげー、お気楽なパッチですが、最新版の emulators/open-vm-tools-nox11/ が FreeBSD/amd64 に今すぐ必要・直ちに必要などという人は参考にしてみてください。

 
ずいぶん前からコンパイルが通ってないのだけど、まだまだ当分、直らないんだろうなぁ。などと思っております・・。

5月 102017
 

一個前のエントリは RPi ZERO で FreeBSD/arm 11.0-RELEASE が動いた。というお話でした。RPi 2/3/ZERO 上で動作する OS はディスプレーが無いので Zeroconf を動かして ssh hoge.local したいと思いますよね。

そして、以前のエントリで「Zeroconf 考察」というのを書いているのですが、デスクトップには Avahi をインストールして、サーバなどはより軽量な mDNSResponder をインストールすれば良いよ。などと書いているのですが、 mDNSResponder は core dump するなど、どうも動作があやすぃ・・。
なので、いっそのこと Avahi で統一したいモノだ。などと思っていたんですけども net/avahi-app/ は、サーバには不要なモノをインストールしすぎる。

そんなこんなで、もっと簡単にインストールできる軽量版の net/avahi-app/ の ports を作成しました。名前を avahi-app-small としていますが・・。
以下の URL にあるので、もし試してみたい。と、いう方がいましたらダウンロードしてみてください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-avahi-app-small-20170510.tgz

インストールは以下の通り。

# cd /usr/ports/net/
# tar xvzfp ~/ports-avahi-app-small-20170510.tgz
# cd avahi-app-small/
# make install

 
フツーの ports をインストールするのとなんらかわりはありません。が、注意点が一点だけあります。クライアント側の ports である dns/nss_mdns/ を make install するより先に avahi-app-small をインストールしてください。

ではどの辺りが違うのか? 軽量なのか?

標準の net/avahi-app/ の ports は以下をインストールします。

Shared Libs required:
        libintl.so.8
        libglib-2.0.so.0
        libgobject-2.0.so.0
        libexpat.so.1
        libgdbm.so.4
        libdaemon.so.0
        libdbus-1.so.3

 
devel/glib20/ や devel/gobject-introspection/ は関連性でサーバには要らんモノ (cairo とか freetype2 とか python27 とその関連性の ports など)をドドドとインストールしてとてつもないことになるし sysutils/gnome_subr/ なんてのも要らんし・・。

僕が作成した avahi-app-small の ports をインストールすると以下がインストールされます。

Shared Libs required:
        libdbus-1.so.3
        libintl.so.8
        libdaemon.so.0
        libexpat.so.1

 
これだけです。 非常に軽量にインストールできます。 Avahi 自体は dbus を利用しているので dbus は必須になってしまいますが、これはまぁしょーがないか。
ports からインストールするとコンパイルのために色々インストールされますが、あとで pkg autoremove するか、コンパイルの時間がもったいない場合には packages からインストールしてください。

 
ports の Makefile では LIB_DEPENDS は最小限にして CONFIGURE_ARGS では不要なモノを色々 disable にしています。これだけでずいぶんと小さくなりました。
GNOME 必要ねーし。 Makefile の以下の行は何のためにあるんだぁ?

avahi-post-patch:
    :
        @${REINPLACE_CMD} -e 's|%%RC_SUBR%%|/etc/rc.subr| ; \
                s|%%GNOME_SUBR%%|${GNOME_SUBR}|' \
                ${WRKSRC}/initscript/freebsd/avahi-dnsconfd.sh.in \
                ${WRKSRC}/initscript/freebsd/avahi-daemon.sh.in
    :

 
files/patch-initscript_freebsd_avahi-daemon.sh.in には +. %%GNOME_SUBR%% なんて最初から書いてあるし・・。

と、いうことで要らんモノを削ぎ落としていったらすごい軽量な(それはつまりは、余計なモノをインストールしなくて済む。と、いうことで、動作的に軽くなった。と、いう意味ではない;-) Avahi がインストールできるようになりました。
試したのは avahi-daemon avahi-dnsconfd avahi-browse くらいですが、これだけ動けば、一応問題はないでしょ? f(^^;;。

あ。ports 的にはノラです;-)。gnome@freebsd.org (メンテナ) に連絡して「make config で余計なのインストールするのやめるように、選択できるようにしてくれよー。」って、ツッコミ入れるのはアリだと思うのですけどねぇ・・。

今回の ports はサーバと FreeBSD/arm で動作させるために作成した。と、言っても過言ではないですが、これで自宅のデスクトップとサーバは Linux も含めて全て Avahi になった。あ。macOS は別だぁ;-)。

5月 022017
 

ゴールデンウィークのお楽しみ用に Raspberry Pi を二個購入しました。一個は Raspberry Pi 3 Model B で、もう一個は Raspberry Pi ZERO です。二個合わせて 5,000yenちょっと出た程度。

正規代理店の 株式会社 ケイエスワイで購入しました。
5,000yen 以上だと送料無料だというので二個買ってしまった。と、いう話なんですけども。

これで Raspberry Pi は 2,3,ZERO と三つになりました。

左から RPi2 -> RPi3 (ハイレゾ音源ボード装着) -> RPi ZERO と並んでいます;-)。

Raspberry Pi 3 Model B は volumio2 で利用予定です。 オンボードの Wifi チップは FreeBSD では利用できませんが、Linux では利用できるので。ちなみに volumio2 でも利用可能です。おかげで USB な Wi-Fi が余ったので他の RPi に回せます。

今まで利用していた Raspberry Pi 2 Model B は 自宅で FreeBSD マシンとして動作させるべく FreeBSD/arm 11.0-RELEASE をインストールしました。以前このブログでもエントリを書いているのでサクっと動作します;-)。

ports のコンパイル環境も母艦側を FreeBSD/amd64 10.1-R から 11.1-R にバージョンアップして、 qemu 側も新たに FreeBSD/arm 11.0-R 用のを作成したのでコツコツと最新の ports-CURRENT を更新して行きたいと思います。

最近の FreeBSD/arm 11.0-R は pkg install が利用できるのでずいぶんと楽にはなりましたね。ただ、ちょっと古い。そんな場合は以下の URL を覗いてみてください;-)。

http://distfiles.icmpv6.org/freebsd:11:armv6:32/latest/All/

と、いうことで、今回のネタは Raspberry Pi ZERO についてです。

 
Raspberry Pi ZERO は値段が 600yen で非常に手頃な値段です。外部接続には電源供給用の MicroUSB と、USB 機器接続用の MicroUSB のポートがあります。ディスプレーは MiniHDMI ポート、これはちょっと痛かった・・。 MicroHDMI ポートだと Diginnos DG-D08IWBと互換があるので嬉しかったのですが・・。

今回は HDMI への出力を諦め、シリアルコンソールを利用しました。

そもそも RPi ZERO には GPIO ピンがなくて穴が空いているだけです。なのでシリアルコンソール用のピンをハンダで付けてあげる必要があります。

まず、ピンの手配ですが、昔利用していた PC のサウンドカードから 3 本ほど調達しました。下の写真のような感じ。

うまく固定もしたのでこれを穴の中に通します。ハンダ付けはしません。ちょっとななめにすると接触するのでハンダ付けしなくとも利用できました。

OS は FreeBSD/arm 11.0-RELEASE をチョイス。イメージは以下を利用しました。

FreeBSD-11.0-RELEASE-arm-armv6-RPI-B.img.xz

ちなみに RPi2 では以下のイメージを利用します。

FreeBSD-11.0-RELEASE-arm-armv6-RPI2.img.xz

RPI2 のイメージも RPi ZERO で試しまたがブートしませんでした。

RPI-B なイメージを MicroSD に dd し SD カードを差し込んで電源オンっ!! 無事に起動したのであります。

起動時の情報は以下になります。

dmesg
sysctl -a

僕は MIcroUSB -> USB 変換ケーブルで USB Wi-Fi や USB NIC を付けてネットワークリーチャブルにしたあとリモートからの SSH と NFS で作業を実施。環境構築が完了したのでありました。

そーそー。 RPi ZERO の ports/packages は FreeBSD/arm 11.0-RELEASE RPI2 の環境で作成したものがそのまま動作しました。 RPi2 と ZERO ではブート用イメージファイルが違うので ports/packages も違うのかな?などと思ったのですが、どちらも 32bit なバイナリで、同一のものが動作します。幸せなことです;-)。

と、いうことで特に問題もなく RPi ZERO は FreeBSD/arm が動作しました。

 
値段が 600yen で、約 5cm ほどの最小の FreeBSD 環境が整った。と、いうことですね。ゴールデンウィークの暇つぶしにピッタリなおもちゃです;-)。

4月 262017
 

ハイレゾ楽曲を聴くために SONY Xperia Z5 Compact E5823 購入したのですが、こいつは SIM アンロック済みのワールドワイド版です。 SONY は早々と Android7 にバージョンアップする。と、アナウンスがあったのですが、キャリア向けのバージョンアップは確か、随分前にありました。僕の持っているヤツはようやっと Android7 が降ってきました。

下記の URL で確認すると、Customized UK 版は今年の三月に、アップデートがあったようです。僕のやつは Customized HK なので香港版だったようです。香港版が今回やってきた。と、いう感じですね。

https://xpericheck.com/device/E5823

ちなみに、自分の Xperia Z5 Compact E5823 がどこ向けなのか確認する方法は、以下に電話します。

*#*#7378423#*#*#*

表示されたメニューから [Service info] -> [Software info] と進み [Customization Version] を確認すると良いです。僕のは 1298-7299 でした。

 
バージョンアップは 30 分程度で完了し、以下のようになりました。

さてと。 Android7 になってどの辺りが変わったか? と言われれば、あまり良くわかりません。ただ、デグレードした点で気がついた点は以下の二つ。普段から良く使う機能だけに、非常に不便です・・。 orz

1).ボリューム調整がおおざっぱになった
Android5 の場合、例えば 0 から 100 までが 20 きざみだったとしたら Android7 は10 きざみになった感じ。一個のメモリで音量の幅が大きくなったので、中間の大きさが出せなくなった。

2).データ使用の画面が貧弱になった
Android5 は右肩上がりの折れ線グラフ的な表示だったのに Android7 は横方向への棒グラフになった。そして、どのアプリがどのくらい LTE のデータ量を利用しているか表示してくれなくなった。

以上不便な点を二つ。

あと、電話をかけるアプリが変わって使いにくくなったけど、格安 SIM を入れていて通話はしないのであまりインパクトはないかな。

 
と、いうことで、僕の持っている Xperia Z5 Compact はまだまだ現役で利用可能な状態です;-)。

4月 052017
 

FreeBSD の ports CURRENT を追いかけていると svn update したあとに portmaster -D -a するクセが付いているのでそれをやってバシバシ最新の ports/pkg を利用しているんだけど・・。

だいたい、時期を同じくして portmaster -D -a してのバージョンアップと Xming の利用が一緒になり、前のエントリの中で『Xming では mozc で日本語入力ができない。』などと書いていたのですが、なんとっ!! よくよく調べてみると GTK-3.0 を利用しているアプリの日本語入力ができなくなっていることがわかった。

KDE 系のアプリは Xming 経由や、素の Xorg 上では日本語入力ができるけど GTK-3.0 なアプリが日本語入力できなくなっていた。

最近は GTK-2.0 から 3.0 への過渡期で、僕の場合は GNOME3 は使ってないんだけど emacs や firefox は GTK-3.0 を明示的に指定して ports のコンパイルをしているし xfce4-terminal も default で GTK-3.0 を利用するようになっている。

と、いうことで今更ながら GTK-2.0 の IM 周りの設定を見直してもショウガない。 xfce4-terminal などは ldd で確認すると libgtk-3.so.0 を利用しているしね。
と、いうことで GTK-3.0 の日本語入力の設定の見直しです。

あ。 GTK-3.0 のアプリで日本語が入力できなくなったのは 03/31 に svn update して portmaster -D -a してからですね。その前まではちゃんと日本語が打てていました。

 
GTK-3.0 の設定はインストールすると、以下のディレクトリに散りばめられます。

・/usr/local/lib/gtk-3.0/3.0.0/
・/usr/local/etc/gtk-3.0/
・$HOME/.config/gtk-3.0/

この中に IM に関する設定ファイルが必要なります。

ちなみに GTK-2.0 の場合には日本語入力するためのファイルは以下になります。

・/usr/local/etc/gtk-2.0/gtk.immodules

このフアイルのおかげで、環境変数に以下を設定した場合に GTK アプリで日本語入力ができるようになります。

export QT_IM_MODULE=xim
export GTK_IM_MODULE=xim
export XMODIFIERS=@im=fcitx

exec mozc start
exec fcitx

 
僕の場合は QT_IM_MODULE を設定して KDE アプリで xim を利用し、 GTK_IM_MODULE も同様で、日本語入力には fcitx を mozc 経由で利用しています。

今回は GTK-3.0 のアプリについてですが、 GTK-2.0 の頃には /usr/local/etc/gtk-2.0/gtk.immodules があったのですが /usr/local/etc/gtk-3.0/ の下にはそんなファイルがありません。

なので作ってあげる必要があります。その場合、以下のコマンドを打ちます。

# cd /usr/local/etc/gtk-3.0/
# gtk-query-immodules-3.0 > gtk.immodules

 
さてと。準備完了。では xfce4-terminal を起動して Shift+SPACE を押してと。あれま。ダメだ・・。
と、いうことで上記の設定ファイルを用意してもダメなようです。

しょーがないので GTK-3.0 のドキュメントを読んでみることにしましょう。

https://developer.gnome.org/gtk3/unstable/gtk-running.html

上記の URL に書かれている説明では immodules の設定ファイルは immodules.cache という名になっているようです。では先程作成したファイルを mv して名前を変更して再度トライ。

しかし、ダメなようです。あれま・・。

上記のドキュメントを読むと直接ほーりむようなことが書いてあるので ports がフアイルをインストールしたディレクトリに直接用意してみることにします。

# cd /usr/local/lib/gtk-3.0/3.0.0/
# gtk-query-immodules-3.0 > immodules.cache

 
これで再度 xfce4-terminal を起動して Shift+SPACE を押してみます。おぉっ!! 今度は無事に fcitx の画面が表示されて日本語が打てるようになりました。メデタシメデタシ。

と、いうことは ports のバグっぽいので、今後バージョンアップされたときには直ることでしようなぁ。 ちなみに 03/31 の ports でインストールされた GTK-3.0 のバージョンは gtk3-3.18.8_4 です。
次にバージョンアップするとしたら gtk3-3.18.8_5 かな? 😉

 
GTK-3.0 のアプリで日本語が今まで打てていたのに急に打てなくなった。と、いう方は上記のように試してみてください。

4月 032017
 

遅ればせながら感が強いのですが、 Xming という Windows アプリを使ってみました。それについて、気付いた点を 2,3 書いてみたいと思います。

普段は会社でも FreeBSD+Xorg 環境なのですが、会社でフル HD なディスプレーが支給されて『わーいっ。X の画面も広くなるぞぉ。』などと思っていたのですが D-SUB 15pin のディスプレーカードと VESA では 1920×1080 の画面が表示できない。と、いうのを知ってアングリ・・。 orz

xrandr しても 1920×1080 が表示されないし、 xorg.conf に Modeline 書いてもダメだし。で、色々悪あがきしましたが、FreeBSD で 1920×1080 な画面を利用するのは諦めました。
新しい PC を買ってもらえれば解決すると思うんですが・・。

 
と、いうことで Windows10 から X のアプリを表示させるために Xming の利用を開始した。と、いうことなんですけども、色々ウェブで探してみると以下のようなものを拾ってくると OK らしい。と、いうことが解りました。

・Xming-6-9-0-31-setup.exe
・Xming-mesa-6-9-0-31-setup.exe
・Xming-fonts-7-7-0-10-setup.exe

以下の URL からダウンロード可能です。

https://ja.osdn.net/projects/sfnet_xming/releases/

mesa 版を利用すると OpenGL が使えるのかな? 好みでどうぞ。

あと、PuTTY が必要なようなんだけど、必要なモノは以下のようです。

・putty.exe
・plink.exe

URL も一応書いておきます。

http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

が、今回は PuTTY は利用しません。 OpenSSH-Win64 を利用します。

・OpenSSH-Win64.zip

以下の URL からダウンロードします。

https://github.com/PowerShell/Win32-OpenSSH/releases

OpenSSH-Win64 は展開してからフォルダをとりあえずデスクトップに置いておきます。そして Xming と Xming-fonts をインストールします。

インストールが終わったら C:\Program Files (x86)\Xming\ の中にデスクトップの OpenSSH-Win64\ssh.exe を入れてあげると準備が整います。

使い方については様々なサイトで書かれているのでここでは書きませんが、一点だけ。 Xlaunch を起動して次々に画面を遷移していきますが、以下にたどり着きます。

上のキャプチャにもありますが、Using SSH (ssh.exe) にチェックを入れれば良いです。
色々試しましたが plink.exe ってのは機能的には ssh.exe と一緒なのですね。 DOS のコマンドプロンプトから plink.exe を利用すると ssh ログインできるのね。普段 PuTTY 使ってないので知らなかったです。ぼく。

 
さてと。ここから、僕はハマッたのですが、ちょっと書いておきます。

・Hyper-V をインストールしていると Xming は ssh できねくね?

ssh.exe 単体で FreeBSD にログインしようとすると無事にログインできるのですが Xming から ssh.exe を実行すると、ログインできないのであります。最初は plink.exe で試していたのだけど、上記のキャプチャのように ssh.exe でも大丈夫みたいだったので試したのですが、Xming が利用できない状態でした。

僕は Windows10 64bit の環境で FreeBSD を起動するために Hyper-V をインストールしていたんだけど、画面の描写が遅いので、今回サクっと Hyper-V を削除しました。

その後はサクっと Xming が動作し、 X アプリもガンガン飛んでくるようになりました。

Hyper-V をインストールすると、ネットワークインターフェースが bridge になってしまうので『Hyper-V が怪しいなぁ。』などと、メドは付けていたのですが、実際に Hyper-V を削除して試してみると無事に接続できたので、やはり。と、いう感じでしょうか。

たまたま、僕の環境だけなのかも知れませんが、 Xming が ssh 接続できない人は Hyper-V インストールしていたりしませんか?

 
さてと。 X アプリが飛んでくるようになったけど、キーがおかしくね? Ctrl キー使えないじゃーん。などと思ってしばらく難儀していたのですが、あ。僕の環境では Xkeymacs を利用していたわ。

と、いうことで Xkeymacs を OFF にすると無事に動作するようになりました。

・Xkeymacs をオフにすると Ctrl キーが利用できるようになる。

と、いうことで、無事に Windows10 上で X のアプリが利用できるようになったのでありました。一安心です;-)。

あぁ。mozic 使えないですね。例えば Firefox では日本語入力できない。emacs の場合は mozc.el を利用しているので日本語入力できます。

まぁ、この辺りはしょーがないのかなぁ。

と、いうことで Xming のの使い方について、書いてみました。実際に使ってみると中々良い感じです。タスクバーとかも欲しくなってしまう;-)。

 
さてと。話は変わるのですが、同じ Windows 上の環境と、いうことで Windows on bash の話を最後に書いてこのエントリを終了します。

Anniversary Update で Bash on Windows が提供されて bash が利用できるようになりました。しかし、 ssh した先で日本語を表示などすると悲惨な状況だっんですけどね。しかし 2017/04/11 から提供される Creators Update では正しく日本語が表示できるようになりました。これは嬉しい。

僕の場合は Windows Insider Previrew で 04/01 に Creators Update が降ってきたのですが、これで試したらもーバッチリな bash になっていました;-)。

皆さんも是非試してみてください。もしくは Creators Update リリースまで待ってから試してみてください;-)。

3月 112017
 

僕が持っている ThinkPad e145 は FreeBSD がインストールされていて、 suspend/resume するんだけど、resume 時、それはつまり目覚めたとき、パカっとフタを明けたときに default gateway が消えていたりして、ネットワーク的にはちょっと問題があったんですね。
まぁ、目覚めたあとにいつも route add していたんですけども。

そんなこんなで、resume 後に route add が必要なわけ、挙動をいよいよ調査してみることにしたんですね。

僕の FreeBSD の環境は以下です。

・FreeBSD/amd64 10.1-RELEASE
・ネットワーク環境は USB 接続の run0 -> wlan0

OS はまたもっと面白いことになってます。カーネル は 10.1-RELEASE でユーザランドが 10.3-RELEASE です。やってはいけない環境で動かしている。と、いうことですね。どうしてこんな環境で動かしているかについてはあとで少しお話します。

今の話題は resume 後に routing テーブルが消えている点についてですね。話を元に戻しましょう。

 
suspend して、その後 resume したときに起き上がってきた FreeBSD の動作ですが、だいたい以下のようになっているようです。

0. 実は suspend 時に USB デバイスが全部抜去される
1. resume 後に USB を認識してデバイスが接続される
2. resume 後に /etc/rc.resume が動く
3. devd が色々良きに計らってくれる (僕の環境では webcamd の再起動と pccard_ether のすーたと)
4. 自分で記述したスクリプトの動作
5. /etc/rc.resume の終了

まぁ、こんな感じですが、問題は 5. ですかね。

suspend で USB 機器が外されたということはつまりは wlan0 が無くなった。と、いうことなので、これで routing テーブルは全て消えます。
その後 resume して USB 機器が接続され wlan0 が認識され、wpa_supplicant が動き出してネットワークインターフェースには IP アドレスが付加されるようになります。

じゃぁ /etc/rc.resume の中で route add すりゃいんじゃね?

とか思うんですが /etc/rc.resume 内で route add してもそのときはまだ wlan0 に IP アドレスが付く前なので意味無いんですよね。

じゃぁ /etc/rc.resume の中で route add する前に sleep 30 とかすりゃいんじゃね?

とか、次に思いますよね。ところがっ!! /et/rc.resume はちょっとおかしな動作をしていて、 /etc/rc.resume が動作し終わったあとに wlan0 に IP アドレスが付加されるようです。

なので /etc/rc.resume の中で

sleep 30
route add default 192.168.1.1
route add -inet6 default fe80::1

 

などと書いても全く意味ない状態です。では、どうするか?と、いうと、上記の部分をスクリプト、例えば /usr/local/bin/routeadd.sh などとして準備します。
/etc/rc.resume には以下のように書きます。

/usr/bin/logger -t $subsystem route add default.
/usr/local/bin/routeadd.sh &

 

ここで注意しなければならないのは、スクリプトを記載したあと、最後に “&” を付けてバックグラウンドで処理させる必要があります。
動作的には /etc/rc.resume の実行後に wlan0 に IP アドレスが付くので /etc/rc.resume が実行中に sleep 30 してもまるで意味なくて route add されない状態です。なので “&” を書いてバックグラウンドに飛ばして、バックグラウンドのスクリプトが sleep 30 している間に /etc/rc.resume が終了して wlan0 に IP アドレスが付いたあと、 sleep 30 が終わり route add されるようにしないとダメなのであります。

この現象は USB NIC を利用しているからかもしれません。
動作的に resume 後に routing デーブルが消えていて、毎回、自分で route add 打つのが困難な人は上記のようにすれば良いのではないかと思います。

 
で、もう一個のネタを簡単に。

上のほうにも書きましたが、僕の ThinkPad e145 上で動作している FreeBSD はカーネル は 10.1-RELEASE でユーザランドが 10.3-RELEASE です。これ、FreeBSD の動作保証対象外の構成らしいですね。カーネルは新しく、ユーザランドが古い場合には問題ないらしいですが・・。

どうしてこんな環境で動かしているかというと ThinkPad を使っている人は 10.2-RELEASE 以降、suspend して resume したら LCD の明るさが最大になってしまい変更できなくなってしまったんですね。
10.1-RELEASE までだと Fn7,8 などで明るさが変更できた。 acpi_ibm や acpi_video がなくとも変更ができた。しかし、10.2-RELEASE 以降では Fn7,8 ボタンが効かなくなって、acpi_ibm の dev.acpi_ibm.0.lcd_brightness も有効にならなくて acpi_viode の hw.acpi.video.lcd0.brightness も使えなくなった。
resume 後に明るさを変えることができなくなったので、僕はいつまでもカーネルは 10.1-RELEASE を使い続けている。と、いうことです。

あと、別の手段としては ports から sysutils/acpi_call/ をインストールして ACPI のパラメータを表示したり変更したりできるようですが \_SB_.PCI0.VGA.LCD._BCM なパラメータなどをいじったりするなど、ちょっと試してみましたがダメでした。

acpi_call のコマンドイメージをちょっと書いておきます。使うには kldload acpi_call.ko する必要があります。

# acpi_call -vp '\_SB_.PCI0.VGA.LCD._BCM' -o i -i 50
Path: \_SB_.PCI0.VGA.LCD._BCM
Number of arguments: 1
Argument 1 type: Integer
Argument 1 value: 50
Status: 0
Result: 1

 
acpidump -d の結果を確認すると _BCM ってのが “Brightness Control Method” らしいです。他にも _BCL ってのがあって、こいつは “Brightness Control Levels” らしいです。
acpi_call で _BCM の値を 50 に変更してあげる。ってのが上記のコマンドと、その結果です。
しかし、値は反映されない・・。 orz

 
ThinkPad でも Nvidia のグラフィックスカードを利用しているヤツは Nvidia のツールで画面の明るさを変えられたり Intel の場合は graphics/intel-backlight/ などで画面の明るさを変えられるらしいです。
僕の ThinkPad e145 は Radeon のチップなので・・。orz

多分 10.2-RELEASE 以降で ACPI 周りに変更が入ったのでしょうなぁ。

ThinkPad e145 は BIOS モードと UEFI モードの両方で 11.0-RELEASE で試しましたが画面の明るさは変えることができませんでした・・。

と、いうことでももうしばらく、ってか、壊れるまで? 10.1-RELEASE の利用は続きそうです・・。

2月 282017
 

多分、全然、誰も知らないと思うのですが、 FreeBSD の ports に net-mgmt/sysmon/ というのがあります。デーモンモードでサーバなどを監視するプログラムです。開発自体はもうずいぶんと前に止まっている。裏を返せば枯れた監視プログラムなのであろうと思われますが。

以下の URL が参考になるでしょうか。

https://puck.nether.net/sysmon/

プロトコル的には SMTP, IMAP, HTTP, TCP, UDP, NNTP の監視に対応しています。また PING に対応しているのと、個別にポート番号を指定しての監視も行えます。

 
今回、このプログラムを改修するバッチを書いたのでここに掲載しておきます。改修内容は以下です。

o.pingv6 で IPv6 アドレスを記載できるようにした
o.監視ホストの最大数が 1,024 個だったので 4,096 個に拡張した

以上二つの patch が含まれた net-mgmt/sysmon/ の ports の tar 玉を以下の URL に置きました。

http://icmpv6.org/Prog/FreeBSD_ports/ports-sysmon-20170227.tgz

新しく files/ というディレクトリを作成し、そこに二つのパッチを入れてあります。

IPv6 のパッチについてちょっと説明すると監視用の設定ファイルに “type pingv6;” と記載して、監視できるのに “ip” のところに IPv6 アドレスを記載できないんですね。なので IPv6 アドレスを記載できるようにしました。

まぁ /etc/hosts に書けばいーじゃーん。って話もあるんですが、一応 IPv6 記載 OK なパッチを書いた。と、いうことです。

 
監視対象ホストを 1,024 -> 4,096 に拡張してどうすんだ? という話もあるんですが、大規模ネットワーク用の監視になるでしょうかねぇf(^^;;。

実は sysmond を一台のサーバで複数プロセス起動する改修を当初考えたのですが、複数のプロセス(スレッド)を立ち上げると、メモリ上に持っている(1,024個の)監視対象ホストの情報テーブルを各プロセスがシェアしてしまい、上書きしつつ値がぐちゃぐちゃになってしまったので、派手な改修は断念してただ単に対象数を増やした。と、いうことですf(^^;;。

もし、必要な人いましたら使ってみてください。多分、誰もいないであろうと思われますがf(^^;;。

2月 222017
 

ある意味悲しいのかもしれないですが、僕は今も昔も IPv6 を利用するときに IPv6 Over IPv4 トンネルを利用する機会が多いです。
そもそも FreeBSD をずっと利用しているので dtcp を利用すると簡単に接続できます。 FreeBSD の ports 的に言うと net/dtcp になりますが、サーバ側とクライアント側の両方がインストールされます。通常、サーバ側に net/dtcp をインストールして dtcpd を利用し、クライアント側には net/dtcpclient をインストールしたりしますが、まぁ、とりあえずは net/dtcp をクライアント側にもインストールすることで、グローバルアドレスがあれば簡単に IPv6 Over IPv4 なトンネルが掘れるのであります。

が、そろそろ FreeBSD でのルータ機能は引退させたいものだ。などと思っていて、 NTT-X で超格安の Cisco841J を買いそびれた今、 VyOS で実装するしかなんかべ。と、なり IPv6 Over IPv4 トンネル で利用する dtcp を引退することにしたのでありました。

今回は VyOS と FreeBSD との間で IPv6 Over IPv4 トンネルを掘る設定を書いてみたいと思います。何を今更。感が満載ではありますがf(^^;;。

 
まずは構成図を。

真ん中の黄色いのが IPv6 ゲートウェイなルータでで FreeBSD/amd64 10.3-RELEASE から VyOS-1.1.7 にネットワーク機能を変更しました。
周りのピンクのセグメントは dtcpclient が動いていたのですが、これを VyOS に接続するために設定変更しなおします。

 
1. ゲートウェイスイッチ側の設定
FreeBSD から VyOS にリプレイスしたので設定は VyOS の設定になります。だいたいこんな感じ。

    tunnel tun10 {
        address 2001:470:fe36:1111::1/64
        description "# IPv6 Tunnel No1 #"
        encapsulation sit
        local-ip 192.168.1.210
        multicast disable
        policy {
            route mss
        }
        remote-ip 172.16.1.211
    }

 
VyOS は基本的に Linux なので sit なんてのが見えますが、こんな感じの設定ですね。

・local-ip で自分の IPv4 アドレスを設定
・remote-ip には接続先 IPv4 アドレスを設定
・policy route mss は IPv6 Path MTU Discovery にはまらないためのおまじない

以下の設定で MSS の値を調整しています。

policy {
    route mss {
        rule 5 {
            protocol tcp
            set {
                tcp-mss 1386
            }
            tcp {
                flags SYN
            }
        }
        rule 10 {
            protocol tcp
            set {
                tcp-mss 1386
            }
            tcp {
                flags SYN,RST
            }
        }
    }
}

 
簡単ですねぇ;-)。
ただ、 IPv6 Path MTU Discovery にハマると http とか接続できない問題が発生するのでその対応が必要になります。 tcp-mss 1386 の数値の部分は自分の環境によって変わるので過去に書いた記事を参考にしてみてください。

 
2. dtcpclient 側の設定
ルータ側の設定が終わったので、次にクライアント側の FreeBSD の設定になります。

とりあえず、以下のコマンドを打てばトンネルは掘ってくれます。

ifconfig gif0 create
ifconfig gif0 tunnel 172.16.1.211 192.168.1.210
ifconfig gif0 inet6 2001:470:fe36:2222::1 2001:470:fe36:1111::1 prefixlen 128
route -n add -inet6 default 2001:470:fe36:1111::1
ifconfig gif0 up

 
起動時に IPv6 トンネルを自動的に掘りたい場合はどうしますかねぇ・・。 /etc/rc.conf に色々設定するのが大変なので、僕の場合は /etc/rc.local というファイルを作って、そこに記述して起動時にどうにかしてもらっていますf(^^;;。

 
3. 確認方法
両方で設定が完了するとあとは確認になります。FreeBSD 側から以下のコマンドが有効ですね。

$ ping6 ff02::1%gif0
PING6(56=40+8+8 bytes) fe80::a1f:29ff:fefe:9696%gif0 --> ff02::1%gif0
16 bytes from fe80::a1f:29ff:fefe:9696%gif0, icmp_seq=0 hlim=64 time=0.089 ms
16 bytes from fe80::ccaa:f1d2%gif0, icmp_seq=0 hlim=64 time=8.663 ms(DUP!)
16 bytes from fe80::a1f:29ff:fefe:9696%gif0, icmp_seq=1 hlim=64 time=0.047 ms
16 bytes from fe80::ccaa:f1d2%gif0, icmp_seq=1 hlim=64 time=7.081 ms(DUP!)
^C

 
二つのリンクローカルアドレスから ping6 の応答があれば無事に接続しました。これで IPv6 Over IPv4 トンネルが掘れました。
グローバル IPv6 に ping6 を打って返ってこない場合はルーティングに問題があるので、ゲートウェイ側の設定を見直すなどしましょう。

 
と、いうことでゲートウェイ側を FreeBSD から VyOS に移行し、更に dtcp の利用をやめて接続しても、いとも簡単にトンネルが掘れました。良かったですぅ;-)。