6月 222015
 

遅ればせながらですが、Raspberry Pi2 MODEL B を購入しました。まぁ、世の中はボーナスセール開催中ですしねぇ。

と、いうことで Amazon で手頃な値段で売っていたのでゲットです。ケース付き本体が 5,980yen 、 そこにヒートシンク 850yen が無料で付くというのでそれをそのまま購入。翌日には配送されました。

筐体が届き OS はどうすんべかいのお・・。などと悩んでいたのですが FreeBSD/arm をインストールすることにしました。

と、いうことで初めての FreeBSD/arm です。今回から数回に分けて Raspberry Pi2 で FreeBSD/arm が動くまで、動いた後について書いて行きたいと思います。

 
1). 購入
まぁ、 Amazon でボタン押しただけですf(^^;;。
届いたのはこんな感じ。

IMG_2092_raspi2_1

箱とケース付きの本体と、そして、ヒートシンクパック。これで送料込み 5,980yen だったのでまぁ、ボチボチかな。

電源ケーブルがありません。どうすんねん? とか思ったら MicroUSB から電源供給できるんですね。スマホの充電ケーブルとかが代用できます。僕は docomo の MEDIAS N-04D 購入したときに合わせて購入した電源コンセント -> MicroUSB で無事に起動しました。ふふふ。

 
2). OS は FreeBSD/arm をチョイス
ウェブなどで調べたのですが、まぁ、以下の URL が参考になるでしょうか。

FreeBSDarmRaspberry Pi 2 image

ここを見て色々やろうとしました。まず rpi2.img ってのはなんだべ? ってことろから入るのですが、それはつまりは、以下の URL からダウンロードしてきた USB スティックイメージのことなんですね。

ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv6/ISO-IMAGES/11.0

僕は今回は FreeBSD-CURRENT をチョイスしました。そして FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20150618-r284544.img というファイルを利用しました。
ダウンロードした img ファイルを上記 URL のように mdconfig とか打ったりしたんですが、面倒になったのでいきなり手持ちであった 8GByte の MicroSD カードに素の img ファイルを dd コマンドを叩き書き込んでみました。

# dd if=FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20150618-r284544.img of=/dev/da1 bs=10240

 
of= は自分のデバイスに合わせてください。あ。上記コマンドは FreeBSD/amd64 上で実行しています。

MicroSD カードに OS が入ったので Raspberry Pi2 に突っ込んで電源投入です。あ。 USB キーボードと HDMI のディスプレーを用意してから電源投入しました。

するとな。なんとっ!! サクっと OS が起動しました。すげー。今の FreeBSD-CURRENT はスゲーよっ!!

USB キーボードも認識するし、 USB Wi-Fi を接続したら run0 で認識するし、 CPU は四つ認識しているし、あっと言う間に Raspberry Pi2 から FreeBSD/arm が起動しました。

あ。一点だけ。 root パーティションが見つからないのでブートは途中で止まります。

boot> ufs:/dev/mmcsd0s2a

 
として起動するとサクっとブートして login プロンプトが出ました。
default のユーザ名 root でパスワードも root でサクッとログインできました。ログイン後に /etc/fstab を以下のように変更します。

# Custom /etc/fstab for FreeBSD embedded images
#/dev/ufs/rootfs /       ufs     rw      1       1
/dev/mmcsd0s2a   /       ufs     rw      1       1
/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0
md /tmp mfs rw,noatime,-s30m 0 0
md /var/log mfs rw,noatime,-s15m 0 0
md /var/tmp mfs rw,noatime,-s12m 0 0

 
これで無事に起動します。 8GByte MicroSD は 8GByte よりちょっと小さい / バーティションが用意されます。

あとは freebsd という su できる一般ユーザがあるのでこれを適当に利用したり削除して自分のアカウントを作成したりして、 /etc/rc.conf を書き換えたりとか、自分の好みの FreeBSD に仕上げて完成。

dmesg は以下になります。

dmesg

FreeBSD/arm には PCI BUS ってのは無いようですね。pciconf -lv は表示してくれません。
あと、 sysctl -a を見ると dev.cpu.0.freq で CPU 速度が 900MHz と 600MHz で可変のようですが、 900MHz で動作しているところを見たことがありませんf(^^;;。
dev.cpu.0.temperature もきっちりとあって、温度が取れます。僕のはヒートシンク付きなので高いときで大体 44゜C くらいでしょうかね。

 
Raspberry Pi2 を知らなくて FreeBSD にうんと詳しい人(あ。それは僕のことです;-P)が接すると大体一時間くらいで遊べるようになります。

 
3). /usr/prots どうするよ?
一応 NFS まで動かして自宅の ports サーバの /usr/ports を NFS マウントして /usr/ports/ports-mgt/pkg/ を make してみたのですが、やはり遅くてダメですね。途中で Ctrl-C して止めてしまいました。

クロスコンパイル環境を FreeBSD/amd64 に作らないとダメっぽい。

とわ言いつつ、一応、自分で make した packages を用意しました。以下の URL にあるので欲しい方はダウンロードして pkg add してみてください。

http://distfiles.icmpv6.org/distfiles/packages/All.armv6/

拡張子が tbz なのは僕が make したモノ、 txz は README.txt に書かれている URL からダウンロードしたモノになります。
上にも書いている通り僕は FreeBSD-11.0-CURRENT の r284544 を利用しています。そこでコンパイルしたモノになります。 make config は自分の趣味で指定してます。極力余計なモノをインストールしないオプションを指定しています;-)。

 
と、いうことで今回はここまで。

FreeBSD-CURRENT の image ファイルを持ってきて dd して Raspberry Pi2 で起動すると、あっと言う間に起動します。すげー簡単に FreeBSD/arm が遊べるようになります。

次は FreeBSD/amd64 でクロスコンパイル環境が作れた。と、いうネタで書けると良いなぁ;-)。

 
僕はヒートシンク(プロモーションだった;-)付きで 5,980yen で購入したんだけど、タイミングが良かったのかな?

 

3月 162015
 

さくらインターネットが「さくらのレンタルサーバ」を契約している人を対象として iPhone・Android アプリである「さくらぼけっと」を提供し始めました。

プレスリリースはこちら

「さくらの VPS」ではなく「さくらのレンタルサーバ」であるところがミソか;-)。ちなみに僕はもう随分と長いこと「さくらのレンタルサーバ」を契約しているので今回の「さくらぼけっと」が利用可能な人です。
「さくらのレンタルサーバ」は 100GByte の HDD 容量が利用できますが、ウェブコンテンツと各種ログやメールなどでも 100GByte というのは到底使い切れる容量ではないのですねぇ。
今回のアプリはそんな状況においては渡りに船。と、いうことで早速 iOS 版と Android 版をダウンロードして実際に利用してみました。

IMG_1058_sakura_pocket_1

今回はコテコテの FreeBSD ユーザ的な「さくらぼけっと」の使い方についてそこはかとなく書いてみます。

 
1). スマートフォン用アプリの利用
iOS 版も Android 版もログイン用ドメインとパスワードを利用することにより利用可能な状態となります。
写真のアップロードとダウンロードなど、スマートフォンユーザの利用形態としては特に問題は無く、フツーに動作すると思います。

ただ、気になるのが一点。Wi-Fi ではログインできるんだけど、携帯電波ではログインできないことがありました。 どうしてログインできないのか表示してくれないのが悲しいところか。もしかしたらコンテンツの .htaccess の “deny from all” の行でも見ているのか? とか思えるんだけどどうなんだろう?

 
2). ssh して ls してみたらっ。ん!?
スマートフォンでしかアクセスしないのであれば全然問題ないんだけど、そもそも「さくらのレンタルサーバ」は ssh が利用できるし scp も利用できる。普段から FreeBSD を利用している人は scp で Microsoft Office Word の文書をサーバ上にアップして さくらぼけっと アプリ経由でアクセスし、その後 Word で開いたらいんじゃね? とか、パっと思うので、勢いそのままに実際に試してみました。

あいや・・。 orz

