GPG鍵の作成
m-hotta@gaia:~$ gpg --gen-key (後は指示に従う) 十分な長さの乱数が得られません。OSがもっと乱雑さを収集 できるよう、何かしてください! (あと281バイトいります) (ここで処理が止まるので、別の端末から以下のように重い処理を動かす) m-hotta@gaia:~$ dd if=/dev/random of=/dev/null bs=100000 (2-3分後に処理が進んで完了する) 【破棄証明書の生成】 m-hotta@gaia:~$ gpg -o /naisho/revcert.asc --gen-revoke 'HOTTA Michihide' 【公開鍵のエクスポート】 m-hotta@gaia:~$ gpg -o .gnupg/pubkey.asc -a --export 'HOTTA Michihide'
pscpしたファイルがどこかへ行った
Windows7 上の pscp で Linux からファイルをコピーする。コピー自体は正常終了するが、
PS C:\Program Files\PuTTY> pscp celsior:/tmp/samba-settings.tar.gz . samba-settings.tar.gz | 3 kB | 3.8 kB/s | ETA: 00:00:00 | 100% PS C:\Program Files\PuTTY> dir *gz
。。。ファイルが見つからない(汗)
最初は PowerShell が原因かと思ったが、コマンドプロンプト(cmd.exe)上でやっても同じだった。
今度は置き場所(target dir)を変えてみる。
PS C:\Program Files\PuTTY> pscp celsior:/tmp/samba-settings.tar.gz \ C:\Users\hotta\Desktop samba-settings.tar.gz | 3 kB | 3.8 kB/s | ETA: 00:00:00 | 100% PS C:\Program Files\PuTTY> dir C:\Users\hotta\Desktop\*gz Mode LastWriteTime Length Name ---- ----------------- ------ ---- -a--- 2010/01/20 9:09 3904 samba-settings.tar.gz
デスクトップ上には置けた。ドットの扱いが何か違うのかな?
検索してみたら、
C:\Users\ hotta\ AppData\ Local\ VirtualStore\ Program Files\ PuTTY
というところに入っていた。どうやってアクセスしろと?
Sambaドキュメント翻訳環境
経緯
Samba Document 翻訳の際、xml レベルの文法チェックのために必要な環境を構築した 時のメモです。例によって環境は Cent OS 5.x です。標準の CentOS-Base.repoの 範囲で入るものについては言及していません。 m-hotta@gaia:~/rpm/BUILD/samba-3.4.3/docs-xml$ ./configure (前略) Summary:
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
rpmforge からパッケージを持ってこれるようにする
RPMforgeリポジトリ導入(RPMforge)の手順にしたがって rpmforge-release パッケージを導入します。rpmforge.repo では enabled=0 になっているので、 rpmforge のパッケージを指定するには yum コマンドで --enablerepo=rpmforge オプションが必要です。
必要なツールを導入
# yum --enablerepo=rpmforge install inkscape (これはうまくインストールできました) # yum --enablerepo=rpmforge install docbook2x-texi 517 packages excluded due to repository priority protections これ以外のパッケージについても、ことごとくこのメッセージ。 さすがに 517 個も入れ替えると、もはやそれは Cent OS とは呼べないかも? m-hotta@gaia:~/rpm/BUILD/samba-3.4.3/docs-xml$ ./configure Summary:
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
XML Catalog のチューニング
これだけでもとりあえず動きはしますが、ビルド中に個々のコマンドがインターネット上の 大量のファイルを参照しますので、遅くて使い物になりません。これらのファイルをローカルに キャッシュするようにします。詳細は docs-xml/README の中の Help! Building the docs generates a lot of HTTP traffic...というところに書いてあります。 $ wget -m -np http://docbook.sourceforge.net/release/xsl/current/ $ wget -m -nd http://www.samba.org/samba/DTD/passdb $ wget -m -nd http://www.samba.org/samba/DTD/samba-doc $ wget -m -nd http://www.samba.org/samba/DTD/samba.entities $ ls docbook.sourceforge.net www.samba.org これらのディレクトリを /etc/xml/catalog で指定します。 # vi /etc/xml/catalog (以下の行を挿入)
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="/home/m-hotta/docbook.sourceforge.net/release/xsl/current/"/> <rewriteURI uriStartString="http://www.samba.org/samba/DTD" rewritePrefix="file:///home/m-hotta/www.samba.org/samba/DTD"/>
確認
m-hotta@gaia:~/rpm/BUILD/samba-3.4.3/docs-xml$ make html inkscape -z -f Samba3-ByExample/images/Charity-Network.svg --export-png=Samba3-ByExample/images/Charity-Network.png (inkscape:16233): Gdk-CRITICAL **: gdk_display_list_devices: assertion `GDK_IS_DISPLAY (display)' failed Background RRGGBBAA: ffffff00 Area 0:0:420.945:336.083 exported to 421 x 336 pixels (90 dpi) Bitmap saved as: Samba3-ByExample/images/Charity-Network.png png ファイルを作る際にエラーが出ますが、これはX 環境でないからだろうと勝手に判断して無視 (中略) Writing output/htmldocs/Samba3-HOWTO/install.html for chapter(install) (中略) cp htmldocs.html output/htmldocs/index.html こんなメッセージが出ているので、少なくとも xml のパースだけは通っているんでしょう。 文法チェックだけならこれでOKそう。
samba 3.4.3 を試してみる
ビルド
Cent OS 5.4 相当の環境で、Samba の安定最新版を試してみるテストです。 tar ball を開いてもよくわからない状態で、configure スクリプトも直下にはない。 どうしたものかと思ってたのですが、中を探ってみると samba-3.4.3/packaging/RHEL/samba.spec というのを発見。ダメ元で $ rpm -ba samba.spec とかやってみたら、見事に一発でビルド完了。楽になったものです。
導入
できたバイナリをテスト用の別ホストにコピーして $ sudo yum localinstall samba* とかやってみたら、 Package samba-common-3.4.3-1.i386.rpm is not signed と怒られた。man yum と相談する。 $ sudo yum --nogpgcheck localinstall samba* で無事に導入完了。
MS-DFSを試してみる
せっかくなので、以前から一度試してみたいと思っていた MS-DFS(分散ファイルシステム) を試してみました。要は、Samba サーバ間のシンボリックリンクを実現するもの、という理解 でも、あながち間違いではなさそうです。もっとも、元々は Windows Server の機能です。 青字のところが DFS 固有の設定となります。
DFS サーバ(trueno)の設定
root@trueno:/etc/samba# cat smb.conf [global] include = /etc/samba/smb.conf.common include = /etc/samba/smb.conf.bdc netbios name = fs host msdfs = yes [dfs] path = /export/dfsroot msdfs root = yes root@trueno:/export/dfsroot# ln -s msdfs:celsior\\share celsior_share root@trueno:/export/dfsroot# ls -l total 0 lrwxrwxrwx 1 root root 19 Nov 17 15:53 celsior_share -> msdfs:celsior\share
リンク先サーバ(celsior)の設定 - DFS固有の設定は不要
root@celsior:/etc/samba# cat smb.conf [global] include = /etc/samba/smb.conf.common include = /etc/samba/smb.conf.bdc netbios name = celsior [share] path = /var/samba/celsior m-hotta@celsior:~$ ls -l /var/samba/celsior 合計 0 -rw-r--r-- 1 root root 0 11月 17 17:11 新しいファイル
CIFSクライアント(sprinter)から確認 - Windowsからの確認でももちろんOK
m-hotta@sprinter:~$ host fs fs.example.com is an alias for trueno.int.example.com. trueno.int.example.com has address 10.27.4.21 m-hotta@sprinter:~$ smbclient -U hotta //fs/dfs Password: Domain=[LUNA] OS=[Unix] Server=[Samba 3.4.3] smb: \> ls . D 0 Tue Nov 17 15:53:45 2009 .. D 0 Tue Nov 17 15:46:53 2009 celsior_share D 0 Tue Nov 17 15:53:45 2009 50340 blocks of size 131072. 29609 blocks available smb: \> cd celsior_share smb: \celsior_share\> ls . D 0 Tue Nov 17 17:11:57 2009 .. D 0 Tue Nov 17 14:13:32 2009 新しいファイル 0 Tue Nov 17 17:11:57 2009 37382 blocks of size 524288. 28646 blocks available
おまけ
(Windows でも同じですが)cd するときに最初重くなるので、リダイレクト& 認証処理は、結構重たい処理なのかもしれない。
phpでセッションの情報が消える
【概要】
- 現象
- PHPで書いた申請フォームで、ユーザIDによる認証を行っているが、時々申請者のメールアドレスが""@example.comとなることがある。
- 原因
- 入力に時間がかかりすぎたためにセッションがタイムアウトし、セッション情報(ここではユーザID)が削除されてしまっていた。
- 対策
- セッションの有効期限を長くする。
【セッションの有効期限とガーベッジ・コレクション】
- セッションの有効期限は、session.gc_maxlifetime パラメータで制御されている。デフォルトは24分。
- このパラメータは、セッション情報をサーバ上で残すべき時間を指定する
- これを超えると、消される「可能性」が生じる(必ず消えるとは限らない)
- セッション情報は、デフォルト(session.save_handler=files)ではファイルに格納されている
【セッションが消される契機(トリガー)】
- 同じAache+PHPのバイナリを共有する、いずれかのページ/アプリケーションに誰かがアクセスした時
- 問題が起きたのと同じアプリケーションとは限らない
- アクセスごとに毎回 GC をやらせるとシステムに負荷がかかるため、毎回 GC を行うかどうかの判定(確率計算)が行われる
【問題点】
- 現象
- 原因
- 同じホスト(かつ、同じセッション保持用ディレクトリ)を共有するすべての VirtualHost のうち一つでもこの設定がなされていないと、その設定していない VirtualHost にアクセスがあった場合、php.ini のデフォルト 値が有効となってしまうため。
【対策(1)】
- 対策
- 利点
- 簡単
- 欠点
【対策(2) - 公式マニュアルではこちらを推奨】
- 対策
- セッションの格納位置(session.save_path)の設定を、各 VirtualHost ごとに別々にする
- 利点
- VirtualHost間の相互影響範囲を限定できる
- 欠点
- あらかじめそれぞれのディレクトリを用意する必要がある
【備考】
- 多くのセッション情報(セッションファイル)の中でどのセッション情報を使うかは、クライアントが送りつけてくるクッキー(Set-cookie:ヘッダ)で決まる。
- たとえセッション情報の有効期限が session.gc_maxlifetime に達していなくても、クライアントがクッキーを送ってこない(もしくは別のクッキーを送って来た)場合、別セッション扱いとなり、セッション情報は引き継がれない。
- クライアントが(ブラウザで保持している)クッキーを送るかどうかは、以下のパラメータで決まる。
- session.cookie_lifetime : クッキーの有効期限(単位:秒、デフォルト180)
【参考資料】
以下のサイトを参考にさせていただきました:
セッションの有効期間とか設定とか挙動とかを調べました