| 次のページ >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ubuntu 11.04でのTomcat 6.0のインストール(help.ubuntu.comのドキュメント日本語訳)

もともとは tomcat6-user 周辺のことを調べていて help.ubuntu.com のドキュメントにたどり着いたのですが、せっかくなのでページごと訳してみました。 素人翻訳なのでおかしな部分があるかもしれません。 訳の正確さについては無保証です。

波括弧{}の中は訳注や推測・憶測も混じった補足などです。

原文: https://help.ubuntu.com/11.04/serverguide/C/tomcat.html

Apache Tomcat

Apache Tomcat は、 Javaサーブレットと JSP によるウェブアプリケーションを提供するコンテナです。

Ubuntu の Tomcat 6.0 パッケージは2つの異なる実行方法をサポートしています。 クラシックな方法でインストールした場合は 「システムにつき一つのインスタンス」という形になり、 unprivileged な{rootとは別の、という程度の意味?}ユーザー tomcat6 {の権限}で{OSの}起動時に起動されます。 一方、自身のユーザー権限でプライベートなインスタンスをデプロイすることもでき、 この場合は自分で起動・停止しなければなりません。 この2番目の方法は、複数のユーザがそれぞれ自身の Tomcat インスタンスでテストを行う必要がある開発サーバのコンテキストで特に有用です。

システムワイドなインストール

Tomcat サーバをインストールするには、 端末のプロンプトで次のコマンドを入力します:

sudo apt-get install tomcat6 

これにより、Tomcatサーバと、デフォルトの ROOT ウェブアプリ (デフォルトで最低限の "It works" を表示するもの)がインストールされます。

設定

設定ファイルは /etc/tomcat6 にあります。 共通の設定がほんの少しだけここに記述されるでしょう。 詳細については Tomcat 6.0 ドキュメンテーション を参照してください。

デフォルトポートの変更

デフォルトでは、 Tomcat 6.0 は HTTPコネクタ 8080、 AJPコネクタ 8009 で動作します。 システムの他のサーバとの競合を避けるため、 これらのデフォルトポートは変更しておくとよいでしょう。 その場合、 /etc/tomcat6/server.xml の次の部分を修正します。

    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    ...
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

使用する JVM を変更する

デフォルトでは、Tomcat はなるべく OpenJDK-6 を使い、 {それがだめなら}次に Sun の JVM を試し、 {それがだめなら}他の JVM を試します。 複数の JVM がインストールされている場合、どのJVMを使うべきかを /etc/default/tomcat6 内の JAVA_HOME で指定します:

JAVA_HOME=/usr/lib/jvm/java-6-sun 

ユーザとロールを宣言する

サーブレットコンテナ内でユーザ名、パスワード、ロール(グループ)を定義できます。 Tomcat 6.0 では、これを /etc/tomcat6/tomcat-users.xml で設定します:

    <role rolename="admin"/>
    <user username="tomcat" password="s3cret" roles="admin"/> 

Tomcat の標準ウェブアプリを使う

Tomcat は ドキュメンテーション・管理・デモ用のウェブアプリと一緒にリリースされています。

Tomcat ドキュメンテーション

tomcat6-docs パッケージは Tomcat 6.0 のドキュメンテーションを含んでおり、 ウェブアプリとしてパッケージされています。 デフォルトでは http://yourserver:8080/docs にアクセスすることで閲覧できます。 次のコマンドでインストールできます:

sudo apt-get install tomcat6-docs 

管理者用ウェブアプリ

tomcat6-admin は2つのウェブアプリを含んでいます。 ウェブインターフェースを使って Tomcat サーバを管理できます。 次のコマンドでインストールできます:

sudo apt-get install tomcat6-admin 

1つ目は manager ウェブアプリです。 http://yourserver:8080/manager/html からアクセスできます。 主に、サーバの状態把握とウェブアプリの再起動に使われます。

注意: デフォルトでは、manager アプリケーションへのアクセスはブロックされています。 ロールが "manager" であるユーザをあらかじめ /etc/tomcat6/tomcat-users.xml で定義しておく必要があります。

2つ目は host-manager ウェブアプリで、 デフォルトでは http://yourserver:8080/host-manager/html からアクセスできます。 このウェブアプリを使うことで仮想ホストを動的に生成することができます。

注意: デフォルトでは、 host-manager アプリへのアクセスはブロックされています。 ロールが "admin" であるユーザをあらかじめ /etc/tomcat6/tomcat-users.xml で定義しておく必要があります。