日本語は文字化けして全然ダメじゃん。状態。どーして文字化けが起きるのだっ!! 早速調査開始です。

あ。さくらぼけっと アプリは ~/sakura_pocket/ に対してアクセスしますね。この中で色々やるのが良いかと思われます。

 
3). アプリの文字コードと端末の文字コード
「さくらのレンタルサーバ」では僕は ssh したときには tcsh を利用していて文字コードは UTF-8 を利用しています。以下は ~/.tcshrc の抜粋です。手元で利用している FreeBSD でも同じ設定をしているので、僕の環境は全ての OS においては既に UTF-8 になっています。

# SETENV Japanese
setenv LC_TIME C
setenv LANG     ja_JP.UTF-8
setenv LC_CTYPE ja_JP.UTF-8

 
通常、この状態で日本語名がついたファイルを scp すると、無事に保存できて「さくらのレンタルサーバ」上で ls するとちゃんと表示できます。
あ、利用している端末(ターミナルソフト)は xfce4-terminal だったり konsole だったり OSX の iTerm だったりしますが、全て UTF-8 です。

しかし、さくらぽけっと アプリからアクセスすると文字化けするし、さくらぽけっと アプリで作成した日本語ディレクトリは ssh で ls すると文字化けしていて ???? となる。どうやらファイル名の日本語文字コードが合ってないようですねぇ。と、いうことで色々調べ出しました。

 
4). 文字コードの確認
まず、判りやすいこととして さくらぽけっと アプリからアクセスして “あ” というディレクトリを作成します。そして、そのときの状況を ssh して調べてみます。

$ ls -1
??/

 
ふむ。見事に文字化だ。ちなみに ssh で “い” というディレクトリを作って確認してみると以下のようになります。

$ mkdir い
$ ls -1
??/
い/

 
ふむー。困った。それにしても さくらぽけっと アプリが吐き出す文字コードは一体何なのだ? と、いうことで hexdump というコマンドで調べてみます。

$ ls -1 | hexdump -C
00000000  a4 a2 2f 0a e3 81 84 2f  0a                       |../..../.|
00000009

 
ふむ。 a4a22f0a とかいう文字コードが並んでいますね。

文字コードをちょっと確認してみると・・。

文字 UTF-8 UTF-16 S-JIS EUC-JP JIS
E38182 3042 82A0 A4A2 2422
E38184 3044 82A2 A4A4 2424

 
ふむー。これを見ると、 さくらぽけっと アプリが吐き出す文字コードは EUC-JP のようです。これまた随分と前時代的な文字コードを利用しているようですねぇ・・。
ls -1 | nkf -w8 するとちゃんと表示してくれるので何かしらの文字コードなのは解るんだけど、しかし「文字コードは何を利用しているの?」状態に陥るのであります。

と、いうことでどうやら EUC-JP を利用しているらしい。と、いうことが解りました。

 
5). アプリから見えるようにする。
と、いうことで話はそろそろ佳境です。普段から UTF-8 で生活している人が持っている日本語ファイル名を持つファイルの文字コードは UTF-8 になります。 UTF-8 でも BOM あり/なしなど話がややこしくなるのですが、話によると、ふつー、アプリなどで利用する文字コードは UTF-8-BOM らしいのですけどね。でもって FreeBSD で LANG=ja_JP.UTF-8 を設定していると UTF-8 BOM 無し になります。

しかしまぁ EUC-JP とわかれば、あとはなんとかなるでしょう。

まずは convmv というのをインストールします。 ports 的には converters/convmv になります。これを手元の FreeBSD で make install します。インストールされた convmv コマンドはライブラリは特にリンクされていないようなので、アーキテクチャが合えばそのまま「さくらのレンタルサーバ」に scp して利用可能です。僕は FreeBSD/amd64 10.1-RELEASE 上で make したものを「さくらのレンタルサーバ」に持って行ったら無事に動作しました。
ASP キャリアと同じ OS を利用しているとこーいうことができるので嬉しいですね;-)。

ちなみに「さくらのレンタルサーバ」には nkf はありますが convmv はありませんでした。 nkf だと以下のコマンドでファイル名の文字コードを変えてくれるみたいなんだけど、今回はうまく動きませんでした。

$ nkf --overwrite --oc=EUC-JP い

 
と、いうことで convmv を実際に利用してみます。「さくらのレンタルサーバ」に ssh でログインしてディレクトリを一個作ります。その作ったディレクトリは さくらぽけっと アプリでは文字化けしてディレクトリとして認識されています。

$ mkdir  い
$ ls -1
??/
い/
$ convmv -r -f utf-8 -t euc-jp い --notest
mv "./い"      "./??"
Ready!
$ ls -1
??/
??/

 
ファイル名の文字コードが UTF-8 のモノを作成し、それを EUC-JP に変換します。ターミナルの表示的には文字化けしてますが さくらぽけっと アプリから参照すると無事に見えるようになると思います。

と、いうことでスクリプトを書いてみました。

#!/bin/sh

export LC_CTYPE=ja_JP.UTF-8
export LANG=ja_JP.UTF-8

case $1 in
'-s' )
    convmv -f euc-jp -t utf8 * --notest
    ;;
'-p' )
    convmv -t euc-jp -f utf8 * --notest
    ;;
* )
    echo "usage : encChange.sh {-s|-p}"
    echo "           -s : ssh mode"
    echo "           -p : Pocket mode"
    ;;
esac

 
-s オプションは ssh モード。ssh でログインしたときにファイルを操作したい場合に -s オプションを付けて UTF-8 なファイル名にします。
-p は さくらぽけっと モード。 ssh での作業が完了したあと、さくらぽけっと アプリからアクセスするときに文字コードを変換します。
あ。僕は convmv は ~/bin/ に置いて PATH を張っています;-)。

 
ふぅ。今回やりたかったのはまさしくこれで、 FreeBSD からファイルを scp で送って、それを iPhone6 や Android アプリで閲覧することができるようになりました。
これでアプリと既存の UNIX 環境を上手に使い分けて作業を行うとシームレスにファイルが共有できて作業が捗りそうです;-)。

 
それにしてもクラウドなストレージサービスというのは OneDrive Dropbox BOX など有りますが、ファイルが貯蔵されているクラウド側をプロンプトから ls で見ることができるサービスというのは、今のところ「さくらぽけっと」のみ。と、いうことになります。さくらインターネットに拍手を送りましょう;-)。

と、いうことで「さくらのレンタルサーバ」を利用している人は是非とも さくらぽけっと アプリを使ってみてくだい。 100GByte のクラウドストレージが利用できることになります;-)。

3月 012015
 

最近はほとんどの NotePC にカメラが付いていて Windows とかだと Skype しよう。 Mac だと FaceTime しよう。などと言っていますが、普段はほとんど使わない(と、僕は思う)んだけど、実際にはどうなんでしょうか?

そんな感じの標準装備のカメラですが OS に FreeBSD を利用していた場合にどのような目的でどう使う? ってか、その前に「ここに付いているカメラは FreeBSD で動くの?」などと思ってしまうのですが、今回は実際に NotePC に付いているカメラを FreeBSD で利用してみるとこにしましょう。

 
今回登場する NotePC は僕の持っている ThinkPad Edge e145 です。このブログには何回か登場しているのですが FreeBSD がバリバリ動作しています;-)。この ThinkPad Edge e145 も最近の NotePC のトレンドを追いかけているようで、ディスプレーの上にカメラが付いています。

今回はこのカメラを利用して色々やってみたいと思います。もしかしたら、ネタ的にはもう既に枯れているかも・・f(^^;;。

 
1). カメラを認識させる
最近の NotePC に付属のカメラはほとんどが USB に接続されているようですね。 pciconf -lv とか usbconfig list コマンドを叩き、デバイス的に、どこにカメラが接続されているか確認しましょう。

 # usbconfig list
    :
ugen4.2: <Integrated Camera Vimicro corp.> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (256mA)
    :

 
