OpenIndiana 151a導入メモ [PC]
G7 ML110へOIを導入したときのメモ。こちらの記事そのままです。
Lunatilia様の記事
本来はiLOから操作すればISOマウントして画面キャプチャも撮れて楽なんですが、ライセンス買ってないので、CDRに焼いて、USBキーボードつないで、VGAつないでやってます。
今回は151a server(テキストインストール)を使用。
・インストール前に、まずはBIOSの電源設定を変更。 「Power Regulator for ProLiant:」が最初は「HP Dynamic Power Savings Mode」になってると思いますが、これを「OS Control mode」へ。 変更しなくてもインストールに支障ありませんが、OSから電源管理が見えないようです。ひょっとしたらBIOSで電源管理させた方が消費電力低いかも知れませんが。 ESXiなどでは変更必須みたいです。
・CDRにISOイメージを焼いて起動。
・キーボードと言語の選択。自分は47:USキー、15:Japanを選択。
以下、続行はF2キー、戻るのはF3キーです。
・Diskの選択。USB(c2t0d0)を選択。
・「Use the whole disk」を選択。
・Computer Nameを入力。
・ネットワークの設定「Automatically」は自動でDHCPも有効に。「None」は設定無し。どちらかを選ぶ。後からStatic IPにするのでどちらでもよいが、Automaticallyにしておくとnameserverとか自動設定されるみたいで、ちょっとだけ楽?
・Time Zone。Asia、Japanを選択。
・日時設定。
・ルートパスワードの設定とユーザの追加。sshで管理者として入るときはこのユーザになります。
以上で準備完了。F2でインストール開始です。
だいたい2~30分程度でインストール完了です。F8キーでリブート。初回の起動だけサービスの設定などでちょっと時間かかります。loginプロンプトが出てきたらログイン。
・Static IPに変更します。192.168.0.11/24にしています。
# svcadm disable nwam # svcs -a | grep nwam disabled 00:00:00 svc:/network/physical:nwam # vi /etc/nodename サーバーの名前 # vi /etc/defaultrouter 192.168.0.1 # vi /etc/inet/netmasks 192.168.0.0 255.255.255.0 # vi /etc/resolv.conf nameserver 192.168.0.1 # mv /etc/nsswitch.conf /etc/nsswitch.conf.org いらない? # cp -p /etc/nsswitch.dns /etc/nsswitch.conf # dladm show-phys LINK MEDIA STATE SPEED DUPLEX DEVICE e1000g0 Ethernet up 1000 full e1000g0 e1000g1 Ethernet unknown 0 half e1000g1 # ipadm create-if e1000g0 # ipadm create-addr -T static -a 192.168.0.11/24 e1000g0/v4 # svcadm enable svc:/network/physical:default # svcs -a | grep physical disabled 00:00:00 svc:/network/physical:nwam online 00:00:00 svc:/network/physical:default # ifconfig e1000g0 e1000g0: flags=1000843これでsshでログイン可能になります。TeraTermとかを使ってログイン。suでスーパーユーザーに。mtu 1500 index 4 inet 192.168.0.11 netmask ffffff00 broadcast 192.168.0.255 ether e8:39:35:xx:xx:xx # reboot
まずは一発アップデート。ネットワークの設定に問題があると、ここで「見つからない」というエラーが出てきます。
# pkg image-update WARNING: pkg(5) appears to be out of date, and should be updated before running update. Please update pkg(5) using 'pfexec pkg install pkg:/package/pkg' and then retry the update.pkd自体の更新が必要という事なので、まず更新し、再度image-update。
# pkg install pkg:/package/pkg # pkg image-updateダウンロードする更新パッケージは200MB弱。ちょっと時間かかります。完了するとopenindiana-1が出来ます。以前の環境はzfsのスナップショットで取ってあるみたいです。リブートで更新を有効に。の前にgrubのタイムアウトを短くしておきましょう。
# vi /rpool/boot/grub/menu.lst timeout 5 ←元の30秒から変更USBメモリなので、rootのatimeを切ってみます。どこかで不具合が出るかもしれません。そこはやはりHDDやSSDにした方が安全でしょう。
# zfs get atime NAME PROPERTY VALUE SOURCE rpool atime on default rpool/ROOT atime on default rpool/ROOT/openindiana atime on default rpool/ROOT/openindiana-1 atime on default rpool/export atime on default rpool/export/home atime on default rpool/swap atime - - # zfs set atime=off rpool # zfs get atime NAME PROPERTY VALUE SOURCE rpool atime off local rpool/ROOT atime off inherited from rpool rpool/ROOT/openindiana atime off inherited from rpool rpool/ROOT/openindiana-1 atime off inherited from rpool rpool/export atime off inherited from rpool rpool/export/home atime off inherited from rpool rpool/swap atime - -下位には継承されるので、rpoolだけ変更すればOKです。 他にもchecksum=fletcher4とかcompression付けるとかお好みで。
パワーダウンの設定。まずはzpoolのデバイスを確認。
# zpool status pool: datapool state: ONLINE config: NAME STATE READ WRITE CKSUM datapool ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 c3t0d0 ONLINE 0 0 0 c3t1d0 ONLINE 0 0 0 c3t2d0 ONLINE 0 0 0 c3t3d0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c2t0d0s0 ONLINE 0 0 0 errors: No known data errorsc3t?d0が対象です。試しに15分で設定。
# vi /etc/power.conf autopm enable device-thresholds /dev/dsk/c3t0d0 15m device-thresholds /dev/dsk/c3t1d0 15m device-thresholds /dev/dsk/c3t2d0 15m device-thresholds /dev/dsk/c3t3d0 15m # pmconfig -r何も言わないけど、ホントに効いてるのかな…?一応効いてるみたいですが。
一般ユーザの追加。-mを付けておくとzfsに新しくファイルシステムが作られます。ちなみに、この人はsu出来ません。
# useradd -u 1001 -g staff -d /home/daresore -s /bin/bash -m daresore
sambaの導入。正直どれが正しいパッケージなのかいまいちわからないけど、これで動いてるので良しとします。最近セキュリティホールが見つかってますし、ホントはソースからビルドするのが正解なんだとは思います。
# pkg install SUNWiconv-extra # pkg install SUNWiconv-unicode この2つはいる?いらない?わからないです。 入れなくても日本語名のファイルで問題ないみたいですが… # pkg install SUNWsmba # cp -p /etc/samba/smb.conf-example /etc/samba/smb.conf # vi /etc/samba/smb.conf workgroup = HYGROUP server string = server name unix charset = UTF-8 dos charset = CP932 display charset = UTF-8 など、お好みに応じて編集。 # svcadm enable samba # svcadm enable wins # svcs 確認 # smbpasswd -a daresore ユーザ追加
rsyncdを走らせる。 こちらを参照。
# cp rsyncd.xml /var/svc/manifest/network/ # cp rsyncd /lib/svc/method/ # chmod u+x /lib/svc/method/rsyncd # cp rsync /etc/default/ # vi /etc/rsyncd.conf use chroot = yes read only = no log file = /var/adm/rsyncd_upload.log log format = - %a - %f transfer logging = no [share] path = /export/share comment = share # svccfg -v import /var/svc/manifest/network/rsyncd.xml svccfg: Taking "initial" snapshot for svc:/network/rsyncd:default. svccfg: Taking "last-import" snapshot for svc:/network/rsyncd:default. svccfg: Refreshed svc:/network/rsyncd:default. svccfg: Successful import. # svcs -a | grep rsync online 22:38:53 svc:/network/rsyncd:default # rsync -v localhost::share /etc/rsyncd.confで公開したフォルダが見えるはずです。とりあえず、ここで一段落です。
HP ProLiant G7 ML110 (その1) [PC]
HPのProLiant MicroServer(AMD AthlonII N36L 1.3GHzバージョン)にOpenIndiana、2Tx4のraidz2ボリュームという組み合わせでNAS+ちょっとしたサーバーを組んでます。2Tx4は割と最近導入したばかり。正直がら空きですが(笑)。
HDDには良くないのですが、スピンダウンさせると27~8W程度の消費電力(ワットモニター読み)となり、常時ONでも経済的。去年の震災以降は使うときだけ電源入れてますが、リモート管理カードのおかげでこれも便利です。
しかし飽きてきたのでサーバー強化のため、タイトルのサーバーをポチりました。クーポン券で11800円という例の所です。nonECC非対応らしいので、4GBx2のDIMMも購入。CeleronとはいえSandy Bridge世代の2コアですから、十分です。
構成などは省略して。良く出来てます、このサーバー。PCよりずっとサーバーっぽい作りだと思います。電源投入時にすごいファンの音がします(笑)少し経つと十分静かになるので大丈夫でしょう。ただし、PCIeに拡張カードを挿すとちょっとうるさくなります。夏場どうなるかも心配ですが。
最近のPCのように「大口径のファンをゆっくり回す」ような作りでは無いです。90mmのファンをそれなりの速度で回してます。機械的にはこっちの方が信頼性は上がるでしょう。無理にゆっくり回すと故障しやすくなりますからね。
しかし立ち上げ時間もサーバーっぽいです。OS起動「開始」までだいたい2分弱。スリープも出来ませんのでデスクトップ用途ではつらいでしょう
早速8GBのUSBメモリを内部のUSBコネクタに挿して、OI 151aを導入。raidz2ボリュームをimport。sambaとかrsyncdとかnfs入れて、他のサービスはおいおい。特に問題起こさずに完了しました。
スピンダウンしたときの消費電力は・・・27W?性能は圧倒的で電力同等じゃないか。やばいぞAMD。がんばれAMD!。
まぁ負荷かけたときはそれなりに食いますが。
こうなると欲が出てきます。標準の電源は効率が悪いので、ちょっと死蔵状態だったAntec EA-380D(80Plus Bronze)を引っ張り出してきて換装。電源コネクタの出っ張りが当たるけど、そんなのは剪定ばさみでジョッキン。(よい子は真似しないで下さい。せめてちゃんとした工具を使いましょう。)
部品(リセットの同期化) [HDL]
これは非同期リセットを同期化するモジュール。クロック1個に対して最低1つ実装します。クロックが止まっていてもリセットが入るように、リセットするときは非同期。リセット解除はクロック同期で、クロックとリセットがレーシングしないようにしてます。
パラメーターsrwはリセット解除後、何クロックリセットを維持するか、になります。2以上を設定します。
`timescale 1ns / 1ps `default_nettype none module sync_reset #( parameter srw = 2 // shift register width ) ( input wire a_rst, input wire clk, output wire rst ); reg [srw:1] rsr; always @(posedge a_rst or posedge clk) begin if (a_rst) rsr <= {srw{1'b1}}; // Async Reset else rsr <= {rsr[srw-1:1],1'b0}; // Sync Reset Release end assign rst = rsr[srw]; endmodule `default_nettype wire
library ieee; use ieee.std_logic_1164.all; entity sync_reset is generic ( srw : integer := 2 ); port ( a_reset : in std_logic; clock : in std_logic; reset : out std_logic ); end sync_reset; architecture RTL of sync_reset is signal rsr : std_logic_vector(1 to srw); begin process (clock, a_reset) begin if (a_reset = '1') then rsr <= (others=>'1'); -- Async Reset elsif (clock'event and clock = '1') then rsr <= '0' & rsr(1 to srw-1); -- Sync Reset Release end if; end process; reset <= rsr(srw); end RTL; -- of sync_reset
回路図追加。こういうのは図の方がわかりやすいですね。
リセット同期化
ちなみに回路図入力にはQuartusII使ってます。もちろん実際に使うことは無いのですが、回路図の清書には便利です。
最初に(その2) [HDL]
バス幅とかはだいたいパラメータ化してます。
例えばAXIのアドレスは32bitと決まってるんですが、[31:0]とは記述してません。以下のように書いてます。
parameter axaw = 32; wire [axaw-1:0] address;
なぜ?まどろっこしい。
例えば「wire [31:0] signal;」と書かれたこの信号、32bitというのはデータの幅でしょうか?アドレスの幅でしょうか?
というのがわからないのが気持ち悪いので…元々ソース中にマジックナンバー的な数字を入れることに抵抗があり、こういったマクロやパラメータをよく使います。
一見、パラメタライズされたモジュールができあがるように見えてしまうのですが、数値が変動することを想定しているとは限らないので、「パラメータで与えてるけど数値は変えちゃダメ」という妙なモジュールになってしまうのが問題です。
最初に [HDL]
趣味とは言え、一応決まりとかポリシーみたいのを並べてみます。自分にとっても再確認。この決まりは増えたり減ったり都合で書き換わったり例外措置を平気で認めたりします(笑)
(1)ターゲットはシミュレーションとFPGA。趣味だし。
結果、以下が決まります。
(1.1)同期回路が基本。
(1.2)同期リセットがデフォルト。非同期リセットは注意して使う。
この方がFPGAのツール側の自由度が上がります。FPGAのファミリによっては非同期リセットが使えないブロックを持つ物もありますし(XilinxのDSPブロックとか)。
非同期リセットを特別扱いにします。基本、クロックが無いところとか、クロックをまたぐところだけで使うようにします。
あと、
(1.3)リセットやクロックイネーブルは正論理で。
TTL全盛時代からロジックやってる人は頭の中が負論理な人もいます(自分もそう)が、FPGAによってはこれら制御信号が正論理のみというのもあります。負論理をサポートしたFPGAもありますが、サポートされてない方に合わせてます。
で、これからの流行りはたぶんこっち方向。
(2)合成は階層維持で。それで性能出すように心がける。
前のリセットの論理を気にするのも、次の出力のレジスタ化も、これが引っかかってたりします。
そして、性能を出しやすくするための決まり。
(3)モジュールの出力は必ずレジスタ(FF)化する。
(4)入力は可能ならレジスタ化する、のは実際難しいのでほどほどであきらめる。
モジュールの出力はレジスタ化する、これは極力守る。
ただし実機で使わないシミュレーションモデルは特にこの辺関知しないです。
(↑早速の例外事項)
もちろんこれらに縛られて物が作れないのでは本末転倒なので、必要があれば景気よく無視します。
(↑早速の例外事項その2)