Install FreeNAS 8.0.1

概要
自宅にも会社みたいにバックアップ用のNASが欲しいというのを痛感したのと、安かったときに買ったまま放置されていたサーバが余っていたのと、夏を乗り切り電力供給もしばらく余裕のある状態が続くだろうということで、部内の非常に優秀なベテラン技術者が「イイヨー」と絶賛していた FreeNAS で NAS(Windows 向け samba と Linux 向け NFS。ファイルシステムは ZFS) を構築することにした。今回は 8.0.1RC1 だったので、将来再インストールする時にそなえた備忘録。


動画チュートリアル
文章をよむよりスクリーンキャストのほうがいい人は、開発チームの次のビデオをみればOK(USB インストーラーを作成したあとは、画面をポチポチするだけなので。自力インストールしたあとに気づいた)

インストール全般


iSCSI まわり

リソース周り

FreeNAS 7 と 8 の違い
マニュアルの次の箇所に書かれている。

具体的には

などなど。今回は、人柱になるべく、枯れていない8系列の 8.0.1RC1 を採用

インストール方針

アーキテクチャ上、メインプログラムのインストール先とストレージ先は別でないといけない。今回は USB(4GB) にインストールすることにした。
注意点としては、FreeNAS 8.0.1-BETA3 からは従来とことなり、最低 2GB の容量が必要になった。

サーバー構成
サーバ

Windows クライアント(Samba)

  • Windows 7-64 bit

Linuxクライアント(NFS/Samba)

  • Ubuntu 10.4(64 bit)

Windows 環境(Windows 7 64-bit)/Linux 環境での USB インストーラーの作成

長いのこでこちらに移動

サーバマシンへのインストール作業
インストール先のサーバマシンにUSBを刺し起動。次のページのような画像が表示される

マシンに割り振られた DHCP の IP が表示されているのでブラウザでアクセス

ほとんどの設定は GUI で行えるようになっている。(8.0 からフルスクラッチで書き換えられたので、できない機能もある模様、、、)

管理者向けパスワードの設定
右上のアラートが点滅しているのでこいつをクリック
管理者のパスワードを設定しろ、と書かれているので設定。

固定IPの割り振り

マニュアル : http://doc.freenas.org/index.php/Interfaces

Network->Interfacesから Interface を追加

  • DHCP をブランクのままに設定
  • IPv4 Address に IP を設定
  • IPv4 Netmask をプルダウンから設定


環境設定
System->Settings->General を選択

  • Timezone を住んでいるエリアのタイムゾーンに変更

System->Settings->Advanced を選択

  • Show console messages in the footer をチェック
  • Show tracebacks in case of fatal errors をチェック

※デバッグしやすいように

ユーザの追加
ファイル共有用のユーザを追加。自分の場合、SSH ログイン用のアカウントと Windows/NFS 向けアカウントを追加した。

  • Shell は SSH 用は bash、ファイル共有用は/nologin を選択
  • Disable logins はSSH用はノーチェック、ファイル共有用はチェック

SSH 接続
マニュアル : http://doc.freenas.org/index.php/SSHhttp://doc.freenas.org/index.php/Control_Services
Services->SSH を選択
セキュリティーポリシーに応じて

  • TCP Port を変更(デフォルトは22)
  • Login as Root with password をチェック

Services->Control Services で SSH を ON にし SSH のログインを確認

追加したユーザで SSH ログインを確認。

ファイル共有設定
マニュアル : http://doc.freenas.org/index.php/Volumes

ボリュームの追加

Storage->Volumes->Create Volume を選択
Volume name を選択

HDD 構成により Group type は動的に変わるようになっている。

2台構成の場合
今回のインストール先は 2TB x 2台なので2つともチェックすると mirror か stripe のグルーピングを選択できる。今回は mirror を選択

HDDの台数別の可能な構成はマニュアルの Volumes : Creating Volumes RAID Overview を参照

コマンドから確認すると、次のように mirror になっている。

# zpool list
NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
nas   1.81T   239M  1.81T     0%  ONLINE  /mnt
# zpool status
  pool: nas
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        nas         ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ada0p2  ONLINE       0     0     0
            ada1p2  ONLINE       0     0     0

4台構成の場合