ThinkPad Edge e145 の場合は USB の ugen4.2 として認識されているようですね。と、いうことでこいつを正しいデバイスとして認識させてみましょう。

 
2). デバイスドライバのインストール
FreeBSD の純正デバイスドライバというのは存在してないのですが、 Linux 方面で開発されたキャラクタデバイスを読み込むドライバを FreeBSD に対応させた Cuse4BSD を利用します。 ports 的には multimedia/cuse4bsd-kmod になります。
まず、これをインストールし、続いてキャラクタデバイスをビデオデバイスとして認識させる webcamd をインストールします。 ports 的には multimedia/webcamd になります。まぁ、 webcamd を make install すると関連性で cuse4bsd-kmod もインストールされますが;-)。

そして multimedia/cuse4bsd-kmod を make install したときにインストールされた cuse4bsd.ko を kldload します。

# kldload /boot/modules/cuse4bsd.ko

 
カーネルモジュールをロードしたあとに wbecamd を起動し /dev/video0 として USB カメラを認識させます。オプションに USB 接続のカメラの USB のデバイス名を指定します。

# webcamd -d ugen4.2
Attached to ugen4.2[0]
Creating /dev/video0
^Z
中断
# bg
# ls -l /dev/video0
crw-rw---  1 webcamd  webcamd  0x82 Feb 28 26:14 /dev/video0
# chmod 666 /dev/video0

 
webcamd を起動すると正しく動作する USB カメラであれば /dev/video0 が生えてきます。
その後、一旦バックグラウンドにほーり投げてパーミッションを確認します。今回は一般ユーザでも利用したいので 666 に変更しています。デバイス生成時にバーミッションを変更したい場合には /etc/devd.conf におまじないを書いてください。ここでは割愛します;-)。

以上で準備は完了です。

 
3). まずはローカルでカメラを利用してみる
/dev/video0 が生えてきたので、実際にカメラに写るモノを表示させてみたいですね。そんな時は pwcview を利用します。 ports 的には multimedia/pwcview になります。
こいつを make install したあとに特にオプションも付けずに起動すると X11 上にウィンドが現れてカメラから映る景色が表示されると思います。

しかし、ローカルな FreeBSD の X11 の画面にカメラから映る景色が表示されても「だから何?」で終わってしまいますよねf(^^;;。
僕自身もまさしくそのとおりでして。ただ単に「あ。 cuse4bsd.ko と webcamd でデバイスを認識したのね。ふーん。すごいね。いじょ。」みたいな・・f(^^;;。

この写真はまさしくそんな感じで、 ThinkPad Edge e145 上の FreeBSD で KDE4 が動いていて、そこで pwcview を起動させた状態です。

IMG_0968_NotePC_Cam_1

ディスプレーの上にカメラがあるのですが、その横にある黄緑色の LED が光っております。カメラが Ready 状態ですねぇ;-)。

と、いうことで何か別の利用方法を考えてみることにしましょう。

あ。 chmod 666 /dev/video0 しましたが、これしないと一般ユーザで起動する pwcview では 画像が読み込めない状態になります。

 
4). リモートからカメラの映像を確認する
ローカルな FreeBSD の X11 に画面が出力されたので、リモートの FreeBSD から ssh -CY し、手元の X11 に pwcview を表示させればいんじゃね? えぇ。まさしくそのとおりですね。それだとリモートの X11 にカメラに映された映像が表示されます。それもひとつの案ですね;-)。

今回は http で画像を転送してみましょう。 ports から mjpg-streamer をインストールします。 ports 的には multimedia/mjpg-streamer になります。 make config は default の設定で良いです。まぁ、強いて言えば “Linux-UVC V4L2 plugin” を有効にしてインストールしましょう。

インストールしたものの中で重要なのはプラグインがインストールされた場所でしょうか。 /usr/local/lib/mjpg-streamer/ の中を覗くと .so なファイルが入っていますが mjpg-streamer を起動するときに利用するプラグインになります。

では実際に起動してみましょう。

$ mjpg_streamer -i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -w /usr/local/www/mjpg-streamer'

 
/dev/video0 は chmod 666 しているので一般ユーザ権限で起動できます。

-i でカメラ側のオプションを指定します。 input_uvc.so プラグインを利用し、デバイスは /dev/video0 から入力します。
-o で出力側のオプションを指定します。 output_http.so プラグインを利用しコンテンツは /usr/local/www/mjpg-streamer にあることを指定します。
-o に output_file.so を指定するとカメラに写ったモノはファイルに出力してくれるのでしょうなぁ。僕は試していませんがf(^^;;。

ちなみに /usr/local/etc/rc.d/mjpg_streamer という起動スクリプトがインストールされるのですが、こいつは -i のオプションを指定する部分が無いんですよね。 rc.conf.local には以下のように書くと良いかな。

mjpg_streamer_enable="YES"
mjpg_streamer_flags="-i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -w /usr/local/www/mjpg-streamer'"

 
さてさて。あとはウェブブラウザで http://localhost:8080 とかリモートのマシンからアクセスしてみるとそれらしいウェブサイトが表示されると思います。

ちなみにポート番号を変えたい場合には以下のように設定するが良いです。

mjpg_streamer_enable="YES"
mjpg_streamer_flags="-i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -p 8081 -w /usr/local/www/mjpg-streamer'"

 
こんな感じで任意のポートに変更できたりします。

ただ、悲しいかな・・。 mjpg_streamer は IPv6 には対応していないようですねぇ。ソースコードの plugins/output_http/httpd.c の socket(PF_INET, …); の部分を書き換えると IPv6 対応になるかなぁ?暇なときにいじってみよう。

さてと。実際に表示される動画ですが、皆さんの目で確認してみてください;-)。
左のメニューから Static を選択すると写真が、 Stream を選択すると動画が流れ始めます。
僕の ThinkPad Edge e145 のカメラは pwcview ではまぁ、そこそこ綺麗に見えるのですが mjpg_streamer で見ると多少ちらつきますね。あと、ブラウザ側の PC の負荷が高くなるかな。

 
と、いう感じで NotePC に付いていたカメラが FreeBSD からでも利用できることが確認できました。しかもそのカメラがリモートからアクセスできて閲覧もできることが確認できたので、これで利用頻度がいっきにアップするのでは無いかと思われます。嬉しいことですね。

ただ、音を飛ばす時にはもっと別の技が必要になりそうな気がしますが、それはまた別の機会にでも:-|。

あと、カメラが付いてない FreeBSD がインストールされた PC には手元にある USB カメラを色々付けてみて cuse4bsd-kmod と webcamd で動作するか確認して見るのもよいかと思います。
もし動作する USB カメラだった場合、フツーの自作 PC にインストールした FreeBSD でも今回の組み合わせでカメラが利用できるようになるかと思われます。

ちなみに、僕は以下の二つの USB カメラを持っているのですが、こいつらをデスクトップの FreeBSD で利用してみました。

IMG_2228_NotePC_Cam_2

左側の白いのは FreeBSD というか webcamd で認識してくれませんでした。以下のようなメッセージが出力されます。

# webcamd -d ugen0.2
webcamd: Cannot find USB device

 
右側の黒いのは赤外線付きで暗いところでも良く見えるカメラなのですが、こいつは pwcview では動きましたが mjpg_streamer では動きませんでした(砂の嵐が表示されます)。
カメラによって動作が多少違うようですね。

 
と、いうことで、今回は NotePC に標準で付いているカメラで遊んでみました。 mjpg_streamer がちゃんと動いてくれると、利用価値は上がりそうですね。 また、 mjpg_streamer に変わる何か別のアプリを見つけてきて、それを試してみるのも良さそうですね。何か良い ports をご存じの方いましたら教えて下さい;-)。

また、最近流行の Raspberry Pi を FreeBSD/ARM で起動して USB カメラを接続し今回の組み合わせを利用すると、IoT な監視カメラができるかもしれません。

バッテリ運用で Raspberry Pi+USB Camera+FreeBSD+cuse4bsd-kmod+webcamd+mjpg_streamer+Wi-Fi な状態のヤツをラジコンカーに積んで走らせたら、録画ではなく、リアルタイムで動画が堪能できるような気がします。

面白そうだ・・;-)。

1月 242015
 

