WebDAV

2009/02/16

Ubuntu8.04でSSLのWebDAVに接続する

UbuntuでWebDAVを接続するときにはメニューの「場所」→「サーバへ接続」を使用すれば簡単に接続できます。
ちなみにFTPもこれを使えば簡単に接続できます。

我が家のWebDAVサーバはVineLinuxでSSLを使用したWebDAVを構築しているのですが、Ubuntu8.04で接続する時にけっこうハマったのでプチメモです。

なぜハマったかというと、Ubuntu7.10時代は「サーバへ接続」に「WebDAV(HTTPS)」という項目があったのに、8.04では無くなっているからです。(バグっぽい?)
しかも私は7.10(7.04だったかも・・)で接続した際に簡単に接続できたことからまさか無くなっていることに気づかず、「WebDAV(HTTP)」のポートを443にして接続しようと頑張っていたためです。

でも、この辺ってネットでの情報が少ないんですよね。
SSL化したWebDAVの需要って少ないのだろうか???

参考にしたのはこの2つです。
PC総合研究所Ubuntu 8.04 LTS ServerでWebDAVアクセス
blog@browncat.orgUbuntuからmobilemeのidiskを使うためのいくつかの方法のメモ

SSLのWebDAVへ接続するには、以下の手順になります。
「場所」→「サーバへ接続」までは同じ。
次に「カスタム」を選択し、「場所(URI)」に davs://サーバ名/フォルダ名 と入力します。
SSLに443ポートを使っている場合、ポートの指定は不要でした。ポートを変えている場合にポートを指定できるかは不明です。

「WebDAV(HTTP)」と接続方法がまるっきり違うんかい!
この辺ってすぐに修正できそうな問題だと思うのですが、未だに直っていません・・・。

| | コメント (0) | トラックバック (0)

2008/10/19

Ubuntuサーバー版でWebDAV環境を構築する

前回、Ubuntuサーバー版のインストールが終わったので、WebDAV環境を作ります。

要件としては、
SSLに対応していることと、クライアント認証ができること、です。
OSは、Ubuntu8.04.1 Server です。

私は普段VineLinuxを使っています。これは一般的に Red Hat系 に属するディストリビューションです。(今は独自路線ですが。)
対してUbuntuは、Debian系 に属するディストリビューションです。
でも、VineLinuxはインストールやアップデートに apt-get を使う所がDebianと同じで、まそうは言っても同じLinuxだしアプリケーションの設定がディストリによって変わるとも思えないし簡単だろう、と思っていたわけです。
が・・・。全く違ったんだな、これが。


まず、OpenSSL のインストールをします。
基本的にUbuntu Sever Edition を使ったサーバ構築のメモを参考にし、クライアント証明書に関してはパソコンおやじさんのSSL用証明書の作成(Linux編)を参考にしました。
手前味噌ですが自分の所も参考にしました。(汗)

OpenSSL のインストール(ca-certificatesもいちおう入れてます)
$ sudo apt-get install openssl openssl-doc ca-certificates


設定ファイルの修正をします。デフォルト設定を変えておいて、作業を楽にします。
$ sudo vim /etc/ssl/openssl.cnf
#dir            = ./demoCA              # Where everything is kept 
dir             = /etc/ssl/CA  ←ディレクトリを変更しておく

default_days    = 3650 ←有効期間を 365 → 3650 10年に変更


countryName_default             = AU ← JPに変更
stateOrProvinceName_default     = Some-State ←  Tokyo に変更
localityName_default            = 市や区 ←  追加
0.organizationName_default      = Internet Widgits Pty Ltd ←  会社名に変更
organizationalUnitName_default  = 部署名← コメントアウトを外して、部署名 に変更
commonName_default = 管理者名かサーバー名 ←追加 
emailAddress_default = 管理者メールアドレス ← 追加


[ usr_cert ]
# This is OK for an SSL server.
# nsCertType                    = server
nsCertType                    = server  ← コメントアウトを外す


[ v3_ca ]
# Some might want this also
# nsCertType = sslCA, emailCA
nsCertType = sslCA, emailCA ← コメントアウトを外す

必要な各種ディレクトリ、ファイルを作成
$ cd /etc/ssl
$ sudo mkdir CA
$ cd /etc/ssl/CA

さて、ここで問題が。次に必要なファイルを作る再に以下のように
# cat /dev/null > index.txt
リダイレクトを使いたいのですが、sudo で操作するUbuntuではリダイレクト後のコマンドはユーザー権限なためファイルに書き込めません。
調べてみると、Lism.in * blogsudoでリダイレクトしてファイルを書き換えるとかに情報がありました。
cat /dev/null | sudo tee index.txt
sudo sh -c "cat /dev/null > index.txt"
って感じに、パイプとteeを使うか、コマンド全体を sudo にしてしまえばいいそうです。なるほど。

$ cat /dev/null | sudo tee index.txt
$ echo '01' | sudo tee serial
$ echo '01' | sudo tee crlnumber
$ sudo mkdir private
$ sudo chmod 700 private
$ sudo mkdir newcerts
$ sudo mkdir crl
$ sudo mkdir certs


秘密鍵の作成
$ sudo openssl genrsa -out private/cakey.pem 1024

秘密鍵を使ってオレオレうそっぱち認証局を作成 有効期限を10年にする
$ sudo openssl req -new -x509 -days 3560 -key private/cakey.pem -out cacert.pem
質問には、設定ファイルのデフォルトと同じ内容を記入(っていうか記入しなくてもデフォルトのままでよいはず)

