(少なくともFreeBSD的には)世界初になるLZ4等複数圧縮対応メモリディスク(/dev/xmd)を搭載したNAS4Free 9.3.0.2.1190がリリースされました

ChromeでのUI系の不満を解消するべくメインブラウザをChormeにしているので他ブラウザーでは問題があるかも。
今回のアップデートでは、

インストール先に2GBを想定した各種サイズの拡張
FreeBSD 9.3系をベースに使用
Samba 4.1系および SMB3 をデフォルトに使用
LiveUSBなどにデフォルトスワップ領域を常時設置(ユーザが設定追加するまでのつなぎ)
圧縮機能付きのメモリディスク(geom_xmd.ko)を採用
メモリ512MB搭載マシンでの動作を保証(LiveCDモードを除く)

になったのが大きな変更です。

マイナー系では

メモリ2GB未満のマシンに対するLiveCDモードの廃止
(以後はインストールとアップグレードのみ対応/LiveUSBおよびインストール後は引き続き動作保証)
xzを使った高圧縮を全面的に採用
net.inet.carp.preempt使用時のHAST処理の改善
HASTボリュームのインポート処理改善
HASTボリューム上のNFSサービスのサポート
ZFSにおけるログデバイスの追加削除
HTTPSにおけるSSLv3の廃止
2048ビットキーおよびSHA256ハッシュを使った自己証明書の添付
WebGUIの許可ホストを追加
Windows Server 2012 R2での動作確認済みのistgt-20141125を搭載

などです。
ダウンロードはこちらから:

http://sourceforge.net/projects/nas4free/files/NAS4Free-9.3.0.2/9.3.0.2.1190/

今回のNAS4Freeには、実験的なメモリディスク(geom_xmd.ko)および制御コマンド(/sbin/xmdconfig)を搭載しています。
また xmdの圧縮機能使用を前提として mfsroot を /usr/local とそれ以外に分離。
もちろんxmdなんてなくても動作するけど…消費メモリは激しいです。

主な機能としては、

1. swap_pagerを使った動的な可変サイズメモリ確保/解放(ゼロフィル等の同値やTRIMにも対応)
2. リアルタイムのブロックレベル圧縮機能
3. 複数の圧縮方式や圧縮レベルに対応(無圧縮, LZ4/LZ4HC, ZLIB, LZMA2)
4. 圧縮方法はセグメント単位で独立なのでいつでも xmdconfig から変更可能
5. mkuzip(8) や mkulzma(8) による事前圧縮済みの mfsroot に対応
6. mdconfig(8) と同等のインターフェースを用意

実際に512MBの仮想マシン中で使うとこんな感じに(表示上の空きメモリは150~250MB程度)

20141213b
(クリックで拡大)

全体として1GBのメモリディスクを作成して約330MBを利用している画像です。
768MBのディスクが、157085696バイトのスワップメモリ割り当て。(805306368バイト中19%を割り当て済み)
UFSレベルでは302MB使用しているが、生データは137288660の圧縮データとして保持中。
カレントの圧縮方式はLZ4、圧縮レベルは6を指定済み。(LZ4ではレベル4以上はLZ4HCを使うので実際はLZ4HC)
圧縮方式とレベルはもちろん /sbin/xmdconfig でいつでも変更可能です。

xmdconfigによるオペレーション例:

Using -a and -d option is same as mdconfig:
    # xmdconfig -a -s 256m
    # xmdconfig -d -u 3

Change to fastest LZ4 compression
    # xmdconfig -m -u 0 -t lz4 -c 1

Change to LZMA compression with level6
    # xmdconfig -m -u 1 -t lzma -c 6

Change to ZLIB compression
    # xmdconfig -m -u 2 -t zlib

List the disks with verbose
    # xmdconfig -l -v
    xmd0    preload    128M lz4     1        12% (16528790/16608053/134217728)
    xmd1    swap       768M lzma    6         9% (62249776/74780672/805306368)
    xmd2    swap       128M zlib    1         6% (56211/266240/4128768)

なお、ソースファイルの用意が間に合っていないので、まずは9.3用のバイナリ形式のみを提供:
xmd-0.3.2.tar.gz (binary)

istgt (iSCSI target) 20141125版 for openSUSE/Debian/NetBSD/FreeBSD および isboot (iSCSI boot driver) version 0.2.8 と統合デモ版のFreeBSD 9.3/10.0

Raspberry Piの作業が全然進んでないので逃避というわけではないけど・・・

NAS4Free 9.3.X.Xの改版に伴うテスト作業を実行するために、
Windows Server 2012 R2 での動作を検証して動かない部分を直しました。
主に複数イニシエータ使用が前提の修正です。
NAS4FreeのSVNにはコミット済みなので次のリリースから適用されます。

istgt (tarball): istgt-20141125.tar.gz

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20141125.tar.gz
# cd istgt-20141125
# ./configure
# make
# make install
# make install-doc

作成方法(仮想ディスク機能付き):

# cd /path/to/work
# tar zxf /path/to/istgt-20141125.tar.gz
# cd istgt-20141125
# ./configure --with-vbox
or
# ./configure --with-vbox=/path/to/VirtualBox-4.X.X/include
# make
# make install
# make install-doc

MD5 (istgt-20141125.tar.gz) = 95dc647d7bf69f10bb6b09ae9d63f0c5
SHA256 (istgt-20141125.tar.gz) = 8fa4120091ce9be694b5d2ff3d6d188386bec4921a3d0a837b6860ea3fdc79bf

主な修正点:
複数イニシエータから登録されたキーを正しくコピーできていなかった問題を修正。
各ターゲット毎に3接続以上(または3台以上のイニシエータ)から接続した場合にRESERVE/RELEASEが期待通り動かない問題を修正。