離れた二点間で IPv6 を L2 で利用したいなぁ。と、ずっと思っていたんだけど、中々手段がなかった。 FreeBSD の gif トンネルを使うと L3 接続になるし gre を使うと bridge が利用できないのでややこしいネットワークになってしまうし、そもそも FreeBSD の gre は IPv6 の L2 抜けが 10.0-RELEASE になってもできないみたいだし・・。

と、いうことで今回は離れた二点間で同一の /64 の IPv6 セグメントを利用できるようなネットワークを構築してみたいと思います。
ただ、ネットワーク機器としての FreeBSD の利用は今回あきらめました。今回は VyOS 1.1.1 を利用してみました。
VyOS 1.1.1 はフリーで利用できる仮想環境用のルータ OS です。

VyOS のインストールについてはここでは記載しないので他のウェブサイトでご確認頂ければと思います。

 
でもって、今回構築するネットワーク環境は以下になります。

IPv6_L2TPv3_2

ちょっと説明を。

  • 既存ネットワークのセグメント1: 10.123.1.0/24
  • 既存ネットワークのセグメント2: 192.168.123.0/24
  • 上記二つの異なる IPv4 のセグメントにおいて 2001:470:fc1e:10::/64 の IPv6 セグメントを利用したい。
  • IPv4 は 172.16.101.0/24 もあるけど、ついでに利用できるのであればそれはそれで嬉しい;-)。

と、いうような感じ。 IPv4 を L2 で抜けるソリューションは色々あるようなんだけど IPv6 の L2 抜けってのはどうも対応してない OS があったりして中々手強いモノがあったのであります。

セグメント2 側に IPv6 が無いので L2 で抜けて行って IPv6 使えるようにしましょう。ってのが今回の要件でしょうかね。

dtcp を利用した gif インターフェース使えば良いじゃん。と、いうソリューションもあるのですが、その場合 dtcps を起動する側には /48 が必要で dtcpclient 側に /64 を配布。って形になるので /64 しか無い場合には L2 抜けしてあげないとちょっとつらいんですね。

 
と、いうことで上の図は構成図です。物理的にはセグメント1 にもセグメント2 にも VMwareESXi 5.1 がいます。そこにサーバ(今回は FreeBSD をチョイス。と、いうか、いつも FreeBSD だけど;-)と VyOS が入っている状態です。

  • セグメント1: FreeBSD-01・FreeBSD-02・VyOS-01
  • セグメント2: FreeBSD-03・VyOS-02

では以下に手順を書いていきます。

 
1). VMWareESXi 5.1 の設定
サーバと VyOS が vSwitch で接続された状態にします。そして vSwitch ではプロミスキャス・モード (promiscuous mode) を有効にしておく必要があります。
日本語版では「無差別モード」と言っているようですが。

以下は VMWareESXi の vSwitch の設定のキャプチャです。

IPv6_L2TPv3_1

[構成]タブ -> ネットワーク -> vSwitch のプロパティを開きます。
[ポート]タブの「編集」ボタンを押します。
表示されたウィンドの[セキュリティ]タブの「無差別モード」を “承認” にします。

以上で準備は完了です。これをやっておかないとあとで痛い目にあいますX-(。

 
2). VyOS-01 側の設定
VyOS のインストールが済んで、ログインユーザ名とパスワードの設定が完了した状態からの設定です。

まずはホスト名の設定と ssh を有効にしておきましょうかねぇ。

set system host-name VyOS-01
set service ssh port 22

 
続いて既存ネットワークのセグメント1 側の IPv4 アドレスを指定します。

set interfaces ethernet eth0 address 10.123.1.11/24

 
続いてブリッジインターフェースを作成します。

set interfaces bridge br0

 
そして、新規 IPv6 ネットワークに接続する eth1 をブリッジグループに入れます。 eth1 にはアドレスを付加しません。ブリッジするのでイーサーネットインターフェースとして利用します。

set interfaces ethernet eth1 bridge-group bridge br0

 
ここまで各セグメントに接続するインターフェースの設定が完了しましした。
続いて二つのセグメントを接続するための L2 トンネル部分の設定をします。今回は VyOS の L2TPv3 を利用します。
一応 VyOS の gre でも試してみたのですが bridge-group のメニューが出てこないのでブリッジグループに入れることができません。以前の vyatta では gre も bridge-group に入れることができたようなのですけどねぇ。まぁ、 IP インターフェースは bridge-group に入れることはできない。と、いうことなのでしょうなぁ。

さて。 L2TPv3 を利用するために以下のコマンドを投入します。

set interfaces l2tpv3 l2tpeth0
set interfaces l2tpv3 l2tpeth0 local-ip 10.123.1.11
set interfaces l2tpv3 l2tpeth0 remote-ip 192.168.123.21
set interfaces l2tpv3 l2tpeth0 session-id 10
set interfaces l2tpv3 l2tpeth0 peer-session-id 11
set interfaces l2tpv3 l2tpeth0 tunnel-id 20
set interfaces l2tpv3 l2tpeth0 peer-tunnel-id 21
set interfaces l2tpv3 l2tpeth0 source-port 2030
set interfaces l2tpv3 l2tpeth0 destination-port 2031
set interfaces l2tpv3 l2tpeth0 encapsulation udp
set interfaces l2tpv3 l2tpeth0 bridge-group bridge br0

 
ちょっと説明しますと、

  • interfaces l2tpv3 を l2tpeth0 として create します。
  • local-ip は自分の IPv4 アドレスを、 remote-ip は接続先 IPv4 アドレスを指定します。
  • session-id は好きな数値を、 peer-session-id は接続先の session-id を指定します。
  • tunnel-id と peer-tunnel-id も上記と同じルールで指定します。
  • source-port と destination-port も同じ要領で指定します。それにしてもどうして peer-source-port じゃないんだろ?;-)
  • encapsulation は udp にしました。他には ip も指定できるようです。
  • 最後に l2tpeth0 を ブリッジグループに登録します。

以上で L2TPv3 トンネルの設定が完了しました。最後に commit して save して exit すれば configure モードを抜けます。
VyOS-02 側にも同じ設定を入れるとトンネルが張られます。

eth1 と l2tpeth0 はブリッジされたのでこれで IPv6 が L2 でズドーンと抜けられるようになります。

 
3). VyOS-02 の設定
まぁ、基本的には VyOS-01 で設定したのと一緒です。サクサク行きます;-)。

ホスト名と ssh の設定と eth0 に IPv4 アドレスを付加する設定。

set system host-name VyOS-02
set service ssh port 22
set interfaces ethernet eth0 address 192.168.123.21/24

 
ブリッジグループの設定

set interfaces bridge br0
set interfaces ethernet eth1 bridge-group bridge br0

 
L2TPv3の設定。


set interfaces l2tpv3 l2tpeth0
set interfaces l2tpv3 l2tpeth0 local-ip 192.168.123.21
set interfaces l2tpv3 l2tpeth0 remote-ip 10.123.1.11
set interfaces l2tpv3 l2tpeth0 session-id 11
set interfaces l2tpv3 l2tpeth0 peer-session-id 10
set interfaces l2tpv3 l2tpeth0 tunnel-id 21
set interfaces l2tpv3 l2tpeth0 peer-tunnel-id 20
set interfaces l2tpv3 l2tpeth0 source-port 2031
set interfaces l2tpv3 l2tpeth0 destination-port 2030
set interfaces l2tpv3 l2tpeth0 encapsulation udp
set interfaces l2tpv3 l2tpeth0 bridge-group bridge br0

 
session-id・peer-session-id と tunnel-id・peer-tunnel-id そして source-port・destination-port は VyOS-01 で指定したものと値を逆にします。

以上で設定が完了ですね。

 
4). 確認方法
VyOS-01 と VyOS-02 の間で無事に L2TPv3 インターフェースが接続できているかの確認方法は以下になります。

