大阪&神戸に行ってきました。

所用で金土と大阪に行き、土日と神戸の祖母の家に帰ってました。二日以上、一人で外泊してくるのは一昨年DebConfでスペイン行った以来です。

金土はクロスフィード梅田で合宿だったのですが、討議室が四方ホワイトボードで、紙を持参すれば一つは印刷可能 1 、インターネットはRJ-45の口があったので、PlanexのMZK-SA150Nが大活躍でした 2 。企業で借りるなら割とリーズナブルかもしれません。設備はかなり良いです。コミュニティで借りるにはちと高いですが。宿泊施設もあり、ホテルなみの部屋でかなり快適でした。

土曜のお昼過ぎに解散して、その足で宝塚線の某所へ 3 。そこで車で来た母、伯父、祖母と合流し、祖母宅へ。久々の神戸はセミがかなり鳴いていてうるさいくらいでしたが、実は今年は鳴き出すのは遅くてつい最近だそうな。やはり台風のあとちょっと寒いからなのでしょうね、東京でセミの鳴き声あまり聞かないのも。

日曜は母と途中大阪まで一緒に帰り 4 、関西のDebianな方々と昼飯食べて、キーサインして帰ってきました。

意外と過密スケジュールだったなぁ。明日は起きれるだろうか。 5

1

有料で印刷が普通ですよ。

2

これってもうAmazonで販売してないんですね…。

3

名古屋より西の人には有名なところで、関西の人はすぐピンと来ますね。

4

母はそのまま新大阪から実家に帰宅。

5

ならさっさと寝ろ、ワシ。

MacBookPro 8,2 15”をDebian Sid on VirtualBoxで妥協した日。

2月に購入したMacBookPro 8,2は、むろんSidをインストールして主にカーネルビルドに使っていました。というかカーネルビルドにしか使ってませんでした。Debianのインストールそのものは問題なく、Core i7でメモリ8GBで、SSDに換装していた環境はカーネルビルドが今までに体感したことがないくらい速くキャッキャ喜んでいました。がDebian Sid on VirtualBox/MacBookPro、X Window Systemを使えない、という問題が…。ATI Radeon HD 6490Mに対応したビデオドライバがなく、フレームバッファを使わないと、/dev/fb0が無いためにXを起動できず、フレームバッファを使うと砂嵐になってしまい、なんもできず、という状況。Linux 3.0.0でも結局プロプラなデバイスドライバ頼みになってしまうこの状況はなんとかしたいなぁと思っていたら、第三世代のMacBook Airもリリースされて、このままではもったいない、ということで、妥協する事にしました。

妥協とはMac OS X上で、Debianを使うことです。OS X Snow Leopardをインストールし直し、Lionにアップグレード。その後でVirtualBoxをインストールして、VirtualBoxでSidを使うことにしました。割り当てリソースは、3GBメモリ、4CPU、ディスク30GB、ビデオメモリ128MB。今までメインで使っていたMacBook 5,2よりも部分的には仮想マシンの方がハイスペックwww。この状態で、フルスクリーンモードで音も動画も速度的に問題なく、非常に快適です。もちろん、Debian側はawesomeを使っているのですが、シームレスモードにするとMod+数字でちゃんと仮想デスクトップを切り替えられる上、画面分割もちゃんと効くんですね。これは単にOS Xの画面にオーバレイしているだけだからっぽいですな。

こうしてだんだん妥協していくのかな、ワシ…。

SendmailからGmail経由でメールを送信する。

諸事情により久々にSendmailを触ることになり、Gmail経由でメール送信させるテストをしたのでその備忘録です。GmailまたはGoogle Apps経由で、他のドメインのメールアドレス宛にメールを送信する場合の例です。

sendmail.mc 1

