うちの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から見ると文字化けしまくりですけどね。
最近のコメント