Baytrail-M NUC(DN2820FYKH)でFreeBSDが起動しなかった話・その後

http://www.slideshare.net/syuu1228/intel-nuc
の続きの話です。

CURRENTにマージされたbug fixはMFCって言って、stableへマージされて次のRELEASEに含まれる仕組みになってるっぽいんですが、このパッチも無事取り込まれたようで、次のRELEASE(10.1, 9.3かな?)に入るようです。

[base] Revision 267809
[base] Revision 267821

これでFreeBSD起動しねぇ!って騒がなくてすむね!

Macでもmruby-simplehttpserverをcapstanを使ってお手軽簡単にOSv向けにビルド&実行

前回の記事ではLinuxに絞ってcapstanを使ったmruby on OSvのビルド&実行方法を紹介しましたが、アプリケーションのコンパイルが他プラットフォームでは出来ないと説明しました。

代わりに、github上にビルド済みのアプリケーションバイナリを置いて、OS Xでcapstanを使ってOSvのイメージを作成&実行することに成功したので、これを紹介します。

brewで必要になるアプリをインストー

brew install go qemu git

環境変数を設定

echo 'export GOPATH=$HOME/go'    >>  $HOME/.profile
echo 'export PATH=$PATH:$GOPATH/bin'  >> $HOME/.profile
source  $HOME/.profile

capstanをインストー

go get github.com/cloudius-systems/capstan

mruby-simplehttpserver用のcapstanリポジトリをチェックアウト

git clone -b prebuilt https://github.com/syuu1228/capstan-mruby-simplehttpserver.git

リポジトリのビルド

QEMUのウインドウが一時的に表示されることがあるようですが、特に触らなくて問題ありません。

cd capstan-mruby-simplehttpserver
capstan build

VMの実行(VM上のポート番号80をホスト上のポート番号10080へ転送)

ハイパーバイザを指定しない場合VirtualBoxが用いられますが、正常に動作するようです。

capstan run -f 10080:80

http serverへのアクセステスト

curl http://127.0.0.1:10080/html -v

