ホームネットワーク日記

設定したことを忘れないように書いてあります。

2005.05.03
デジカメ写真を自鯖で公開

デジカメの写真を仲間に公開するために、サムネイルをつくってhtmlファイルを作成するスクリプトを作成。

ただ、ディレクトリに日本語を使うと、html化したときにちゃんと動作しない。 urlのエスケープができないからだとおもうが、シェルスクリプトでやるのは難しいかと思ってやっていない。perlを呼び出せばよさそうだけど。

あとディレクトリ構成を変えたときは、サムネイルディレクトリを削除しないと、無駄なファイルができてしまう。

2005.05.02
レイアウトを変えたら想定の範囲外の現象が発生した件について

レイアウトのCSS要素をいろいろいじってみる。で、いくつか想定の範囲外の現象が。

リンク(アンカータグ)の属性で、classで指定した場合とidで指定した場合、hoverの影響範囲が違う。

たとえば、class="button"とした場合、.buttonと指定したときのcolor要素は、a:hoverに影響しないが、id="button"のときは、a:hover要素を上書きしてしまうので、a#button:idで別途指定しなければならない。

また、word-wrap:break-wordの属性が影響しない場合があってそれも不明。

2005.04.12
IMAP-4サーバーをいじくる

現状、IMAP-4サーバーはWU-IMAP4を利用している。だが現在あまり更新されていないようなので、Cyrus-IMAPをいれてみた。 まず、必要なパッケージをapt-getでインストール

#apt-get install cyrus-imapd,cyrus-ipmapd-utils,cyrus-sasl-md5

次に、管理者ユーザーを作成する。

# /usr/sbin/saslpasswd cyrus
Password: 
Again (for verification): 
# 

で/etc/imapd.confを適当に直して、saslauthdとimapdを起動する。次に、cyradimでログオンしてみたのだが、syslogに以下を吐いて認証に失敗する。

Apr  8 13:12:43 d058147 imap[3818]: unable to open Berkeley db /etc/sasldb: Invalid argument
Apr  8 13:12:43 d058147 imap[3818]: unable to open Berkeley db /etc/sasldb: Invalid argument
Apr  8 13:12:43 d058147 imap[3818]: no secret in database
Apr  8 13:12:46 d058147 perl: No worthy mechs found

ネットで調べると、Berkeley dbのバージョンミスマッチのせいのよう。saslauthdは /usr/lib/libdb-4.2.soをダイナミックリンクしているのに対し、 cyrus-imapdは/usr/lib/libdb-4.0.soをリンクしている。
で、SRPMをとってきてリビルドしようとしたら、SRPMがないでやんの。tarから入れるのは簡単だが、管理している単位がVine Linuxの系統から変わってしまうのでどうしようかと悩む。

2005.04.06
CATV internetの調子が悪い

無線LANの基地局をAterm WR7800Hに変更してから、CATVモデムの調子が悪い。

具体的には、何時間か使っているとインターネットへの接続ができなくなる。リンクLEDなどを見るかぎり正常に動作しているようだが通信ができない。 復旧するには、CATVモデムをリセットしないと復旧しない(Atermをリセットではだめ)。

とりあえず、LANインタフェースを10M固定に変更するがあまり改善しないため、T-comに連絡してモデムの調査をしてもらうことにする。

2005.03.29
2005.03.29の日記

サーバー証明書は、そんな手間な事をしなくても、ちゃんとドキュメントにもっと簡単な方法が書いてありました。

	openssl req -x509 -newkey rs:1024 -keyout server.pem -out server.pem -days 365 -nodes

以上で、秘密鍵の作成から、パスワード付き鍵ファイルの削除までの手順が一度に完了。聞かれることはほぼ同じ。

ついでに、pound.cfgにRootJailを設定して、Jailでしか動かないようにする。 その際に、SSLは/dev/urandamを必要とするため、Jailにそのファイルを作成しておく。 以下は、/var/poundがJailの例。

mknod /var/pound/dev/urand c 1 9

この辺りもちゃんとドキュメントに書いてありました。

2005.03.28
RD-X5をネットにつなぐ

東芝のRD-X5を購入した。 これはネットワーク経由でいろいろ設定できるのだが、こんなこと も起こしている様に、インターネットにつなげる様なレベルのセキュリティ対策はなされていない。 新しい機種では、対策されたが、パスワードを設定できるようになっているだけで、SSLなどには対応していない。 でも、利便性のためには、インターネットに接続したい。

ということで、リバースプロキシ&SSLラッパーであるpoundを入れて、SSLによる暗号化をおこなえる ようにしてセキュリティを確保することにする。 また、こうしておけば、複数台のrdを設置しても一つのアドレスでアクセスすることができる。

まずは、poundをダウンロード。

tarボールなので、Vineの管理方式であるRPMを作成する。

参考までに、SPECファイル(SPECSに保管)スクリプト(SOURCESに保管)pound.cfg(SOURCESに保管を置いておく。

rpmファイルを作成し、インストール

#rpm -ba SPECS/pound.spec
#rpm -Uvh RPM/i386/Pound-1.8.2-1site0.rpm

次に、SSLラッパーで使用する証明書を用意する。 証明書は、/etc/poundに作成するので/etc/poundで作業する。

秘密鍵の作成

# openssl genrsa -rand /var/log/syslog -des3 -out server.key 1024
0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
.............................................................++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

秘密鍵からパスワードを削除

#openssl rsa -in server.key -out server-nonpw.key
Enter pass phrase for server.key:
writing RSA key

証明書の作成

# openssl req -new -key server-nonpw.key -x509 -out server.pem
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) [AU]:JP				← 国コード
State or Province Name (full name) [Some-State]:		← 州。日本なら県
Locality Name (eg, city) []:					← 市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:	← 所属
Organizational Unit Name (eg, section) []:			← 部署
Common Name (eg, YOUR name) []:					← サーバー名(DNS名)
Email Address []:						← E-Mailアドレス

パスワードなし秘密鍵ファイルを、pemファイルと一体化させてpound用の証明書にする

# cat server-nonpw.key >> server.pem

パスワード付き秘密鍵ファイルは不要なので削除しておく。

次に、/etc/pound/pound.cfgの編集

ListenHTTPS	192.168.a.b,443 /etc/pound/server.pem	← サーバーのアドレス。HTTPSプロトコルをポート443で待つ。

UrlGroup        ".*"
        BackEnd 192.168.c.d,80,1			← RD-X5に設定したアドレス・ポート。
EndGroup

以上でとりあえず完了。ブラウザで、https://192.168.a.b:443をアクセスしてみて確認。

2005.03.27
Aterm WR7800

RD-X5購入したが、こいつの機能を生かすためには、LANに接続しなければならない。 ところが、AVラックとの配線をするためには、床にケーブルを這わせるはめになってしまう。それは美しくないので、無線レピータを購入しようと近所の100満ボルトへ。

ただ、結構値段がしたのと、ノートPCを更新して、802.11a/b/gがつかえるようになっているため、この際とおもって、 無線基地局をAterm WR7800のセットに更新。ただ無線LANの子機の設定は結構苦労した。マニュアル通りにやってもエラーばかり。何度かやってなぜか設定可能に。

2005.03.12
Shuriken4に更新

Just my shopて購入。

今回の追加の目玉は、spamフィルタとTODOリストだが、特に惹かれない。だが、不満もすくないので最新版に更新しておくことに。 今回、メールで意見が挙げられるようになっていたので、改善要望を記入してメール。

2004.01.08
smbmountで日本語ディレクトリの識別ができない件について

会社のサーバで、smbmountを利用しているが、Windows上で別々のディレクトリがLinuxからマウントしたファイルシステム上では区別されず、片方のディレクトリしか参照されないという現象が発生。 現象自体は前から知っていたのだが、あまり利用されていないディレクトリなのか、苦情も出ていないので放置していた。

しかし、先日ディレクトリ構成を変更したら、利用されそうなディレクトリでも現象が発生したので、対策をすることとした。 だが、もともと手がかりもないため放置していた案件なので、まったく対処のしようがない。

八方塞がりなので、参加しないでいたsamba-jp メーリングリストで質問することとした。 sugjのメンバーではあったけど、アクティブに活動できそうもないMLにはいるのは気が進まないのでsamba-jpには 入っていなかった。

すぐに「kernel依存であり、fs/smb/dir.c中のsmb_compare_dentry()が問題(意訳)」と回答をいただいた。

kernelに手を入れるのは初めての上、全体の中でどのような依存があるかも理解していないので、 ソースを眺めながら、kernelに手を入れるべきかどうすべきかしばらく悩んでいたが、結局手を入れることにした。

下が変更内容。オリジナルでは、有無をいわさずtolowerしていた部分をascii文字だったらtolowerすることに。 そもそもtolowerはacsii文字にしか効かないのだし、これなら元とあまり文意は変わらんだろう。
Sjis依存で書くならばAnalogの時のように先行バイトをチェックしてSjisの第二バイト 目を無視するようにすべきだろうが、他のコードの事を考えるとSjisだけを改善してもスマートではないためやめた。

--- fs/smbfs/dir.c.org  2004-01-08 09:23:17.000000000 +0900
+++ fs/smbfs/dir.c      2004-01-08 09:38:45.000000000 +0900
@@ -328,8 +328,13 @@
        if (a->len != b->len)
                goto out;
        for (i=0; i < a->len; i++) {
-               if (tolower(a->name[i]) != tolower(b->name[i]))
-                       goto out;
+               if (isascii(a->name[i]) && isascii(b->name[i])) {
+                       if (tolower(a->name[i]) != tolower(b->name[i]))
+                               goto out;
+               } else {
+                       if (a->name[i] != b->name[i])
+                               goto out;
+               }
        }
        result = 0;
 out:

上記パッチは未保証です。もし物好きにも使おうとする人がいる場合はat own riskで。

幸いにも? smbfsはモジュールで組み込むようにしていたため、上記変更をした後、make modulesでモジュールを作成。 現在使っているkernelを作成した状態のままになっていたため。 fs/smbfsにできたsmbfs.oを/lib/modules配下のsmbfs.oと置き換え(当然、オリジナルはリネームしてとっておく)、 リブートしたところ、ディレクトリを区別できるようになった。

しかし、なぜtolowerしているのか疑問。大文字小文字を区別しないようにするためだろうが。 NFSサーバとクライアントの実装を調べないとちゃんとした対処はできなさそう。 クライアント側にエントリが複数あっても指す先は一つじゃない?