サーバ証明書と署名リクエスト(CSR)を作成する準備をします。
$ sudo mkdir /etc/ssl/Server
$ cd /etc/ssl/Server

秘密鍵の作成
$ sudo openssl genrsa -out private.pem 1024

認証局に署名してもらう為リクエストを作成する
$ sudo openssl req -new -key private.pem -out request.pem
質問には、設定ファイルのデフォルトと同じ内容を記入(デフォルトでよいはず)
最後の2つの質問も、リターンで良い

CAで署名する
$ sudo cp /etc/ssl/openssl.cnf ./.
$ sudo openssl ca -config openssl.cnf -policy policy_anything -out ./cert-ca.pem -infiles request.pem
2つの質問は y で良い

サーバ証明書だけ抜き取る
$ sudo openssl x509 -in cert-ca.pem -out cert.pem


作成した鍵の確認
$ cd /etc/ssl/Server
$ openssl verify -CAfile /etc/ssl/CA/cacert.pem cert-ca.pem
cert-ca.pem: OK
$ openssl verify -CAfile /etc/ssl/CA/cacert.pem cert.pem
cert.pem: OK


クライアント用証明書の作成
設定ファイルの修正
$ sudo vim /etc/ssl/openssl.cnf

[ usr_cert ]

# This is OK for an SSL server.
# nsCertType = server (コメントを付けて元に戻す)

# For normal client use this is typical
# nsCertType = client, email
nsCertType = client, email ← コメントアウトを外す


$ sudo mkdir /etc/ssl/Users
$ cd /etc/ssl/Users

秘密鍵の作成
$ sudo openssl genrsa -out private.pem 1024

署名リクエスト作成
$ sudo openssl req -new -key private.pem -out request.pem
質問には、ユーザーの内容を答える
最後の2つの質問は、リターンで良い

CAで署名する
$ sudo cp /etc/ssl/openssl.cnf ./.
$ sudo openssl ca -config openssl.cnf -out cert.pem -infiles request.pem
2つの質問は y で良い

秘密鍵と証明書をまとめて、pkcs#12形式にする
$ sudo openssl pkcs12 -export -in cert.pem -inkey private.pem -certfile /etc/ssl/CA/cacert.pem -out pom.p12
Enter Export Password: 組み込み時のパスワードを設定する(ユーザー名とパスワードを、証明書組み込み時に聞かれるので忘れないように。)
Verifying - Enter Export Password: 確認

