USBメモリから起動したFreeBSDで、ZFSのNASを作ったときのメモ。(インストールとOSの設定編)

全力で脱線しまして、FreeBSDNAS作ったときのメモ。
ちなみに、うっかりIYHした機種はこちら。
NEC Express5800/120Li
あまりの爆音っぷりにファンを交換した話はまた別の機会に。

すでに周回遅れだし、先人の知恵のコピペ。
有用なサイトは山ほどあるので、自分で入力する内容のメモ。

とりあえずドライブとかはこんな感じ。元々ハードウェアRAIDが組まれていましたが、無効化しておきます。だって、da0とda1でRAID1、da2-5は単独接続みができないんだもの。

  • SASドライブ
    • da0 SAS
    • da1 SAS
    • da2 SAS
    • da3 SAS
    • da4 SAS
      • 全部HitachiUltraStarの78G。まとめてZFSの/zpoolにする予定。あとでSATAも追加予定。
  • USBメモリ(余り物)
    • da5
      • 512M /swap
    • da6
      • 2G / 1024M /
    • da7
      • 2G /usr
    • da8

事前にFreeBSDのサイトからダウンロードしたimgファイルをddやDDforWindowsとかブート可能なUSBを作れるライティングソフトで書きこむ。(FreeBSDのハンドブック参照)
うまくda8にインストール用USBメモリが認識されたけれど、これが違ったらまた面倒なことになりそう。

解決策

本体メモリが4Gあるから/swapレスでも行けるような気がするけど、余ってたメモリを使っておきます。正しいかといえば多分正しくない。

distributerはcustomで、kernelとbase,portsだけインストール。

sysinstallの内容はまぁ適当に。inetでSSHを有効にするのと、sysinstall中でSSHログインの有無を聞かれたときにYesにすると、あとでエラーが大量に吐かれるので、どっちかにしておく。

Packageの追加で、とりあえずbashだけインストール。
Userの権限はwheel。

あとは適当に選んで再起動。

再起動後、ログインしたらrootになる。

$ su
PassWord:
ry) to root on /dev/ttyv0
#

zfs.koのロード

# kldload zfs.ko
# kldstat
Id Refs Address Size Name
1 12 0xffffffff8010000 c9fe20 Kernel
2 1 0xffffffff8e22000 c46 warp_server.ko
3 1 0xffffffff8e23000 c9fe20 zfs.ko
4 1 0xffffffff80f2800 c9fe20 opensoralis.ko

da0からda4をクリーンにする。

# gpart create -s GPT da0
# gpart create -s GPT da1
# gpart create -s GPT da2
# gpart create -s GPT da3
# gpart create -s GPT da4

ここでGPTにしておかないとZFSにできないようです。
パーティションが残っているなら、gpart delete -i 1 da0とかでパーティションを削除してから、gpart destroy da0。

zpoolの作成

#zpool create zpool da0 da1 da2 da3 da4
invalid vdev specification
use '-f' to override the following errors:
/dev/gpt/da0 is part of potentially active pool 'zroot'

あれ。前に試した情報がda0とかにのこているようです。

  • fで強制的に実行。

#zpool create -f zpool da0 da1 da2 da3 da4

# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
zpool 340G 79.5K 340G 0% ONLINE -

5つのドライブが連結しました。

色々設定していきます。
/etc/rc.confに追加

dumpdev="NO"
powerd_enable="YES"
powerd_flags="-a adp -n adp"
clear_tmp_enable="YES"
zfs_enables="YES"

/boot/loader.confに追加(というか新規作成)

kern.cam.boot_delay=10000
cpufreq_load="YES"
ahci_load="YES"
zfs_load="YES"

1行目はUSBメモリを認識してもらうためにちょっと待たせる設定。

jarファイルを使ってライブラリのインポートをする

http://techbooster.jpn.org/environment/2768/

プロジェクトのプロパティを開いてビルドパスの中のライブラリ、Jar追加を選択します。

以下引用


JARファイルを作って、別のプロジェクトで使う
2011年1月13日 kkato No comments

いくつかアプリケーションを作っていると、毎回似たような処理を記述することがあるかと思います。

そんな時はJAR (JavaARchive) という圧縮ファイル形式でパッケージを一まとめにしておくとライブラリとして流用し易くなります。

今回はEclipseでJARファイルを作成する方法と、プロジェクトにJARファイルを読み込んで利用する方法を説明したいと思います。

それでは続きで説明します。
JARファイルを作成する

まずはサンプルとして簡単なクラスを用意してみます。

publicな足し算を行うメソッドaddと引き算を行うメソッドsubを持った単純なクラスをCalculatorという名前で作ってみました。
view source
print?
01 package sample.library;
02
03 public class Calculator {
04 static public int add(int a, int b) {
05 return a + b;
06 }
07
08 static public int sub(int a, int b) {
09 return a - b;
10 }
11 }

このクラスを外部から簡単に利用出来るようにJARファイルにします。

ターミナルからjarコマンドを使っても作成することも可能ですが、eclipse上から簡単に作成することも可能です。