また、FreeBSD8/9/10に対応したブートドライバも更新しました。
0.2.7でVIMAGEカーネルが対応できなかったので0.2.8になってます・・・。
ビルドは単独のMakefileを用意しましたので、任意の場所に展開して
そのまま make すれば出来上がります。

isboot の使い方は以前のページを参考にしてください。

isboot (iSCSI boot driver) version 0.2.8 ダウンロードリンク:isboot-0.2.8

MD5 (isboot-0.2.8.tar.gz) = fd29a2537ede3cf223ac5c1f07e8128c
SHA256 (isboot-0.2.8.tar.gz) = a513c1efb42819f8fa33ad497d1253d09b86ecefa58a13f70ba36a52c2b2eb12

統合デモ版 ダウンロードリンク(for testing purpose only):

FreeBSD-10.0-RELEASE-amd64-memstick-isboot-0.2.7.img


FreeBSD-9.3-RELEASE-amd64-memstick-isboot-0.2.7.img

FreeBSD 11-CURRENT on Raspberry Pi に Apache 2.4(event MPM)/MySQL 5.6/PHP 5.6(ZTS) を導入する

ハード依存の初期設定さえ終われば中身は100%のFreeBSDですから
いろいろなネットの情報を使って自由にカスタマイズできます。
ただし、公式のパッケージが用意されていないので、
すべて ports から自力コンパイルして作成しなければいけません。

CPUは700MHzとかなり遅いので時間が結構かかります。
オーバークロックして1000MHzでもそれなりに。

そこで予めテスト環境で十分動くと判断したイメージを使い、
pkgの生成を行う専用マシンを用意して実機作成したものを公開しています。

※現在はベース 20141024 + カーネル 20141026を使用

って前振り長いですね・・・

ダウンロードページで既に書いた手順に従いパッケージリポジトリを取り込みます。

パッケージ利用方法のおさらい:

まず静的リンクしたコマンドでpkg自体をインストール
# fetch http://www.peach.ne.jp/archives/rpi/pkg-static
# chmod 755 pkg-static
# ./pkg-static add http://www.peach.ne.jp/archives/rpi/ports/pkg.txz

デフォルトのパッケージを無効化
# mkdir -p /usr/local/etc/pkg/repos
# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf

独自パッケージリポジトリを追加
# fetch http://www.peach.ne.jp/archives/rpi/rpi.conf
# mv rpi.conf /usr/local/etc/pkg/repos

リポジトリカタログを最新状態に更新
# pkg update

シェルやエディタは好みがあるのでどれとは言いにくいけど、
ここでは個人的な趣味で以下のようなものを入れます。

# pkg install bash emacs-nox11 mg
# pkg install ja-less+iso ja-ddskk-emacs24 ja-nkf
# pkg install portupgrade subversion git gmake m4
# pkg install iperf3 trafshow

apache24 は MPM_EVENT + MPM_SHARED(全MPMモジュール化)で作成してあります。
PHPもパッケージを使えばZTS選択済みのを用意してあるので問題ありません。

※portsと組み合わせる場合はZTSを有効にするかMPMを変更してください。
旧パッケージはMPM_PREFORKなのでもし必要であれば
http://www.peach.ne.jp/archives/rpi/old/ports/packages-20141024/All/
からどうぞ。

# pkg install apache24
# pkg install php56 mod_php56
# pkg install mysql56-server phpMyAdmin

※複数行にわける必要はまったくないけど見やすさ優先でこうしています。
MySQLの管理に便利なphpMyAdminも一緒にいれていきます。

インストールしたら簡単な設定をいれてしまいます。

シェルなどの設定ファイルはホームディレクトリの直下の . から始まります。
rootと作成したユーザの両方に同じ設定を置きます。
rootはUSBキーボードで直接コンソールから入った時用で、
作成したユーザはSSHで接続した時用です。

bashのログイン時の設定 .bash_profile:

IGNOREEOF=10
EDITOR=mg
PAGER=jless
export EDITOR PAGER

mgの設定 .mg:

meta-key-mode
global-set-key "\^H" delete-backward-char
global-set-key "\e[6~" scroll-up
global-set-key "\e[5~" scroll-down

ログインシェルの変更(ユーザ指定しないと自分=root)

# chsh -s /usr/local/bin/bash
# chsh -s /usr/local/bin/bash ユーザ名

変更したら新たにSSHの接続を開いて正しくログインできる事を確認します。
ダメな場合は設定を行った古い接続の方で設定を見直します。

MySQLの省メモリ起動の設定:

旧バージョンはサンプルがついてきたけど5.6はもう付いてこないようです。
なので最少設定を書いて後程修正します。

/usr/local/etc/my.cnf:

[mysqld]
log-bin = mysql-bin
expire_logs_days = 7

key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K

innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
innodb_buffer_pool_size = 16M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
#innodb_file_per_table

※InnoDBはデフォルトでは1個のファイル(ibdata1)に複数のテーブル情報をまとめて格納します。巨大になりがちなので注意。
ファイル名は my.conf ではないのでそれも注意。

/etc/rc.conf に以下の起動設定を書いて、

mysql_enable="YES"
# /usr/local/etc/rc.d/mysql-server start

で手動起動してみます。初回起動時は初期テーブルのインストールやらなんやらで
1~2分かかるのでしばらく待ちます。

起動に成功すると、/var/db/mysql/ 内にデータが作成されてログが ホスト名.err で出来ます。
特に変更していなければ raspberry-pi.err になります。

起動するとサンプル設定が /usr/local/my.cnf に出来ますが不要なので削除します。

Apache と mod_php の設定:

設定はどこに書いてもいいと思うけど、Includes 以下のファイルは最後に読み込まれるので、

/usr/local/etc/apache24/Includes/mysite.conf としてこんな感じのを書いてあります。

