Archive: 2011/01

今日はHP microserverのディスクに番号を振った

なぜかHP microserverのディスクにはスロット番号が記載されていない。これだとディスクが壊れた時にどの番号でfailしているかわからなくて悲しい思いをするのでディスク番号をシールで貼った。 ・・・のはいいんだけど、一度抜いたディスクを差しても/deviceにエントリが作られないのでzfs replaceが効かず泣く泣く再起動。再起動後resilvringし始めるものの、CPUの能力が低すぎて、ユーザランドのサービスがまともに反応しないという落ちつき。家のPCはあらかたsambaで接続しているので軒並み接続が切れる。ちなみにNFSサービスはカーネルでやっているのか比較的接続できる(重いことには変わりない)。 家の中で結構いろいろなものをOpenIndianaのストレージに紐づけてるのでresilveringできるまでのあいだほとんど何もできないというのは辛いなあ。 (1/23追記:)上は間違いだった。変更したはずのresolv.confの設定が再起動後元に戻っていたことが原因だった。なんで戻っちゃうんだろう・・・ (1/27追記:)nwamを有効にしていたからだった・・・。でもまだdisableしてない

今日はLinuxのCUPSプリントサーバをAirPrintサーバにして、iPhoneからAirPrintで印刷するとPDFファイルが生成されるようにしてみた

ほぼここ(Ryan Finnie’s Blog: AirPrint and Linux)の邦訳になってしまうけど、やってみて、動いたのでやり方を書く。環境はCentOS5.5。 ### 1. まずcups-pdfをインストールする。

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm # yum -y install cups-pdf 後で使うのでavahi-daemonも入ってなかったら入れておく。

### 2. CUPSサーバをネットワーク共有するようにして、印刷できる所まで確認する

iptables使っている場合は631/tcp, 631/udpを解放してアクセスできるようにする

/etc/cups/cupsd.confを編集して、ローカルホスト以外からアクセスできるようにする。編集箇所は赤字で記述。

# # “$Id: cupsd.conf.in 7199 2008-01-08 00:16:30Z mike $” # # Sample configuration file for the Common UNIX Printing System (CUPS) # scheduler. See “man cupsd.conf” for a complete description of this # file. # MaxLogSize 2000000000 # Log general information in error_log - change “info” to “debug” for # troubleshooting… LogLevel info # Administrator user group… SystemGroup sys root # Only listen for connections from the local machine. # Listen localhost:631 Listen saba.mydomain:631 Listen /var/run/cups/cups.sock # Show shared printers on the local network. Browsing On BrowseOrder allow,deny # (Change ‘@LOCAL’ to ‘ALL’ if using directed broadcasts from another subnet.) BrowseAllow @LOCAL # Default authentication type, when authentication is required… DefaultAuthType Basic # Restrict access to the server… Order allow,deny Allow 192.168.1.0/24 # Restrict access to the admin pages… Encryption Required Order allow,deny Allow 192.168.1.0/24 # Restrict access to configuration files… AuthType Default Require user @SYSTEM Order allow,deny Allow 192.168.1.0/24 できたらcupsを動かして、管理ページが見えるか確認。

# chkconfig cups on # service cups start http://saba.mydomain:631/をブラウザで開いて、以下のような管理ページが見えればOK。

ターミナルに戻って、CUPS管理ページが使うSSL証明書を作成する。どうも本来は自動的に作成されるみたいだけど、CentOSのデフォルトでは作成しようとしてハングアップしてしまうみたい。ここを参照して、以下のような感じに作成した。

# openssl req -new -x509 -keyout /etc/cups/ssl/server.key -out /etc/cups/ssl/server.crt -days 365 -nodes -config /etc/pki/tls/openssl.cnf Generating a 1024 bit RSA private key ..++++++ ………………..++++++ writing new private key to ‘/etc/cups/ssl/server.key’ —– You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.’, the field will be left blank. —– Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:Tongking Locality Name (eg, city) [Newbury]:Setaganya Organization Name (eg, company) [My Company Ltd]:orenocompany Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server’s hostname) []:saba.mydomain Email Address []:root@saba.mydomain 再度ブラウザに戻って、プリンタを作成していなければ作成する。最終的に以下のような感じになっていればいいと思う。デフォルトプリンタにするかどうかは関係ないっぽい。

ここまでできたら他のPCから印刷できるかどうか確認する。ここではMac(Mac OS X 10.6.6)を使った。

### 3. AirPrint対応のプリンタを作成する

ここまででCUPSで作成したプリンタをPCで共有できるようになったので、そのプリンタをiPhoneのAirPrint対応にする。

