とあるエンジニアの備忘log
ラベル
FreeBSD
の投稿を表示しています。
すべての投稿を表示
ラベル
FreeBSD
の投稿を表示しています。
すべての投稿を表示
2013年6月25日火曜日
FreeBSD のソースを git-svn で取ってきた
以前 [git-svn](/2012/10/git-svn.html) でも書いたのですが、プロジェクトの管理が cvs とか subversion とか聞いただけでも嫌になってしまう。 現在、FreeBSDは Subversion で管理されている。(以前は cvs だった。) リポジトリの構造が、Subversion標準の - trunk - branches - tags になっていれば、git に変換するときにわかりやすいんですが、 $ svn ls http://svn.freebsd.org/base で見てみると、そうはなっていないようです。 リポジトリの構造についての説明は -
-
-
にあたりに説明があるようですが、最後のリンクが一番わかりやすいと思う。 - base/head → trunk - base/stable → branches - base/releng → branches - base/release → tags という対応のようです。 (tags なのか branches なのかは、実はそれほど気にしなくてもよい。結局 git-svn で変換すると、 branches も tags も git 上ではブランチになってしまうので。) base/projects の下はトピックブランチのようなのですが、 base/projects/
の下にさらに trunk と branches があったりして、ポリシーが一定していないので、変換はあきらめ。 他にも、 base/vendor, base/vendor-sys とかいくつかのワークエリアがあるようだが、これらも無視した。 というわけで、 $ git svn clone -T head -t release -b releng -b stable http://svn.freebsd.org/base freebsd_base という感じで変換して取って来ました。 途中何度か、サーバーのエラーか何かで止まったのですが、その度に `git svn fetch` で再開。 なんだか、むちゃくちゃ時間がかかる。しまった、 trunk だけにしとけばよかったか、と思いつつも、なんとか変換が終わりました。 (time コマンドで測ってみたが、58時間くらいかかった。。) ちなみに、 head -> stable/* -> releng/*.* -> release/*.*.* という風に、なっているので、基本的にブランチ(タグ)名はかぶらないようになっているはずなのだが、最初の頃はポリシーが徹底されていなかったのか、 `base/stable/2.0.5` と `base/releng/2.0.5` の名前がかぶっています。git に変換したときに 2.0.5 のブランチ名がかぶってしまうのですが、この処理がどうなっているのか不明。
FreeBSD 入門中 その4 : 環境整備2
[前回](/2013/06/freebsd-3.html)の続きです。 検索すればすぐ出てくるような内容ですが、いちいち調べ直すのも面倒なので、メモしてあります。 ### PAGER を lessに ### PAGER をデフォルトの more から less に設定します。 bash系: `~/.profile` で export PAGER=less C shell系: `~/.cshrc` または `~/.login` で setenv PAGER less とする。 (個人的には、環境変数は `~/.cshrc` よりも `~/.login` に書く方がよいと思っているが。。) ### sudo できるようにする ### Ubuntu に慣れていると、`sudo` できないと面倒に感じることがあります。 # pkg_add -r sudo でインストールする。 # visudo を実行して、 # %wheel ALL=(ALL) ALL となっている部分のコメントを外す。 設定ファイルはなぜか `/etc/sudoers` ではなく、 `/usr/local/etc/sudoers` にある。 ここから先は、一般ユーザーでログインしなおして、必要な時のみ、`sudo` で (もしくは `su` で rootに変身して)実行することにする。 ### NFS サーバー 設定 ### `sysinstall` で Configure -> Networking -> NFS Server 途中で、 `/etc/exports` を設定してください、とエディタが開くので設定を書く。 `/etc/exports` の書き方はコメント欄 (または `man exports`)を見ればわかる。 `/etc/rc.conf` に以下が追加されるはず。 nfs_server_enable="YES" rpcbind_enable="YES" `/etc/exports` を設定せずに ZFS の機能でやる方法もある。 例えば、 /homeディレクトリ以下を 192.168.xx.yy と 192.168.zz.ww へ公開する場合 # zfs set sharenfs="192.168.xx.yy 192.168.zz.ww" rpool/root/home のようにする。 `/etc/hosts` に記載したホスト名で指定はできなさそう。 あと `-network 192.168.11.0 -mask 255.255.255.0` みたいな書き方もできなさそうだし。 `/etc/exports` で設定したほうがよさそう。。 NAT経由のクライアントからマウントできるようにするには、 `/etc/rc.conf` に mountd_flags="-n" を書いておく。 ### Auto Mount ### 次は、NFS クライアントとしての設定。 `/net/` 以下にアクセスしたときに、自動で mount し、しばらくアクセスしないと自動で umount して欲しい。 Linux では autofs だったが、FreeBSD では AMD (auto mount daemon) というデーモンがあるらしい。 `sysinstall` して Configure -> Networking -> AMD にチェックを入れる。 AMD Flags はよくわからんが、デフォルトのままで使えた。 `/etc/rc.conf` に以下が追加されるはず。 amd_enable="YES" これでサーバー FOO が BAR というディレクトリで公開している場合、 `/net/FOO/BAR` にアクセスすると自動的にマウントしてくれるようになった。 ### Linux のバイナリを実行可能にする `/etc/rc.conf` に linux_enable="YES" を追加。 # pkg_add -r linux_base でインストール。 ### proc file system ### `/etc/fstab` に以下を追加 proc /proc procfs rw 0 0 ### ssh X port Forward ### `/etc/ssh/sshd_config` で X11Forwarding yes を有効にしてみるも、動かず。 後述の xorg をインストールしたときに、 `DISPLAY` 環境変数がセットされて、動くようになった。 よくわかりませんが、とりあえず動くようになりました。 ### X の設定 #### # pkg_add -r xorg でインストール。 /etc/rc.conf に hald_enable="YES" dbus_enable="YES" を追加する。 $ startx で起動する。 twm というWindow Manager が動く。 ### gnome ### # pkg_add -r でインストール。 `/etc/rc.conf` に gnome_enable="YES" を追加する。(gnome関連デーモン起動) システム起動時に gdm を起動させる場合は、 `/etc/rc.conf` に gdm_enable="YES" を追加。 `startx` で起動させる場合は $ echo "/usr/local/bin/gnome-session" > ~/.xinitrc $ startx ### pkgng ### pkg_* の代替ツール。 apt や yum みたいなもの。個人的には、必ずしも導入しなくてもよいと思う。 一応、[FreeBSD pkg_*システム捨てるのはいつ?今でしょ!](http://april.fool.jp/blogs/?p=1947) を参考に使ってみた。 最初に # pkg とやるとセットアップしてくれる。 `/etc/make.conf` に以下を追加。 WITH_PKGNG= yes すでに `pkg_*` を使っていた場合は `pkg2ng` でデータベースを移行。 現時点では、リポジトリがすっからかん(サーバーに侵入されたらしい)なので `/usr/local/etc/pkg.conf` を開き、 packagesite: http://pkgbeta.FreeBSD.org/freebsd:9:x86:64/latest をコメントアウトし、 packagesite: http://ftp.jaist.ac.jp/pub/PC-BSD/packages/9.1-RELEASE/amd64 を追加。 あとは、 `pkg install PACKAGE_NAME ...` でインストールしていく。 pkg install emacs とすると、`Conflict found on path` というエラーメッセージが大量に出てびっくりした。 `pkg install emacs` は複数のバージョンの emacs を一度にインストールしようとするらしく、 `pkg install emacs-24.3,3` みたいにバージョンまで入力しないといけないらしい。 apt や yum に比べると、このあたりは洗練されていない気がするなぁ。
2013年6月13日木曜日
FreeBSD 入門中 その3 : 環境整備
[前々回](/2013/06/freebsd-1-zfs-rootfs.html) zfs の Root File System にインストールするところまでできたので、 環境構築を行なっていきます。 標準のインストーラーを完全無視して進めたため、いろいろな設定が抜けています。 まだネットもつながらないし。。 ### rootパスワード設定 ### rootパスワードがまだ設定されていないので、ログインして `passwd` でパスワード設定しておく。 ### ネットワーク設定など ### `/etc` を直接編集してもいいけど typo の恐れがあるので、一応ツールでやります。 # sysinstall とし、Configure -> Networking -> Interfaces とたどって設定。 `/etc/rc.conf` に以下のような内容が追記される。 ifconfig_em0="DHCP" ipv6_activate_all_interfaces="YES" hostname=ernie.sesame" また `/etc/resolv.conf` には以下のような内容が追記される。 # Generated by resolvconf nameserver 192.168.11.1 他にもDNSサーバーがあれば追加する。 ### その他もろもろ ### `sysinstall` して Configure -> Networking -> sshd にチェックを入れる。 /etc/rc.conf に sshd_enable="YES" が追加される。 /etc/rc.conf に # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" も追記しておく。 crash dumpはお好みで "AUTO" に。 ### タイムゾーン設定 ### インストーラーを使わなかった場合、タイムゾーンの設定もまだなので、設定します。 `sysinstall` して Configure -> Time Zone を選ぶ。 UTC で Yes を選び、タイムゾーンは Asia -> Japan を選ぶ。 (`/usr/share/zoneinfo/Asia/Tokyo` が `/etc/localtime` へコピーされるらしい。) ### 時刻を合わせる ### ワンショットの `ntpdate` よりも `ntpd` を使う方が望ましいので、 `ntpd` を設定します。 `/etc/rc.conf` に以下を追加 ntpd_enable="YES" `/etc/ntp.conf` を開いて、 server 0.freebsd.pool.ntp.org みたいになっている部分を必要に応じて書き換える。(サーバーを変える必要があるとき。) ### パッケージインストール ### このままではまともに使えないぐらい、ソフトが入っていないので、サードパーティー製ツールを入れていきます。 環境によっては package を使用するのに、プロキシを乗り越えないといけない場合があります。 その場合 `FTP_PROXY` 環境変数を設定します。 システム全体に設定するために `/etc/profile` に export FTP_PROXY="http://your.proxy.server:port_number" のように書いておく。 ついでに `/etc/csh.login` にも setenv FTP_PROXY "http://your.proxy.server:port_number" のように書いておく。 # pkg_add -r bash nano vim emacs gmake cvs subversion git global autoconf automake libtool flex bison guile binutils gawk といった感じでインストール。 ### ログインシェル変更 ### bash好みの人は # chsh -s bash ### ports をセットアップ ### ports をセットアップ。 インストール時に入れなかった場合は、 /usr/ports ディレクトリがないと思います。 インスールメディアから ports をすでにインストールしている場合も、たぶん古いので、更新するのがよいです。 まず、snapshot を `/var/db/portsnap/` ディレクトリへダウンロードしないといけない。 プロキシのせいで # portsnap fetch Looking up portsnap.FreeBSD.org mirrors... none found. Fetching public key from portsnap.FreeBSD.org... failed. No mirrors remaining, giving up. と出て失敗する場合は、環境変数 `HTTP_PROXY` を設定しておく。 export HTTP_PROXY="http://your.proxy.server:port_number" 最初に fetch する。 # portsnap fetch `/var/db/portsnap/` 以下にダウンロードされる。 続いて extract する。 # portsnap extract `/usr/ports` に展開される。 次回からは `portsnap fetch (portsnap cron)&& portsnap update` で更新する。 ### ユーザーアカウント作成 ### インストーラーを使わなかった場合、まだ一般ユーザーが作られていないため、作成します。 ユーザーアカウントを作る前に、 # zfs create /home/USER_NAME でユーザーのホームディレクトリ用にパーティションを切る。 これは必須ではないけれど、ZFS の運用では細かくパーティションを切るのがスタンダードのようだ。 (ユーザーのホームディレクトリ単位で、スナップショットとったりできる。) # adduser 質問に答えて行きながら、設定します。 管理者は Invite foo into other groups? []: と聞いてきたところに、`wheel` と入力する。 wheel グループに所属していないと、 `su` コマンドが使えないなど不自由するので。 ### グループを作成 ### 例えば、GID 2000 で gitusers というグループを作りたい場合 # pw groupadd gitusers -g 2000 次に、メンバーを group に加える。 例えば、 gitusers というグループに taro と hanako を加える場合は # pw groupmod gitusers -m taro,hanako とする。 [次回](/2013/06/freebsd-4-2.html)に続きます。
2013年6月6日木曜日
FreeBSD 入門中 その2: 壊して復旧する
[前回](/2013/06/freebsd-1-zfs-rootfs.html)、ZFS の RootFileSystem上に FreeBSD をインストールするところまでやりました。 インストールが無事終わったところで、さっそく壊しますか。(笑) せっかく ZFS にインストールしたのだから、試しに壊して復旧してみたくなりますね。(なりませんか?) 今回は、FreeBSD というよりも、ZFS の話題です。 Linux で ZFS を使おうとすると、 1. ZFS-FUSE: 機能が限定的 2. ZFS on LINUX: Kernel を更新するたびに、ZFSモジュールも再ビルドなので面倒 という欠点がありました。 ([Linux で ZFS を使ってみた](/2012/11/zfs.html) を参照) その点、FreeBSD では標準的にサポートされているのは良いですね。 ### 1台外してみる ### 今の構成は、HDD 4台で RAID-Z を構成しています。 ということは、HDD 1台壊れても起動できるはずです。 データが化けたくらいなら、 ZFS が scrub ですぐに直してくれますので、あまり面白くない。 HDDがうんともすんとも動かなくなって、もう取り外すしかないという状況になったという仮定でやってみます。 ernie0.vdi, ernie1.vdi, ernie2.vdi, ernie3.vdi という4台のHDDのうち、 図のように、 1台目の ernie0.vdi を取り外してみます。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrOtWJytN6efYndlKqf1Cpw7lTifwmWPJzQFHSISVIG-BlpE636iGKT6OIrARQZIgTukes5JfcazwyUDh6LnBbYEAS5RFr4cy9Y-9ClZjyBwhnaBs8FiTW_zs88MfhX6VPP3Klbd90v-8/s1600/raidz_1drive_missing.png) そして、起動させてみます。 なーんも問題なく起動しました。 これがうまく理屈としては、こうです。 前回のインストール時に、 4台すべての boot パーティションに、bootcode をインストールしてあります。 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 bootcode written to ada0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1 bootcode written to ada1 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2 bootcode written to ada2 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3 bootcode written to ada3 なので、ブートローダーは問題なし。 Swap領域については、 # Device Mountpoint FStype Options Dump Pass# /dev/ada0p2 none swap sw 0 0 /dev/ada1p2 none swap sw 0 0 /dev/ada2p2 none swap sw 0 0 のように、認識された順に 3台だけ、使っています。 インストール時は - ada0: ernie0.vdi - ada1: ernie1.vdi - ada2: ernie2.vdi - ada3: ernie3.vdi のように認識していたわけですが、ernie0.vdi を取り外したので - ada0: ernie1.vdi - ada1: ernie2.vdi - ada2: ernie3.vdi のように認識するのですが、ドライブ番号で指定しているので、何ら矛盾はない。 で、ルートパーティションは RAID-Z になっていて冗長性が確保されているので、1台失われても問題ない。 (ちなみに ZFS の方は、認識順でドライブ番号が変わっておかしくならないように、ラベルで指定するのでした。) 当然、status を表示させると DEGRADED となっていますが。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUpO9BjfjRejp52TiviSexgv64v19nm1BkEvvc5g5tXZ3yt7WAh81cNFouVZkEQ6pwOm4x4rAptN4ZwbzgnzuaNvqSCY6cvw1Bt5QxE3rlygCJnNgBXIcgUecNke5-k1OYqEYQL34ZIA/s1600/DEGRADED.png) ### 1台追加して復旧する ### このままでは、冗長性がなくて、心もとないので、新しいHDDを買ってきて接続したという想定にしましょう。 VirtualBox に新しく ernie4.vdi というディスクを追加しています。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCEhj48_6S7wx7bcAvzNIZd0_yg72vose4_EFYjr7D8ylA7OgY7GPZ9Y8wW_ZqrIZMYGA7_6bm87dfJD387tofuOYRtDX3TtT0KMO9D8F2PW_XSjvF2IvhFUJQAkzgsl9TQWQORoDV1F8/s1600/new_drive.png) 起動させて、他の3台と同じ構造で ernie4 にパーティションを切ります。 # gpart show -l => 34 33554365 ada0 GPT (16G) 34 122 1 ernie1_boot (61k) 156 1048576 2 ernie1_swap (512M) 1048732 32505667 3 ernie1_root (15G) => 34 33554365 ada1 GPT (16G) 34 122 1 ernie2_boot (61k) 156 1048576 2 ernie2_swap (512M) 1048732 32505667 3 ernie2_root (15G) => 34 33554365 ada2 GPT (16G) 34 122 1 ernie3_boot (61k) 156 1048576 2 ernie3_swap (512M) 1048732 32505667 3 ernie3_root (15G) # gpart create -s gpt ada3 # gpart add -s 122 -t freebsd-boot -l ernie4_boot ada3 ada3p1 added # gpart add -s 512m -t freebsd-swap -l ernie4_swap ada3 ada3p2 added # gpart add -t freebsd-zfs -l ernie4_root ada3 ada3p3 added # gpart show -l => 34 33554365 ada0 GPT (16G) 34 122 1 ernie1_boot (61k) 156 1048576 2 ernie1_swap (512M) 1048732 32505667 3 ernie1_root (15G) => 34 33554365 ada1 GPT (16G) 34 122 1 ernie2_boot (61k) 156 1048576 2 ernie2_swap (512M) 1048732 32505667 3 ernie2_root (15G) => 34 33554365 ada2 GPT (16G) 34 122 1 ernie3_boot (61k) 156 1048576 2 ernie3_swap (512M) 1048732 32505667 3 ernie3_root (15G) => 34 33554365 ada3 GPT (16G) 34 122 1 ernie4_boot (61k) 156 1048576 2 ernie4_swap (512M) 1048732 32505667 3 ernie4_root (15G) という感じになります。 4台対称にするために、 bootcode もインストールしておきます。 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3 bootcode written to ada3 あとは `zpool replace` します。 # zpool replace rpool /dev/gpt/ernie0_root /dev/gpt/ernie4_root Make sure to wait until resilver is done before rebooting. `zpool status` で resilvered になっていたら OKです。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUZCASEfwFnFjJM9_PMuR6PkcodpI45vQjsaF9bEgUJiMI-oXXIAOW6ZxOcEBaXIJDskw45Zh3IxgDpXXiUFdr3wyTt41PyEUxh-_PO_RaCdDI7BwuIy4iej8Wu9oyjIckBHCGZ-mZSCY/s1600/resilvered.png) これで冗長性が確保されたので、またどれか1台取り外しても、何の問題なく起動します。 ZFS 素晴らしすぎる。 [次回](/2013/06/freebsd-3.html)は、まともに使えるようにいろいろとセットアップしていきます。
2013年6月4日火曜日
FreeBSD 入門中 その1 : ZFS RootFS にインストール
FreeBSD にはあまり興味はなかったのですが、仕事の都合で FreeBSDをインストールすることになりました。 というわけで、 Linux の知識はあれども、FreeBSD の知識は皆無な状態からスタートして、インストールや環境設定などやっていきます。 今回はインストールするところまでやってみます。 ### インストールメディア入手 ### 現時点では 9.1 が最新。 以下からインストールメディアを入手できる。
FreeBSD-9.1-RELEASE-amd64-dvd1.iso をダウンロードしてきた。 (やたらと時間かかった。BitTorrentとかないのかね。) 入門中といいつつ、通常のインストーラーをいきなり無視します。(笑) 理由は RootFileSystem をZFSにしたいから。 やり方は以下のサイトで詳しく書かれているので、参考になります。 [FreeBSD 9.1-RELEASE で ZFS Root FileSystem 環境を構築する](http://kanjuku-tomato.blogspot.jp/2013/01/freebsd-91-release-zfs-root-filesystem.html) このサイトをかなり参考にしているのですが、自分は HDD 4台で RAID-Z (いわゆるRAID 5) で組んでみました。 HDD 1台だと ZFS を使う意味の大半がなくなってしまいますから。。 それから、不要な手順をいくつかはしょって自分流にアレンジしてます。 ### マシン(VirtualBox) 設定 ### マシンですが、VirtualBox を使っています。 SATA に HDDを4台、IDE に CD/DVDドライブを1台つなぎました。 CD/DVDドライブ も SATAにすると、インストールメディアからブートできませんでしたので。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiQtfTo4azn9zXzCKKwYqKvxLblt5m-5kAEhTrl3zKC2GybdVGa6oO6d7GCfipy62JvHaHqYYg6mmhLTrabHKlPAxZ38nkynQ_wh_8jByTKtycIKtQyaeu-fMT0Y92tsGHIEMJfd3agIE/s1600/bsd_virtualbox.png) さらに、設定 → システム で 「ハードウェアクロックをUTCにする」にチェックを入れておきます。 FreeBSD は UTC で運用するので、これをチェックしておかないと、時刻が9時間ずれます。 以下の説明では、セットアップするマシンのホスト名は ernie とします。 余談ですが、自分の家ではホスト名に elmo, cookie, bigbird, oscar, zoe などと Sesame Street のキャラクター名を付けていっています。 一定のネーミングルールを決めておくと、ホスト名がどんどん増えても名前に困りません。 ### インストール開始 ### インストールメディアからブートさせます。 Welcome to FreeBSD の画面で 「1. Boot (Enter)」を選択。 インストーラーが起動するので 1. [Welcome]:
を選択 2. [Keymap Selection]:
を選択 3. [Keyboard Menu]: Japanese 106 を選択 4. [Set Hostname]: 適当に何か入れる (途中からインストーラ無視するので、どうせ /etc に反映されない。) 5. [Distribution Select]: そのまま
でよし 6. [Partitioning]:
を選択 ### パーティションテーブル作成 ### シェルに入るので、ここからインストーラー無視して、自分でセットアップします。 `/dev` を見るとハードディスクは `/dev/ada0`, `/dev/ada1`, `/dev/ada2`, `/dev/ada3` として認識されています。 この4台にパーティションを作るところから始めます。 以下のように、GUIDパーティションテーブルを作る。 # gpart create -s gpt ada0 ada0 created # gpart create -s gpt ada1 ada1 created # gpart create -s gpt ada2 ada2 created # gpart create -s gpt ada3 ada3 created ### パーティション作成 ### ブートパーティション、スワップ領域、ZFS領域を作成します。 raidz (いわゆる RAID5)にするので、4台とも同じ構造でパーティション作るのがわかりやすそうです。 ラベル名はかぶらないようにしましょう。 # gpart add -s 122 -t freebsd-boot -l ernie0_boot ada0 ada0p1 added # gpart add -s 122 -t freebsd-boot -l ernie1_boot ada1 ada1p1 added # gpart add -s 122 -t freebsd-boot -l ernie2_boot ada2 ada2p1 added # gpart add -s 122 -t freebsd-boot -l ernie3_boot ada3 ada3p1 added # gpart add -s 512m -t freebsd-swap -l ernie0_swap ada0 ada0p2 added # gpart add -s 512m -t freebsd-swap -l ernie1_swap ada1 ada1p2 added # gpart add -s 512m -t freebsd-swap -l ernie2_swap ada2 ada2p2 added # gpart add -s 512m -t freebsd-swap -l ernie3_swap ada3 ada3p2 added # gpart add -t freebsd-zfs -l ernie0_root ada0 ada0p3 added # gpart add -t freebsd-zfs -l ernie1_root ada1 ada1p3 added # gpart add -t freebsd-zfs -l ernie2_root ada2 ada2p3 added # gpart add -t freebsd-zfs -l ernie3_root ada3 ada3p3 added # gpart show => 34 33554365 ada0 GPT (16G) 34 122 1 freebsd-boot (61k) 156 1048576 2 freebsd-swap (512M) 1048732 32505667 3 freebsd-zfs (15G) => 34 33554365 ada1 GPT (16G) 34 122 1 freebsd-boot (61k) 156 1048576 2 freebsd-swap (512M) 1048732 32505667 3 freebsd-zfs (15G) => 34 33554365 ada2 GPT (16G) 34 122 1 freebsd-boot (61k) 156 1048576 2 freebsd-swap (512M) 1048732 32505667 3 freebsd-zfs (15G) => 34 33554365 ada3 GPT (16G) 34 122 1 freebsd-boot (61k) 156 1048576 2 freebsd-swap (512M) 1048732 32505667 3 freebsd-zfs (15G) # gpart show -l => 34 33554365 ada0 GPT (16G) 34 122 1 ernie0_boot (61k) 156 1048576 2 ernie0_swap (512M) 1048732 32505667 3 ernie0_root (15G) => 34 33554365 ada1 GPT (16G) 34 122 1 ernie1_boot (61k) 156 1048576 2 ernie1_swap (512M) 1048732 32505667 3 ernie1_root (15G) => 34 33554365 ada2 GPT (16G) 34 122 1 ernie2_boot (61k) 156 1048576 2 ernie2_swap (512M) 1048732 32505667 3 ernie2_root (15G) => 34 33554365 ada3 GPT (16G) 34 122 1 ernie3_boot (61k) 156 1048576 2 ernie3_swap (512M) 1048732 32505667 3 ernie3_root (15G) 間違いがないことを確認して次に進みます。 ### ブートコードインストール ### 各ドライブの1番目のパーティション(freebsd-boot)にブートコードをインストール。 とりあえず全ドライブにブートコードを書いておけば、どれかぶっ壊れても起動できると思う。 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 bootcode written to ada0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1 bootcode written to ada1 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2 bootcode written to ada2 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3 bootcode written to ada3 ### ZFS 作成 ### zpool を作ります。 altroot は一時的なマウントポイントで、再起動するとこの情報は持ち越されない。 また、 `/dev/ada0p2` のようにパーティションを指定すると、マウント順でドライブ番号が変わる可能性があるので、 一意に決まるラベルで指定するのがよいです。 cachefile を一時保存する領域を設けるため、 tmpfs をマウントしておく。 # mount -t tmpfs tmpfs /tmp # zpool create -f -o altroot=/media -o cachefile=/tmp/zpool.cache rpool raidz \ /dev/gpt/ernie0_root /dev/gpt/ernie1_root /dev/gpt/ernie2_root /dev/gpt/ernie3_root ZFS filesystem version 5 ZFS storage pool version 28 # zfs create rpool/root # zfs create rpool/root/var # zfs create rpool/root/home # zpool set bootfs=rpool/root rpool # zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 306K 45.3G 44.9K /media rpool/root 133K 45.3G 46.4K /media/root rpool/root/home 43.4K 45.3G 43.4K /media/root/home rpool/root/var 43.4K 45.3G 43.4K /media/root/var ちなみに、 `zpool` コマンドを実行した時に ZFS filesystem version 5 ZFS storage pool version 28 というメッセージが出ていますが、これは zfs module が自動的にロードされているからです。 pool 直下にもファイルは作れるが、やらないほうがいいそうです。 なので、以下のようにする。 # zfs set mountpoint=none rpool # zfs set mountpoint=/ rpool/root # zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 317K 45.3G 44.9K none rpool/root 133K 45.3G 46.4K /media rpool/root/home 43.4K 45.3G 43.4K /media/home rpool/root/var 43.4K 45.3G 43.4K /media/var ### インストールメディアから展開 ### # tar xzpf /usr/freebsd-dist/base.txz -C /media/ # tar xzpf /usr/freebsd-dist/kernel.txz -C /media/ # tar xzpf /usr/freebsd-dist/ports.txz -C /media/ # tar xzpf /usr/freebsd-dist/src.txz -C /media/ # tar xzpf /usr/freebsd-dist/doc.txz -C /media/ ### 設定ファイル作成 ### 自力で設定ファイルを作っていきます。 `vi` などで以下のように記述します。 `/media/boot/loader.conf`を作って以下のように記載 zfs_load="YES" vfs.root.mountfrom="zfs:rpool/root" `/media/etc/rc.conf`を作って以下のように記載 zfs_enable="YES" keymap="jp.106.kbd" `/media/etc/fstab`を作って以下のように記載 # Device Mountpoint FStype Options Dump Pass# /dev/ada0p2 none swap sw 0 0 /dev/ada1p2 none swap sw 0 0 /dev/ada2p2 none swap sw 0 0 ### キャッシュファイルをコピー ### # cp /tmp/zpool.cache /media/boot/zfs/ # zpool set cachefile="" rpool ### 最終チェック(いちおう) ### ZFSで起動できるかチェックするスクリプトがあるらしいので、インストールして実行する。 # cd /media/usr/src/tools/tools/zfsboottest # make # make DESTDIR=/media install install -s -o root -g wheel -m 555 zfsboottest /media/usr/bin install -o root -g wheel -m 555 zfsboottest.sh /media/usr/bin/zfsboottest.sh # env PATH=$PATH:/media/usr/bin zfsboottest.sh rpool The "mountpoint" property of dataset "rpool/root" should be set to "legacy". どうも、 `rpool/root` のマウントポイントを `/` から `legacy` に変更せよ、と言っています。 ZFS は標準では、 `/etc/fstab` を使わないのですが、 `legacy` というのは、従来通り `/etc/fstab` で管理するモードのこと。 で、せっかくの忠告ですが、無視します。(笑) 最初は忠告にしたがって、 `zfs set mountpoint=legacy rpool/root` とかやっていたのですが、別にやらなくても問題なく起動できることがわかったので。 忠告無視して、そのまま電源OFFします。 # sync # halt -p ### インストール完了、そして再起動 ### CD/DVDドライブからインストールメディアを取り除いて、起動します。 さて、本当に起動するか、ドキドキですが。。無事起動しました。 ZFS が期待通りか確認。 # zfs get mountpoint NAME PROPERTY VALUE SOURCE rpool mountpoint none local rpool/root mountpoint / local rpool/root/home mountpoint /home inherited from rpool/root rpool/root/var mountpoint /var inherited from rpool/root # zfs get mounted NAME PROPERTY VALUE SOURCE rpool mounted no - rpool/root mounted yes/ - rpool/root/home mounted yes - rpool/root/var mounted yes - swap 領域を確認してみる。 # pstat -s Device 1K-blocks Used Avail Capacity /dev/ada0p2 524288 0 524288 0% /dev/ada1p2 524288 0 524288 0% /dev/ada2p2 524288 0 524288 0% Total 1572864 0 1572864 0% 大丈夫そう。 次回、設定をしていきます。
前の投稿
ホーム
登録:
投稿 (Atom)