# override httpd.conf
<IfModule dir_module>
    DirectoryIndex index.php index.cgi index.html
</IfModule>

# debug only
<Location /server-status>
    SetHandler server-status
    Require ip 172.18.0
</Location>
LoadModule info_module libexec/apache24/mod_info.so
<Location /server-info>
    SetHandler server-info
    Require ip 172.18.0
</Location>

# php
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

# phpMyAdmin
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"

<Directory "/usr/local/www/phpMyAdmin/">
    Options None
    AllowOverride Limit

    Require local
    Require ip 172.18.0
</Directory>

/etc/rc.conf に以下の起動設定を書いて、

apache24_enable="YES"
# /usr/local/etc/rc.d/apache24 start

で手動起動してみます。

ブラウザで Raspberry Pi のIPアドレスを入れて「It works!」が表示されればOKです。
「It works!」は /usr/local/www/apache24/data/index.html なので、
この時点で /usr/local/www/apache24/data に置いたファイルがアクセス可能です。
たとえば、info.phpとして以下のような内容を書くと、

<?php
        phpinfo();
?>

http://IPアドレス/info.phpを表示させればPHPの情報が見れます。

アクセスできるようになったら、phpMyAdminを設定します。

phpMyAdmin の設定:

http://IPアドレス/phpmyadmin/setup/ から行います。

まずは接続テストする為に、デフォルト指定のまま全部いきます。
「サーバ」→「新しいサーバ」で「このサーバの詳細な名前」の所に

Raspberry Pi FreeBSD11

などの適当な名前をつけます。初回はパスワードが入っていないので、
「サーバ設定」→「パスワードなしログインの許可」にチェックを入れます。
残りはデフォルトのまま「Apply」をクリックします。

「設定ファイル」→「デフォルト言語」を日本語にして「表示する」に行きます。

いままでの設定が表示されますので、

/usr/local/www/phpMyAdmin/config.inc.php

に内容を全部貼り付けます。できたら

http://IPアドレス/phpmyadmin/

にアクセスして、ユーザ名に root を入れてパスワード欄を空のまま実行を押します。
設定が間違っていなければMySQLにログインしてこのような画面になります。

↓ログイン成功
20141027A

ユーザの所をクリックすると、現在MySQLに登録されているユーザが表示されますので
安全の為に使う予定のないものをすべて削除します。

↓いろいろ設定されている
20141027B

localhost を使うと /tmp/mysql.sock を経由したアクセスになります。
IPアドレスを指定すると TCPポート3306を経由したアクセスになります。

WEBとDBサーバが一緒にいる場合は localhost 以外は使わないので消します。
さらに、匿名アクセスも利用しないのでまとめて全部消します。
それぞれのチェックボックスにチェックをいれて、
「選択したユーザを削除する」の右端のほうにある「実行」を押します。

↓削除後の様子
20141027C

次にパスワードの変更を行います。
rootの「特権を編集」の中にある「パスワードを変更する」を実行します。
rootのパスワードを変更すると、おそらくセッションが切れるので、
ブラウザを起動しなおします。
新しいパスワードでログインする事を確認できたら、config.inc.php の
AllowNoPassword の行を削除します。

以上で phpMyAdmin のログイン設定の完了です。

一応ここまでセットアップした後に WordPress4.0 と webmin (pkgあり) を
動かすところまでは確認したけどすごい遅い…
小型省エネだから監視系とかログ収集とかにいいかなとは思う。
次回はメール系(postfix/dovcot)をやってみようかなと思っています。

FreeBSD 11-CURRENT on Raspberry Pi の初期設定をやってみる

※以下の初期設定は

FreeBSD-armv6-11.0-RPI-B-test20-r273303-20141026.img.gz

を前提にしています。以前の初期設定がなくなってちょっと面倒なので、
以前のようにすぐに使えるようにイメージ作成時に修正をいれる予定です。

2014/11/06追記:
FreeBSD-armv6-11.0-RPI-B-test20-r274088-20141106.img.gz
からスワップをデフォルト設定済みになりました。
/etc/fstab は tmpfs を使うように変更されました。
また、/etc/rc.conf で cron/syslog が有効になっています。
2014/11/06追記:

1.一般ユーザーの追加

USBキーボードとHDMIを接続して電源を入れて、login: の所で
root でログインしてSSH接続できる一般ユーザーを作成します。

※シリアルコンソールが使える環境であればそちらから可能

adduser または bsdconfig コマンドを使って新規ユーザーの追加ができます。
ほぼデフォルトでもかまわないけど、other groups に wheel を入れるのを
忘れると管理者になれないので注意します。

adduser コマンドを使った作業例:

root@raspberry-pi:~ # adduser
Username: pi         ←ユーザー名を入れる
Full name:
Uid (Leave empty for default):
Login group [pi]:
Login group is pi. Invite pi into other groups? []: wheel ←root(管理者)になれるように指定する
Login class [default]:
Shell (sh csh tcsh bash rbash git-shell nologin) [sh]:
Home directory [/home/pi]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:        ←新しいパスワードを入力
Enter password again:     ←パスワード確認
Lock out the account after creation? [no]:
Username   : pi
Password   : *****
Full Name  :
Uid        : 1001
Class      :
Groups     : pi wheel
Home       : /home/pi
Home Mode  :
Shell      : /bin/sh
Locked     : no
OK? (yes/no): y        ←設定がよければ y で作成
adduser: INFO: Successfully added (pi) to the user database.
Add another user? (yes/no): n ←他に追加しなければ n で終了
Goodbye!

2.IPアドレスを確認してSSH接続

ネットワークに接続されていれば起動時にDHCPからIPアドレスをとってくるので、
それを確認して、上記で作成したユーザーでSSH接続します。
inet の後にIPアドレスが書いてありますのでそれを使います。