divert(-1)dnl
divert(0)dnl
define(`_USE_ETC_MAIL_')dnl
include(`/usr/share/sendmail/cf/m4/cf.m4')dnl
VERSIONID(`$Id: sendmail.mc, v 8.14.3-9.4 2010-09-21 11:05:34 cowboy Exp $')
OSTYPE(`debian')dnl
DOMAIN(`debian-mta')dnl
undefine(`confHOST_STATUS_DIRECTORY')dnl        #DAEMON_HOSTSTATS=
FEATURE(`no_default_msa')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl
define(`confPRIVACY_FLAGS',dnl`needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings')dnl
define(`confCONNECTION_RATE_THROTTLE', `15')dnl
define(`confCONNECTION_RATE_WINDOW_SIZE',`10m')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`access_db', , `skip')dnl
FEATURE(`greet_pause', `1000')dnl
FEATURE(`delay_checks', `friend', `n')dnl
define(`confBAD_RCPT_THROTTLE',`3')dnl
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`ratecontrol', `nodelay', `terminate')dnl
EXPOSED_USER(`root')dnl
LOCAL_DOMAIN(`example.org')dnl
define(`SMART_HOST', `smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
define(`CERT_DIR', `/etc/ssl/certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/ca-certificates.crt')dnl
define(`confCRL', `CERT_DIR/ca-certificates.crt')dnl
define(`confSERVER_CERT', `CERT_DIR/ca.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/ca.pem')dnl
define(`confCLIENT_CERT', `CERT_DIR/ca.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/ca.pem')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
FEATURE(`authinfo',`hash /etc/mail/authinfo')dnl
FEATURE(genericstable,DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`genericstable')
GENERICS_DOMAIN_FILE(MAIL_SETTINGS_DIR`genericsdomain')
FEATURE(`generics_entire_domain')
include(`/etc/mail/m4/dialup.m4')dnl
include(`/etc/mail/m4/provider.m4')dnl
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl

sendmail.mcを変更したら、makeを実行してsendmail.cfを更新し、sendmailを再起動します。

$ sudo make
$ sudo /etc/init.d/sendmail restart

authinfoで指定した、/etc/mail/authinfoは、

AuthInfo:smtp.gmail.com "U:smmsp" "I:user" "P:password" "M:PLAIN"

のように作成し、

$ sudo bash -c "makemap -r hash /etc/mail/authinfo.db < /etc/mail/authinfo"

と実行します 2

これが、Google Appsを使う場合はauthinfoで指定している”I:”と”P:”をGoogle Appsのアカウント、パスワードにすればOKです。

AuthInfo:smtp.gmail.com "U:smmsp" "I:user@example.org" "P:password" "M:PLAIN"

てな具合です。

$ date | mail -s test hoge@gmail.com

とすると、上記の例では、Gmailならuser@gmail.comから、Google Appsならuser@example.orgから、hoge@gmail.com宛にメール配送されます。

修正版

もちっといろいろやってみたら結構不要なのが多かったので、以下に修正版を掲載しておきます。

divert(-1)dnl
divert(0)dnl
define(`_USE_ETC_MAIL_')dnl
include(`/usr/share/sendmail/cf/m4/cf.m4')dnl
VERSIONID(`$Id: sendmail.mc, v 8.14.3-9.4 2010-09-21 11:05:34 cowboy Exp $')
OSTYPE(`debian')dnl
DOMAIN(`debian-mta')dnl
undefine(`confHOST_STATUS_DIRECTORY')dnl        #DAEMON_HOSTSTATS=
FEATURE(`no_default_msa')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl
define(`confPRIVACY_FLAGS',dnl`needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings')dnl
define(`confCONNECTION_RATE_THROTTLE', `15')dnl
define(`confCONNECTION_RATE_WINDOW_SIZE',`10m')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`access_db', , `skip')dnl
FEATURE(`greet_pause', `1000')dnl
FEATURE(`delay_checks', `friend', `n')dnl
define(`confBAD_RCPT_THROTTLE',`3')dnl
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`ratecontrol', `nodelay', `terminate')dnl
EXPOSED_USER(`root')dnl
LOCAL_DOMAIN(`hoge.example.org')dnl
define(`SMART_HOST', `smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
define(`CERT_DIR', `/etc/ssl/certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/ca-certificates.crt')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
FEATURE(`authinfo',`hash /etc/mail/authinfo')dnl
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl

Gmailにリレーするだけなのに、サーバ証明書とかクライアント証明書は不要ですね、ハイ。あと、LOCAL_DOMAINで指定したドメインが、/etc/aliasesで設定するローカルアカウントのエイリアスのメールアドレスのドメインと同じだと、リレーされませんね。

1

$ egrep -v ‘^#|^dnl’ sendmail.mcの結果です。

2

authinfoのAuthInfo:smtp.gmail.comで、STARTTLS用のポートTCP/587を指定していませんが、RELAY_MAILER_ARGSで587を指定しているので不要です。

Linux Kernel 3.0で解決された問題。

昨日リリースされたLinux Kernel 3.0をMacBook 5,2でビルドしたら、認識されるディスプレイサイズがおかしい問題や、xrandrで外部出力が使えない問題が修正されていました。また、描画も若干シャープになった感じ。

そして、何よりの改善は、grubのオプションにnosmpを指定しなくても、ちゃんと起動できるようになったこと。でも、コアを1つしか利用できない問題自体は解決してないんですけどね。

[    0.068196] CPU0: Intel(R) Core(TM)2 Duo CPU     P7350  @ 2.00GHz stepping 0a
[    0.072003] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver.
[    0.072003] ... version:                2
[    0.072003] ... bit width:              40
[    0.072003] ... generic registers:      2
[    0.072003] ... value mask:             000000ffffffffff
[    0.072003] ... max period:             000000007fffffff
[    0.072003] ... fixed-purpose events:   3
[    0.072003] ... event mask:             0000000700000003
[    0.072003] NMI watchdog enabled, takes one hw-pmu counter.
[    0.072003] Booting Node   0, Processors  #1 Ok.
[    0.072003] smpboot cpu 1: start_ip = 9a000
[    5.147937] CPU1: Not responding.
[    5.148013] Brought up 1 CPUs
[    5.148016] Total of 1 processors activated (3980.07 BogoMIPS).

それでもこれはうれしいですね。とりあえず、Debian勉強会などで外部ディスプレイを使えないためにわざわざOS Xを使わなくてはいけない、という問題はなくなりました。その代わり、実はバックライトの調整ができなくなっているので、どっちがええだろうかねぇ。

コアを1つしか使えない問題の現状。

https://bugzilla.kernel.org/show_bug.cgi?id=13170

refit + grub-efi + nvidia binary => works and you have 2 cores, 3D and compiz

effect but it’s a real pain to change the brightness plus it’s a blob.

refit + grub-efi + nouveau WITH a kernel at least 2.6.38 => works like a charm

: 2 cores, 2D and you can change easily the brightness

rEFIt + grub-efi + nvidia binaryか、rEFIt + grub-efi + 2.6.38以上でnouveauを使えば、コア2個使えるようになっているっぽいです。しかしgrub-efi自体への切り替えがなぁ…。

ApacheでWebDAV + LDAPをグループ毎の権限別で利用する。

昨日の続きの備忘録としてメモ。lightyに比べるとApacheでWebDAV + LDAPを使うのは設定が結構めんどいのですが、まぁその分ちゃんとグループ毎に権限を分けられるのでよし。

モジュールの有効化

authnz_ldap, dav, dav_fs, dav_lock, encoding, ldap, sslをa2enmodコマンドを使って有効にします。

$ sudo a2enmod authz_ldap

以下同様なので省略。

LDAP + WebDAVの設定

/etc/apache2/mods-enabled/ldap.confに設定します。

diff --git a/apache2/mods-available/ldap.conf b/apache2/mods-available/ldap.conf
index 6d3b6d1..221ec90 100644
--- a/apache2/mods-available/ldap.conf
+++ b/apache2/mods-available/ldap.conf
@@ -1,8 +1,147 @@
+
+
+EncodingEngine on
+SetServerEncoding UTF-8
+NormalizeUsername on
+DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
+#DefaultClientEncoding UTF-8 CP932 EUCJP-MS
+AddClientEncoding "cadaver/" UTF-8
+AddClientEncoding "Microsoft .* DAV 1.1" ASCII CP932 UTF-8
+AddClientEncoding "Microsoft .* DAV" UTF-8 CP932
+AddClientEncoding "(Microsoft .* DAV $)" UTF-8 CP932
+AddClientEncoding "(Microsoft .* DAV 1.1)" CP932 UTF-8
+AddClientEncoding "Microsoft-WebDAV*" UTF-8 CP932
+AddClientEncoding "RMA/*" CP932
+AddClientEncoding "xdwin9x/" CP932
+AddClientEncoding "cadaver/" UTF-8 EUCJP-MS
+AddClientEncoding "Mozilla/" EUCJP-MS
+
+Alias /group1 "/var/www/group1/"
+<Location "/group1">
+       Options Indexes MultiViews FollowSymLinks
+        DAV On
+       SSLRequireSSL
+        Order allow,deny
+        Allow from All
+       AuthName "hoge"
+        AuthType Basic
+       AuthBasicProvider ldap
+       AuthzLDAPAuthoritative on
+        AuthLDAPURL ldap://ldapserver/ou=People,o=hoge,dc=example,dc=org?uid

+       AuthLDAPGroupAttribute memberUid
+       AuthLDAPGroupAttributeIsDN off
+        require ldap-group cn=group1,ou=Group,o=hoge,dc=example,dc=org
+       Require ldap-attribute gidNumber=20002
+       Satisfy all
+</Location>
+
+Alias /group2 "/var/www/group2/"
+<Location "/group2">
+       Options Indexes MultiViews FollowSymLinks
+        DAV On
+       SSLRequireSSL
+        Order allow,deny
+        Allow from All
+       AuthName "hoge"
+        AuthType Basic
+       AuthBasicProvider ldap
+       AuthzLDAPAuthoritative on
+        AuthLDAPURL ldap://ldapserver/ou=People,o=hoge,dc=example,dc=org?uid
+       AuthLDAPGroupAttribute memberUid
+       AuthLDAPGroupAttributeIsDN off
+        require ldap-group cn=executive,ou=Group,o=hoge,dc=example,dc=org
+       Require ldap-attribute gidNumber=20003
+       Satisfy all
+</Location>
(snip)
 <Location /ldap-status>
-    SetHandler ldap-status
-    Order deny,allow
-    Deny from all

-    Allow from 127.0.0.1 ::1
-#    Allow from 192.0.2.0/24
-    Satisfy all
+       SSLRequireSSL
+       SetHandler ldap-status
+        Order allow,deny
+        Allow from All
+       AuthName "hoge"
+               AuthType Basic
+       AuthBasicProvider ldap
+       AuthzLDAPAuthoritative on
+               AuthLDAPURL ldap://ldapserver/ou=People,o=hoge,dc=example,dc=org?uid
+       AuthLDAPGroupAttribute memberUid
+       AuthLDAPGroupAttributeIsDN off
+               require ldap-group cn=sysadmin,ou=Group,o=hoge,dc=example,dc=org
+       Require ldap-attribute gidNumber=20001
+       Satisfy all
 </Location>

日本語ファイル名の対応

  • 日本語ファイル名を有効にするため、EncodingEngine, SetServerEncoding, DefaultClientEncoding, AddClientEncodingの設定を行います

    • 日本語のディレクトリは作成、変更、削除はできるのに、日本語のファイル名のファイルは作成できません 1 。なんか設定間違っているのかな?

    • 実際のところ日本語のファイル名でファイルを作られるとコマンドラインで作業するのは非常にめんどいのでむしろ無効にしてしまおうかと思ってます

  • Windows XPで認証時にアカウントにFQDNが付加されてしまう問題を回避するためにNormalizeUsernameを有効に、ということでつけても、実際のところはうまくいかないので、WebDAVのアクセス用のURLの末尾に”?”を追記してもらうというワークアラウンド…。

WebDAVの設定。

  • DAV on

こんだけ。

LDAPまわり。

  • AuthBasicProvider ldapで認証プロバイダをLDAPに

  • AuthzLDAPAuthoritative onでLDAPでの認証に失敗した場合に他の認証手段を使わせないように

  • AuthLDAPURL ldap://vmldap-back/ou=People,o=hoge,dc=example,dc=org?uid で認証用のLDAPのURLを指定

  • AuthLDAPGroupAttribute memberUidを指定して、LDAPのグループの属性memberUidをuidとマッチングさせる

  • AuthLDAPGroupAttributeIsDN offでクライアントのDNを使用

  • require ldap-group cn=group1,ou=Group,o=hoge,dc=example,dc=org でgroup1グループのメンバーにアクセスを許可

  • Require ldap-attribute gidNumber=20002 でgroup1のgidNumberを指定

その他。

  • SSLRequireSSLでSSLでのアクセスを強制

  • Satisfy allはデフォルトallなので不要ですが、アクセス制限(Order, Allow)のところを、例えばOrder deny,allowとDeny from Allにしている場合、LDAPの認証された場合のみアクセスを許可する、ということをやろうとすると、Satisfy anyにする必要があります。が、その場合、SSLRequestSSLを設定していても、httpでのアクセスも許可されてしまうので要注意 2

SSLの鍵と証明書の指定は、/etc/apache2/sites-available/default-sslのSSLCertificateFile, SSLCertificateKeyFileで設定してください。

“Require ldap-attribute gidNumber=xxxxx”の設定が必要なことに気づかなくて結構手間取った…。orz

参考文献

1

Squeeze, Apache 2.2.16, mod-encoding 20040616-5。

2

Satisfy anyの仕様を考えたらそりゃそうなんだけど。