作成の仕方はまずプロジェクト名にカーソルを合わせてメニューを出して、エクスポートを選択します。

エクスポートを選択するとウインドウが開くのでJavaの中のJARファイルを選択します。

JARエクスポートのウインドウが開くので「生成されたクラス・ファイルとリソースをエクスポート」にチェックが入っていることを確認したうえで、エクスポート先を選択してエクスポートを完了させます。

これでJARファイルができました。
JARファイルを読み込んで利用する

さて、次は作成したJARファイルを使ってみます。

新規にAndroidのプロジェクトを作成します。そしてlibsフォルダを作成して先ほどのJARファイルを配置します。

配置したらそのJARファイルをライブラリとして読み込む設定を行います。

プロジェクトのプロパティを開いてビルドパスの中のJar追加を選択します。

そして配置したjarファイルを選択します。

これでライブラリを使う準備ができました。
import文を記述すればCalculatorクラスを使うことができます。
view source
print?
01 package org.jpn.techbooster.sample.library;
02
03 import sample.library.Calculator;
04 import android.app.Activity;
05 import android.os.Bundle;
06 import android.util.Log;
07
08 public class LibrarySampleActivity extends Activity {
09 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.main);
13
14 Log.d("", String.valueOf(Calculator.add(10, 20)));
15 Log.d("", String.valueOf(Calculator.sub(50, 20)));
16 }
17 }
AndroidSDKを使ったライブラリを作成するときの注意点

上記は単純なJavaのみのライブラリを作成しましたが、AndroidSDKを使ったライブラリを作成する時にはいくつか注意する点があります。

1.Androidのプロジェクトを作る時にActivityを作成しない

2.AndroidManifet.xmlのアプリケーションタブのDefine an tag in the AndroidManifest.xmlからチェックを外す


3.エクスポートするリソースの選択でAndroidManifet.xmlを含めないようにする
開発環境 jar, ライブラリ

やっと解決

http://y-anz-m.blogspot.com/2010/01/android-button.html
を参考に、ボタンの色を変えようとしてドハマリ。

コンパイルエラー無しで、実機orエミュレータで起動しようとすると強制終了。
原因はコレ。「selector の item タグの color の注意点」
http://y-anz-m.blogspot.com/2010/11/androidselector-item-color.html

んでも、selectorとshapeの共存が判らない。落ちるか背景が真っ黒になるかの行ったり来たり。 Android ボタン


  • ボタンを押したらTextエリアに表示する
  • 式の評価

問題山積。

画面の向きの制御。

Top > 画面の向き(ScreenOrientation)
画面の向き(ScreenOrientation)
Last-modified: 2010-08-04 (水) 00:27:34

アクティビティに対して画面の縦・横の固定や、センサーによる表示の切り替えを指定/取得できます。

* 画面の向きの設定
* 画面の向きの取得

画面の向きの設定 Edit

リファレンス:http://developer.android.com/guide/topics/manifest/activity-element.html#screen

画面の向きはAndroidManifest.xml内でActivityに対してandroid:screenOrientationで設定します。






下記が指定値と結果になります。
こちらの例ではあらかじめ縦、横で背景、ビューの位置が異なるレイアウトを用意しています。

モード 縦長表示 横長表示 説明
unspecified(デフォルト) land_tall.gif port_wide.gif システムが自動選択します。(デバイスによって異なる)

ユーザの操作(エミュレータではCtrl+F11)によって切り替わります
portrait(縦固定) land_tall.gif port_tall.gif 常に縦レイアウトを使用します
landscape(横固定) land_wide.gif port_wide.gif 常に横レイアウトを使用します
user land_tall.gif port_wide.gif 現在のレイアウトに従います

ユーザの操作(エミュレータではCtrl+F11)によって切り替わります
behind land_tall.gif port_wide.gif 親のアクティビティに従います

ユーザの操作(エミュレータではCtrl+F11)によって切り替わります
sensor センサーに従います

実機がないので試せていません
nosensor センサーを無視します。ユーザの操作に基づいて回転しない点以外は、unspecifiedを指定したのと同じ動きになります。

実機がないので試せていません
▲ ▼
画面の向きの取得 Edit

現在の画面の向きはActivityから下記のように取得できます。

Configuration config = getResources().getConfiguration();
// Landscape(横長)
if(config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast toast = Toast.makeText(this, "Landscape", Toast.LENGTH_SHORT);
toast.show();
}
// Portrait(縦長)
else if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {
Toast toast = Toast.makeText(this, "Portrait", Toast.LENGTH_SHORT);
toast.show();
}
// Square(正方形) エミュレータではこの値は返って来ない。
else if (config.orientation == Configuration.ORIENTATION_SQUARE) {
Toast toast = Toast.makeText(this, "Square", Toast.LENGTH_SHORT);
toast.show();

}

コメント: &attachref; (^^)(^-^(^Q^(..;(^_-(--;(^^;(T-T(//(OO;&heart;☆&hatena;&tip; hintadv