ifconfig の実行例:

# ifconfig
(中略)
ue0: flags=8843 metric 0 mtu 1500
        options=80001
        ether XX:XX:XX:XX:XX:XX
        inet 172.18.0.148 netmask 0xffffff00 broadcast 172.18.0.255
        media: Ethernet autoselect (100baseTX )
        status: active
        nd6 options=29

※ネットワークに接続するのを忘れていたらLANケーブルの接続を確認して
シャットダウン(リブート)しましょう・・・

# shutdown -r now

TeraTerm(UTF-8)の場合は「チャレンジレスポンス認証を使う」を選択すると
SSHでログインできるようになります。
以降の作業はすべてSSHで遠隔操作可能です。

3.root ユーザーのパスワードを設定

まずは上記で作成したユーザーでログインします。
ログインしたら $ というプロンプトが出るので、su コマンドを使って
root ユーザー(管理者)になり、passwd コマンドで新しいパスワードを設定します。

※管理者の場合はプロンプト(の最後)が # に変わり管理者であることを示します。

$ su
root@raspberry-pi:/usr/home/pi # passwd
Changing local password for root
New Password:      ←新しいパスワード
Retype New Password:  ←確認

4.スワップの設定(オプション)

2014/11/06追記:
r274088-20141106 以降は標準で設定されていますのでこの項目は不要です。
2014/11/06追記:

スワップはなくても動きますけど、一時的にメモリ確保が必要な時に
作業中断されると対応が面倒なので、事前に追加しておく事をお勧めします。

まずスワップに使う256MBの空ファイルを作成し、管理者のみ参照できるようにします。

# dd if=/dev/zero of=/usr/swap.dat bs=1m count=256
# chmod 600 /usr/swap.dat

確認するとこんな感じのが出来ています。

# ls -al /usr/
(中略)
-rw-------   1 root  wheel   268435456 Oct 27 16:11 swap.dat

次にこのスワップファイルをfstabに追加します。
ファイルの編集には標準で付いてくる ee コマンドを使い編集します。
後ほどportsからいろいろなテキストエディタをインストールできますが
ここでは ee で行います。ESCキーを押すとメニューが出てくるので
「a) leave editor」→「a) save changes」と選択して保存終了します。

# ee /etc/fstab

※ファイルの最後に改行が付いていないと最終行の次の行頭に移動できないので、
その場合は最終行の行末までいって改行します。

エディタで /etc/fstab の最後に次の一行を追加する。(起動時にスワップ追加の設定)

md none swap sw,late,file=/usr/swap.dat 0 0

fstab の編集が終わったら起動している今はスワップファイルを手動で追加します。

# swapon -aL
swapon: adding /dev/md2 as swap device

swapinfo や top コマンドで追加されている事を確認してみてください。

5.タイムゾーンを日本時間に変更

zoneinfo 内から /etc/localtime にコピーします。
dateコマンドで現在時間表示してJSTになっていればOKです。

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# date
Mon Oct 27 20:19:10 JST 2014

6.デフォルトの設定をサーバー向けに変更

2014/11/06追記:
r274088-20141106 以降は標準で設定されていますのでこの項目は不要です。
2014/11/06追記:

ログファイルが永続しないメモリディスク上だと追跡が困難になりますので、
/etc/fstab の /var/log の行頭に # を入れて設定を無効化(コメント化)します。

編集後の /etc/fstab の例:

(中略)
md              /tmp            mfs rw,noatime,-s30m    0 0
#md             /var/log        mfs rw,noatime,-s15m    0 0
md              /var/tmp        mfs rw,noatime,-s5m     0 0
md none swap sw,late,file=/usr/swap.dat 0 0

同様に /etc/rc.conf のcronとsyslogの起動停止を無効化(=機能有効化)します。

編集後の /etc/rc.conf の例:

(中略)
# Turn off a lot of standard stuff
# for more free memory.
#cron_enable="NO"
#devd is necessary for proper DHCP operation;
# don't disable unless you know how to run DHCP manually.
#devd_enable="NO"
#syslogd_enable="NO"
(以下略)

7.固定のIPアドレスを設定

DHCPサーバ側で固定できる場合は ifconfig で出てくる ether の行の値を設定します。

DHCPサーバがMACアドレスベースで固定できない場合は、
IPアドレスをDHCP範囲外から選び静的に指定します。

/etc/rc.conf 静的アドレスの例:

defaultrouter="172.18.0.1"
ifconfig_ue0="inet 172.18.0.148 netmask 255.255.255.0"

/etc/hosts に自身のIPアドレスを付け加えておきます。

172.18.0.148    raspberry-pi raspberry-pi.local

※ /etc/resolv.conf (DNS設定)はDHCPで取得した時点で自動作成されるので
確認だけはしておきます。

8.ports デフォルトオプションの設定

サーバ用途でX11がいらない場合は余計なビルドを避けるため make.conf に
以下のようなものを入れておくと良いです。
パッケージ作成はこれを入れた上でビルドされています。

/etc/make.conf:

OPTIONS_UNSET=X11

9.再起動して確認

全部作業が終わったら再起動して正しく設定がされているか確認します。

# shutdown -r now

無事に起動したらパッケージの利用方法の手順に従い追加する事ができます。
続きは長くなりそうなので次回に。

2014/11/06追記:
r274088-20141106 以降のディスクレイアウトはこんな感じです。

# df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
/dev/mmcsd0s2a    7.1G    1.6G    4.9G    25%    /
devfs             1.0K    1.0K      0B   100%    /dev
/dev/mmcsd0s1      17M    7.0M     10M    41%    /boot/msdos
tmpfs              64M    4.0K     64M     0%    /tmp
tmpfs             8.0M    4.0K    8.0M     0%    /var/tmp

# swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/md0           262144        0   262144     0%