AirPrintはマルチキャストDNS(mDNS。BonjourとかAvahiとか)でプリンタを発見するようだ。CUPSもAvahi経由でmDNS経由でプリンタとして見えてはいるが、そのままではAirPrintが見つけてくれないので、若干設定を追加してやる必要がある。

まずはmDNSで見えるプリンタの情報を取得するために、avahi-discoverを使う。CentOSの場合はavahi-toolsを入れれば使えるようになる。

# yum -y install avahi-tools で、avahi-discoverを起動する。Xのウィンドウが出てくる。

# avahi-discover

eth0 IPv4 -> local -> Internet Printer の下に、作成したプリンタがある。これをクリックする。

表示が変わるが、これだと後で加工しにくいので、ターミナルに出ている文字の方を使う。以下のような感じ。(適宜改行を入れてます)

Service data for service ‘CUPS-PDF Printer @ saba.mydomain’ of type ‘_ipp._tcp’ in domain ‘local’ on 2.0: Host cups.local (192.168.2.5), port 631, TXT data: [ ‘org.freedesktop.Avahi.cookie=3326001564’, ‘pdl=application/pdf,application/postscript,application/vnd.cups-raster,application/octet-stream,image/png’, ‘Duplex=T’, ‘Color=T’, ‘Binary=T’, ‘Transparent=T’, ‘printer-type=0x301E’, ‘printer-state=3’, ‘product=(PostScript Printer)’, ‘note=saba.mydomain’, ‘ty=Generic PostScript Printer Foomatic/Postscript (recommended)’, ‘rp=printers/pdfprinter’, ‘qtotal=1’, ‘txtvers=1’] 上記の出力を参考にして、/etc/avahi/services/<名前>.serviceを作る。<名前>の部分はなんでもいい。以下のような感じ。

注意点としては

  • txt-recordを書く順番はavahi-discoverの出力順の逆
  • txt-recordの最後にURF=noneを入れる <?xml version=“1.0” standalone=‘no’?> <!DOCTYPE service-group SYSTEM “avahi-service.dtd”> AirPrint CUPS-PDF @ %h _ipp._tcp _universal._sub._ipp._tcp 631 txtvers=1 qtotal=1 rp=printers/pdfprinter ty=Generic PostScript Printer Foomatic/Postscript (recommended) note=saba.mydomain product=(PostScript Printer) printer-state=3 printer-type=0x301E Transparent=T Binary=T Color=T Duplex=T pdl=application/pdf,application/postscript,application/vnd.cups-raster,application/octet-stream,image/png org.freedesktop.Avahi.cookie=632809908 URF=none 作ったら、avahi-daemonを再起動する。

# service avahi-daemon restart そうしたらiPhoneからプリンタが見えてるかどうか確認して、印刷!

Enjoy!

今日はOpenIndianaでsambaをサービスで動かした

この前の話の続き。前からやってたけどどうせならきれいに動かしたかったからいろいろ頑張ってみた。

1. sambaをmakeする

普通にソースコードをゲットしてmakeすれば動く。すげー。コマンドにするとこんな感じ

1
2
3
4
5
6
7
8
9
# pkg install developer/gcc-3
# wget http://www.samba.org/samba/ftp/samba-latest.tar.gz
# gtar xzvf samba-latest.tar.gz
# cd samba-3.5.6
# cd source3
# sh ./autogen.sh
# ./configure
# gmake
# gmake install

このままだと/usr/local/sambaの下に各種バイナリがインストールされる。実行するためにはライブラリパスを追加してあげる必要がある。ここを参考に設定した。具体的なコマンドは以下のような感じ。

1
2
3
# crle -c /var/ld/ld.config -l /lib:/usr/lib
# crle -u -l /usr/local/samba/lib
# crle -v  (←確認)

で、/usr/local/samba/var/smb.confファイルを心の赴くままに作る。/etc/samba/smb.confじゃないところに注意。

動くかどうかテスト。

1
2
3
# /usr/local/samba/sbin/smbd -D
# /usr/local/samba/sbin/winbindd -D
# /usr/local/samba/sbin/nmbd -D

ログは/usr/local/samba/varの下にできている。うまく動けばok。

2. サービスとして自動起動するようにする

とりあえず動いたものの、毎回手動で起動するのは億劫だし起動するのを忘れてなんで繋がらないの?とアワアワするのも大変なので、自動起動するように設定する。

知ってる人にはアレだけど、OpenIndiana(OpenSolaris)の起動シーケンスはLinuxのお作法とは違うので合わせるように書く。