vyos@VyOS-02:~$ show bridge br0 macs
port no mac addr                is local?       ageing timer
  2     01:05:73:a1:0f:ff       no                 2.16
  1     02:0c:29:f2:ec:f3       yes                0.00
  2     03:15:2c:73:dc:00       no                 2.07
  2     04:19:30:14:2e:c8       no                 1.14
  2     e5:9b:30:55:4e:c8       yes                0.00

 
ブリッジインターフェースの br0 の Mac アドレスを確認します。 今回はサーバ三台とスイッチポートが二つなので全部で五つの Mac アドレスが載りました。 “is local?” ってのは判りやすいですね。 yes が自分のネットワーク側で no が向こう側のネットワークに接続された機器のようです。

ついでなので VyOS の br0 にもテストのために IPv4 アドレスを付加してしまいましょう。

・VyOS-01

set interfaces bridge br0 address 172.16.101.101/24

 
・VyOS-02

set interfaces bridge br0 address 172.16.101.102/24

 

これでサーバやルータのインターフェースに ping を打って到達性が確認できれば L2 トンネルは成功です。
172.16.101.0/24 の IPv4 や 2001:470:fc1e:10::/64 の IPv6 アドレスに対して ping6 して到達性があることを確認します。

もし、この時に ping や ping6 が当たらない場合には一番上に戻って VMwareESXi の vSwitch において「無差別モード」が “承認” になっているか確認してみましょう。
僕はこの設定をすっかり忘れていて ping6 が通らずに随分と悩んでしまいましたf(^^;;。

 
5). ゲートウェイの設定
VyOS 自体に IPv6 を付加する必要が無いのであれば VyOS でのルーテイングの設定は何も必要ありません。サーバ側には IPv6 の default gateway を設定してあげます。

・FreeBSD

# route add -inet6 default 2001:470:fc1e:10::1

 
三台全てのサーバで同一のコマンドを打ちます。そして、全てのサーバはグローバル IPv6 なサイトに対してアクセス可能になったことを確認しましょう。

 
とまぁ、こんな感じで VyOS を利用することによりようやっと念願だった /64 の IPv6 の L2 トンネルができるようになりました。
本当は FreeBSD 単体でできると良いのですけどね。まぁ、それはしょーがない。

 
あと、今回のエントリでは VPN や IPSec については書いてないです。暗号化されてない L2 トンネルになります。
と、いうのも、僕は思うんですが、最近はプロトコル単位で暗号化されているのでトンネルを暗号化する必要ねんじゃね? みたいな。
ウェブ・メール・ssh・scp によるフアイル転送などはプロトコルで暗号化されています。唯一 samba かな? だったら ssh トンネル掘れば良いんじゃね? みたいな。

あ。 mDNS も L2 トンネルを抜けていくかな?だとしたら暗号化が必要だけど、考えてみるとマルチキャストを通すためには設定が一個必要だったような気がしたなぁ;-)。
まぁ、ザレゴトだということで;-)。

 
今回の設定は以上になります。ふぅ。

12月 192014
 

Wi-Fi では wpa_supplicant をよく利用する。と、いうか WPA を利用するのが当たり前になりつつあるんですが、 re0 とか bge0 などでも wpa_supplicant を利用することは可能です。
今回はその設定について書いてみみたいと思います。

今回利用した環境は FreeBSD/amd64 10.0-RELEASE で wpa_supplicant のバージョンは v2.0 になります。

 
そもそも、フツーの Ethernet で wpa_supplicant を利用するのはどういう状況の時にあるか、と、いうことなんですが、以下に書いてみました。

・L2 スイッチに PC を接続すると L2 スイッチ側で EAP 認証がオンになっている
・認証無しで L2 スイッチに PC を接続すると通信ができない VLAN に落っこちる
・EAP 認証を通過すると正常な VLAN が降ってきてネットワークが利用できる状態になる

利用するのは会社とか、セキュリティの高いネットワークでしょうかね。 こーいうのを俗に IEEE802.1x 認証と呼ぶようで、 Wi-Fi では利用できて当然ですが、対応する L2 スイッチでも IEEE802.1x 認証が利用可能です。

すると、上記の PC を接続した L2 スイッチは IEEE802.1x 認証対応のスイッチで、そのスイッチには設定が入っていて PC を接続しても認証が通過できないのでネットワークに接続できない状態。と、いうことになります。

当然 Windows でも利用できるし Mac でも利用できます。 FreeBSD では wpa_supplicant を利用することにより、認証を通過することができます。

今回は FreeBSD で IEEE802.1x 認証の設定をしてみたいと思います。

 
1). /etc/rc.conf の設定
以下の設定をまずします。

#ifconfig_bge0="inet 192.168.1.201 netmask 255.255.255.0"
ifconfig_bge0="WPA DHCP"

 
bge0 に “WAP DHCP” と記述するのですが、違和感ありますよねぇf(^^;;。けど、今回は Ethernet で WPA を利用するのでこーいう記述になります。

 
2). /etc/wpa_supplicant.conf の設定
まずは設定を提示します。

     1  ctrl_interface=/var/run/wpa_supplicant
     2  ctrl_interface_group=0
     3  ap_scan=0
     4  #fast_reauth=1
     5  #update_config=1
     6
     7  network={
     8          key_mgmt=IEEE8021X
     9          eap=PEAP
    10  #       identity="takachan@windows.domain"
    11          identity="takachan"
    12          password="PASSWORD"
    13  #       phase1="peaplabel=0 perapver=1 include_tls_length=1"
    14          phase2="auth=MSCHAPV2"
    15  #       ca_cert="/usr/local/etc/CA/root_CA.pem"
    16          eapol_flags=0
    17  }

 
以下に各行の説明します。

  • 1 行目: socket の入るディレクトリを指定します。
  • 2 行目: そのディレクトリのグループ ID を指定します。
  • 3 行目: Wi-Fi ではないので AP はスキャンしません。
  • 4,5 行目: 一応コメントアウトしました。
  • 8 行目: key_mgmt に IEEE8021X を指定します。
  • 9 行目: eap は PEAP を指定します。多分殆どの環境で PEAP になるのではと思われます。
  • 10,11 行目: 認証用のユーザ名を指定します。 Windows の Active Directory を利用している場合にはドメイン名が必要になる場合もあるかもしれません。
  • 12 行目: 認証のパスワードを指定します。
  • 13 行目: とりあえず phase1 はなくともログインできたのでコメントアウトしています。
  • 14 行目: phase2 は認証方式を指定します。今回は MSCHAPV2 を利用しました。
  • 15 行目: ca_cert は指定しなくとも今回は接続できました。ただし、フツーは CA は持ってないですよね。もし必要であれば Symantec のサイト から VeriSign Root Package をダウンロードしてきてその中から pem ファイルを一個指定すると良いらしいです。
  • 16 行目: eapol_flags は 0 にしました。

 
こんな感じで指定し、あとはつながるかの試験です。

 
3). wpa_supplicant をデバッグモードで起動
以下のコマンドを実行し、デバッグモードで起動します。

# wpa_supplicant -ddKiq -i bge0 -c /etc/wpa_supplicant.conf -D wired

 
上記のコマンドを実行するとドドドと文字が出力され、それを確認すると、接続したか失敗したか解ります。うまく接続できない場合には出力されたログを google などで調べてください。

なお、上記コマンドでは -D オプションでドライバを指定しています。 Wi-Fi NIC では必要ないのですが Ethernet NIC ではこのオプションが必要になります。
wpa_supplicant -h と実行してヘルプが表示されますが、そこに drivers: が表示されるので、利用できるドライバーを指定します。見ると bsd と null と wired の三つがあるようですね。

 
FreeBSD の /etc/rc.d/netif ではどのタイミングで -D wired を付加するのか確認してみたら /etc/network.subr の中に記述されている is_wired_interface() で確認しているようですね。

全ての NIC のデバイス確認してるんかい?

などと思ったのですが ifconfig の media: Ethernet で判断していました。うーん。頭良い;-)。

 
4). あのー。接続できないのですが・・。
ですよねぇ・・。一発で上手く行ったらすごいです;-)。試行錯誤を繰り返してください;-)。

一点だけ確実に解ることがあります。例えば以下のような状態