4台のHDDを利用する場合、UFSとZFSでそれぞれ次のRAIDから選択できる

ZFS の RAID-Z を選択後、同じようにコマンドから構成を確認

# zpool list
NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
nas   9.06T   989G  8.10T    10%  ONLINE  /mnt
# zpool status
  pool: nas
 state: ONLINE
 scrub: scrub completed after 2h3m with 0 errors on Mon Jan  9 05:12:53 2012
config:

        NAME                                            STATE     READ WRITE CKSUM
        nas                                             ONLINE       0     0     0
          raidz1                                        ONLINE       0     0     0
            gptid/6866bb4e-f321-11e0-8cb4-984be103478e  ONLINE       0     0     0
            gptid/69a4b327-f321-11e0-8cb4-984be103478e  ONLINE       0     0     0
            gptid/6ae643ef-f321-11e0-8cb4-984be103478e  ONLINE       0     0     0
            gptid/6c2bcadd-f321-11e0-8cb4-984be103478e  ONLINE       0     0     0

データセットの追加

CIFS/SambaとNFSの2つの共有ポイントがあるので、データセットを追加

各データセットの Owner(user) には、追加したユーザを設定。

CIFS/Sambaの共有設定

マニュアル : http://doc.freenas.org/index.php/CIFS_Shares

Sharing から CIFS を追加

  • Path に先ほど追加した CIFS データセットを追加
  • Hosts Allow に 192.168.**.0/24 のように制限を入れる

Services->Control Services で CIFS を ON にしてファイル共有を確認

Windows クライアントからのSamba接続確認
コマンドプロンプトから見えていることを確認

C:\Windows\system32>net view freenas
freenas の共有リソース
FreeNAS Server
共有名 タイプ 使用 コメント

-------------------------------------------------------------------------------
cifs Disk freenas for cifs
コマンドは正常に終了しました。

Read/Write を確認して、マニュアルに従い、ネットワークドライブを割り当てる。

Linux クライアントからのSamba接続確認

Ubuntu の人は次の2パッケージをインストールしておくこと

  • smbclient
  • smbfs

予め /etc/hosts を更新して FreeNAS サーバを freenas で引けるように変更しておく。