セキュリティ上の理由から、 ユーザ tomcat6 はデフォルトでは /etc/tomcat6 への書き込みができません。 これらの管理者用ウェブアプリ(アプリケーションのデプロイ、仮想ホスト生成) で使われるいくつかの機能では、 このディレクトリへの書き込みが必要となります。 それらの機能を使いたければ、 tomcat6 グループのユーザに必要な権限を与えるために次のコマンドを実行してください:

    sudo chgrp -R tomcat6 /etc/tomcat6
    sudo chmod -R g+w /etc/tomcat6 

Tomcat サンプル・アプリケーション

tomcat6-examples パッケージは、 サーブレットと JSP 機能をテストないしデモするために使える 2つのウェブアプリを含み、 デフォルトでは http://yourserver:8080/examples からアクセスできます。 次のコマンドでインストールできます:

sudo apt-get install tomcat6-examples 

プライベートなインスタンスを使う

Tomcat は開発とテストにおいてヘビーに使われますが、 そのとき、単一のシステムワイドなインスタンスでは、 複数のユーザの要求を満たすことができません。 Ubuntu の Tomcat 6.0 パッケージには、 あなた自身のユーザ指向なインスタンスのデプロイを助けるツールが付属しています。

注意: 異なる TCP ポートを割り当てていれば、 システムワイドなインスタンスとプライベートなインスタンスを同時に動作させることができます。

プライベートインスタンスのサポートをインストール

次のコマンドを実行すると、 プライベート・インスタンスの使用に必要なものがインストールできます:

sudo apt-get install tomcat6-user 

プライベート・インスタンスの生成

プライベート・インスタンス用のディレクトリを作成するには、次のコマンドを実行します:

tomcat6-instance-create my-instance 

このコマンドにより my-instance ディレクトリが新たに作成され、 その中に必要なサブディレクトリとスクリプトが配置されます。 たとえば、共通ライブラリはサブディレクトリ lib/ に置き、 あなたのウェブアプリをサブディレクトリ webapps/ にデプロイします。 デフォルトではデプロイされているウェブアプリはありません。

プライベート・インスタンスの設定

プライベート・インスタンスのための Tomcat のクラシックな設定ファイルが、 サブディレクトリ conf/ 内にあることに気付くでしょう。 たとえば、実行中の他のインスタンスとの競合を避けるためにプライベート・インスタンスで使うポートを変更したい場合、 conf/server.xml を編集する必要があります。

プライベート・インスタンスの起動・停止

プライベート・インスタンスを起動するには、 次のコマンドを実行します (プライベート・インスタンスが my-instance に置かれていることを仮定):

my-instance/bin/startup.sh 

注意: 何かエラーが出たら、サブディレクトリ logs/ をチェックしましょう。 java.net.BindException: Address already in use<null>:8080 というエラーが出ていたら、使おうとしていたポートがすでに使用されていますので、ポート指定を変更しなければいけません。

プライベート・インスタンスを停止するには、 次のコマンドを実行します (プライベート・インスタンスが my-instance に置かれている場合):

my-instance/bin/shutdown.sh 

参考資料

Creative Commons License
This work by Ubuntu documentation team (original English text) and sonota (Japanese translation) is licensed under a Creative Commons Attribution ShareAlike 3.0 Unported License.
Based on a work at help.ubuntu.com.

メモ

might want to

複数インスタンスの使用については 「CATALINA_BASE インスタンス 複数」で検索する。

Java の切り替えは sudo update-alternatives --config java で。

ちなみに、10.04(LTS)のドキュメントと比較してみましたが、変更点は何もありませんでした。

参考(外部リンク)

関連書籍

Tomcatハンドブック 第2版
Tomcatハンドブック 第2版Jason Brittain Ian F. Darwin 村上 雅章

オライリージャパン 2008-11-21
売り上げランキング : 189524


Amazonで詳しく見る
by G-Tools
Jakarta Tomcatエキスパートガイド―Webアプリケーションのための環境構築
Jakarta Tomcatエキスパートガイド―Webアプリケーションのための環境構築アミツト・バコレ 中川 和夫 Ja-Jakarta

ソフトバンククリエイティブ 2003-08
売り上げランキング : 208319


Amazonで詳しく見る
by G-Tools
Tomcat実践アプリケーションサーバ構築―Servlet、JSPを使いこなす
Tomcat実践アプリケーションサーバ構築―Servlet、JSPを使いこなす糸魚川 茂夫

アイクリエイティブ 2001-12
売り上げランキング : 709491


Amazonで詳しく見る
by G-Tools
スポンサーサイト
テーマ:Linux - ジャンル:コンピュータ