2014/11/06追記:

↓ディスクレイアウトはこんな感じになります

# df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
/dev/mmcsd0s2a    7.1G    1.6G    4.9G    25%    /
devfs             1.0K    1.0K      0B   100%    /dev
/dev/mmcsd0s1      17M    7.0M     10M    41%    /boot/msdos
/dev/md0           29M     24K     26M     0%    /tmp
/dev/md1          4.4M    8.0K    4.0M     0%    /var/tmp
# swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/md2           262144        0   262144     0%

※完全に終了させて電源を切る場合は -h または -p を付けて実行します。

# shutdown -h now

↓のような状態になったら電源ケーブルを抜いても大丈夫です。
(シリアルコンソールでないと最後まで見えません)

System shutdown time has arrived
Waiting (max 60 seconds) for system process `vnlru' to stop...done
Waiting (max 60 seconds) for system process `bufdaemon' to stop...done
Waiting (max 60 seconds) for system process `syncer' to stop...
Syncing disks, vnodes remaining...2 0 2 2 1 1 0 0 done
All buffers synced.
Uptime: 2m25s

The operating system has halted.
Please press any key to reboot.

FreeBSD 11.0-CURRENT/clang on Raspberry Pi 512MB (with U-Boot 2014.10 + ubldr)

生成スクリプトに crochet-freebsd を利用するようになりました。
これにより以前の初期設定がなくなりよりプレーンな状態になってしまいました。
必要であれば後々追加していく予定です。
もはやclangがデフォルトなので過去と同じく全コードclangビルドになります。
U-Bootは最新の2014.10を使っています。<過去のUSBコードは入っていない
FreeBSDのソースは SVN r273303 ベースになります。

※一般的なビルド方法についてはこちらの記事を参考にすると良いです。

過去にやってきったパッチはHEADにほぼ取り込まれていますので、
現時点で特にパッチが必要だと感じたのは以下の処理まわり2点です。

1.プロセスの切り替え時?などに共有ライブラリ付近の挙動がおかしい
 大抵はセグフォ、たまにカーネルごとpanicする
 副作用でファイルシステムがお亡くなりに・・・
 →過去に使っていたキャッシュクリアパッチのみを適用してみた

2.HSモード(25MB/s)でMMCにアクセスすると不安定なカードが存在する
 →DSモード(12.5MB/s)で不安定になったことはないので、HS無効モードを
  /etc/loader.conf にデフォルト設定の上パッチを当ててあります。

わかっている問題:
致命的ではないもののラベルマウントしていると挙動がおかしくなりそう?
→念のためデバイスファイルを直接 fstab に書いたままで作業しています。
→なんかclangの最適化バグの気がしなくもない・・・

FreeBSD 11.0-CURRENT/RPI-B-test20:
http://www.peach.ne.jp/archives/rpi/FreeBSD-armv6-11.0-RPI-B-test20-r273303-20141024.img.gz
SHA256 (FreeBSD-armv6-11.0-RPI-B-test20-r273303-20141024.img.gz) = fec806fd64ed35770747e200184c2eeceed2dded7beb5464c1d87b5b142ad488

2014/10/26更新:
http://www.peach.ne.jp/archives/rpi/FreeBSD-armv6-11.0-RPI-B-test20-r273303-20141026.img.gz

SHA256 (FreeBSD-armv6-11.0-RPI-B-test20-r273303-20141026.img.gz) = c4a25c4d599eeb2e32050b384c8ab6f39f931f7d1120f7c671210c22b261e689

※さっそくバグっていました・・・
min_freq を指定するとハングするのを修正

2014/11/06更新:
http://www.peach.ne.jp/archives/rpi/FreeBSD-armv6-11.0-RPI-B-test20-r274088-20141106.img.gz

SHA256 (FreeBSD-armv6-11.0-RPI-B-test20-r274088-20141106.img.gz) = e03b3a173f6d2872ffc5588b6c12d287185ef2814c03b12848f40f3e6ab7d763

変更点:
デフォルトスワップを256MBつけるようになりました。
/tmp および /var/tmp には tmpfs を用いるように変更されました。
/var/log はデフォルトでSDカードに書くように変更されました。
起動メッセージの簡略化に伴い従来の起動メッセージは /boot/loader.conf で
hw.bcm2835.cpufreq.verbose=1
を指定すると出るようになりました。また、最少クロックを
hw.bcm2835.cpufreq.lowest_freq=300
にて指定できるようになりました。
2014/11/06更新:

ダウンロードしたらGZIP圧縮されているので解凍して8GB以上のSDカードに展開してください。
(8GBより大きいSDカードは /etc/rc.d/autosize でリサイズできます)
Raspberry Piではハード仕様により25MB/s以上は出しようがないのでどのクラスカードでもOKです。
とは言え長時間使う事を考えると迷ったなら東芝製をお勧めしておきます。
下記で公開しているpkgビルド環境も東芝製EXCERIAシリーズ16GBor32GBですよ。

実験用に Overclocking options を起動DOSパーティションのconfig.txtにいれてあります。
デフォルトでは最大クロック800MHzになるように設定してあります。(powerdまたは手動による)
詳細はこちらをどうぞ → http://elinux.org/RPiconfig

独自機能として、cpufreq(4) を使ったクロック自動調整および手動設定機能を作りました。
おまけで温度もモニターできるようになります。詳細は後述。
ヒートシンク付けているテスト機の違いがわかる!?

シリアルコンソールを持っていない人は緊急起動用の予備SDカードと
USBカードリーダーをRaspberry Pi専用に持っているといいかも。
(予備SDで起動してカードリーダに問題のあるカードを挿して調整する)

※シリアルUSB変換ケーブルは1000円もしないので、用意しておくと便利ですよ。
http://www.amazon.co.jp/dp/B00L8SP7U6 たとえばこんなやつでWinマシンと接続できます。

一般的な事としてRaspberry PiのUSBポートは電源ON時に抜き差しするのは避けた方が良いと思う。
どうしてもやりたいなら外部電源ありUSBハブを付けてそこで抜き差しをすること。

使用コンフィグ:
http://www.peach.ne.jp/archives/rpi/config/RPI-B-test20

新カーネルのみ:
http://www.peach.ne.jp/archives/rpi/kernel/

追加ソースとパッチ:
http://www.peach.ne.jp/archives/rpi/patch/

作成済みパッケージ:(順次追加中)
http://www.peach.ne.jp/archives/rpi/ports/packages/All/

参考用 過去の情報はこちらに:
http://shell.peach.ne.jp/aoyama/archives/2545

初期設定:
MEM 496MB/GPU 16MB/SWAP 256MB
I/O: マルチコンソール (HDMI&USBキーボードでroot利用可)
IP アドレス: DHCP
デフォルトルータ: DHCP
DNS: DHCP
sshd: 有効 (rootログイン不可)
ntpdate: 有効 (0.freebsd.pool.ntp.org)
powerd: 有効 (300MHz~800MHz オーバークロック有り)
ファイアウォール: なし
portsnap: fetch & extract済み

一般ユーザ: なし
パスワード(root): なし

初期設定のため変更されたファイル:
/boot/loader.conf
/etc/fstab
/etc/rc.conf
/etc/ttys

※ デフォルトはUTC仕様なのでJSTにしたい場合は
# cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
を実行するか bsdconfig で調整してください。

※ 初期ユーザは adduser か bsdconfig で作成できます。

当サイト特設パッケージ(X11なし実機ビルド)の利用方法:

まず静的リンクしたコマンドでpkg自体をインストール
# fetch http://www.peach.ne.jp/archives/rpi/pkg-static
# chmod 755 pkg-static
# ./pkg-static add http://www.peach.ne.jp/archives/rpi/ports/pkg.txz
または
# ./pkg-static add http://www.peach.ne.jp/archives/rpi/ports/packages/All/pkg-1.3.8_3.txz

デフォルトのパッケージを無効化
# mkdir -p /usr/local/etc/pkg/repos
# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf

独自パッケージリポジトリを追加
# fetch http://www.peach.ne.jp/archives/rpi/rpi.conf
# mv rpi.conf /usr/local/etc/pkg/repos

リポジトリカタログを最新状態に更新
# pkg update

リポジトリを検索(デフォルトは正規表現の検索)
# pkg search .
リポジトリを検索(依存関係も表示)
# pkg search -d .

例: bash (+その依存パッケージ全部)をインストール
# pkg install bash

例: samba 4.1 をインストール
# pkg install samba41

例: リポジトリの全パッケージをインストール(正規表現マッチ)
# pkg install -x .

クロック調整機能と温度取得について
hw.cpufreq にリアルタイムな生データが反映されます。
クロックはHz、電圧は1.2Vからの0.025V単位の差分、
温度は1/1000℃単位で取得できます。
温度以外はここに値を書き込むと即座に反映されますが、
起動時の最大値以上など拒否される事もあります。
また自動調整により上書きされることがあります。

↓はARMクロック300MHz、電圧1.2V、温度49.2℃の場合です

# sysctl hw.cpufreq
hw.cpufreq.arm_freq: 300000000
hw.cpufreq.core_freq: 250000000
hw.cpufreq.sdram_freq: 400000000
hw.cpufreq.turbo: 0
hw.cpufreq.voltage_core: 0
hw.cpufreq.voltage_sdram_c: 0
hw.cpufreq.voltage_sdram_i: 0
hw.cpufreq.voltage_sdram_p: 0
hw.cpufreq.temperature: 49230

自動調整可能なクロックの例(最大1000MHz設定時):
powerdで利用可能な設定は dev.cpu.0.freq_levels に出ます。
もちろん手動で dev.cpu.0.freq に設定することも可能です。

# sysctl dev.cpu
dev.cpu.%parent:
dev.cpu.0.%desc: Open Firmware CPU
dev.cpu.0.%driver: cpu
dev.cpu.0.%location:
dev.cpu.0.%pnpinfo: name=cpu@0 compat=arm,1176jzf-s
dev.cpu.0.%parent: cpulist0
dev.cpu.0.freq: 300
dev.cpu.0.freq_levels: 1000/-1 900/-1 800/-1 700/-1 600/-1 500/-1 400/-1 300/-1

↓起動時こんな感じのログが出ます。

bcm2835_cpufreq0: Boot settings:
bcm2835_cpufreq0: current ARM 700MHz, Core 250MHz, SDRAM 398MHz
bcm2835_cpufreq0: max/min ARM 1000/700MHz, Core 500/250MHz, SDRAM 500/400MHz, Turbo OFF
bcm2835_cpufreq0: current Core 1200mV, SDRAM_C 1200mV, SDRAM_I 1200mV, SDRAM_P 1200mV
bcm2835_cpufreq0: max/min Core 1350/1200mV, SDRAM_C 1225/1200mV, SDRAM_I 1225/1200mV, SDRAM_P 1225/1200mV
bcm2835_cpufreq0: Temperature 48.6C

/boot/loader.confの設定:

hw.bcm2835.cpufreq.verbose=1
hw.bcm2835.cpufreq.lowest_freq=300

テスト機のconfig.txt(抜粋):

force_turbo=0
arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=6
over_voltage_sdram=1

2013年の年間損益はプラスで終了したぽい

FX口座の損益計算書や特定口座の年間取引報告書が来たので見てみると、

FX年間損益 +184,933円
USDJPY+21.8万円/EURJPY+4.6万円/GBPJPY-3.6万円
AUDJPY-10.5万円/NZDJPY+8.7万円/EURUSD-0.9万円/AUDUSD-0.3万円
(主要通貨だけ記載)

特定口座の譲渡損益 -0.1万円
特定口座の配当等 +1.5万円

当初はAUDJPYをスワップ目的で保有していたけど、GW後の株暴落と利下げで
どうしようもないので、損切&相殺してNZDJPYを主軸にしていきました。

現物株式の損益は主にGW前後の1346/1570/1571の売買に伴うものです。
それぞれ日経225インデックス(1倍)とレバ(2倍)とインバ(-1倍)です。

今年も豪ドルを少な目にするものの基本戦略はかわらず、
FX利益を日本株式(主に225ETF)に再投資しつつNZDJPYでスワップを狙います。

↓2014/1/1時点の口座状況(1年前はこれ)
20140101B

↓2014/1/15時点の口座状況とポジサマリー
20140115B

20140115A
(クリックで拡大)

日本株が上昇すると見て少し強気にホールドしてみた。
これが利益確定できたら出金してETFに再投資する予定。

あけましておめでとう

あけましておめでとうございます。
Happy New Year!

昨年は後半放置状態だったので、ちゃんと記録できればいいなと思います。
GWでかなり暴落したけど、結局円安方向にブレイクしましたね。
現時点で105.3円あたりに。日経平均は16200円台に。

今年もよろしくお願いします。

ESXi5.1のドライバを作成してみる(intel I217/I218/82579LM/82574L編)

intelからダウンロードしたe1000eドライバ(2.3.2)をビルドしてみました。
もの自体は、とある筋より要望があって4月中旬ごろに作ったものですが、
Z87X-UD5Hでも動作確認が取れたので一般公開します。

このドライバは net-e1000e-2.1.4.x86_64.vib の完全置き換え用なので、
そちらで動くマシンにはすべて導入できます。
ESXi5.1のドライバを作成してみる(intel 82579LM/82574L編)

テスト環境はESXi5.1.0, 1065491 + VM(Win7)です。
GIGABYTE Z87X-UD5H + Core i7-4770 + メモリ16GB に以下のNIC計3枚挿しです。

Qlogic QLE-8152 (10GbE/FCoE SFP+ x2)
Intel ET DualPort Server (82576)
Intel Gigabit CT Desktop Adapter (82574L)

↓ドライバ適用するとこんな感じです。
Z87X-UD5H-1

Z87X-UD5H に搭載されているI217Vの方(上側ポート)のみが対象です。
また、TX100 S3 に搭載されている両方のLANポート(82579LM + 82574L)でも当然利用できます。
このドライバは既存ドライバを置き換える目的で作成しているので、
VMware純正ドライバを消したくない人はインストールしないでください。

Intel I217/I218/82579LM/82574L他用ESXi5.1ドライバ: net-e1000e-2.3.2.x86_64.vib

Z87X-UD5H はどっちも認識されないので、FAT16パーティションのUSBメモリーを作り、
そこからのインストールが一番簡単だと思います。

その他マザー固有の情報については、
Haswell Core i7-4770 と Z87X-UD5H を買ってみました。
Z87X-UD5H + Core i7-4770 で ESXi5.1U1(デバイスパススルーあり) を動かしてみる。
もあわせてどうぞ。

USBメモリー作成例(FreeBSD/NAS4Freeでda1の場合):

# gpart create -s gpt da1
# gpart add -t linux-data -s 2000m da1
# gpart show da1
=>     34  7578941  da1  GPT  (3.6G)
       34  4096000    1  linux-data  (2G)
  4096034  3482941       - free -  (1.7G)

# newfs_msdos -F 16 /dev/da1p1

完成したら、Windowsからでもいいので、そこにドライバをコピーします。

USBメモリーからのドライバインストール方法:

1.ESXiサーバのログイン機能を有効にしてログインする
  「Troubleshooting Options」の「Enable ESXi Shell」を選択して、
  ALT+F1を押してサーバにrootユーザでログインします。

2.USBパススルー機能を停止する

# /etc/init.d/usbarbitrator stop

3.ドライバUSBメモリーを挿入する(どのUSBポートでもOK)
  ※この時点で /vmfs/volumes/NO_NAME/ に自動マウントされます。

4.ドライバ受け入れ設定を変更する

# esxcli software acceptance set --level=CommunitySupported

5.必要なドライバをインストールする

# esxcli software vib install -v /vmfs/volumes/NO_NAME/net-e1000e-2.3.2.x86_64.vib

6.ESXiサーバを再起動する
  exitでShellを終了してALT+F2を押して戻ってF12で再起動します。

Z87X-UD5H + Core i7-4770 で ESXi5.1U1(デバイスパススルーあり) を動かしてみる。

ESXi5.1U1でパススルーを試してみましたが、Z87チップセットのAHCIがリストに出てこないようです。
このマザー固有なのか不明ですが…。

マシン構成:
CPU Core i7-4770 (4core/8Thread, 3.4GHz-3.9GHz, VT-dあり)
マザー GIGABYTE Z87X-UD5H (標準ATX)
メモリ Crucial CT2KIT102464BA160B (8GBx2, PC3-12800)
電源 Corsair AX760 (Seasonic OEM, 760W)

拡張カード:
Qlogic QLE-8152 (10GbE/FCoE SFP+ x2)
Intel ET DualPort Server (82576)
Intel Gigabit CT Desktop Adapter (82574L)

ストレージ:
Silicon Power Ultima II I-Series 4GB (ESXi起動用)
(ディスクレス仕様、10GbEのiSCSIデータストアを利用)

このマザーはNICが両方とも認識しないので独自ドライバを追加します。
今回は起動用とは別のUSBメモリーにFAT16領域を作りインストールしました。

I210 → igb ドライバ
I217 → e1000e ドライバ
QLE-8152 → qlge ドライバ

になります。

igbドライバはIntelドライバがVMwareサイトに登録されています。
↓ESXi 5.x driver package includes version 4.2.16.3 of the Intel igb driver
https://my.vmware.com/web/vmware/details?downloadGroup=DT-ESXI5X-INTEL-IGB-42163&productId=285
ダウンロードしてZIP解凍するとドライバZIPとvibが出てきます。

e1000eドライバは独自ドライバ(e1000e-2.3.2)を使っています。
※ダウンロードページは後ほど書きます。
net-e1000e-2.3.2 を公開しました。http://shell.peach.ne.jp/aoyama/archives/2907

↓VMware ESXi 5.0 Driver for QLogic 10 Gigabit Ethernet Adapter
https://my.vmware.com/web/vmware/details?downloadGroup=DT-ESXI50-Qlogic-qlge&productId=285

ESXiはFAT16しか認識しないらしいので、2GB未満のGPT領域を作り、
FAT16フォーマットします。

USBメモリー作成例(FreeBSD/NAS4Freeでda1の場合):

# gpart create -s gpt da1
# gpart add -t linux-data -s 2000m da1
# gpart show da1
=>     34  7578941  da1  GPT  (3.6G)
       34  4096000    1  linux-data  (2G)
  4096034  3482941       - free -  (1.7G)

# newfs_msdos -F 16 /dev/da1p1

完成したら、Windowsからでもいいので、そこにドライバをコピーします。

USBメモリーからのドライバインストール方法:

1.ESXiサーバのログイン機能を有効にしてログインする
  「Troubleshooting Options」の「Enable ESXi Shell」を選択して、
  ALT+F1を押してサーバにrootユーザでログインします。

2.USBパススルー機能を停止する

# /etc/init.d/usbarbitrator stop

3.ドライバUSBメモリを挿入する(どのUSBポートでもOK)
  ※この時点で /vmfs/volumes/NO_NAME/ に自動マウントされます。

4.ドライバ受け入れ設定を変更する

# esxcli software acceptance set --level=CommunitySupported

5.必要なドライバをインストールする

# esxcli software vib install -d /vmfs/volumes/NO_NAME/igb-4.2.16.3-offline_bundle-1138313.zip
# esxcli software vib install -v /vmfs/volumes/NO_NAME/net-e1000e-2.3.2.x86_64.vib

↓QLE-8152用ドライバ

# esxcli software vib install -d /vmfs/volumes/NO_NAME/qlge-1.0.0.47-offline_bundle-463318.zip

6.ESXiサーバを再起動する
  exitでShellを終了してALT+F2を押して戻ってF12で再起動します。

↓実際にドライバを入れた直後の状態
Z87X-UD5H-1
(クリックで拡大)

↓パススルーを構成してみる
Z87X-UD5H-2
(クリックで拡大)

↓パススルー後の基本情報はこんな感じ
Z87X-UD5H-3
(クリックで拡大)

↓仮想マシンのWin7にI217-VとET dualをパススルー割り当て
Z87X-UD5H-4
(クリックで拡大)

↓10GbE にあるVM中からCrystalDiskMarkを実行してみる
Z87X-UD5H-5
(クリックで拡大)

Haswell Core i7-4770 と Z87X-UD5H を買ってみました。

いろいろ悩んだけど、Intel Dual LAN の
GIGABYTE Z87X-UD5HCore i7-4770 を買いました。

CPU Core i7-4770 (4core/8Thread, 3.4GHz-3.9GHz, VT-dあり)
マザー GIGABYTE Z87X-UD5H (標準ATX)
メモリ Crucial CT2KIT102464BA160B (8GBx2, PC3-12800)
電源 Corsair AX760 (Seasonic OEM, 760W)
SSD Plextor PX-256M5Pro (OS起動, スワップ用)
HDD WD20EARS (2TB, 667GBプラッタ, ダウンロード保存用)

拡張カード:
Qlogic QLE-8152 (10GbE/FCoE SFP+ x2)
Intel ET DualPort Server (82576)
Intel Gigabit CT Desktop Adapter (82574L)

このマザーは追加 USB3.0 に Renesas uPD720210 を搭載して、
COMポート(ヘッダピン)もある。
バックパネルUSBポートが全部3.0で前面用に3.0のピンも出ているので
USB3.0を8デバイスまで使える。
追加SATA3は Marvell 88SE9230 を PCIe x2 で接続されているので、
HighPoint Rocket 640L 相当の追加になっています。
マザーボードサイズはATXサイズなので古いケースとかでも入る。

※BIOSアップデートが出ているのでちゃんと当てた方がいい。

↓全面にUSB3.0ポートを出すオプションパーツ?が入ってたので付けた。
20130603C

↓P35チップセット(775)で2008年から使ってたけど作業マシンもついに Core i7 にw
20130603A

↓ Intel I210AT & I217V のDual LAN仕様です。
20130603B
(クリックで拡大)

ビデオカードはしばらくつけないで触りたいので、
一番上の PCIe x1 に CT Desktop、一番上の PCIe x16 に ET Dual、
中段の PCIe x16 に QLE-8152 を挿してみました。
これで x8 二個として使える。
一番下のx16も指すとx8 + x4 + x4 になる。
Gen2 x4 = 20Gbpsなので10GbEカードならこれで十分なはず…

後々ESXiで遊ぶ為に余っているパーツをいろいろ付けてみた。
しばらくはWin7マシンとして使う予定。

↓FFベンチ的なやつ。1280×720フルスクリーン固定でそれぞれプリセット使用。
FF標準品質

FF高品質

FF最高品質
(クリックで拡大)

WordPress 4.0 on ESXi 5.1 + 10GbE + istgt