2008年06月30日

●10,000Hit御礼

当ブログを立ち上げてから約2年半になりました。
おかげさまで今月10,000hitを達成することができました。
この場を借りて御礼申し上げます。

元々当ブログは私の所属する組織の技術者及びパートナー企業の方々への
情報共有の場として設けたものですが、特に縛りを設けず広く公開
しているものです。

しかしながら上記の通り私、乃至は私を中心とするグループ間の情報共有を
達成することのみが目的であるため、広くご利用されることを想定して
コンテンツを作成・メンテナンスしておりません。

特に私事ですが最近開発現場を離れたことにより、記事が開発よりのものから
運用よりの内容へ変わってきております。
過去の記事、特にjava、struts、tomcatの情報は記事を書いた時点
(だいたい2年前)のものであり、現在から見ると古い情報となっております。
当然それらweb技術というものは確実に革新しており、またセキュリティホール等
不具合についても常に修正され続けております。

本ブログを閲覧される方はこれらリスクを踏まえてくださいますよう
お願いいたします。
*立さんやN*Tさん等、頻繁にご利用いただいていて感謝しておりますが、
技術者として当記事のみを鵜呑みにされることが無きようご注意くださいませ。

2008年05月30日

●Subversion/trac プロジェクト作成

コピペ企画その2。

Subversion プロジェクトの作成方法

1.svnadminコマンドでプロジェクト作成
# svnadmin create /var/svn/test_project

2.アクセス権を変更して、httpd実行ユーザーからアクセス可能にする
# chown -R apache:apache /var/svn/test_project

以降の操作は、subclipse/tortoisSVNからやった方が楽。(trunk/tags/branchesの作成も含めて)

TRAC プロジェクトの作成方法

1.trac-adminコマンドでプロジェクト作成
# trac-admin /var/trac/test_project initenv

Trac will first ask a few questions about your environment
in order to initalize and prepare the project database.

Please enter the name of your project.
This name will be used in page titles and descriptions.

Project Name [My Project]>プロジェクト名を入力
※上記までのプロジェクト名を略称とすれば、ここだけは正式名称
(例:initenvのプロジェクト名→「test_project」 Project Nameのプロジェクト名→「Test Project System」

 Please specify the connection string for the database to use.
 By default, a local SQLite database is created in the environment
 directory. It is also possible to use an already existing
 PostgreSQL database (check the Trac documentation for the exact
 connection string syntax).

Database connection string [sqlite:db/trac.db]>Enterキーを入力

Please specify the type of version control system,
By default, it will be svn.

If you don't want to use Trac with version control integration,
choose the default here and don't specify a repository directory.
in the next question.

Repository type [svn]>svn

Please specify the absolute path to the version control
repository, or leave it blank to use Trac without a repository.
You can also set the repository location later.

Path to repository [/path/to/repos]>/var/svn/test_project

Please enter location of Trac page templates.
Default is the location of the site-wide templates installed with Trac.

Templates directory [/opt/trac/share/trac/templates]>Enterキーを入力

2.作成プロジェクトのアクセス権変更
# chown -R apache:apache /var/trac/test_project

3.リポジトリ文字コードをSJISに設定 + メール通知機能設定 vi /var/trac/test_project/conf/trac.ini
[trac]
default_charset = iso-8859-15

default_charset = japanese.shift_jis

[notification]
always_notify_owner = true
always_notify_reporter = false
always_notify_updater = true
mime_encoding = base64
smtp_always_bcc =
smtp_always_cc =
smtp_default_domain = メールドメイン(@抜き)
smtp_enabled = true
smtp_from = fromアドレス
smtp_password =
smtp_port = 25
smtp_replyto = リプライアドレス
smtp_server = localhost
smtp_subject_prefix = __default__
smtp_user =
use_public_cc = false
use_short_addr = false
use_tls = false

httpdの再起動は不要

4.このサイトの管理者を設定
# trac-admin /var/trac/test_project permission list sugi1149

管理者にさせたいユーザーに、TRAC_ADMIN権限がなかったら追加。

# trac-admin /var/trac/test_project permission add sugi1149 TRAC_ADMIN

もう一度
# trac-admin /var/trac/test_project permission list sugi1149
で、TRAC_ADMIN権限が付与されたことを確認

5.このサイトでのWebAdminプラグイン利用設定 vi /var/trac/test_project/conf/trac.ini
[components]
webadmin.* = enabled
※末尾に追加する

6.resolution属性日本語化
# mkdir /opt/trac/sql
# cd /opt/trac/sql

# vi resolution.sql
UPDATE enum SET name = '完了' where type = 'resolution' AND value = 1;
UPDATE enum SET name = 'チケットが誤り' where type = 'resolution' AND value = 2;
UPDATE enum SET name = '修正しない' where type = 'resolution' AND value = 3;
UPDATE enum SET name = '他のチケットと重複' where type = 'resolution' AND value = 4;
UPDATE enum SET name = '内容が再現できない' where type = 'resolution' AND value = 5;

# sqlite3 /var/trac/test_project/db/trac.db < resolution.sql

※その他日本語化はwebadminで。

7.httpd 再起動
# service httpd restart

これで、サイト管理者はログインするとWebAdminツールが使えるようになる。

2008年05月27日

●CentOS5.1にSubversionとtracをインストール

ネタが無いので、自分のマシンの中から過去に作った資料を引っ張り出してコピペ。
numeriサルベージ方式

1.yumで必要なパッケージをインストール
yum install httpd subversion mod_dav_svn mod_python mod_ssl

2.tracは別リポジトリからインストール
# wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm

無用の混乱を避けるため、デフォルトでは有効にならないように設定ファイルを修正する

# vi /etc/yum.repos.d/rpmforge.repo


enabled = 1
   ↓
enabled = 0   ←デフォルトでは有効にしない

RPM の署名を検証するためのキーを導入
wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt
yum --enablerepo=rpmforge install trac

3.Subversionの設定
/etc/httpd/conf.d/subversion.conf


LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

<Location /svn>
DAV svn
SVNParentPath /var/svn

AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/httpd/dav_trac_svn.passwd
Require valid-user
</Location>

/etc/httpd/conf.d/trac.conf


<Location /trac>
SetHandler mod_python
PythonDebug On
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/trac
PythonOption TracUriRoot /trac
SetEnv PYTHON_EGG_CACHE /var/trac/.python-eggs
</Location>

# authentication : only login
<LocationMatch "^/trac/[^/]+/login">
AuthType Basic
AuthName "trac"
AuthUserFile /etc/httpd/dav_trac_svn.passwd
Require valid-user
</LocationMatch>

4.Subversion、trac共通ユーザーアカウント作成
# htpasswd -mc /etc/httpd/dav_trac_svn.passwd sugi1149

「c」オプションはファイル作成のため。2人目以降は「-m」のみでOK

5.Subversion、trac のためのディレクトリ作成
# mkdir /var/svn
# chown -R apache:apache /var/svn
# mkdir /var/trac
# chown -R apache:apache /var/trac

6.日本語化のために一旦tracをアンインストール
# yum -y remove trac

7.日本語版tracを展開
# cp trac-0.10.4-ja-1.zip /tmp
# cd /tmp
# unzip trac-0.10.4-ja-1.zip
# cd trac-0.10.4-ja-1
# mkdir /opt/trac
# python ./setup.py install --prefix=/opt/trac/

8.シンボリックリンクをはる
# ln -s /opt/trac/bin/trac-admin /usr/bin/trac-admin
# ln -s /opt/trac/bin/tracd /usr/bin/tracd
# ln -s /opt/trac/lib/python2.4/site-packages/trac /usr/lib/python2.4/site-packages/trac
# ln -s /opt/trac/share/man/man1/trac-admin.1 /usr/share/man/man1/trac-admin.1
# ln -s /opt/trac/share/man/man1/tracd.1 /usr/share/man/man1/tracd.1
# ln -s /opt/trac/share/trac /usr/share/trac

9.tracプラグイン利用の準備
ez_setup.pyをインストール
# cp ez_setup.py /tmp
# cd /tmp
# python ez_setup.py

10.trac WebAdminプラグインのインストール
# cp TracWebAdmin-0.1.2dev_r4240-py2.4.egg /tmp
# cd /tmp
# easy_install TracWebAdmin-0.1.2dev_r4240-py2.4.egg

11.httpd 起動
# chkconfig httpd on
# service httpd restart

2008年03月24日

●Winbind で完全に Samba と Active Directory を統合

先日、Sambaの認証をActive Directoryと統合しましたが、
今回はもう一歩先へ踏み込んでみたいと思います。

前回までの環境の場合、2つ問題点が残ります。

1.せっかくADと統合したのに、Samba機に対して
    ADユーザーと同名のOSユーザーを作成しなければならない。

2.認証はADでも、ファイル・ディレクトリのアクセス権の制御は
    Linuxユーザー・グループでおこなわれてしまう。


Windows機から作成したディレクトリのアクセス権を参照したところ。


なので今回は上2つを解消するのが目的です。
具体的にはユーザー・グループの情報もDCから頂いて、
Samba上での動作も全て一本化することです。

まず smb.conf に、Winbind認証のための設定をおこないます。
(前回設定部分の表記は省略)

/etc/samba/smb.conf
allow trusted domains = no
idmap backend = rid:TEST-KEIRI-PDC=10000-50000
idmap uid = 10000-50000
idmap gid = 10000-50000
winbind cache time = 15
winbind separator = @
winbind use default domain = yes
template homedir = /home/%U
template shell = /bin/false
encrypt passwords = yes
obey pam restrictions = yes


LinuxがWinbindを経由してActive Directoryから
アカウント情報(ユーザー・グループ)を
取得できるよう、nsswitch.conf を修正します。

/etc/nsswitch.conf
passwd: files winbind #修正
shadow: files winbind #修正
group: files winbind #修正


ユーザーにホームディレクトリを使用させる場合、
アクセス時に/home下にディレクトリが存在しなかったら、
自動で作成されるよう、system-auth を設定します。
ホームディレクトリを使用しない場合この設定は不要です。
(smb.confから[homes]の設定もとっぱらっちゃいましょう)

/etc/pam.d/system-auth
session    required        pam_mkhomedir.so skel=/etc/skel umask=0022
Winbindを起動します。自動起動の設定もしておきましょう。 sambaも再起動しておきましょう。
# service winbind start(Enterキー)
# service winbind status(Enterキー)
winbind (pid xxxxx xxxxx) is running...
# chkconfig winbind on
# service smb restart

設定は以上です。

まず、winbindが正常に動作しているか確認しましょう。
wbinfo -t(Enterキー)
checking the trust secret via RPC calls succeeded
では、ADに登録されているユーザーを取得できるか 確認してみましょう。
# wbinfo -u(Enterキー)
administrator
guest
・・・
・・・
・・・
sugi1149
・・・
・・・
・・・
ずらずらっと、ADのユーザーが表示されればOKです。 同様にグループも取得できるか確認してみましょう。
# wbinfo -g(Enterキー)
domain computers
domain controlers
schema admins
・・・
・・・
domain admins
domain users
・・・
・・・
ユーザーsugi1149が所属しているグループを確認してみましょう。
# id sugi1149
uid=11108(sugi1149) gid=10513(domain users) 所属グループ=10513(domain users),14112(jyosys2)

よさげですね。
Windowsからアクセスしてみると・・・お、入れましたね。
Linux側では一切 useradd コマンドが不要になったわけです。

試しにWindowsからファイルを1個こさえてプロパティを見てみると・・・

Linux端末からこのファイルを見てみると・・・
# ls test_dir
合計 0
-rwxr--r-- 1 sugi1149 domain users 0  3月  19  14:51  新規テキスト ドキュメント.txt
続きを読む "Winbind で完全に Samba と Active Directory を統合"

2008年03月19日

●Samba3.0 を Active Directoryドメイン に参加させる

今回はLinuxにインストールされているSamba3.0を、
既存Active Directoryドメインのメンバにする検証です。
Sambaが既存ADドメインに参加することにより、
Sambaサーバーへの認証をADと一本化するのが狙いです。
つまりADドメインに参加できるユーザーは、自動的に
Sambaにアクセスできる、ということですね。

<Linux側>
OS:CentOS5.1
Samba:3.0.28-1(ディストリ同梱 + yumでアップデート)
FQDN:sugi1149-li-01.test.co.jp

<ActiveDirectory>
ドメイン名:test.co.jp
ドメインNetBIOS名:TEST-KEIRI-PDC
タイプ:Windows2000ネィティブ
DC機FQDN:test-keiri.test.co.jp
DC機OS:Windows 2000 Server

事前準備といたしましては、色々名前解決が必要になってきますので、
Linux機のリゾルバを、DC機と同じDNSサーバーを指定するようにしておきます。

resolv.conf
search test.co.jp
namaserver 172.16.1.1

また、ADではKerberos認証が機能するため、クライアント(Linux機)と
サーバー(DC機)の時刻が同期している必要があります。
ま、NTPでよろ。


次、Kerberos認証のために /etc/krb5.conf を編集します。

/etc/krb5.conf
(略)
[libdefaults]
default_realm = TEST.CO.JP #変更

(略)

[realms]
#追加
TEST.CO.JP = {
    kdc = test-keiri.test.co.jp
}
#他のはコメントアウト
(略)

[domain_realm]
#追加
.test.co.jp = TEST.CO.JP
test.co.jp = TEST.CO.JP
#他のはコメントアウト
(略)

Kereros Realm名(ADドメイン名)は必ず大文字でなければなりません。
DC名は小文字。FQDNで。
[domain_realm]のとこが、ADドメイン名とKereros Realm名の
マッピング箇所となります。
ここもKereros Realm名は大文字です。


次、/etc/samba/smb.conf を編集します。

/etc/samba/smb.conf
[global]
    workgroup = TEST-KEIRI-PDC
    dos charset = CP932
    unix charset = UTF-8
    display charset = UTF-8
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    veto files = /lost+found/aquota.group/.bash*/.canna/.gtkrc/.ssh/
    hide files = /lost+found/aquota.group/.bash*/.canna/.gtkrc/.ssh/
    realm = TEST.CO.JP
    security = ADS
    password server = test-keiri.test.co.jp
    disable netbios = Yes
    local master = No
    domain master = No
    hosts allow = 127., 172.16.
    cups options = raw
[homes]
    comment = Home Directories
    read only = No
    browseable = No

注意すべきは、「netbios name」のエントリをコメントアウトすることです。
「netbios name」が設定されていると動作しない場合があるようです。
(詳細未確認)

「workgroup」には、ADドメインのNetBIOS名を指定します。
「realm」にADドメイン名を指定します。大文字が無難。
「security」にADSを指定。これでADのKerberos認証となります。


最後に、/etc/hosts を編集します。

/etc/hosts
127.0.0.1 sugi1149-li-01.test.co.jp sugi1149-li-01 localhost.localdomain localhost
ここで自ホストのFQDNを指定しておかないと、後述のAD接続でエラーとなりました。


ここまで準備ができたら、ADドメインに参加してみましょう。
まず、特権ユーザー(Administrator)でADにアクセスしてチケットを
発行してもらいます。

# kinit administrator@TEST.CO.JP(Enterキー)
Password for administrator@TEST.CO.JP:XXXXXX

「Password for administrator@TEST.CO.JP:」とパスワードの入力を
求められますので、続けてAdministratorのパスワードを入力して
Enterキーを押します。
適切なパスワードの場合、画面には何も表示されません。
間違ってると怒られます。

チケットが取得できたら晴れてADドメインに参加できます。

# net ads join -S test-keiri.test.co.jp -U administrator%XXXXXX(Enterキー)
Using short domain name -- TEST-KEIRI-PDC
Joined 'SUGI1149-LI-01' to realm 'TEST.CO.JP'


やりました。DC機の「Active Directory ユーザーとコンピュータ」の
「Computers」で確認すると、しっかりLinux機が追加されている筈です。

2009/02/04 追記

DC機がWindows Server 2003の場合、
net rpc join ・・・
にしないと参加できませんでした。

Windows側からアクセスをおこなうADユーザーのために、Linux機に
OSユーザーを用意しておく必要があります。

# useradd -m sugi1149

上記例は、「sugi1149」をOSユーザーとして登録しています。
勿論「sugi1149」は、既にActive Directory側でもユーザーとして
存在しているものとします。(sugi1149@test.co.jp)
「-m」オプションは、/home下にHOMEディレクトリを作成する
オプションです。
smb.confの[homes]設定に対応ですね。

ユーザー設定はこれだけ。認証はADでおこなわれるので、
OSユーザーに対してパスワード設定(passwd)の必要はありません。
当然、smbpasswdファイルの登録なんかも要りません。


これで全部完了!
ADドメインに属するWindowsマシンから、設定済みユーザー
(上記例:sugi1149@test.co.jp)でログオンして、
そのままSambaサーバにアクセスすると・・・
ユーザー名/パスワードを求められることなく入れます。
ふーーー。長かった。

2007年12月06日

●Symantec Backup Execのプレ・ポストコマンド

あんまりにもネタがないので、今回はマイナーなお話を。

先日Symantec社のバックアップ製品「Symantec Backup Exec」を
利用する機会がありました。
スケジュール化されたバックアップジョブを実行してくれる
まぁありがちな製品なのですが、今回の要件は「バックアップの
前後にある処理をおこない、その成否により以降の処理続行を
制御する・またログを残す」というものでした。

要するに事前処理成功の場合のみバックアップ開始。
バックアップ成功の場合事後処理開始。
事前処理・バックアップ・事後処理それぞれの成否ログを残す、
というのが要件なわけです。

「Symantec Backup Exec」には「プレコマンド」「ポストコマンド」
という機能が事前・事後処理用に用意されており、
ここで外部プログラムを指定できます。
また外部プログラムの戻り値を判断してログを残したり、
以降の処理続行・中断を制御してくれます。

おぉいいじゃんいいじゃんと思ったのですが・・・
この戻り値というのが「OSのリターンコード(ERRORLEVEL)」じゃ
ないといけないんですねー。

外部プログラムはVisual Basicで作成するつもりだったのですが、
VBって終了時にこれ戻せないんですよ。

悩むこと数分。「そういえばVB Scriptってリターンコード戻せる
んじゃなかったっけ?」

というわけでプレ・ポストコマンド用のVBアプリケーション(.exe)を COMオブジェクト(ActiveX DLL)に作り直し、 VB Scriptファイル(.vbs)を作成してその中からCOMオブジェクトを ロード・実行するようにしました。 COMオブジェクトの処理内で判断した成否は、パラメータとして (setter/getterじゃなくてlet/getだっけ?)vbsが取得し、 そのままvbsファイルのリターンコードに指定します。
WScript.Quit(リターンコード)

あとは「Symantec Backup Exec」でプレ・ポストコマンドとして
このvbsファイルを指定すれば・・・

だめでした。vbsファイルを実行可能ファイルと判断してくれないみたい。
え〜、と思いつつさらにバッチファイル(.bat)を作成し、
この中からvbsファイルを実行し、vbsファイルのリターンコードを
そのままバッチファイルのリターンコードにします。
で、「Symantec Backup Exec」でプレ・ポストコマンドとして
バッチファイルを指定・・・
やっと動作しました。成否判断も
COMオブジェクト→vbsファイル→バッチファイル→Backup Exec
と正しく伝わっています。
やれやれ。