・Windows で EAP 認証で接続
・Windows 上で Virtualbox が動いていて、ネットワークはブリッジ
・Windows 上の Virtualbox のゲスト OS ある FreeBSD から wpa_supplicant で接続
・FreeBSD では上記設定を入れていても EAP 認証できない orz

L2 スイッチの接続・機能の制限もあるのですが、通常は 1 ポートで一個の EAP 認証しか許可していない場合が多いようです。 Windows で EAP 認証をしたらその上で動いている FreeBSD では EAP 認証を受け付けてくれない。という可能性はありそうです。
L2 スイッチの設定を確認して一つのポートで複数の EAP 認証での接続を許可しているか確認してみましょう。
例えば L2 スイッチのポートに HUB を接続し、そこに三台 PC をぶら下げて三台とも EAP 認証できるか? って状態と一緒ですね。

 
とまぁ、ウェブで日本語によるドキュメントがあまりないのようなのでちょっと書いてみました。繋がらない場合には基本的にはウェブで確認してみてください。
また、今回僕が試した環境では上記の設定がバッチグーでした。他の環境では上記設定では繋がらないのかもしれないです。その場合は、ここに書いてある内容ではダメなのかもしれないですねぇ・・。

12月 182014
 

デスクトップとして FreeBSD を利用するとなると色々な ports がドドドと入るのですが、その中に coretutils というのがインストールされることに気がついた。 ports 的には sysutils/coreutils になるんですが、こいつは何かというと Linux で利用されているような GNU のコマンド一式なんですね。 FreeBSD 的には /usr/bin/ 配下にあるコマンドの先頭に g が付いて /usr/local/bin/ に大量にインストールされます。別に新規に GNU のコマンドを入れなくて良いよー。と、なるのでありますが・・。

そもそも coreutils はどの ports に関連付いてインストールされるのか調べてみると kdepim4 がインストールしているみたい。うひっ!! すると KDE4 をインストールしていない人にはまるで関係の無い ports と、いうことになるじゃん・・。orz

今回は、既に /usr/bin/ などにコマンドがあるのに、新たに GNU のコマンドを入れてしまう coreutils をインストールしないように kdepim4 の ports を書き換えてみたいと思います。
環境は FreeBSD 10.0-RELEASE で ports-current 、 kdepim4 のバージョンは kdepim-4.14.2_1 で coreutils のバージョンは coreutils-8.23 になります。

1). kdepim4 の Makefile 参照
まず、 kdepim4 が coreutils-8.23 をインストールしていることが解ったので deskutils/kdepim4/Makefile を覗いてみます。すると、以下の行ですね。

 20  RUN_DEPENDS= ${KDE4_PREFIX}/bin/accountwizard:${PORTSDIR}/deskutils/kdepim4-runtime \
 21               ${LOCALBASE}/bin/gmd5sum:${PORTSDIR}/sysutils/coreutils

 
20 行目で RUN_DEPENDS が設定してあって 21 行目で gmd5sum を利用するために coreutils-8.23 をインストールするようです。
では、実際にソースコードはどこで gmd5sum を使うのか確認してみましょう。

 
2). 設定ファイルで利用されている?
kdepim-4.14.2_1 の中では libkleo/libkleopatrarc.desktop というファイルの中でのみ gmd5sum が利用されているようです。ついでに gsha1sum も利用されているようです。他のソースコードでは全く利用されていないようですし、また、他の g シリーズのコマンドも利用されないようです。

これだけのために g シリーズのコマンド一式インストールするんかい!? となるので、是非ともなんとかしたいモノです。

 
3). md5sum と sha?sum のみインストールする ports を作る
coreutils の他のコマンドは要らないので md5sum と sha?sum のみインストールする ports を作りました。
実は FreeBSD の md5 や sha1 で代用できるんかな? とか思ったのですが md5sum や sha1sum には -c (–check) オプションがあって kdepim4 の kleopatra (これについては後で詳しく説明します;-) の中ではまさしく -c オプションを利用しているので FreeBSD に標準で付いているコマンドではダメなんですね。
あと、 openssl md5 オプションでも -c に相当するオプションはありませんでした。
なので、しょーがない。 md5sum と sha?sum のみをインストールする ports を作成しました。

http://icmpv6.org/Prog/FreeBSD_ports/ports-md5sum-20141216.tgz

ちなみに FreeBSD の md5 に -c 相当のオプションないんかい? などと思いウェブを色々調べたのですが、 BSD 系の人は、この -c オプションが無いためにスクリプト書いたりと色々ナンギしているようですね。

上記 ports は、もとは sysutils/coreutils を利用していますが、先頭の “g” を取って必要最小限なモノしかインストールしないように pkg-plist を書き換えました。
Makefile 中の CONFLICTS で coreutils-* も指定してあるので md5sum と coreutils の両方インストールすることはできません。

ダウンロードしたファイルは /usr/ports/sysutils/ に展開してください。

 
3). kdeppim4 の Makefile の編集と files/ の下のファイルを一個消す
上に掲載した kdepim4 の Makefile の 21 行目を以下のように直します。

 20  RUN_DEPENDS= ${KDE4_PREFIX}/bin/accountwizard:${PORTSDIR}/deskutils/kdepim4-runtime \
 21               ${LOCALBASE}/bin/md5sum:${PORTSDIR}/sysutils/md5sum

 
そして、不要となったファイルである deskutils/kdepim4/files/patch-libkleo__libkleopatrarc.desktop を削除します。

あとは kdepim4 を make && make deinstall && make reinstall し直せば OK。ノラ ports である md5sum も合わせてインストールされます。

 
4). kleopatra をちょっと説明
そもそも libkleopatrarc ってのは KDE の中で何をしているモノなのか?
コマンド的には kleopatra というのがあります。では kleopatra とはなんなのか? 基本的には証明書マネージャーの GUI 版で、ヘルプを見てみると「証明書マネージャと統合された暗号 GUI」とのことで PGP キーなどを管理するソフトウェアになります。

普段 PGP などはコマンドラインで利用しているかと思いますが、 kleopatra を利用すると GUI で鍵の作成・サイン・エクスポート・管理などが行えます。実際に利用してみると中々便利ですね;-)。

ちょっと kleopatra をコンソールから起動してみます。するとまず最初に「kleopatra セルフテストの結果」が起動し、そのときにコンソールにはログとして以下が表示されます。

    :
ChecksumDefinition[ "sha1sum" ] ("xargs", "-0", "sha1sum", "--") 
ChecksumDefinition[ "sha1sum" ] find -print0 |  "/usr/bin/xargs" ("-0", "sha1sum", "--") 
ChecksumDefinition[ "sha1sum" ] ("sha1sum", "-c", "--") 
ChecksumDefinition[ "sha1sum" ] "/usr/local/bin/sha1sum" ("-c", "--") "%f" () 
ChecksumDefinition[ "md5sum" ] ("xargs", "-0", "md5sum", "--") 
ChecksumDefinition[ "md5sum" ] find -print0 |  "/usr/bin/xargs" ("-0", "md5sum", "--") 
ChecksumDefinition[ "md5sum" ] ("md5sum", "-c", "--") 
ChecksumDefinition[ "md5sum" ] "/usr/local/bin/md5sum" ("-c", "--") "%f" () 
    :

 
セルフテストの結果に赤い NG のがあるのであれば、問題を取り除き、全部緑色にしたほうが良いでしょうね。
キャプチャはありませんが、例えば security/gnupg をインストールするときに make config のオプションで [x] SCDAEMON としてから再インストールする必要があったりします。

が、しかし、ログを確認すると今回の目的である md5sum と sha1sum のみのインストールができたので今回はよしとしましょう。

ちなみに md5sum と sha1sum が記載されているファイルは /usr/local/share/config/libkleopatrarc としてインストールされます。すると kleopatra は起動時のセルフテストにおいてはこのファイルを参照して動作しているようですね。

libkleopatrarc はインストールしたものを利用しても良いし、以下のように自分の設定として保存し、それを手で編集しても良いです。