まず起動・停止スクリプトを書く。こんな感じに。できたらスクリプト単体でstart/stopしてちゃんと動けばOK。

で、そのスクリプトを呼び出すようにmanifestファイルを書く。こんな感じに。

manifestファイルが書けたらfmri(?)に取り込む。以下のような感じ。

1
2
3
# svccfg
> import /usr/local/samba/var/samba.xml
> exit

ちゃんと取り込めてるか確認。

1
2
# svcs -a|grep samba
disabled       14:58:21 svc:/local/network/samba:default

ちゃんと起動、停止できるか確認。

1
2
3
4
# svcadm enable svc:/local/network/samba:default
# svcs -xv (なにも出なければOK)
# svcadm disable svc:/local/network/samba:default
# svcs -xv (なにも出なければOK)

Enjoy!

今日でkvm環境への移行が完了した

いままでOpenSolaris+VirtualBox環境でやってたけど、2個以上VM立てると時計が進まなくなったりしてたので、ストレージはOpenIndiana、いろんなサーバはCentOS,KVMでやってみることにして、今日ほぼ元の状態まで戻した。KVM超いい。3つほどVM立ててもメモリぜんぜん食わないし時計はちゃんと進むし.iSCSIでやってみたかったけどなんかよくわかんないので今後の課題かな・・・。あとはOpenIndianaでSambaがちゃんと動けばパフォーマンスもいいのでちょっと動向をウォッチしつつとりあえず放置かなあ・・・。

今日はCOMSTARに挑戦するもよくわかんないこと多くて疲れた

OpenIndianaのZFSボリュームをSambaでクライアントにマウントさせたい→pkg install service/network/samba→smb.confをOpenSolarisから持ってくる→svcadm enable svc:/network/samba:default→smbpasswd -a なまえ→smbpasswd -e なまえ→動かないorz ということでLinuxでSambaやるべ→家の仮想サーバのrootディスクはiSCSIでやるぜ→zfs create→sbdadm create-lu→stmfadm add-view→itadm create-target→CentOSからiscsiadm -m discovery -t sendtarget→見えるぜ→iscsiadm -m node IQN –login→できたぜ→virt-install→OpenIndianaのZFSボリュームをzfs set sharenfs=on→Linux(CentOS)でマウント→yum install samba→OpenSolarisで使ってた設定ファイルを持ってくる。→service smb start→動くじゃん・・・まあいいか使えれば・・・→他のサーバも同じように作るべ→作った→CentOSでls -l /dev/disk/by-path→う〜んどっちがどっちのディスクなのかよくわかんね(わかるけど)。しかも2個目のはLUN0とLUN1の2つ見えてるし。→ところでどっちのLUがどっちのIQNに繋がってるの?→わかんね・・・ という流れ。OpenIndianaでSambaがちゃんと動く&仮想サーバのrootディスクをiSCSIにしない、ということでシンプルになるんだろうか、と書きながら思った。COMSTAR使ってみたいんだけどなあ・・・よくわかんないなぁ・・・

デュープリズムのサントラ買った

ちょう懐かしい。PSPでもできるからやってみたいけど年始の休みで終わる気がしないわ。モンハンもあるし。これも音楽がいいからなあ。 Amazon: デュープリズム オリジナル・サウンドトラック 【ニコニコ動画】デュープリズム【CM】30秒 【ニコニコ動画】デュープリズム【CM】15秒

年をまたいでzfs send/receiveでファイルサーバをバックアップしてみた

結構ややこしい。慣れたり考え方を理解すれば楽勝だけど。ハマりポイントとしては以下のような感じか。

  • zfs sendできるのはスナップショットだけ。ライブのファイルシステムをコピーすることはできない。考えてみれば当然か。(コピー中にファイルシステムが変更されるとストリームとライブの整合性が失われる)
  • 2回目以降増分をzfs receiveするためには、受信側のライブファイルシステムが前回受信したスナップショットから変更されていてはいけない。これも考えてみればあたりまえ。ZFSは枝分かれスナップショットをサポートしていない(スナップショットからcloneしてpromoteすることで別ファイルシステムとすることはできるけど)。ロールバックでスナップショットに戻ることは可能。もちろんロールバックすると変更分は消える。

でも理屈が通っててわかると本当に気分がいい。ZFSがますます好きになった!順番に手順を書く。もっぱら将来の自分用に。

1. <送信側>スナップショットを取る

1
2
3
4
# zfs snapshot ore_no_tank@backup
# zfs list -t snapshot
NAME                                           USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank@backup                                0      -  3.18T  -