* About to connect() to 127.0.0.1 port 10080 (#0)
*   Trying 127.0.0.1...
* Adding handle: conn: 0xd0d8f0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0xd0d8f0) send_pipe: 1, recv_pipe: 0
* Connected to 127.0.0.1 (127.0.0.1) port 10080 (#0)
> GET /html HTTP/1.1
> User-Agent: curl/7.32.0
> Host: 127.0.0.1:10080
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: my-mruby-simplehttpserver
< Date: Mon, 19 May 2014 17:57:13 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 28
< 
<H1>Hello mruby World.</H1>
* Closing connection 0

matsumotory氏のmruby-simplehttpserverをcapstanを使ってお手軽簡単にOSv向けにビルド&実行する

OSvは最近capstanというビルド・デプロイツールが出来たので、以前のようにOSをビルドしなくてもアプリだけビルドしてVMイメージ作成&実行が簡単にできます。

ここでは、@matsumotory氏がブログで解説されていたmruby-simplehttpserver用のcapstanリポジトリを作成してみたので、インストール&実行方法を紹介します。

バイナリディストリビューションのインストール&実行はWindows・Mac・Linuxに対応していますが、今のところソースコードからアプリをビルドするにはLinuxが必要(公式対応ディストリはFedora 20)なので、以下の手順はFedora 20を使って説明します。

なお、この記事ではcapstan用リポジトリの作り方について詳しい解説をしていませんが、こちらにビルド設定定義ファイル「Capstanfile」のドキュメントがあるので、興味があれば読んでみて下さい。

GoとQEMUとgitをインストー

wget http://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.2.1.linux-amd64.tar.gz
sudo yum install qemu-system-x86 git

.bashrcに環境変数を追加

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

capstanをインストー

go get github.com/cloudius-systems/capstan

mruby-simplehttpserver用のcapstanリポジトリをチェックアウト

git clone https://github.com/syuu1228/capstan-mruby-simplehttpserver.git

リポジトリのビルド

cd capstan-mruby-simplehttpserver
capstan build

VMの実行(VM上のポート番号80をホスト上のポート番号10080へ転送)

capstan run -f 10080:80

http serverへのアクセステスト

curl http://127.0.0.1:10080/html -v

* About to connect() to 127.0.0.1 port 10080 (#0)
*   Trying 127.0.0.1...
* Adding handle: conn: 0xd0d8f0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0xd0d8f0) send_pipe: 1, recv_pipe: 0
* Connected to 127.0.0.1 (127.0.0.1) port 10080 (#0)
> GET /html HTTP/1.1
> User-Agent: curl/7.32.0
> Host: 127.0.0.1:10080
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: my-mruby-simplehttpserver
< Date: Mon, 19 May 2014 17:57:13 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 28
< 
<H1>Hello mruby World.</H1>
* Closing connection 0

Linux上のmikutterでリンクをクリックしたら別のLinux上のブラウザで表示する方法

Linux上のmikutterでリンクをクリックしたらMac上のブラウザで表示する方法 - かーねる・う゛いえむにっきの続きですが、「いや、おれMacとか使ってねぇし?不自由なOSユーザー氏ね!」みたいな声が聞こえてくる気がする*1ので、Linuxでも出来るかどうか考えてみました。
で、なんか10秒くらい考えた結果、出来そうなのでここに書いておきます。

基本的な設定は前回の記事と全く同じなのでそちらを参照して下さい。
シェルスクリプトだけ違うものを使います。

cat > open <<EOS
#!/bin/sh
ssh teokure.local env DISPLAY=:0.0 xdg-open $*
EOS
chmod +rx open

あんまりしっかり試してないけど多分これで大丈夫

*1:完全な被害妄想

Linux上のmikutterでリンクをクリックしたらMac上のブラウザで表示する方法

VM上のLinuxでmikutterを動かしてたり、synergyで2台のPCを並べて使ってたりする場合に、TwitterだけLinuxのmikutterで眺めてWebはMacで見たい場合ってありませんか。僕はあります。
そんな時、SSHを使えば割と簡単に実現出来ます。

MacSSHサーバを有効化

システム環境設定→共有でリモートログインにチェック。

Linuxにmulticast DNSを設定

FedoraUbuntuのようなお手軽ディストリなら設定済みです。
GentooやArchやDebianの人はこのへんを見て設定して下さい。

ここでmulticast DNSを敢えて使用するのは、DHCPMacIPアドレスが変更されたり、VMのネットワーク設定が変わってホスト側のMacIPアドレスが変わって見えたりしたときにもIPアドレスを自動的に解決する方法として適しているからです。
必要なければIP直打ちでも以下の設定をおこなう事が出来ます。

SSH公開鍵認証を設定

Linux側でパスフレーズの無いSSH鍵を作成し、Mac側の~/.ssh/authorized_keysに追加しておいてパスワード・パスフレーズ無しでMacへログインできるようにしておきます。

Macのホスト名は各自チェックして下さい。

ssh-keygen -t dsa
scp ~/.ssh/id_dsa.pub syuu-no-MacBook-Pro.local:~/
mkdir .ssh
cat id_dsa.pub >> .ssh/authorized_keys
シェルスクリプトを作る

Linux側で以下のようなシェルスクリプトを作ります。

cat > open <<EOS
#!/bin/sh
ssh syuu-no-MacBook-Pro.local open $*
EOS
chmod +rx open

試しに叩いてブラウザが上がってくるかみてみます

~/open http://www.google.com
mikutterに設定する

設定→表示→URLを開く方法で次のコマンドを使うを選び、
/home/syuu/open
などと書き込んでおけば、次からブラウザではなくて上述のシェルスクリプトが実行されて何故かMacでブラウザが立ち上がるようになります(ホームディレクトリのパスは各自チェックして下さい)。

応用

mikutterではなくデスクトップ環境のデフォルトブラウザにopenを指定すれば別のアプリでリンクを踏んでもMacでブラウザが立ち上がります。
また、ファイルをscpしてからopenをMacで実行する所までをシェルスクリプト化すれば、コマンドラインで指定したファイルをMacで開くことが出来ます(Macのopenコマンド自体はURLを開くためのコマンドではなく、URLやファイルを引数に与えてデフォルト設定のアプリケーションで開くためのコマンドです。詳しくはmanを見てね)。

おやくそく

SSHサーバを起動したりパスフレーズなし鍵認証を設定したりとセキュリティが緩くなる方向に設定を変更してるので、ファイヤウォールで必要ないIPは弾くとかSSHの設定を厳しくするなどして穴を広げない方向でお使い下さい。

githubで公開することにしました

既にこのブログで第1回、第2回を公開していますが(追記:githubでの公開にあわせて削除済み)、原稿元データを含めて全ての回をgithubで公開することにしました。

現在、TeXへの変換作業のボランティアを募集しています。
詳しくはgithubリポジトリのREADME.mdを参照して下さい。

FreeBSD-10 install image for Baytrail-M NUC(DN2820FYKH)

Intel Baytrail-M NUC(DN2820FYKH) causes kernel panic due to its broken ACPI table:
http://www.freebsd.org/cgi/query-pr.cgi?pr=187966

This install image includes patched kernel for the machine, you are able to install FreeBSD-10 on the machine without any kernel rebuilding work.

http://people.freebsd.org/~syuu/dn2820fykh_freebsd10/