$ cp /usr/local/share/config/libkleopatrarc $HOME/.kde4/share/config/

 
上記のコマンド実行後に自分の $HOME に置いた設定ファイルを手で編集し、 ports を利用せずに個別にインストールした md5dum と sha1sum を利用するように変更したりもできるようになります。

 
それにしても、どうして coreutils-8.23 を使うのがイヤかというと、とあるプログラムをインストールしようとして configure を走らせたのですが、これがなんと /usr/bin/install ではなく /usr/local/bin/ginstall を利用したりと FreeBSD 由来のコマンドではなく ports からインストールした GNU のコマンドを利用しているんですね。

そんなのはイヤだー。純粋な FreeBSD の /usr/bin/* なコマンドを利用したいよー。などと思ったのが今回のコトの発端なのであります。人によっては「そんなんどっちでもいーじゃん。」ってのがあるかもしれませんけどねぇ。

 
しかし、今回作成したノラ ports である md5sum は coreutils の中から一部のコマンドを切り出しただけの ports なので、似たようなのが色々できそうですね。例えば Linux の ls(1) を利用したい場合には ls のみをインストールする ports である gls とか簡単に作れそう;-)。

しかし、そんなことは、多分、僕しかしないだろうなぁf(^^;;。

12月 162014
 

以前のエントリで「KDE4 で VirtualBox を動かしたしたときに ISO がマウントできない件。」と、いうエントリを書きました。FreeBSD 上で動作する VirtualBox でゲスト OS はISO イメージを mount できない。 dbus が悪さしているようだ。って感じなんですけども。

で、そのエントリに対してコメントを頂きました。なるほど。 issetugid を undef すれば良いのですね。コメントくださった方、ありがとうございました。

で、 make configure 走らせて config.h 編集してから make && make deinstall && make reinstall するのは大変なので、 ports で選択できるようにしました。

dbus_VirtualBox_1

make config に ISSETUGID オプションを [x] にすると Support VirtualBox ISO image mount が有効になります。

gnome@freebsd.org に連絡する必要があるような気がするんだけど、きっとノラ ports のままにしておくと思いますf(^^;;。
コミットしてくださる方がいると非常に嬉しいですが VirtualBox を利用していて ISO イメージをマウントできないのは KDE4 を利用している人だけなのかな?

FreeBSD で VirtualBox 使ってて ISO イメージがマウントできない。と、お嘆きの方は以下の ports を利用してみてください。
あ。変更したのは dbus/Makefile のみです。

http://icmpv6.org/Prog/FreeBSD_ports/ports-dbus-VirtualBox_ISO_image_mount-20141215.tgz

ISSETUGID オプションを有効にすると configure ファイルの ac_func から issetugid を削除します。すると config.h では #undef HAVE_ISSETUGID になります。それで make すると VirtualBox のゲスト OS で ISO ファイルがマウントできるようになります。

11月 232014
 

僕は自宅のサーバとして VMware ESXi 5.1 を利用していますが、ゲスト OS としては FreeBSD がメインで、他の OS も合わせてだいたい 10 台が動作しています。

今回は VMware ESXi 上に FreeBSD/amd64 10.0-RELEASE をインストールして、それをポートサーバとして運用し、他の FreeBSD のゲスト OS に対して FreeBSD のポートサーバから各ゲスト OS に対してシリアルコンソールからログインできるようにしてみたいと思います。

まずは今回の構成図を先に掲載しましょう。

console_cap0

o.FreeBSD でポートサーバを作成します
o.実際に D-sub 9pin ケーブルではなく VMware の機能を利用します
o.ポートは /dev/cuau0,1,2,3…. と、ゲスト OS の数だけ増やせます

 
1. ポートサーバ側のシリアルコンソールの設定
さて。まずは FreeBSD のポートサーバにシリアルポートをたくさん生やします。ポートサーバを shutdown した状態で VMware vSphere Client からポートサーバの「仮想マシン設定の編集」画面を開きます。その画面でシリアルポートを追加します。

一個目に追加したのは FreeBSD 的には cuau0 、二個目に追加したものは cuau1 になります。

console_cap3

追加するシリアルポートの「シリアルポート出力」は [名前付きパイプに接続] を選択し [次へ (>)] を押します。

console_cap1

次に「パイプ名及び属性」の設定ですが、以下の設定をします。

console_cap2

1).パイプ名
ポートサーバとゲスト OS を接続するときに利用する名前を指定します。
今回は “vm01-vm02” という名前にしました。vm01 とvm02 を接続する。と、いう意味がこもっています;-)。ポートサーバと二個目のゲスト OS を接続ときは “vm01-vm03” などと指定すれば分かりやすいでしょう。

2).近端
ポートサーバ側で利用方法ですが、ポートサーバなので [サーバ] をを指定しました。

3).遠端
[仮想マシン] を選択します。

3).デバイスのステータス
パワーオン時に接続にチェック

4).入出力モード
ポーリング時に CPU を放棄は良くわからないのですが、チェックを外しましたf(^^;;。

 
以上の手順でゲスト OS に接続する数だけシリアルポートの設定を追加し作業は完了です。ポートサーバな FreeBSD を起動しましょう。

 
2. ゲスト OS 側のシリアルコンソールの設定
1. ではポートサーバ側のシリアルポートを、ゲスト OS の数だけ追加しましたが、ゲスト OS 側ではシリアルポートは一個で十分です。

「パイプ名及び属性」の設定時に「パイプ名」のみ気をつけます。ポートサーバの cuau0 に相当する “シリアルポート 1” はパイプ名に vm01-vm02 と付けました。それと同じ名前にします。

図にするとこんな感じでしょうか。

console_cap11

接続したいモノ同士で「パイプ名」を揃える。と、いうことになり VMware ESXi 内部で結びつけてくれるようです。

 
3. ゲスト OS 側のシリアルポートの設定
これについては FreeBSD がゲスト OS であった場合には以前書いているのでそちらの URL を参考にしてください;-)。

PRIMERGY MX130 S2 を FreeBSD で利用する。

 
以上で全ての準備が整いました。必要であれば、各サーバをリブートして実際に接続できるか確認してみましょう。
僕の場合は cu(1) コマンド を利用しています。

$ cu -l /dev/cuau0
can't open log file /var/log/aculog.
Connected

FreeBSD/amd64 (freebsd-02.running-dog.net) (ttyu0)

login:

 

こんな感じになれば OK で、あとは cuau の数だけ試してみましょう。

 
さてと。最後にもう一点。では、ポートサーバのシリアル接続はどうするのだ?と、いう話があるのですが、ふむー・・。実は /etc/ttys とか変えたり、シリアルポートを追加したりして色々試したのですが、ダメでした。orz と、いうことで、今回はポートサーバと化した FreeBSD に対するシリアル接続の設定についてはナシということで・・。

ちょっと弱いような気がしないでもないんですけどねぇ・・f(^^;;。

10月 202014
 

FreeBSD の ports-current を追いかけていると、いつの間にか mail/majordomo が削除されてしまいました。以前の ports ツリーから消える前の ports を眺めてみると Makefile に NO_STAGE= yes という記述があり、この記述があると BROKEN になってしまうんですね。

なので、 ports のメンテナの方も stage 対応にしないでそのまま ports ツリーから削除してしまったのでしょうなぁ。

僕自身は今でも majordomo を利用していて perl-5.16 対応にするのが大変だったりしているわけですが、まぁ、まだ使っているしねぇ。消えるのは悲しいねぇ。などと思った次第です。

 
メーリングリストの配信システムは、最近では mail/mailman があったりしますが apache までインストールしてしまうので仕掛けが随分と大げさになってしまいます。 もう一個、メーリングリスト配信システムとしては fml もあったりしますが、こちらも随分と古い(枯れている)し、 ports にはなってないし・・。
#上記のように書きつつ fml のサイトを見たらっ!! あいやっ!! 今てもメンテされているのですねぇ。失礼しました。 fml8 ですかっ!!
#あとは FreeBSD の ports になるのを待つばかり。でしょうか;-)。

さくらのレンタルサーバでは今でも fml が利用されているかな?

 
と、いうことで、いっちょ majordomo を stage 環境に対応させてみるかねぇ。などと思い ports を作ってみました。 ports ツリーから削除される前の majordomo の ports を参考にして、 stage 環境に対応してみました。

この majordomo の ports というのは内部でスクリプトをガシガシ動かしていて『ふむ。こりゃー stage 環境に移行するのは大変だわー。』などと思ったんですけどもねぇ・・。

以下の URL に stage 環境に対応した majorodomo の ports を置いたので、ノラ ports でも構わない。と、いう人がいましたら利用してみてください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-majordomo-20141020.tgz

ちょっと ports の説明をすると、今まであったものからの変更点は以下になります。

1. Doc の下や man はバッサリと削除したのでインストールされません。
2. 古い ports では test-l というサンプル ML が用意されるのですが、それもインストールされません。
3. 今回 contrib/ というディレクトリ内に僕が改造して利用している sequencer を入れておきました。試してみたい方はインストールしてみてください。 make install ではインストールされません。

だいたいこんな感じでしょうか。 Makefile に ${INSTALL} をたくさん書くのが面倒だったのであまり必要でないものはインストールしないようにしました。それが Doc であり man であったりします;-)。

sequencer は Subject: ヘッダに ML 名を付けたり、番号を付加したりするものですが、日本語対応と Re: たくさん付く問題などの対応のために多少改修して使いやすくしています。

majordomo の ports がなくなって愕然としている人いましたらご利用頂ければと思います。

 
ちなみに、 portmaster -D -a 実行時に「majordomo なんて ports 知らないよ。」などと怒られる場合には以下の手順で回避することができます。

# mkdir -p /var/db/pkg/majordomo-1.94.5_8
# cp /dev/null /var/db/pkg/majordomo-1.94.5_8/+IGNOREME

 

こーすると、 portmaster 実行時には majordomo を無視してくれるようになります。

とまぁ、どちらにしても majordomo は前時代的だし、メーリングリスト自体もそもそも前時代的なモノになりつつあるのかもしれませんなぁ・・。

8月 122014
 

以前のエントリで SkyDrive に FreeBSD からネーテブアプリでアクセスしようぜぃ。ってのを二つ書きました。以下のエントリになるんですけども。

SkyDrive を FreeBSD に mount して使う。
SkyDrive を FreeBSD に mount して使う。そのに。

当時はまだ OneDrive ではなく SkyDrive と言っていたんですね。

そもそも、 FreeBSD から直接 OneDrive に(ネーテブなアプリで)アクセスすることは不可能で、中間的サービスを利用することになります。そのサービスは Storage Made Easy (以下 SME と記述)と、いうものです。

ここでアカウントを作成して、無料のサービスを利用すると SME のストレージサービスが利用できる他に、色々なクラウドストレージサービスプロバイダも合わせて利用できる。ってシロモノです。
簡単にいうと SME のサービスはプロキシみたいな感じで OneDrive とか Box 、 更には DropBox などにもアクセスできるようになります。

これは是非ともアカウントを一個くらいは作っておきたいですねぇ;-)。

SME のサービスはマルチプラットホーム対応で色々な OS 用のアプリがあり、スマートフォン・PC・Mac や Linux からもアクセスできます。 Linux 用はソースコードまで公開していて、そのソースコードを FreeBSD 上でコンパイルすると、 FreeBSD のネーテブアプリから OneDrive や DropBox にアクセスできる。と、いうすごいことになるんですねぇ。

以下の Lunix 用アプリについて書かれている URL です。

http://storagemadeeasy.com/LinuxDrive/

ここから CentOS の rpm をダウンロードして make してしまう ports を作ってみました。上にあるエントリでは随分と古い話でしたが、最近のソースコードは随分と美しくなり、起動するアプリケーションも直感的になりました。

 
話はガラっと変わるのですが、 Windows8.1 の場合、 OneDrive にアクセスするときには Windows Live アカウントでないとアクセスできない(ローカルアカウントでログインしている場合には一旦切り替えなければならない)ので非常に厄介です。

その場合、SME の Windows 版アプリをダウンロードして来て Windows8.1 の場合にはそれを利用するとローカルユーザーでも OneDrive にアクセスできるようになります。うひひ;-)。

Windows8.1 な人も是非利用してみてください。

 
さてさて。話を戻して、上記 URL より SentOS の storagemadeeasy-4.1-0.noarch.rpm をダウンロードしてサクっとインストールする ports を書いてみたのでもしよければ利用してみてください。

以下に ports の仕様を書いてみたいと思います。ダサいところが多々残っているんですが、僕には ports の書き方が判りませんでした・・。orz

あ。 ports は当然ながらノラ ports です。これがちゃんと ports のルールに従えられれば、前回のノラ ports である QtWeb とこれは commit してメンテナになってもも良いかなぁ。などと思っているんですけどもねぇ・・。

以下の URL にノラ ports はあります。ダウンロードしたら /usr/ports/net/ に展開して頂ければと思います。

http://icmpv6.org/Prog/FreeBSD_ports/ports-storagemadeeasy-20140812.tgz

ports の仕様は以下のような感じ。まぁ、Makefile を見て頂ければ解ると思いますf(^^;;。

1).ダウンロードはちょっと違うファイル名
https://storagemadeeasy.com/files/ から 380f74d2fcd051b21a64858ecb3f0923.rpm と言うファイルをダウンロードしてきます。

2). post-patch はダサいねぇ・・
${WRKDIR}/usr/share/sme_install/*/* のディレクトリのパスを変更します。 それにしてもダサいのが、僕は SED マクロが書けませんでした。 find して xargs から perl -e で置き換えています。ここはもっちっと改修する必要が絶対にあります。