$ smbclient //freenas/path_to_cifs -U user_account
Enter user_account's password:
Domain=[FREENAS] OS=[Unix] Server=[Samba 3.5.11]
smb: \> ls
カレントディレクトリのファイル一覧が表示される
smb: \> get path_to_nas_file
getting file \path_to_nas_file of size 5 as path_to_nas_file (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
smb: \> mput path_to_client_local_file .
Put path_to_client_local_file? y
putting file path_to_client_local_file as \path_to_client_local_file (0.6 kb/s) (average 0.6 kb/s)

ということでRead/Write ともに成功。

マウント
Ubuntu から Samba をマウントしてみる

$ sudo mkdir /mnt/cifs
$ sudo mount -t cifs //freenas/cifs /mnt/cifs -o username=account,password=pw_of_accout,rw,iocharset=utf8,file_mode=0777,dir_mode=0777
mount: wrong fs type, bad option, bad superblock on freenas:/mnt/nas/nfs,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount. helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so

メッセージ通り dmesg を確認すると、次のようなエラーログが出力されていた。

[135741.925493] CIFS VFS: cifs_mount failed w/return code = -22

-22 は “Invalid argument”
Web で数分しらべてもよくわからなかったが、smbfs パッケージをインストールすればOKだった。

$ sudo apt-get install smbfs

NFS の共有設定
マニュアル : http://doc.freenas.org/index.php/NFS_Shares

Sharing から NFS を追加

  • Path に先ほど追加した NFS データセットを追加
  • Authorized network or IP addresses に 192.168.**.0/24 のように制限を入れる
  • Mapall User に先ほど追加したユーザを設定

Services->Control Services で NFS を ON にしてファイル共有を確認

LinuxクライアントからのNFS接続

ubuntu から NFS をマウントしてみる
予め /etc/hosts を更新して FreeNAS サーバを freenas で引けるように変更しておく。

$ sudo mkdir /mnt/freenas
$ sudo mount -t nfs freenas:/mnt/nas/nfs /mnt/freenas
mount: wrong fs type, bad option, bad superblock on freenas:/mnt/nas/nfs,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount. helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so

WEB で調べると、NFS パッケージが足りないのが原因と書かれているので nfs-common をインストール

$ sudo apt-get install nfs-common
$ sudo mount -v -t nfs freenas:/mnt/nas/nfs /mnt/freenas
mount.nfs: timeout set for Sat Sep 17 17:57:57 2011
mount.nfs: text-based options: 'addr=freenas'
freenas:/mnt/nas/nfs on /mnt/freenas type nfs (rw)

書き込みテスト

$ echo foo > /mnt/freenasn/hoge

マウント&書き込みが確認できたので /etc/fstab に NFS 用マウントポイントを追記

freenfs:/mnt/nas/nfs /mnt/freenas nfs defaults 0 0

$ sudo mount -a で /etc/fstab を読み込み

作成した ZFS のファイルシステムをリスト

# zfs list
NAME               USED  AVAIL  REFER  MOUNTPOINT
nas                239M  1.78T    26K  /mnt/nas
nas/cifs          92.5M  1.78T  91.4M  /mnt/nas/cifs
nas/nfs            145M  1.78T   105M  /mnt/nas/nfs

ここから先は運用・その他の雑多な話題
アップグレード方法
今回は RC1 でためしたけれど、そうこうしているうちに RC2 もリリースされたのでパッケージのアップグレード方法も確認。
マニュアル : http://doc.freenas.org/index.php/Upgrading_FreeNAS
ISO 方式と GUI 方式がある。

1:ISO方式
アップグレードしたいバージョンの ISO を CD-ROM に焼き起動 ISO はインストールとアップグレードの両方を兼ねているので、システムに旧FreeNASがインストール済みか判断してくれる。
2:GUI方式

アップグレードしたいバージョンの *.GUI_Upgrade.xz ファイルを Web GUI カラアップロードする (8.0.1 RC2 だと “FreeNAS-8.0.1-RC2-amd64-GUI_Upgrade.xz”) 注意点としては

  • xz ファイルのままアップロードする
  • リリースノートの README もダウンロードし、ファイルの末尾に記載されているチェックサムもアップロード時に入力しないといけない

チェックサム例)

Filename:
FreeNAS-8.0.1-RC2-i386-GUI_Upgrade.xz
SHA256 Hash:
3d8f65ea2952ed1537baec1248c0f1e926a3c86b98f721d270f4ab26529dfea8

※チェックサムを自分出確認するならFreeNAS は sha256、Linux は sha256sum を利用

$ /sbin/sha256 -q FreeNAS-8.0.1-RC2-i386-GUI_Upgrade.xz

マニュアルの最後には、次のように書かれている

When finished, click the Update button which will change to “Please Wait while the upgrade is in progress”. When the upgrade is finished, you will receive a “You have successfully uploaded a firmware!” message.

自分が試した所 “You have successfully uploaded a firmware!” なんていうメッセージは表示されないまま、いきなり再起動された。また、System->System Information->FreeNAS Build を見るとバージョン更新されているが、プログラムは(少なくとも Django は 1.3.0 のまあまで)古いままだった。
まだ原因の深追いはしていない

3:CLI方式
フォーラムにコマンドラインからアップグレードする方法が紹介されていた。
Upgrading / Downgrading from the CLI on Freenas 8+
FreeNAS 上にアップグレード用ファイル(eg. FreeNAS-8.0.1-RC2-i386-GUI_Upgrade.xz)を移動し、root で次のコマンドを実行

# mount -uw / # / を write できるようにマウント
# /usr/bin/xz -cd /path/to/FreeNAS-8.0.1-RC2-i386-GUI_Upgrade.xz | sh /root/update && touch /data/need-update
1930257+0 records in
7540+1 records out
988291584 bytes transferred in 198.275875 secs (4984427 bytes/sec)
** /dev/da0s1a (NO WRITE)
** Last Mounted on /b/sf_freenas_build/obj.amd64/_.mnt
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
25417 files, 877712 used, 1020094 free (1438 frags, 127332 blocks, 0.1% fragmentation)
active set on da0s1
# mount -ur / # read-only に戻しておく

この作業で /usr/local/www/freenasUI/ 以下のプログラムは更新されたようだけど、その他は不明

