Archive
WordPress+sqliteは早急だったか
ついカッとなったので試した。
WordPressのバックエンドDBをMySQLからsqliteにできないか試してみた。webで探すと先人がそれなりにいるけど、結論としてはうまくいかなかった。Invalid or missing PDO Driverうぜえ。
FreeBSDとubuntuで撃沈。
CentOSは一段階進めたけどやっぱりエラー。
バックエンドDBが変わったら性能あがるかなあとか思ったんだけどなあ。あと、バックアップとか鯖移動とかが楽になるかなとか思ったんだけどなあ。残念。
それにしてもなんでうちのWordPressは遅いのやら。ディスクが遅いか、DBが遅いか、はてな記法とかのヘビープラグインがまずいのか、さてさて。
自宅鯖をリプレイスしたよ!
ついカッとなってML115 G5を買った。ついカッとなってPhenom II X4 910eを買った。
いや、カッとなったというか、全力で計画的犯行をしてみた。ので、メモを残しておく。
- 今まで使っていた鯖がML115 G1にAthlonBEという中途半端なモノで、最近のCPUに載せ替えるのがM/B的に無理だった
- VMでWinXPを動かしていてなんとなく重い気がしていた
- WordPressの動作がもっさりだったのをなんとかしたかった
あたりの理由から適当に更新する予定だった。年度あけくらいに次のCPUが出るのは自明だったので待とうかとも思ったけど、手ごろな価格に落ちてくるのはいつだろう?と考えると今買ってもいいよね、みたいな。
というわけで、ML115 G5をNTT-Xでぽちって、発売されたばかりの低消費電力CPUを買ってみたわけだ。初めての鯖用CPUゎぁぃ!
鯖の自体はそもそもが全部VM上だったので楽勝! と言いたいところだが、ディスク間のデータコピーをやったら一晩かかった。相変わらずHDDが遅い。ちゃんとSATAIIの7200rpmだと思うんだが。適当に測定した感じからすると10MB/sec出てない。いくらHDDが1TB、2TBとでかくなっても、転送速度がどうしようもねえな。
ESXi上なのでやめたんだけど、ddでブロックサイズで隠してやれば幾分マシになるのかなあ。(某所のPCクラスタのSATAディスクは50MB/s近く出てたんだよなぁ……。)
こういう時のことを考えると、普段からミラーリング運用をしておいて必要に応じてディスクごとコピーが幸せかもしれない。まぁできることならRAID6運用とかしたいけど、そこそこの対応ハードウェアを買うのに金がかかるからなあ。(とはいえ、100kでおつりが来るのも事実なんだが……。)
現在はVM単位/仮想ディスクのフルバックアップ(時々)+重要ファイル・良く更新するファイルのrsync(前者より頻繁)で運用中だが……。
というわけでCPUがかなり強化されたんだけど、(チップセットとかもたぶん強化されているんだけど、)実際に体感性能が上がっているかはまだ未知数。そんなことよりESXiのパラメタを弄れ説……。同時実行可能コア数が増えているのを良いことにVMのWinXPのコア数設定を1から2にしたけど、意味あるかなあ。WordPressが置いてあるVMも2コア設定でVM作り直してみようかなあ。(途中までやってあるけど時間的な都合で放置中。)
ちなみに、ESXiの時計設定がうまくできなくて、VMの時計が少しの間むちゃくちゃだったのは無駄に時間を食ったので反省点。9時間ずれるので何かと思ったら、BIOSではJSTのつもりで時刻を設定→はいぱーばいざーがUTCと認識→VMがホストの時刻を見に行ったためJSTよりさらに9時間進むという罠。注意だ。やれやれである。
さて、これで手持ちのデスクトップ系は自作PC(常用), ML115G5(稼働中), ML115G1(緊急用), FreeNASを入れてある自作(ファイルバックアップ用鯖), ちょい古いMicroATX(ほぼ使ってない)になった。MicroATXが流石に古いので、殺してキャプチャPCでも導入しようかなあ……?PT2が何故か2枚あるし……。むしろML115G1が普段は何も使い道がないのが悔しいから、とりあえずこいつでキャプチャ実験かな。
samba/ldapの覚え書き(暫定版)
やろうと思う度にはまって時間を無駄にするので、一気に頑張った。オンラインで探すと、古すぎて事情が同じか疑問な資料が多かったり、一気にまとめて設定していたりで、とてもツライ。
この資料では0から順番を追って説明していくので、少なくとも現存するどのドキュメントよりもなんとかなる資料のつもり。ただし、LDAPにおけるdnやdcの説明とか、samba設定ファイルの基本的な書き方とか、そういうのは説明しないので、適当に付け焼き刃を持ってくること推奨。
以下、導入のための覚え書き。間違いが含まれていたらごめんね。
要求仕様
sambaとUNIXユーザー情報の一元化、要するにパスワードなどの共有をしたい。
共通ユーザの情報はLDAPに持たせて、ユーザの管理(追加やパスワード変更やシェル変更など)は(とりあえず)LDAPサーバ上でだけできればOKとする。
構成
ldapサーバ兼sambaサーバ兼ファイルサーバなサーバノードを1台、ldap情報を元にログインやらなんやらを行うクライアントノードが数台。という構成。
より大規模な環境だとldapを別の専用DBサーバするのかなぁ、と思いつつも、ここではそこまででかい話にはしない。
OSはとりあえず手堅く(?)CentOS5.4 x86_64。
手順
パッケージの準備
とりあえず使いそうなものは入れておく。
- OSインストール時のパッケージ選択でServerを選んでおけば、samba-clientやnfs-utilsなどは勝手に入る模様
- yum updateしておく
- openldap-servers(サーバのみ)、openldap-clients(サーバ・クライアント両方)を導入しLDAPを利用可能にする
- smbldap-toolsの導入
- smbldap-tools内のsmbldap-populateを使いたいが、CentOSのデフォルトパッケージツリーに存在しないため、まずはrpmforgeを導入
- http://packages.sw.be/rpmforge-release/以下の該当箇所からrpmforge-release のrpmを拾ってきて、rpm -ivhする
- 改めてyum install smbldap-toolsすれば導入完了
LDAPサーバの準備
- LDAPサーバ起動まで
- slapd.confにroot情報などを記述
- suffix,rootdn,rootpwを書き換える
- ldap鯖の起動
- chown -R ldap:ldap /var/lib/ldap
- cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
- /etc/init.d/ldap start(restart)
- 起動が確認できたら(/etc/init.d/ldap status)、chkconfig ldap onしておく
- slapd.confにroot情報などを記述
- LDAPの動作確認
- ldifファイル(後述)にユーザ情報を記述し、下記コマンドにてDBに投入
- ldapadd -x -D “slapd.confに書いたrootdn情報” -w slapd.confに書いたrootpw情報 -f ldifファイル
- slapcatで登録したデータが見えれば成功
- slapcatはLDAPが起動していなくて使える模様(知らなかった!slapd.confを参照してldapのディレクトリを探索しに行くプログラムなのかな?)
- ldifファイル(後述)にユーザ情報を記述し、下記コマンドにてDBに投入
- LDAPのDBを参照してログインするために
- authconfig-tuiでLDAPにチェックを入れる、情報入力の画面が出るのでサーバアドレスとrootdnを入れる
- id 登録したユーザ名 とやって参照できればOK
- su (-) 登録したユーザ名 でログイン可能、ただしHOMEディレクトリの準備ができているか等は別問題
- 以上の設定と確認はLDAPクライアントからも可能、もちろんHOMEディレクトリの準備などの問題は別問題
- authconfig-tuiの結果は/etc/ldap.confや/etc/openldap/ldap.confに書き込まれるようなので、これらのファイルを直接弄っても良い
- (補足:LDAPのデータにミスがあった場合の対処)
- LDAPのDBデータ修正方法
- (後で書く)
- LDAPのデータバックアップ・復元方法
- (後で書く)
- LDAPのDBデータ修正方法
テストに使ったldifファイルの例
dn: dc=test,dc=example,dc=net objectClass: dcObject objectClass: organization dc: test o: test dn: ou=People,dc=test,dc=example,dc=net objectClass: organizationalUnit ou: People dn: uid=testuser,ou=People,dc=test,dc=example,dc=net objectClass: account objectClass: posixAccount uid: testuser cn: testuser userPassword: testuser loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /exports/home/testuser
NFSを使う設定
HOMEディレクトリが共有できないと不便なので、なんとかする
- /etc/exportsを書き、/etc/init.d/nfs start でnfsdを起動する
- おそらくnfslockも一緒に起動してくれる
- chkconfig nfs onやchkconfig nfslock onで自動起動にしておくと良い
- mountできることを確認する
- クライアントでmount サーバのIPアドレス:exportsに書いた公開アドレス マウント先 などとやる
- うまく行ったら/etc/fstabに書く、パラメタは nfs defaults 0 0 など
- 環境によってはautomountを仕込むべき?
SAMBAと連携するための設定
ここまでの設定で、LDAPを使った複数PC間のログイン認証一元化はできている。さらにsambaの認証もまとめようというのがここでのお話。設定ファイルを書き換えたら適当にldapやsmbをrestartすること。
- samba.confにldap関連の設定を記述する
- [global]領域に以下のような情報を書く
security user passdb backend = ldapsam:ldap://localhost ldap suffix = dc=省略 ldap admin dn = cn=Manager,dc=省略 ldap user suffix = ou=Users ldap group suffix = ou=Groups ldap machine suffix = ou=Computers ldap passwd sync = yes
- ou=の項目はsmbldap.confのusersdn=,computersdn=,groupsdn=に対応していると考えられる
- と言いつつも、間違っていても問題なかったケースと問題だったケースを経験しているので、やや理解が足りていないのが現状
- smbldap.confのSID,sambaDomain,masterLDAP,masterPort,ldapTLS,suffixあたりを適切に修正する
- ここまで進んでいればこれらに何を入れればよいかは自明のはず
- SIDは説明がコメントで書かれているはずだが、net getlocalsidを実行すれば良い
- slaveLDAP,slavePortは存在しないならコメントアウトしておいた方がよさそう(書いてあると確認しようとする模様)
- userLoginShellやuserHomeなど、いかにもなオプションは適当に弄っておくと吉
- NFS上にHOMEディレクトリを置く場合などはuserHomeを弄っておくと幸せ
- GIDなどもいじれるけど、たぶんデフォルトで問題は起きないかと……
- smbldap_bind.confのmasterDNとmasterPwを記述する
- slapd.confにincludeを追加する
- include /path/to/samba.schema
- samba.schemaは/usr/share/doc/samba-3.0.33/LDAP/samba.schemaあたりから適当にコピーしておくこと
- smbldap-populateを実行する
- samba関係の色々なユーザ情報が追加される
- 怪しいエラーが出たら各種設定ファイルを見直すべし
- (最後にパスワードを聞かれるが、これが何に影響するのか良くわからない)
- sambaからLDAPにアクセスするためのパスワードを登録する
- smbpasswd -w LDAPの管理者パスワード で登録できる
- smbclientで動作確認
- smbclient -U ユーザ名 -L LDAPサーバアドレス でsambaの情報が見えるはず
- ユーザ名を入れなければ管理者扱い
- mount -t cifsでマウント
- smbmountは無くなったらしい
以上にて設定自体は完了。あとはユーザの追加や情報変更をどうするかの問題。
ユーザ管理
passwdやらchshやらが使えるのかというと、使えない。こいつらはldap向けじゃないから。PAMの設定を頑張れば良いのかも知れないけど、私はPAMのカスタマイズまで頑張る気はない。
どうすれば良いかというと、smbldap-toolsを入れればsmbldap-で始まるコマンドがいくつも使えるようになるので、これらを利用する。
- ユーザ追加
- smbldap-useradd
- smbldap-useraddを引数無しで実行すればオプションの概要がわかる。-a -mあたりは付けておくべき。ちなみに-mで作られるHOMEディレクトリは、-dで指定するか、前述のようにsmbldap.confを弄っておくと良い。
- smbldap-useradd
- ユーザ情報の変更
- パスワードやシェルをどうやって変えるか。パスワードはsmbldap-passwd、その他はsmbldap-usermod。usermodは引数無しで実行すると出力される使い方を見ればだいたいわかるはず。
- グループの追加・変更
- “Domain Users”みたいにスペースが入って気持ち悪い!とか、gidの値をもっとでかいエリアに持っていきたい!とか思った場合にどうするか
- smbldap-groupmodでグループ名の変更やグループの追加をすると良い
- しかし、単純にグループを smbldap-groupadd -g gid groupname で追加しただけではsmbldap-usermodでユーザのgidとして設定しようとしても弾かれる
- エラーメッセージにはSIDがどうのこうのと出るはず
- Domain Usersの情報を見るとsambaSIDが設定されている。gidに使うグループにはこいつが必要。「SIDとして指定した値にgidNumberが付加された値」が設定されているはずなので、これを適当にぱくってsmbldap-groupmod -s S-hogehoge groupnameの形式の指定をしてやれば、smbldap-usermodでgidとして指定可能になる.
- S-hogehogeの部分については、net getlocalsidで取得し設定した値に-503などの接尾辞が付いているはずである。この値はおそらくsmbldap.confで設定したSIDにdefaultUserGidが追加されているもののはずなので、末尾の値をそれらしく偽装すればOK!
その他
- LDAPのアクセス設定関係をちゃんとやってない。sldap.confにaccessをいくつか規定しておくべき。
- sambaの詳細設定をもう少しやるべき。LDAPの特定ユーザ群だけアクセスできる共有フォルダとかまだ作れてない。もちろん許可ユーザ名をだらだら書いちゃえばいけるけど……。
- LDAPのパスワードを平文から暗号化したものに変えた場合の設定。sambapasswdに喰わせるときに平文が必要かも知れないけど、それ以外たぶん問題ないよね……?
- クライアントPCからユーザ情報を変更できるか。設定ファイルを書けば問題なくできる気はしている。
追記
- グループを追加してもSIDで蹴られる問題は、-aオプションで解決するかも。manを見るとそう見える。試してない。(20100208)
最近のコメント