各ファイルにアクセス権を設定する
$ cd /etc/ssl/Server/
$ sudo chmod 600 ./*
$ chmod 644 cert.pem

$ cd /etc/ssl/Users/
$ sudo chmod 600 ./*

Apache2をインストールします。
Apacheの設定は何度もやっているので楽勝だろうと思っていたら大間違いでした。Debian系独特の操作方法に悩まされることに・・・。
えせSEの1日1HackUbuntuでApacheのsslを有効にする方法を参考にしました。

RedHat系ユーザーのハマり所としては、モジュールやサイトの設定は apache2.conf(httpd.conf)には書かない点でしょうか。Apache2になってからは、設定ごとに~.confファイルに記入しますが、Debianはもっと管理が細かいです。
設定ファイルは、mods-available や sites-availavle に置いておき、a2enmod や a2ensite コマンドで有効にすることによって、ファイルが mods-enabled や sites-enabled にリンクされて読み込まれる、という仕組みです。
コマンド一発でサイトの有効無効を設定できるのですが、慣れない身にはつらいものがあります。

Apache2のインストール
$ sudo apt-get install apache2 apache2-doc

デフォルトではSSLを使えるようにはなっていません。自分で設定するのか・・・。
SSL設定ファイルのコピー
$ sudo cp /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz /etc/apache2/sites-available/
$ cd /etc/apache2/sites-available/
$ sudo gunzip httpd-ssl.conf.gz

SSL設定ファイルの修正
デフォルトでバーチャルホストの設定になっているので、そのまま使う
$ cd /etc/apache2/sites-available/
$ sudo vim httpd-ssl.conf

#Listen 443  ←コメントする(別の設定ファイルに既に記入済みのため)

<VirtualHost _default_:443> 

NameVirtualHost *:443
<VirtualHost *:443>
に修正

SSLCertificateFile "/etc/ssl/Server/cert.pem"     ← サーバ証明書の位置に変更

SSLCertificateKeyFile "/etc/ssl/Server/private.pem"   ← サーバ秘密鍵の位置に変更


ssl用のモジュールを有効にする。
$ sudo a2enmod ssl
再読み込みさせる。
$ sudo /etc/init.d/apache2 force-reload

サイト設定を有効にする
$ sudo a2ensite httpd-ssl.conf
$ sudo /etc/init.d/apache2 reload

ちなみにサイト設定を無効にする場合は
$ sudo a2dissite httpd-ssl.conf


WebDAVの設定
2バイト文字対応のため、mod-encoding をインストール
$ sudo apt-get install libapache2-mod-encoding

mod-encoding の設定
$ cd /etc/apache2/mods-available/
$ sudo vim encoding.conf ←新規ファイルを作成する
以下を記述
<IfModule mod_encoding.c>
    EncodingEngine    on
    NormalizeUsername on
    SetServerEncoding     UTF-8
    DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
    AddClientEncoding "cadaver/" EUC-JP
</IfModule>


モジュールの有効化
$ sudo a2enmod dav
$ sudo a2enmod dav_fs ←既に有効っぽい
$ sudo a2enmod encoding

WebDAV用ディレクトリの作成
$ sudo mkdir /var/www-ssl
$ sudo mkdir /var/www-ssl/dav

WebDAV用ディレクトリに書き込めるようにapacheユーザー権限に変更する。
ちなみにユーザー名は /etc/apache2/envvars に書かれている
$ sudo chown -R www-data:www-data /var/www-ssl/dav
$ sudo chmod 755 /var/www-ssl/dav


SSL設定ファイルをWebDAV用に修正する
$ cd /etc/apache2/sites-available/
$ sudo vim httpd-ssl.conf

#DocumentRoot "/usr/share/apache2/default-site/htdocs"
DocumentRoot "/var/www-ssl" ←修正


</VirtualHost>の前ぐらいに以下を追加
ちなみに、クライアント認証設定です。

<Location /dav>
    Dav on
    SSLVerifyClient require
    SSLVerifyDepth 1
</Location>

再起動
$ sudo /etc/init.d/apache2 restart


以上で、WebDAV(クライアント認証版)の構築が終わりました。
クライアント側には、クライアント証明書 /etc/ssl/Users/pom.p12 を組み込む必要があります。

Windows標準のWebDAVクライアントは安定性に欠けるし大きなファイルを送れないので、フリーでクライアント認証可能なWebDAVクライアントを探したのですが、あまり無いですね。
TeamFileクライアントは高機能な上にクライアント認証対応なので、これで運用することにしました。
TeamFileクライアントのクライアント認証はWindowsのクライアント認証とは別なので、Excelなどを直接編集する時にWindows用の認証が必要になってしまいます。だから、ダウンロードしてから編集する設定にするのがいいのかな。

| | コメント (0) | トラックバック (0)

2008/08/06

Webサーバ構築時の全コマンド

うちのWebサーバは、サポート切れのVineLinux2.6です。
サーバ構築時に使用したコマンドは、
Webサーバ構築時の全コマンド(VineLinux2.6)
に記載しています。

でも外部に公開しているサーバがサポート切れってのはよろしく無いので、現在最新のVineLinux4.2へ移行したいな、と思っていました。
そこでVirtualBoxにVineLinux4.2をインストールしテスト環境を作って検証した所、移行の目処が立ったので実行に移しました。

インストール時は、インストールするパッケージにサーバを選択しましたが、GUIでも設定したいのでXWindowsとGNOMEをインストールしました。
ログインはテキストログインです。
(GUIを使うときは、$ startx とコマンドすれば使えるので。)
ファイアウォールは使用します。GUIを使えば簡単に設定できるので。(設定内容も簡単になりますけど・・。)


◯SSHの設定
特定ユーザー 以外の接続を禁止します。
/etc/ssh/sshd_config に以下を追加
# AllowUsers
AllowUsers ユーザー名

sshdの再起動
# /etc/init.d/sshd restart
sshdを停止中: [ OK ]
sshdを起動中: [ OK ]

Telnetサーバが動いていたら止めようと思いましたが、もともと入っていませんでした。

◯NTPサーバ
GUIのデスクトップ→システム管理→時刻と日付の設定
で「インターネット上のサーバと時刻を同期させる」にチェックを入れればいちおう設定できます。
最初の行のNICTとMFEEDを選択しておけばOKです。
ただ、GUIの設定では設定ファイル上のserverを追加したり減らしたりということしかできなくて、凝った設定にするには結局設定ファイルを書き換えなくてはいけません。

設定は「パソコンおやじ」さんの設定などを参考にしました。
同期するNTPサーバをNICTとMFEEDにして、Lan内の他のPCからNTPサーバを参照できるようにします。
/etc/ntp.conf に以下を追加します。
# Security Setting
# Default
restrict default ignore

# Local Allow
restrict 127.0.0.1

# Lan Allow
restrict 許可するIP mask マスク nomodify notrap

# Server
restrict ntp.nict.jp mask 255.255.255.0 nomodify notrap noquery
restrict ntp.jst.mfeed.ad.jp mask 255.255.255.0 nomodify notrap noquery

server ntp.nict.jp
server ntp.jst.mfeed.ad.jp


ntpdが起動していなければ起動させます。
# /etc/init.d/ntpd start

ファイアウォールの 123 ポートを開けます。
これはGUIで設定しました。
デスクトップ→システム管理→セキュリティレベルとファイアウォールの設定
で、その他のポートに、
123 UDP
を追加します。
ポートが正しいと、その他のポートの表示がntpになります。

動作確認
ntpd再起動(# /etc/init.d/ntpd restart)から数分後に、以下のコマンドで確認。
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-b3.nict.go. .NICT. 1 u 4 128 377 5.073 -31.026 11.903
+ntp2.jst.mfeed. 210.173.160.86 2 u 10 128 377 1.757 -33.074 7.026

*が付いていればOKです。

◯Apacheの基本設定
Apacheは1.3系から2.2系に大幅に変わってしまいました。
そこでまず、基本的な部分を調べてみました。
VineLinux4.2のApache2.2について
/usr/sbin/ に本体がいます。
設定ファイルなどは
/etc/apache2
以下にあり、モジュールの置き場所もここから辿っていけます。
コンテンツは、
/var/www 以下に設置します。

以上が解れば設定できます。
まず、お手軽にGUIで起動させます。
デスクトップ→システム管理→サービスの管理
の ウェブ・サーバ(apache2) にチェックを入れます。
これでApacheが起動します。同時に自動起動の設定もできています。

デフォルトでファイル一覧が表示されるようになっているので
表示しないように設定します。
/etc/apache2/conf/httpd.conf を編集します。
Options Indexes FollowSymLinks
を、以下のように変更
Options -Indexes FollowSymLinks

設定ファイルの確認
# /etc/init.d/apache2 configtest
Syntax OK
apacheを再起動
# /etc/init.d/apache2 restart
httpdを停止中: [ OK ]
httpdを起動中: [ OK ]

◯BASIC認証用htpasswdの作成
/etc/apache2 に .htpasswdファイルを作成します。
# htpasswd2 -c /etc/apache2/.htpasswd 認証するユーザー名
New password:(パスワードを入力)
Re-type new password:(もう一度パスワードを入力)
Adding password for user 入力したユーザー名が表示される

htpasswd2 でファイルを作成する場合は、-cを付けます。
ファイルが既に作成されている時はいりません。
ここで入力したパスワードが、認証時のパスワードになります。
ファイル名、ファイルを作る場所はなんでもいいのですが、
Webサーバで公開している場所はダメです。
また、このパスワードファイルはWebサーバが読める必要があるので、これも注意です。

パスワードファイルをapacheユーザーのみ閲覧可能にします。
# chown apache:apache ./.htpasswd
# chmod 400 ./.htpasswd

○WebDAVの設定
以前検証したVineLinux4.2でWebDAVを使用する。の内容とだいたい同じです。

WebDAVは標準で使用可能になっていますが、
/etc/apache2/conf/httpd.conf
には、ロックファイルの設定のみ書かれています。
/etc/apache2/conf/extra
に、httpd-dav.conf
があるので、これを設定のベースに使います。
/etc/apache2/conf.d へコピー。
# cd /etc/apache2/conf.d/
# cp ../conf/extra/httpd-dav.conf ./

httpd-dav.confを編集
# vi httpd-dav.conf
ロックファイルなどの設定がありますが、Vineの設定とは異なっているので、
15行目~36行目までをコメントします。
/var/www/dav をWebDAV用のフォルダとして設定することにします。
また、認証にBasic認証を使用し、SSL使用を必須にします。

Alias /dav "/var/www/dav"

<Location "/dav">
    DAV On
    SSLRequireSSL
    AuthUserFile /etc/apache2/.htpasswd←Basic認証設定時に作成したパスワードファイルの場所
    AuthGroupFile /dev/null
    AuthName "Private Area"
    AuthType Basic
    Require user 許可するユーザー名
</Location>

/var/www/dav ディレクトリを作成し、apacheユーザー権限にします。
# cd /var/www
# mkdir dav
# chown apache:apache dav

Apacheの再起動
# service apache2 restart

ファイアウォールのSSLのポートを開けます。
またまたGUIで設定しました。
デスクトップ→システム管理→セキュリティレベルとファイアウォールの設定
Secua WWW (HTTPS) にチェックを入れる。

VineLinuxの「サーバへ接続」、から
http://localhost/dav/
に接続し、ファイルが置けるか確認します。


このままだとWindowsから使うと文字化けするので、
mod_encoding をインストールします。
http://elug.selfip.org/index.php?WebDAV
にパッチを当てたものをまとめてくれているので、ここの
mod_encoding-20061118.tar.gz
を使います。

apxsを使用できるようにSynapticから、apache2-devel をインストールします。
apxs は、/usr/bin/ にインストールされます。

mod_encoding-20061118.tar.gz
をダウンロードし、とりあえずユーザーのホームディレクトリに置きます。
展開します。
$ cd
$ tar xzvf mod_encoding-20061118.tar.gz

インストール
$ cd mod_encoding-20061118
$ ./configure --with-apxs=/usr/bin/apxs
$ make
$ gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall
できたモジュールをrootでコピー。
$ su
# cp mod_encoding.so /etc/apache2/modules/

httpd.conf の
LoadModule dav_fs_module modules/mod_dav_fs.so
の下に、
LoadModule encoding_module modules/mod_encoding.so
を追加。

httpd-dav.conf に以下を追加

<IfModule mod_encoding.c>
    EncodingEngine on
    NormalizeUsername on
    SetServerEncoding UTF-8
    DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
    AddClientEncoding  "cadaver/" EUC-JP
</IfModule>

SetServerEncoding にEUC-JPを使いたいのですが、そうすると文字化けしてしまいます。
この設定のようにUTF-8にすると今度はターミナルなどからファイルを見た時には化けてしまいます。
あくまでWindowsで使用するための苦肉の策です。

Apacheを再起動して動作を確認します。
# /sbin/service apache2 restart
(# /etc/init.d/apache2 restart でもいいです。いろんなやり方があるということで。(笑) )

○DiCEの設定
前のサーバで、IP変更時に自動更新されないことがあったので、
今回は、外部CGIにスクリプトを置くパソコンおやじさんの方法を参考にしました。
http://www.aconus.com/~oyaji/ddns/ddns_linux.htm
なんかインストール&設定方法を文章にするのが難しいので上記ページを参考にして下さい。

設定後、デーモン起動
# /usr/local/bin/DiCE/diced -d -l
確認
# ps -C diced
PID TTY TIME CMD
19907 ? 00:00:00 diced ←いればOK

Diceの設定後、
/etc/rc.d/rc.local の最後に
/usr/local/bin/DiCE/diced -d -l
を追加しておくと、サーバ起動時に勝手に起動してくれます。

○TOMCAT
Javaのインストール
GUIでアプリケーション→ システム・ツール→ Synapticパッケージマネージャ
を起動し、 java-1.6.0-sun-devel をインストールしました。
java等のリンクが/usr/binにあるので、通常はPATHなどを通さずに使えます。(これが後でハマる原因になったのだけど・・・。)

http://tomcat.apache.org/
から
apache-tomcat-6.0.16.tar.gz
をダウンロード。
md5sumで正常にダウンロードできたか確認。
$ md5sum ./apache-tomcat-6.0.16.tar.gz
4985fed02341a9e04ea43e91e6444ace ./apache-tomcat-6.0.16.tar.gz

ファイルの移動 /usr/local 以下にインストールします。
# mv ./apache-tomcat-6.0.16.tar.gz /usr/local/
# cd /usr/local

ファイルの展開
# tar xzvf apache-tomcat-6.0.16.tar.gz

起動チェック
# ./apache-tomcat-6.0.16/bin/startup.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.16
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.16
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.16/temp
Using JRE_HOME: /usr

JRE_HOMEの位置がおかしいけれども後で直します。
ブラウザで http://localhost:8080/ にアクセスし、表示されればOK。

停止
# ./apache-tomcat-6.0.16/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.16
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.16
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.16/temp
Using JRE_HOME: /usr


TOMCAT起動ユーザー、起動スクリプトの作成
参考 @IT “安全”のためにTomcatを理解し、構築し、動作させる
http://www.atmarkit.co.jp/fjava/rensai4/safetomcat_01/safetomcat_01_1.html

リンクの作成(/usr/locdal/tomcatから使用できるようにする)
# ln -s apache-tomcat-6.0.16 tomcat

TOMCAT用ユーザの作成
# useradd -d /usr/local/tomcat/ -s /sbin/nologin tomcat
useradd: 警告: ホームディレクトリが既に存在します。
skel ディレクトリからのコピーは行いません。
# chown -R tomcat:tomcat /usr/local/tomcat/

自動起動
jsvcのコンパイル
# cd /usr/local/tomcat/bin/
# tar xzvf jsvc.tar.gz
# cd jsvc-src/
# autoconf ←いらないかも・・・。よく判りません。

次に、configure前にJAVA_HOMEを設定しておく必要があるのですが、ここでハマりました。
さっきも書きましたが、私は JAVA_HOME=/usr/bin だと思っていたので、この通りにすると、makeに失敗します。
configureがうまく行くだけに最初はなぜ失敗するのかさっぱり判りませんでした。
で、出力されたエラーを眺めるうちに原因が判りました。
なんかjni関係のコンパイルをしようとして失敗していたのですね。
私はC言語をあまり知らないのですが、ヘッダーファイルが無くてエラーが出てるような感じは判りました。
ということは、/usr/lib/jvm/java-1.6.0-sun-1.6.0.07/include/jni.hが参照できる位置にJAVA_HOMEを設定しなくてはいけません。

# JAVA_HOME=/usr/lib/jvm/java-1.6.0-sun-1.6.0.07/
# export JAVA_HOME
# sh configure
# make
エラーが出なければ jsvc というファイルができています。
それを /usr/local/tomcat/bin/ に置きます。
# cd ../
# cp ./jsvc-src/jsvc ./
# chown tomcat:tomcat jsvc

後かたづけです。使ったディレクトリを削除してます。
# rm -rf ./jsvc-src/

起動スクリプトの作成
# cd /etc/rc.d/init.d/
新規でファイルを作成します。
# vi jsvc
内容は、
http://www.atmarkit.co.jp/fjava/rensai4/safetomcat_01/safetomcat_01_2.html
にある起動スクリプトをパクってきました。

上記内容から以下を修正します。
JAVA_HOME=/usr/lib/jvm/java
CATALINA_HOME=/usr/local/tomcat

ちなみにvi(vim)で普通に張り付けると勝手にインデントされて大変なことになるので、
viのコマンドで
:set paste
と打ってからペーストするとOKです。

アクセス権の変更
# chmod +x jsvc
自動起動させます。
# chkconfig jsvc on

起動実験
# /etc/init.d/jsvc start
Starting jsvc: [ OK ]
# /etc/init.d/jsvc status
jsvc (pid 11815 11814 11813 11812 11811 11810 11809 11808 11807 11805) を実行中...

ブラウザで http://localhost:8080/ にアクセスし、表示されればOK。

停止
# /etc/init.d/jsvc stop
Shutting down jsvc: [ OK ]

○PostgreSQL
Synapticで
postgresql-server と postgresql-jdbc をインストールしました。
インストール後、GUIのサービスの管理でPostgreSQLを起動させます。

rootでログインし、postgres ユーザーにパスワードを設定します。
# passwd postgres
Changing password for user postgres.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

ロールの設定
# su postgres
bash-2.05b$ createuser ユーザー名
新しいロールをスーパーユーザとしますか? (y/n) n
新しいロールにデータベース作成権限を与えますか? (y/n) y
新しいロールにロールを作成する権限を与えますか? (y/n) n
CREATE ROLE

ロールで設定したユーザーでログイン
データベースの作成
$ createdb データベース名
CREATE DATABASE

ネットワークからの接続を許可するため、設定ファイルを修正
# vi /var/lib/pgsql/data/postgresql.conf

以下の行を追加
listen_addresses = '*'
#listen_addresses = 'localhost' # what IP address(es) to listen on;

他PCからネットワーク越しに接続する許可をあたえるため、設定ファイルを修正
# vi /var/lib/pgsql/data/pg_hba.conf
以下の行を追加
host all ユーザー名 192.168.1.0/24 trust

ちなみにむちゃ弱設定です。
Windows上からお手軽にデータ移行したかったもので・・・。

再起動します。
# /etc/init.d/postgresql restart

ファイアウォールの 5432 ポートを開けます。
デスクトップ→システム管理→セキュリティレベルとファイアウォールの設定 を起動し、
その他のポートに、
5432 tcp
を追加します。

JDBCをTOMCATへ設定
JDBCの場所を確認
# rpm -qs postgresql-jdbc
通常 /usr/share/pgsql/postgresql-8.1-410.jdbc2.jar
通常 /usr/share/pgsql/postgresql-8.1-410.jdbc2ee.jar
通常 /usr/share/pgsql/postgresql-8.1-410.jdbc3.jar
TOMCATのlibディレクトリへ移動
# cd /usr/local/tomcat/lib/
JDBCのリンクを作成
# ln -s /usr/share/pgsql/postgresql-8.1-410.jdbc3.jar ./


ApacheとTOMCATの連携
mod_proxy.soの設定が無いので使えないのか!?と思い調べたら、
ひとにやさしく の apache2.2 + Tomcat 5.5 のページで既にやってる人がいました。助かります!

/etc/apache2/conf/httpd.confの
LoadModule proxy_module modules/mod_proxy.so
の下に以下を追加
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

/etc/apache2/conf.d/ に proxy_ajp.conf を作成
# cd /etc/apache2/conf.d/
# vi proxy_ajp.conf
以下を記入
ProxyPass /Web上のディレクトリ/ ajp://localhost:8009/TOMCAT上のWEBアプリの位置/

以上で、サーバ構築時のコマンド全てです。


以下、その他ハマった設定集

○TOMCATのGETメソッドの文字コード対策
server.xmlファイルのタグに
useBodyEncodingForURI="true"
を指定しないとsetCharacterEncodingが無視されてUTF-8で処理されてしまう。
これ、TOMCAT4→5への移行時にハマったにも関わらず、忘れていてハマりました。

# vi /usr/local/tomcat/conf/server.xml
ポート8080と8009の記述が
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI="true" />
のような感じになります。
useBodyEncodingForURI="true"
を追加するだけです。

Apacheと連携している時は、当たり前ですが
ポート8080と8009
というのがミソで、(8080は使わないなら塞いでおいてもいいのですが)
一般的なWeb上の解説では8080ポートの事しか書いてないから、鵜呑みにするとハマります。
(経験者談

TOMCATを再起動
# /etc/init.d/jsvc restart
Shutting down jsvc: [ OK ]
Starting jsvc: [ OK ]

○PostgreSQL8.0のJDBCドライバを7.4.x互換モードで動作させる
JDBC8から大幅に仕様が変わったそうで、Web上でももめてました。(笑)判るまでけっこうハマりました。
JDBC7と同じ動きをするように
JDBCの接続文字列に protocolVersion=2 を追加する必要があります。
↓参考記事
http://tidus.ultimania.org/wiki/index.php?PostgreSQL

○PostgresSQLが文字化けで落ちる対策
VineLinux4.2のPostgreSQLでデータベースを作成すると、
デフォルトでEUC-JPになりますが、UTF8にあってEUC-JPに変換できない文字を
使用するとJDBCからの文字コード変換時にエラーが出て落ちる仕様になってしまいました。
Java使いには、大いに問題です。Windowsの「~」をINSERTすると落ちます!
なんで文字化けしないで落ちる仕様にするかなあ・・・。

そこで、JAVA→PostgreSQL間の文字コード変換を行わない為に、データベースをUTF8で作成しておきます。

まず、EUC-JPで作成したデータベースを削除
# su - postgres
$ dropdb データベース名
DROP DATABASE

同じデータベースを、UTF8で作成します。
$ createdb -E UTF8 データベース名
CREATE DATABASE

EUC-JPのVineから見ると文字化けしまくりですけどね。

| | コメント (0) | トラックバック (0)

2008/03/23

VineLinux4.2でWebDAVを使用する。

前回、VirtualBoxでVineLinux4.2を仮想化できたため、日ごろ試してみたかったけど怖くて出来ないような検証ができるようになりました。

その第一弾
Linux4.2 と Apache2.2 で WebDAVサーバを立ててみます。
WebDAVの設定自体は VineLinux2.6 Apache1.3 の環境で行ったことがあります。
WebサーバのWebDAV化に挑戦
この時は、Vineのパッケージで mod_encoding が提供されていたため、そんなに苦労せずに設定できましたが、VineLinux4.2 では提供されていないようです。
ネットで調べても、Apache2でのWebDAV化は、パッチを当てたりモジュールを組み込んだりとややこしそうです。
どうなることやら。

参考にしたページはいくつかあります。
本家(?)のWebDAV Resources JP
困った時にはよくお世話になるパソコンおやじWebDAVの日本語対策でmod_encodingを導入すると、他のソフトの日本語環境やPHPやCGIで文字化けが発生する。とか、
Cyber SupportVine Linux 3.2 の Webdav に mod_encodingとか。

で、一番楽できそう(汗)だったのが
WebDAV PukiWikiでした。
というか、いろいろ失敗を繰り返しているうちにこのページにたどり着いた感じ。


さて、以下行った作業です。

まず、VineLinux4.2のApache2.2について調べました。
/usr/sbin/ に本体がいる。
設定ファイルなどは
/etc/apache2
以下にあり、モジュールの置き場所もここから辿っていける。
コンテンツは、
/var/www 以下に設置するようになっている。


WebDAVの設定
WebDAVは標準で使用可能になっていますが、
/etc/apache2/conf/httpd.conf
には、ロックファイルの設定のみ書かれています。
/etc/apache2/conf/extra
に、httpd-dav.conf
があるので、これを利用します。
/etc/apache2/conf.d へコピーします。
$ su -
# cd /etc/apache2/conf.d/
# cp ../conf/extra/httpd-dav.conf ./

httpd-dav.confを編集
# vi httpd-dav.conf
ロックファイルなどの設定がありますが、Vineのデフォルトの設定とは異なっているので、
15行目~36行目までをコメントします。
/var/www/dav をWebDAV用のフォルダとして設定することとします。
以下を記述。

Alias /dav "/var/www/dav"

<Location "/dav">
    Dav On
</Location>


ちなみにこれは動作確認のための最低限の設定です。(検証環境なので。)
本来は、
WebサーバのBasic認証
とか
WebサーバのWebDAV化に挑戦
で書いたものと同じ方向になるかと思います。


/var/www/dav ディレクトリを作成し、apacheユーザー権限にします。
# cd /var/www
# mkdir dav
# chown apache:apache dav

Apacheの再起動
# service apache2 restart
サーバへ接続、から
http://localhost/dav/
に接続し、ファイルが置けるか確認します。

Windowsから使うと、案の定文字化けしました。
日本語に強いVineLinuxだからと思って淡い期待を持っていたのですが。(笑)
やっぱりmod_encoding をインストールする必要があります。
本来はパッチを当てたりとか、かなり大変なのですが、
http://elug.selfip.org/index.php?WebDAV
にパッチを当てたものをまとめてくれているので、ここの
mod_encoding-20061118.tar.gz
を使ってみました。
Fedora Core 6 用なんだけど・・・・。


apxsを使用できるようにSynapticから、apache2-devel をインストールします。
apxs は、/usr/bin/ にインストールされます。

mod_encoding-20061118.tar.gz
をダウンロードし、ユーザーのホームディレクトリに置きます。
展開します。
$ cd
$ tar xzvf mod_encoding-20061118.tar.gz

インストール
$ cd mod_encoding-20061118
$ ./configure --with-apxs=/usr/bin/apxs
$ make
$ gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall
できたモジュールを、Apacheのモジュールのディレクトリへコピーします。
$ su
# cp mod_encoding.so /etc/apache2/modules/

httpd.conf の
LoadModule dav_fs_module modules/mod_dav_fs.so
の下に、
LoadModule encoding_module modules/mod_encoding.so
を追加します。

httpd-dav.conf に以下を追加します。

<IfModule mod_encoding.c>
    EncodingEngine on
    NormalizeUsername on
    SetServerEncoding UTF-8
    DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
    AddClientEncoding  "cadaver/" EUC-JP
</IfModule>

ここの
SetServerEncoding UTF-8
がポイントです。
SetServerEncoding にEUC-JPを使いたいのですが、
DavServerEncoding EUC-JP を記入できないのです。(エラーになる。)
この状態で SetServerEncoding にEUC-JP と記入すると、文字化けしてしまいます。
UTF-8にするとターミナルなどからファイルを見ると化けてしまうのですが、しかたないかなあ。
VineのファイルマネージャNautilusは日本語に超強力で文字化けしにくいので、実用上は問題無いと思い納得しています。
(GUIが無いとダメだけど・・・。)

さて、Apacheを再起動して動作を確認します。
# /sbin/service apache2 restart

今度はLinuxからファイルを置いてもWindowsからファイルを置いても文字化けしません。

| | コメント (0) | トラックバック (0)

2006/07/24

WebサーバのWebDAV化に挑戦

WebサーバのBasic認証で、Basic認証はうまくいったのですが、ファイルサーバの代わりにはいま一歩でした。
マイキャビをネットワークフォルダから使用するで、マイキャビがWindows2000でもネットワークフォルダとして使用可能になりましたが、日本語のフォルダ名やファイル名にするとマイキャビが破壊されるという非常にリスキーなものでこちらも使い物になりませんでした。

・・・そんな紆余曲折を経て、WebサーバをWebDAV化しようと思ったわけです。

WebDAV化するにはApacheにモジュールを追加するのですが、それが普通のWebコンテンツに影響を与えないのかが心配です。でも、ネットで調べてもどこにも情報が無いんですよね・・・。

ま、なんとかなるさ。やってみるべ。
ちなみに、今回の環境です。
VineLinux2.6
ApacheはVineLinux2.6インストール時に付いて来た物。(1.3系です)
SSLを使ったBasic認証までは設定が済んでいます。

ところで、VineLinux2.6のApacheでWebDAV化できるのか?と思い、VineのミラーサイトのVinePLUSを見たところ、mod_dav-1.0.3-4vl4.i386.rpm と mod_encoding-20021209-0vl2.i386.rpm が見つかったので問題なさそうです。

ネットで調べていると、Vine2.6でmod_davという非常に都合のいいページを見つけて、今回参考にさせて頂きました。


まず、VineLinux2.6 のAPTには、PLUSが含まれていないので、/etc/apt/sources.list を編集します。
上記ミラーサイトのPLUS部分
#rpm http://www.ring.gr.jp/pub/linux/Vine/apt 2.6/$(ARCH) main plus plus-noarch
#rpm-src http://www.ring.gr.jp/pub/linux/Vine/apt 2.6/$(ARCH) main plus
のコメント#をはずします。

# apt-get update
で、aptデータベースの更新

mod_davパッケージがあるか検索
# apt-cache search mod_dav
mod_dav - A DAV module for Apache.
mod_encoding - Apache mod_dev 用日本語エンコーディングモジュール mod_encoding.

ちゃんとありますね!

mod_dav と mod_encodingをインストールします。
# apt-get install mod_dav
# apt-get install mod_encoding
でインストールします。
mod_davインストール時に、依存する libiconv_hook パッケージのインストールもするか聞かれました。もちろん一緒にインストールします。

さて、Apache側の設定変更です。
/etc/httpd/conf/httpd.conf を編集
<IfDefine HAVE_DAV>
LoadModule dav_module         modules/libdav.so
</IfDefine>
これはもともとありました。
この下に以下を追加
<IfDefine HAVE_ENCODING>
LoadModule encoding_module    modules/mod_encoding.so
</IfDefine>

<IfDefine HAVE_DAV>
AddModule mod_dav.c
</IfDefine>
の下に以下を追加
<IfDefine HAVE_ENCODING>
AddModule mod_encoding.c
</IfDefine>

これで、mod_davとmod_encodingのモジュールが追加されます。

さらに、以下を追加
mod_encodingの設定です。
<IfModule mod_encoding.c>
  EncodingEngine    on
  NormalizeUsername on
  SetServerEncoding     EUC-JP
  DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
  AddClientEncoding  "cadaver/" EUC-JP
</IfModule>

SetServerEncodingは、Vineの文字コードがEUCなんでEUCにします。
NormalizeUsername onは、WindowsXP使用時にユーザー名に余分なドメイン名が引っ付いてくるのをカットしてくれます。
ClientEncodingの設定に関しては、Windowsの設定をしてます。cadaverの設定は、他の方の設定を見るとたいてい付いているので付けときました。(おいおい) Linuxで使われるWebDAV用のクライアントソフトの設定だそうです。


mod_davの設定です。
<IfModule mod_dav.c>
DAVLockDB /var/lock/apache/DAVLock
DAVMinTimeout 600
DavServerEncoding EUC-JP
</IfModule>

DAVLockDB は、ロックファイルの位置です。後でディレクトリを作ります。
どこに作ってもいいのですが、Vineだとここに作るのが無難でしょう。

<IfModule mod_headers.c>
Header add MS-Author-Via "DAV"
</IfModule>
ここは「WebDAVサーバの構築」の説明によると、このヘッダを付けないと、変なファイルを要求されてしまうそうです。
ここを省くと、確かに_vti_inf.htmlファイルをくれ!みたいなのがログに出てました。
WebDAV設定時のお約束なんですかね。

<IfModule mod_dav.c>
<Location WebDAVディレクトリのロケーション(Webから見たディレクトリの位置)>
  DAV On
  SSLRequireSSL
  AuthUserFile /etc/httpd/.htpasswd←Basic認証設定時に作成したパスワードファイルの場所
  AuthGroupFile /dev/null
  AuthName "Private Area"
  AuthType Basic
  Require user 許可するユーザー名
</Location>
</IfModule>

SSLRequireSSLで、SSLを使用しない通信は接続不可にしました。
Basic認証を使用して、許可したユーザーしか入れなくしています。


ロック用ディレクトリを作成します。
# mkdir -p /var/lock/apache
# chown apache.apache /var/lock/apache

dav用のディレクトリも作成します。
# mkdir WebDAV用のディレクトリ
# chown apache.apache WebDAV用のディレクトリ

ロック用ディレクトリもDAV用ディレクトリも、Apacheが使用するのでApacheのユーザーが書き込めなくてはいけません。
Apacheのユーザーは、httpd.confのUserです。VineLinux2.6はデフォルトでapacheです。

Apacheを再起動します。
# /etc/init.d/httpd restart
httpdを停止中:          [ OK ]
httpdを起動中:          [ OK ]


後はマイキャビをネットワークフォルダから使用するみたいな感じでネットワークフォルダを作成すれば使用できます。
ただし、SSL必須なので、URLは https:// から始まります。


以上で設定完了。
他のWebコンテンツにも、今の所副作用は出ていないようです。

でも、Web上からなんでもファイルが置けてしまうというのは危険なわけで・・・。
実運用しようかマイキャビで我慢しようかどうしようか迷い中ではあります。(汗)

| | コメント (0) | トラックバック (0)