設定のデータベース管理
設定は sqlite で管理されている。次のコマンドで確認できる。

$ sqlite3 /data/freenas-v1.db

データベースの書き換えはroot 権限が必要

sqlite> .schema system_advanced
CREATE TABLE "system_advanced" ("adv_systembeep" bool, "adv_serialconsole" bool, "adv_traceback" bool NOT NULL DEFAULT False, "adv_consolescreensaver" bool, "adv_zeroconfbonjour" bool, "adv_consolemsg" bool, "adv_tuning" bool, "adv_firmwarevc" bool, "adv_powerdaemon" bool, "adv_swapondrive" integer, "adv_motd" text, "adv_consolemenu" bool, "id" integer PRIMARY KEY);
sqlite> select id, adv_motd from system_advanced;
1|Welcome to FreeNAS
sqlite> update system_advanced set adv_motd='FreeNAS@HOME';

管理画面のパスワードを忘れた!

設定はDB管理されているので、たとえばWeb GUI のパスワードを忘れた場合、次のようにして DB を直接書き換えてパスワードを再設定してやれば良い。

ステップ1:新しいパスワード用のハッシュ値の計算

$ python
[GCC 4.2.1 20070719 [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
>>> from hashlib import sha1
>>> salt='abcde' # change salt as you like
>>> pw = 'asdfqwer' # your password
>>> sha1(salt + pw).hexdigest()
'd6126fd54247f220e103dff3a0f51a51cdd8844b'

ステップ2:データベースの更新
カラム auth_user.password に ‘sha1$your_salt$your_hex_digest’ を設定する。

# sqlite3 /data/freenas-v1.db
sqlite> .schema auth_user
CREATE TABLE "auth_user" (
"id" integer NOT NULL PRIMARY KEY,
"username" varchar(30) NOT NULL UNIQUE,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL,
"email" varchar(75) NOT NULL,
"password" varchar(128) NOT NULL,
"is_staff" bool NOT NULL,
"is_active" bool NOT NULL,
"is_superuser" bool NOT NULL,
"last_login" datetime NOT NULL,
"date_joined" datetime NOT NULL
);
sqlite> SELECT id, username, password FROM auth_user;
1|admin|sha1$a7c15$ace04ead2e88169c33ed25a946182fc78378eb1a
sqlite> UPDATE auth_user SET password = 'sha1$abcde$d6126fd3a0f54247f220e103dff51a51cdd8844b' WHERE id = 1;

※ 認証周りのコードは /usr/local/lib/python2.7/site-packages/django/contrib/auth の set_password、get_hexdigest を参照

初期設定内容
/data/factory-v1.db にある設定(データ)がデフォルトのものであり、起動時のコンソール画面で
8)Reset to factory defaults
を選択したときには、この値に戻るのだと思う。

ネットワーク設定
GUI から設置をちょくちょくいじる最中に何度か default gateway がクリアされてしまい、メール送信で外にでれず困ることがあった。(netstat -r で確認すると default がない)

# route add default gw 192.xx.yy.zz

で何度か手動で追加するハメに。
Network->Global Setting の IPv4 Default Gateway を設定するほうが確実か。

エディター
FreeBSD で一般的なエディターが何なのかはしらないが、FreeNAS の場合 vi 系列では nvi が入っている。(Version 1.79. 10/23/96 release)
vim で普段使っている操作ができず、編集が少しイライラする。
起動後に :viusage でヘルプが表示されることはわかった。

nvi の簡単なヘルプ : http://linux.die.net/man/1/nvi

パッケージはまだ未対応だそうなので、対応したあかつきにはインストールしたい。

現時点でも、ファイルシステムを write でマウント後にパッケージ追加すると /usr/local/bin/vim に vim 7.3 がインストールされる。ただし、ticket に書かれているように、再起動するとパッケージ情報と共に消えてしまう。

# mount -uw /
# pkg_add -r vim-lite
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.2-release/Latest/vim-lite.tbz... Done.

SECURITY NOTE: The VIM software has had several remote vulnerabilities
discovered within VIM's modeline support.  It allowed remote attackers to
execute arbitrary code as the user running VIM.  All known problems
have been fixed, but the FreeBSD Security Team advises that VIM users
use 'set nomodeline' in ~/.vimrc to avoid the possibility of trojaned
text files.

あとは、好みの応じて、HOME_DIRECTORY/.vimrc を追加すればOK。

root のログインシェルの変更
csh だったので chsh で bash に変更

# echo $SHELL
/bin/csh
# chsh -s /usr/local/bin/bash
chsh: user information updated

/bin/bash が /usr/local/bin/bash へのシンボリックリンクになっているけど GUI 追加でログインシェルを bash に指定したユーザで echo $SHELL をすると /usr/local/bin/bash をむいていたので chsh も /bin/bash ではなく /usr/local/bin/bash を指定した

負荷の可視化
System->Reporting でシステムの負荷状況をグラフで閲覧可能。
RRDtool で作成されている。

セキュアな運用
次のリンクを参照すること。

Web GUI
バージョン 8 からは Python & Django で新規にかき直されている。
プログラムは /usr/local/www/freenasUI 以下にある。

django のコードを書き換えたあとは、次のコマンドで django を再起動させると有効になる。

# /usr/local/etc/rc.d/django restart

lighttpd を再起動しても、pyc ファイルを一度削除しても変更が有効にならないので、少し考えこんでしまった、、、

ファイルシステムのマウント
sqlite のデータファイルなど一部を除き、USB の領域は基本的にリードオンリー。
root でファイル変更しても、”Read-only file system.”と怒られてしまう。

$ mount
/dev/ufs/FreeNASs2a on / (ufs, local, read-only, soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/md0 on /etc (ufs, local)
/dev/md1 on /mnt (ufs, local)
/dev/md2 on /var (ufs, local)
/dev/ufs/FreeNASs4 on /data (ufs, local, noatime, soft-updates)
...
$ cat /etc/fstab
/dev/ufs/FreeNASs2a / ufs ro 1 1
/dev/ufs/FreeNASs3 /cfg ufs rw,noauto 2 2
/dev/ufs/FreeNASs4 /data ufs rw,noatime 2 2
...

どうしても変更したい場合は、次のコマンドでマウント/アンマウントしてごにょごにょ書き換える(AT YOUR OWN RISK)

# mount -uw /
# mount -ur /

HTTPサーバ(lighttpd)のPORTの変更
WebGUI のポートがわからない(忘れた)ときや Web を経由せずに変更したい場合は、 /etc/local/lighttpd/lighttpd.confserver.port を書き換えて HTTP サーバを再起動する。

# service lighttpd stop
Stopping lighttpd.
Waiting for PIDS: 60588.
# service lighttpd check
Performing sanity check on lighttpd configuration:
Syntax OK
# service lighttpd start

DB 上はsystem_settings.stg_guiport に保存されているけれども、GUI 管理に利用されているだけで、lighttpd の設定変更は GET ベースで /etc/rc.d/ix-httpd をキックして行なっている。

ZFS のまとまった(日本語)資料

ZFS の prefetch(キャッシュ)機能
4GB の RAM がないと ZFS のファイルレベルのキャッシュ機構 prefetch がデフォルトでは disable される。コンソールに次のログが出力される。

ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present;
            to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.

マニュアルの Hardware Requirements をみると、ZFS を活かすなら 6GB以上の RAM を推奨していて、 メモリをたくさん詰めないなら UFS で我慢するようすすめている。“Not using pre-fetching can really slow down performance”
どうしても prefetch を有効にしたい人は次のファイルに “vfs.zfs.prefetch_disable=0“(double negative!) を追加すればOK。

$ cat /boot/loader.conf
#
# Boot loader file for FreeNAS.  This relies on a hacked beastie.4th.
#
autoboot_delay="2"
loader_logo="freenas"
#Fix booting from USB device bug
kern.cam.boot_delay=10000

# GEOM support
geom_mirror_load="YES"
geom_stripe_load="YES"
geom_raid3_load="YES"
#geom_raid5_load="YES"
geom_gate_load="YES"
ntfs_load="YES"
smbfs_load="YES"

hw.hptrr.attach_generic=0
vfs.zfs.prefetch_disable=0
Tagged with: , , ,
Posted in linux
One comment on “Install FreeNAS 8.0.1

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 days ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: