ジダンのマルセイユルーレットに始まって、ベッカム、フィーゴなどのすごいプレーの連続。 あっという間の90分だったな。
Gaucheの作者でもある川合さんによるPaul Grahamの文書の訳が出ていた。
予定通り本日到着。モニタも当たり前のように一緒に届いた。
Windowsの環境構築といえば何をさしおいても窓使いの憂鬱な訳ですよ。MLでアナウンスされているスナップショットをインストール。
設定ファイルはこんな感じで。
include "109.mayu" keymap Global key *IC- = # Emacsキーバインドエミュレート mod mod0 = !!英数 key m0-*p = *Up key m0-*f = *Right key m0-*b = *Left key m0-*n = *Down key m0-*h = *BackSpace key m0-*e = *End key m0-*a = *Home key m0-*d = *Delete key m0-*v = *Pagedown key m0-YenSign = $ToggleIME # WindowsキーをノートパソコンのFnキーっぽく mod mod1 = !!LeftWindows key m1-*Left = *Home key m1-*Right = *End key m1-*Down = *Pagedown key m1-*Up = *Pageup # 一部のアプリケーションは普通にスワップ keymap CTRL_CAPS_SWAP mod ctrl += 英数 key *英数 = *LControl mod ctrl -= LControl key *LControl = *英数 window xyzzy (/xyzzy\.exe:/ && /:xyzzy.+@/) : CTRL_CAPS_SWAP window putty (/putty(jp)?\.exe:/ && /putty(jp)?\.exe:/) : CTRL_CAPS_SWAP window vpc (/Virtual PC\.exe:/ && /Virtual PC\.exe:/) : CTRL_CAPS_SWAP # リモートデスクトップ使うときもそれなりに keymap2 Tm mod !shift !alt !control !windows mod control += 英数 window msrdp (/TSSHELLWND/ && /Remote Desktop/) : Global key m0-x = C-x &Prefix(Tm) key m0-c = C-c &Prefix(Tm) key m0-u = C-u key m0-k = C-k key m0-s = C-s key m0-r = C-r key m0-y = C-y key m0-w = C-w key m0-j = C-j key m0-m = C-m key m0-LeftSquareBracket = Esc key m0-Solidus = C-Solidus key m0-S-ReverseSolidus = C-S-ReverseSolidus key m0-g = C-g key m0-SPACE = C-space
こうすると、
という変則的なキーバインドが実現できる。
ソフトウェアの性格上動かないということも十分考えられたけど、特に問題ないようでよかった。
configureした後makeしようとすると失敗する。
gcc -g -O2 -I. -I/tmp/ruby-1.8.1 -I/tmp/ruby-1.8.1 -I/tmp/ruby-1.8.1/ext/win32ole -DNONAMELESSUNION -DHAVE_WINDOWS_H -c win32ole.c win32ole.c: In function `find_default_source': win32ole.c:5010: error: `GUIDKIND_DEFAULT_SOURCE_DISP_IID' undeclared (first use in this function) win32ole.c:5010: error: (Each undeclared identifier is reported only once win32ole.c:5010: error: for each function it appears in.) make[1]: *** [win32ole.o] Error 1 make[1]: Leaving directory `/tmp/ruby-1.8.1/ext/win32ole' make: *** [all] Error 1
蚊遁鉄句(2004-05-18)にあるようにパッチを当てればOK。
--- ext/win32ole/win32ole.c.orig 2003-09-25 08:54:21.000000000 +0900 +++ ext/win32ole/win32ole.c 2004-08-05 00:56:55.075375000 +0900 @@ -21,6 +21,7 @@ #include <windows.h> #include <ocidl.h> #include <ole2.h> +#include <olectl.h> #ifdef HAVE_STDARG_PROTOTYPES #include <stdarg.h> #define va_init_list(a,b) va_start(a,b)
ようやっとSamba(PDC)+LDAP認証なサーバ & Samba+NFSなファイルサーバの連携に成功した。 これでクライアントはWindowsでのドメインログオン & LinuxでのLDAP認証によるログイン (ホームディレクトリ共有)が出来るようになる。
とりあえずSambaは置いておくとして、autofs+LDAPについてWeb上にまとまったドキュメントがなくて苦労した。 以下はそのあたりについての断片的なドキュメント。LDAPでの各ユーザーエントリはsmbldap-toolsによって生成された ものをベースとしている点に注意。いつかSambaとあわせてちゃんとまとめなきゃな。
役割 | IP |
---|---|
認証サーバ | 192.168.1.2 |
ファイルサーバ | 192.168.1.3 |
LDAPのbasednは「dc=example,dc=com」、root dnは「cn=Manager,dc=example,dc=com」。
/export以下を公開する。
ユーザーエントリに対してobjectClass「automount」を追加できるように スキーマファイルを修正する。
--- /etc/openldap/schema/redhat/autofs.schema.orig 2004-08-06 17:57:40.000000000 +0900 +++ /etc/openldap/schema/redhat/autofs.schema 2004-08-06 17:58:28.000000000 +0900 @@ -13,7 +13,7 @@ EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -objectclass ( 1.3.6.1.1.1.1.13 NAME 'automount' SUP top STRUCTURAL +objectclass ( 1.3.6.1.1.1.1.13 NAME 'automount' SUP top AUXILIARY DESC 'An entry in an automounter map' MUST ( cn $ automountInformation ) MAY ( description ) )
autofs用にエントリの追加を行う。
# cat autofsinit.ldif dn: ou=auto.master,dc=example,dc=com objectClass: top objectClass: automountMap ou: auto.master dn: cn=/home,ou=auto.master,dc=example,dc=com objectClass: organization objectClass: automount o: /home cn: /home automountInformation: ldap://192.168.1.2/ou=Users,dc=example,dc=com # ldapadd -x -D 'cn=Manager,dc=example,dc=com' -W -f autofsinit.ldif
各ユーザエントリに対してautomount用のAttributeを追加する。この例ではユーザdomainuserに対する処理を行っている。
# cat addatribute dn: uid=domainuser, ou=Users, dc=example,dc=com changetype: modify add: objectClass objectClass: automount - add: automountInformation automountInformation: 192.168.1.3:/export/home/domainuser # ldapmodify -x -D 'cn=Manager,dc=example,dc=com' -W -f addatribute
/etc/exportsに以下の行を追加。
/export 127.0.0.1/255.255.255.0(rw,sync,no_root_squash) /export 192.168.1.0/255.255.255.0(rw,sync,no_root_squash)
あとは関連サービスを起動させる。
# /etc/init.d/portmap start # /etc/init.d/nfs start
authconfigでLDAPサーバ認証をするように設定し、 /etc/nsswitch.confのautomountの項目にldapがあるか確認しておく。
autofsのバージョンを確認する。
# /usr/sbin/automount --version Linux automount version 4.1.2
FC1などにある3.x系はautomountの書式が異なり「//ldaphost/basedn」ではなく 「ldaphost:basedn」という形をとるので注意。 その場合は新しいものをいれればいい。
# yum remove autofs # cd /usr/local/src # wget http://www.kernel.org/pub/linux/daemons/autofs/v4/autofs-4.1.3.tar.gz # tar zxf autofs-4.1.3.tar.gz # ./configure # make # make install
autofsを起動し、マウントポイントを確認する。
# /etc/init.d/autofs start # /etc/init.d/autofs status Configured Mount Points: ------------------------ /usr/sbin/automount --timeout=60 /home ldap //192.168.1.2/ou=Users,dc=example,dc=com
これで終了。
最初マウントするときにやたら時間がかかる現象に見舞われた(1分30秒とか)。そのときのログは 以下のようなもの。
Aug 7 15:55:56 localhost kernel: portmap: server localhost not responding, timed out Aug 7 15:55:56 localhost kernel: RPC: failed to contact portmap (errno -5).
これはクライアント側で
を実行していなかったのが原因だった。
文句なしの試合展開で危なげなく優勝。いやぁ、楽しかった。
発表資料を眺めるに、
あたりが面白そう。GroovyはJava VM上で動くといった程度のことは知っていたけど、もう少し 深い部分まで手を出してみたいかな。
LDAPのディレクトリツリーにアクセスして属性をいじったりする時には、 LDAP Browser/Editorを使っているのだけど やっぱりシェル上で簡単にやる手段があると便利かなということで Ruby/LDAPを使って簡単なプログラムを組んでみる。 ldapmodifyもあるけれど、RubyからLDAP使えるとなにかと便利ではないかということで勉強がてらに。
LDAPにおける厳密な意味などは考えず、シェルを模して「cdで動きlsで一覧表示」といったインターフェースを 持たせる。さくさくと100行程度で作れてしまうんだからすごい。*1
ダイナミックリンクライブラリによる外部フィルタを実現しようと思ってやってみたけど、 どうしても
estindex: no valid function in estfilter.so
というようになってしまう。
WindowsからLinuxサーバのファイルにアクセスするにはSCPを使うのが一番手っ取り早いけれど、 WebDAVを使えばシームレスにアクセスできる。もちろん同一ネットワークならSambaによる ファイル共有になるだろうけど、それ以外ならSSL経由のWebDAVが今の時点では一番よいと思う。
ただ、WebDAVアクセスを行うとApacheの実行権限でファイルが書き込まれるため 個人用にサーバを新しく立ててみた。*1
configure時にprefixを適切に設定する以外には特に注意点はなし。
$ "./configure" \ "--with-layout=Apache" \ "--prefix=/home/kazuki/httpd" \ "--with-mpm=worker" \ "--enable-mods-shared=all" \ "--enable-deflate" \ "--enable-so" \ "--enable-ssl" \ "--disable-asis" \ "--disable-auth_anon" \ "--disable-auth_dbm" \ "--enable-dav" \ "--enable-dav-fs" \ "--disable-imap" \ "--disable-status"
@ITの記事をなぞればOK。
$ cd ~/src $ wget http://webdav.todo.gr.jp/download/mod_encoding-20020611a.tar.gz $ wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616 $ tar zxf mod_encoding-20020611a.tar.gz $ cp mod_encoding.c.apache2.20040616 mod_encoding-20020611a/mod_encoding.c $ cd mod_encoding-20020611a/lib $ ./configure $ make $ su -c 'make install; /sbin/ldconfig' $ cd .. $ ./configure --with-apxs=~/httpd/bin/apxs $ make $ gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook $ make install
変更したのは
あたり。
WebDAVに関する設定は
LoadModule encoding_module modules/mod_encoding.so LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so <IfModule mod_encoding.c> EncodingEngine on NormalizeUsername on SetServerEncoding UTF-8 DefaultClientEncoding JA-AUTO-SJIS-MS SJIS AddClientEncoding "cadaver/" EUC-JP </IfModule> <Location /> deny from all </Location> Alias /dav "/home/username/" <Location /dav> allow from all DAV on <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> AuthType Basic AuthName "WebDAV" AuthUserFile /home/username/.htpasswd-webdav Require valid-user </Limit> </Location> DAVLockDB /home/username/httpd/var/DAVLock
修正が必要なのは
あたり。
これで準備は終わったので起動する。同梱の起動スクリプトは一般ユーザーからでは使えないようなので apachectlから。
$ ~/httpd/bin/apachectl -D SSL -k start
WindowsXPだったら[マイネットワーク]->[ネットワークプレースの追加]からWeb Folderを追加できる。 が、それでは使い勝手が悪いので「net use」を使ってドライブとして割り当てよう、と。
> net use z: https://host:nn/dav システム エラー 67 が発生しました。 ネットワーク名が見つかりません。
……えー。どうやらhttp://host/という形でないとだめらしい。http://host:port/ですらだめ。 Web Folderでは問題なく使えるのに。ドライブレターもらえないとまるで使えないのでがっくり。
もう一つバグ修正。<kkstyle-1.2.tar.gz> 最初キャッシュがあるのを忘れていて、ファイルを入れ替えても直らないのであせった。
*1 このあたりはperchildに期待だなぁ
見たことあるようなないような、そんな感じの映画。 以前機会*1があったときに見逃したのだけど、 衛星放送でやっていたのでのんびり鑑賞。で、どうやら見ていないという結論に至りました。 (たぶんPart3は見てる。)
今日から三夜連続ですべてやってくれるようなので楽しみです。
*1 研究室で夜通し上映
今まで何度か挑んでみるもその度に跳ね返されてきた「継続」。勉強しても実際に 使える場面っていうのは非常に限られると思うけど、こういった概念というものは 知っているのとそうでないのとでは全然違うんじゃないかなーと思っているので 発作的にやりたくなる。
と、w.l.o.g.の2004/08/10で 解説されているのを見つけたので再度チャレンジ。
柔道は谷選手2連覇、野村選手3連覇。「すごー」としか言いようがない。 画面から緊迫感がひしひしと伝わってきて、なんだかこっちまで緊張してたし。
ここのところやたらと眠気が襲ってくる。1日13時間とか平気で寝てますよ。
ネットワークウォークマンやらCLIEやらで縁のあるSony製ソフトウェア。 もともと使っていた1.1では操作性の悪さや動作の重さなど少しも評価できるものがなかったが、 バージョンあげれば改善されるかなーと2.0にアップデートしてみた。が……はっきりいってさらに 使いづらくなってる。
特に気になったのは、
Sony製プレイヤー使うとするとこれしか選択肢がないというのがつらい。 自分の使い方だとHi-MDはかなり理想のスタイルだけど今のままなら絶対買う気しないしな。
開始10分までに2失点は痛い。試合内容はそんなに悪くなかっただけに、 ここぞというときにきっちり決めるイタリアのうまさが逆に際だったような。
それより井原の解説はいいね。武田も好きだけど。
fsfsどんなかなーと 思って試してみた。サーバ側のconfigureオプションはこんな感じ。
$ "./configure" \ "--prefix=/usr/local/subversion" \ "--with-apr=/usr/local/httpd" \ "--with-apr-util=/usr/local/httpd" \ "--with-apxs=/usr/local/httpd/bin/apxs" \ "--with-ssl"
fsfsは1リビジョンごとに(直前のリビジョンとの差分が書かれている)1つのファイルを作っているっぽい。 ということは、CVSとは逆にHEADを取り出すときが一番処理が必要になるのかな?ちなみに、作業コピー上で ディレクトリ作ったときにリポジトリ側にもディレクトリが作られるなんて事はなく、純粋に1リビジョン1ファイル。 とはいえ、loadとdumpでシステムを好きなときに変更できるようので *1 純粋に選択肢が増えたというだけでも無条件に評価できるんではないかと。
ただ、いざというときに何とかデータ救出できそうな(気がする)感はあまりない。ファイルベースということで 少し期待していたけれどこれはしょうがないんだろうな……。
Windows(Cygwin)上ではクライアントに徹する。Cygwin固有の問題もあったりして最終的なものは以下のようになった。 httpd-2.0.50/srclib/{apr,apr-util}持ってきた後、
$ "./configure" \ "--prefix=/usr/local/subversion" \ "--without-berkeley-db" \ "--enable-all-static" \ "--with-ssl"
手元の環境ではパッケージがいくつか足りなかったので必要なものを入れる。試行錯誤しながらやったので 最低限どれが必要かはまだ不明。
*1 svnadmin dump ~/repos-fsfs|svnadmin load ~/repos-db
いよいよ明日発売ですね。大学行ったついでに生協で買おうかなと思っていたけど、 さっき発作が起きて急遽早朝販売で手に入れることに決定。
それから調べはじめて、自宅近くの売っている店を特定するまで数分。ネットは偉大だ。