whileループで動き続けるプログラムをログアウト時に終了させる(Ubuntu 10.10)

注)いろいろよく分かってない人が書いてます。


1 環境

  • Ubuntu Linux 10.10 Desktop
  • GNOME 2.32.0
  • GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
  • Ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-linux]

2 期待する動作

whileループなどで動作し続けるプログラムをログイン時に自動的に実行し、 ログアウト時に自動的に終了するようにしたい。

3 詳細

サンプルとしてこのような Rubyスクリプト ~/test.rb を用意した。


while true
  puts Time.now
  sleep 60
end

ログイン時に自動実行させるため ~/.profile に次の行を追加した。


ruby ~/test.rb &

  • グラフィカルログインで GNOMEセッション開始 (要するに普通にログイン)。
  • test.rb (pid=1772)が動いていることを確認。
  • デスクトップ画面右上のボタンでログアウト。
  • さっきと同じようにログイン。

この時点で ps ax | grep ruby すると、前回のログイン時に実行されたものと 今のログイン時に実行されたものが両方表示される。

 1772 ?        S      0:00 ruby /home/testuser/test.rb
 2165 ?        S      0:00 ruby /home/testuser/test.rb

前回ログイン時に実行したものは前回のログアウト時に終了してほしい。


ちなみに pstree で確認すると以下のようになっている(余計な部分は省略してある)。

前回のログイン時に実行された test.rb :

init
  ├─ruby /home/testuser/test.rb

今回のログイン時に実行された test.rb :

init
  ├─gdm-binary
  │   ├─gdm-simple-slav --display-id /org/gnome/DisplayManager/Display1
  │   │   ├─gdm-session-wor
  │   │   │   ├─gnome-session
  │   │   │   │   ├─ruby /home/testuser/test.rb

参考:

3.1 SIGHUP は送信されているか?

可能性としては 2つ考えられる。

  1. ログアウト時に SIGHUP が送信されていない
  2. ログアウト時に SIGHUP が送信されているが、何らかの理由でプロセスが終了しない

これを切り分けるため、 test.rb で trap を設定した。

 
log = open(File.expand_path("~/test.log"), "a")
 
log.puts "#{Time.now} ** start **"
log.flush
 
# HUP 以外のシグナルも一応見張ってみる
%w(HUP TERM INT QUIT).each {|sig|
  Signal.trap(sig) {
    log.puts "%s - pid:%d sig:%s" % [Time.now, Process.pid, sig]
    log.flush
    exit
  }
}
 
loop do
  puts Time.now
  sleep 60
end

一旦 test.rb を すべて終了させて

  • 上と同じように ログイン
  • 実行されているのを確認
  • ログアウト・再ログイン

この状態では 2つのプロセスが動いており、 test.log を見ても SIGHUP , SIGINT などを受け取った形跡はない。

一方、手動で kill -HUP {PID} した場合は test.log にそのことを示すログが残り、 プロセスが終了する。

したがって、 SIGHUPtest.rb に送信されていない ( test.rbSIGHUP を受け取っていない) と考えられる。

3.2 明示的に SIGHUP を送信する

なぜログアウト時に SIGHUP が送信されないのか、という点については 難しい話になるようなので深追いしなかった(帰ってこれなさそうでした……)。

OSまかせ(?)にせず、 ログアウト時に明示的に SIGHUP を送信する方法で進めることにした。


まず ~/.bash_logout を利用することを考えたが、 GNOMEパネルのログアウトボタンを押してログアウトした場合、 ~/.bash_logout は呼ばれない。

ちなみに、bash の manpage には次のように書いてあった。

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

「ログインシェルが終了するとき」とあるので、 「ログアウトするときに呼ばれる」という認識だと正確ではないのかも。


他に何か方法はないかと調べてみたところ /etc/gdm/PostSession/Default を使えばよいと分かった。

参考: How to run a script during Gnome log out - Unix and Linux - Stack Exchange

exit 0; の行の前に次のように書く

 
TARGET_USER=testuser

echo "executing /etc/gdm/PostSession/Default" >> /home/${TARGET_USER}/test.log # 確認用
 
if [ ${USERNAME} = "${TARGET_USER}" ];then
  su ${TARGET_USER} -c /home/${TARGET_USER}/.gdm_postsession
fi

# ↓これだけでもいいかも?
# if [ -e /home/${USERNAME}/.gdm_postsession ] ; then
#   su ${USERNAME} -c /home/${USERNAME}/.gdm_postsession
# fi

呼び出される ~/.gdm_postsession の内容:

 
echo "executing ~/.gdm_postsession" >> ~/test.log # 確認用