3). コンパイル
SME のアプリは Qt4 を利用しているので qmake-qt4 実行後に make します。 LIB_DEPENDS や USE_ は多分全てを読み込んでいて、モレはないと思います。

4). インストール
SME のアプリの make は make install が無いので ports の中で吸収する必要があります。PLIST_FILES に書かれたものがインストールされます。
が、しかし、これだけでは足りないんですよねぇ・・。 pkg-plist の書き方が解らなかったので pkg-message にイントール後にもう一個インストールするようにコマンドイメージを書いておきました。
ports の中に smeclient.tgz を同梱しているのですが、これは ${WRKDIR}/usr/share/smeclient/ ディレクトリのアーカイブになります。
なので tar でなくとも、以下のコマンドでも十分に OK なんですね。

# cp -pr work/usr/share/smeclient /usr/local/share/

 
以上が ports の仕様です。随分とダサいところ満載ですねぇ・・。書き方が解らない部分が多いんですよねぇ・・。この間作った QtWeb の ports のほうがまだ楽ちんでしたf(^^;;。

 
と、いうことで、インストールされたあとは /usr/local/bin/smeexplorer を起動してアクセスすれば色々なクラウド上のファイルの閲覧が可能になります。

SME のサービス自体が中々良い感じなのでそれが FreeBSD 上からウェブブラウザ経由ではなく、ネーテブアプリからアクセスできる。と、いうのが良いのであります。

あ。今回はキャプチャはありません;-)。

ただ、 SME のアカウントを作成しなければならない。と、いうのが煩わしいとは思うのですが、iOS や Android 、 Windows などと同じレベルで FreeBSD からもするーっとクラウドストレージへのアクセスが可能になるので、これはこれで利用すると非常に嬉しいですねぇ;-)。

 
皆さんも是非利用してください。とは言いませんが、あ。そーそー。最後にですが、当該 ports を ports のルールに乗っ取ったものに改修してくださる方絶賛募集中です。どうか宜しくお願いします。

 
2014/09/05 加筆
ちゃんと一発で make install と make deinstall できるように ports を更新しました。
改修点は以下になります。

・post-patch: の部分で perl で一括置き換えしていたものを REINPLACE_CMD を使うようにした
・最後に tar でインストールしようとしていたたくさんのファイルを do-install: で行うようにした

が主な改修点です。これで多分完璧;-)。

以下の URL にあるのでよかったら利用してください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-storagemadeeasy-20140905.tgz