詳細はOracleのZFS管理ガイドを見ればわかるが、REFERはそのファイルシステムが参照しているプール内のブロック(?)で、USEDは変更等の理由によりそのスナップショットから変更され、プール内のブロックを消費している量を指す。たぶん。

2. <送信側/受信側>zfs sendでスナップショットを送信する

スナップショットを送信する。ここではrootアカウントでやってるが、pfexecでやった方がいいのかもしれない。rootでのsshログインを許容するためにはユーザーロールを変更する(rolemod -K type=normal root)ことと、/etc/ssh/sshd_configでPermitRootLoginをyesにして、svcadm restart svc:/network/ssh:defaultする。(セキュリティが弱くなるのでちょう注意。作業が終わったら戻す方がいいよ)

1
# zfs send ore_no_tank@backup | ssh 192.168.xxx.xxx zfs receive -F ore_no_tank

-Fオプションで受信側のファイルシステムを強制的に置き換える。これ以降は受信側のファイルシステムには手で変更をくわえないようにする。といってもスナップショットにロールバックすれば元に戻るので。

送信後に受信側を見てみると、スナップショットも含めてコピーされていることがわかる。(zfs list -t snapshotしたときにUSEDに149Kのカウントされているのはスナップショット以降の変更分も一緒に受信しちゃってるのかもしれない。後ろの手順でやっている通り、一回zfs rollbackしておいたほうがいいかも)

1
2
3
4
5
6
# zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank               3.41T  1.93T  3.18T  /ore_no_tank
# zfs list -t snapshot
NAME                             USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank@backup               149K      -  3.18T  -

3. <送信側>再度スナップショット(増分スナップショット)を取る

容量が大きいファイルシステムや、複数で共有しているファイルシステムの場合、zfs send/receiveでコピーしている間にもいろいろファイルが作られたり消されたりする。その度にファイルシステム全体をコピーし直すのではいつまでたってもバックアップ先がバックアップ元と同期せずバックアップの意味がない。再度スナップショットを取って、差分だけバックアップ先に送るようにすればより頻繁にデータをバックアップできるチャンスが増え、より最新のデータに復元できたり、より精度高くデータを復元できる可能性が高まる。(例えば”先週のデータ”ではなくて、”昨日の15:30時点のデータ”とか)

送信側で再度スナップショットを取る。

1
2
3
4
5
# zfs snapshot ore_no_tank@backup2
# zfs list -t snapshot
NAME                                           USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank@backup                            8.68G      -  3.18T  -
ore_no_tank@backup2                               0      -  3.18T  -

前回スナップショットを取ってから、8.68GB分の変更が発生していることがわかる。

4. <送信側/受信側>zfs sendで増分のみを送信する

再度スナップショットを送信する。送信側で”-i”オプションで増分計算元を指定していることと、受信側で”-F”オプションを外していることに注意。

1
# zfs send -i ore_no_tank@backup ore_no_tank@backup2 | ssh 192.168.xxx.xxx zfs recv ore_no_tank

増分を送信後に受信側の状態は以下のようになっている。増分のスナップショットが正しく展開されている。

1
2
3
4
5
6
7
# zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank               3.42T  1.92T  3.18T  /ore_no_tank
# zfs list -t snapshot
NAME                             USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank@backup                  8.67G      -  3.18T  -
ore_no_tank@backup2                     0      -  3.18T  -

zfs send/receiveした時に以下のようなエラーが出たら、受信側のファイルシステムが変更されている。zfs rollbackでスナップショットに戻ることで解決できる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<送信側>
# zfs send -i ore_no_tank@backup ore_no_tank@backup2 | ssh 192.168.xxx.xxx zfs receive ore_no_tank
cannot receive incremental stream: destination storage has been modified
since most recent snapshot
<受信側>
# zfs list -t snapshot
NAME                             USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank@backup               149K      -  3.18T  -
# zfs rollback ore_no_tank@backup
# zfs list -t snapshot
NAME                             USED  AVAIL  REFER  MOUNTPOINT
ore_no_tank@backup              1.50K      -  3.18T  -
<送信側>
# zfs send -i ore_no_tank@backup ore_no_tank@backup2 | ssh 192.168.xxx.xxx zfs receive ore_no_tank
# (←成功したので何も出ない)

Happy ZFS !

年末にダライアスバースト買ってみたら面白かった

【ニコニコ動画】【良作】ダライアスバースト Iゾーン紹介【宣伝活動】 サンダーフォースⅥの苦い経験でどうなんだろと思ってたけどとても面白かった!The World of Spiritが燃えるよ!