chmod u+x ~/.gdm_postsession で実行権限を与えておく。

※ この .gdm_postsession というファイル名はこのように決められているわけではなく、 自分で考えて付けたもの


上と同様にログイン・再ログインしてログを見ると、ログアウト時に /etc/gdm/PostSession/Default~/.gdm_postsession が呼ばれていることが確認できた。

あとは .gdm_postsession で 終了させたいプロセスに SIGHUP を送ればいいはず。

送信するには対象となるプロセスの一覧をどこかから得なければならないため、 ~/test.rb の最初の方に次の行を追加し、 自身の PID を ~/.my_hup_list に追記することにした。 このファイル名も自分で決めたもの。


open(File.expand_path("~/.my_hup_list"), "a") {|f| f.puts Process.pid }

ちなみに、他の Rubyスクリプトも同じように(ログインしている間だけ)動作させたいなら、 この 1行だけ別ファイル append_to_hup_list.rb に抜き出して、 メインのスクリプトの方では


require "append_to_hup_list"

とだけ書くようにすると良いかも。


~/.gdm_postsession の方では、 ~/.my_hup_list にリストアップされている PID に SIGHUP を送り ~/.my_hup_list を空にする


kill -HUP `cat ~/.my_hup_list`
echo -n "" > ~/.my_hup_list

ここまでやってようやく期待通りの動作になった。

~/.my_hup_list は 1行ごとに PID が並んでいるだけのプレインテキストなので、 Ruby 以外のプログラムからでも簡単に利用できる。

4 まとめ

  • プログラムの側で自身の PID を ~/.my_hup_list に追記
  • gdm セッション終了時に /etc/gdm/PostSession/Default が呼ばれる
  • そこから ~/.gdm_postsession が呼ばれるようにする
  • ~/.gdm_postsession~/.my_hup_list の PID を参照し SIGHUP を送る

5 備考

やりたいことができるようにはなったが、 煩雑なので tcsh の組み込みコマンド hup のようなものが使えるならそうしたい。

参考: Manpage of TCSH

または、Bash の機能を使って shopt huponexit とする方法もあるようだが、 これだとグローバルな設定を変えることになり 影響範囲が把握できなかったので今回は使わないことにした。


GNOME の画面右上のログアウトボタンを押したときに起こることを 単に「ログアウト」と呼んでしまっていいのか、 それとも「gdmセッションの終了」のように呼ぶのがいいのか、 結局よく分からなかった。 それとログインシェルとの関係とかも詳しく調べてすっきりさせたいところ……。


2013-01-14 追記:
最近のUbuntuなど、LightDM を使っている場合は /etc/gdm/PostSession/Default の代わりに /etc/lightdm/lightdm.conf で指定します。
参考: [SOLVED] LightDM login and logout scripts - Ubuntu Forums

参考(外部リンク)

dvd::rip 手順・設定メモ

毎回忘れるので定形的な使い方とオレオレ設定をチェックリスト的にメモ。 後で適当に加筆・修正するかも。

注意!) 記憶と思い込みで書いていたり、 確認にそれほど手間を割いていないので誤った情報が混じっている可能性があります。

環境

Ubuntu Linux 9.04

大まかな流れ

* プロジェクト作成
* リッピング
* 変換設定
* 変換

Linux で freedb(freedbtest.dyndns.org) に日本語データを送信する

環境: Ubunbu Linux 9.04


いくつか試してみたところ、結局 wine + CDex.exe の組み合わせが無難という結論に至った。 日本語が文字化けしたが、wine の設定を変更するとうまく表示された。

CDex の設定については freedbtest.dyndns.org に説明がある。


Grip は HTTP ではなくメールを送る方式のようで、裏で sendmail が動く。 freedbtest.dyndns.org はメールには対応していないようなので、これは使えない。

Audex が使えるという情報 (Audex - いくやの斬鉄日記 2009-03-08) もあるが、自分の環境では "Submit Info" ボタンがグレーアウトして送信できなかった。

ついでにリッピング

abcde - A Better CD Encoder [ver 2.3.99]
を使う。

HP mini 1000 + Ubuntu 9.04: タッチパッドのタップによるクリックを無効化 / 横スクロールを有効化

gnome-mouse-properties を実行


「タッチパッド」タブを選択し
「タッチパッド上でのマウスクリックを有効にする」のチェックを外す
「横方向スクロールを有効にする」にチェックを入れる

縦方向スクロールと同様にタッチパッド下部を使った横スクロールができるようになった。



** ホームに戻る

| 次のページ >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。