Amazon EC2にJettyインストール

EC2にインスタンスを新規作成。
今回は、RightImageのCentOS6のi386を選択しました。
Linux触るの久しぶりになるので、多少はしょってますが、
やったことを、多少ウザいですが、逐一書いています。(やりながら書いてます)

ダウンロードしたpemから、PuTTygenで秘密鍵を生成して、rootでログイン。
・ユーザ作成

[root@ec2]# useradd host

・ユーザ確認

[root@ec2]# id -a host
[root@ec2]# cat /etc/passwd

・パスワード変更

[root@ec2]# passwd host

sudoしたら、sudo入ってなかった・・・。why・・・

[root@ec2]# rpm -qa | grep sudo
[root@ec2]# cat /etc/redhat-release
CentOS Linux release 6.0 (Final)
[root@ec2]# yum install sudo

root制限は、
http://d.hatena.ne.jp/little_jp/20110122/1295722211
参考になります。ゆくゆくは公開鍵認証にしたいところです。

まずJavaのインストール。32bitでCentOSなので、ここ参考に。
Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle

JavaRPMをダウンロード(JDK6U25)

[host@ec2]$ wget -O jdk-6u25-linux-i586-rpm.bin http://download.oracle.com/otn/java/jdk/6u25-b06/jdk-6u25-linux-i586-rpm.bin

パーミッション変更

[host@ec2]$ chmod 744 jdk-6u25-linux-i586-rpm.bin

・実行

[host@ec2]$ ./jdk-6u25-linux-i586-rpm.bin
./jdk-6u25-linux-i586-rpm.bin: line 8: syntax error near unexpected token `newline'
./jdk-6u25-linux-i586-rpm.bin: line 8: `<script type="text/javascript">'

ぐへ。とりあえずファイルサイズ確認。

[host@ec2]$ ls -l -h
total 4.0K
-rwxr--r-- 1 host host 2.1K Jan 31 19:56 jdk-6u25-linux-i586-rpm.bin

2.1K・・・、少なっ!まず、消す。

[host@ec2]$ rm jdk-6u25-linux-i586-rpm.bin

ダウンロードがうまく出来ていないようなので、ブラウザでダウンロードしてみると、
ダウンロードのURLにAuthParam=**********************が付いてる。
このURLで再度wget

[host@ip-10-146-81-223 ~]$ wget -O jdk-6u25-linux-i586-rpm.bin http://download.oracle.com/otn/java/jdk/6u25-b06/jdk-6u25-linux-i586-rpm.bin?AuthParam=************************
Resolving download.oracle.com... 118.155.230.51, 118.155.230.26
Connecting to download.oracle.com|118.155.230.51|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 80582692 (77M) [application/octet-stream]
Saving to: `jdk-6u25-linux-i586-rpm.bin'
100%[======================================================================================================================================================================================>] 80,582,692  11.4M/s   in 8.4s
2012-01-31 21:05:38 (9.15 MB/s) - `jdk-6u25-linux-i586-rpm.bin' saved [80582692/80582692]

いい感じ。ファイルサイズも77Mある。
パーミッション変更して、実行。

[host@ec2]$ ./jdk-6u25-linux-i586-rpm.bin
・・・・省略
error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)

ほい

[host@ec2]$ sudo ./jdk-6u25-linux-i586-rpm.bin
・・・・省略
Done

おし。rpmを削除。

[host@ec2]$ rm sun-javadb-*
[host@ec2]$ rm jdk-6u25-linux-i586*

Javaのバージョン確認

[host@ec2]$ java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.4 20100726 (Red Hat 4.4.4-13)

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

どうやらというかやはり、すでに入ってたみたいです。

[host@ec2]$ rpm -qa|grep jdk
jdk-1.6.0_25-fcs.i586
[host@ec2]$ rpm -qa|grep jre
[host@ec2]$ rpm -qa|grep java
java-1.5.0-gcj-1.5.0.0-29.1.el6.i686
gcc-java-4.4.4-13.el6.i686
sun-javadb-common-10.6.2-1.1.i386
sun-javadb-client-10.6.2-1.1.i386
sun-javadb-docs-10.6.2-1.1.i386
java_cup-0.10k-5.el6.i686
sun-javadb-core-10.6.2-1.1.i386
sun-javadb-demo-10.6.2-1.1.i386
sun-javadb-javadoc-10.6.2-1.1.i386

ほぅ・・・。依存関係とかアンインストール面倒な気がします。Javaのバージョンを切り替えよう。
ここがもろに参考になります。
http://ameblo.jp/kurabeat/entry-10607064798.html
まず確認。

[host@ec2]$ alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java

古いJREしかありません。
・インストールしたJDKの登録

[host@ec2]$ sudo alternatives --install /usr/bin/java java /usr/java/default/bin/java 16025

・バージョンの切替と確認

[host@ec2]$ sudo alternatives --config java
There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*  2           /usr/java/default/bin/java

Enter to keep the current selection[+], or type selection number: 2
[host@ec2]$ java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing)

スバラシイ!

やっとJavaインストール完了。JREでもいいんですけどね。
続いてJetty。Jetty/Starting/Downloads - Eclipsepedia

・ダウンロード

[host@ec2]$ wget http://download.eclipse.org/jetty/8.1.0.v20120127/dist/jetty-distribution-8.1.0.v20120127.tar.gz

・解凍、移動

[host@ec2]$ tar xfz jetty-distribution-8.1.0.v20120127.tar.gz
[host@ec2]$ cd jetty-distribution-8.1.0.v20120127

・起動

[host@ec2]$ java -jar start.jar

起動OK、ブラウザからアクセスOK。
デーモン化は、後からやろう。

さて、これで起動するが、なぜか今の会社は、8080がポートブロックされているので、
80番で、待つように変更します。
本家(Jetty/Howto/Port80 - Eclipsepedia)にも書いてあるけど、
ここのほうが分かりやすいかな。
fukaoi.org
テスト環境なので、iptablesで設定します。

[host@ec2]$ sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
[host@ec2]$ sudo /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[host@ec2]$ sudo /etc/init.d/iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: nat             [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

ブラウザから80番でアクセスOK。
setuidでの対応のほうが望ましいっぽい。覚えておかねば。

これで、Java,JettyのインストールOK。
最後アプリケーション。
開発環境がWindowsなので、WinSCPでファイル転送します。
完了!動きました!

最後に起動スクリプト。start.jarだとターミナルがあれなので。
ここ参考にさせて頂きました。
http://symfoware.blog68.fc2.com/blog-entry-284.html

[host@ec2]$ sudo vi /etc/init.d/jetty8
#! /bin/sh
### BEGIN INIT INFO
# Provides: jetty8
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: jetty8 server
# Description: jetty8 server
### END INIT INFO

DESC="jetty8 server"
NAME=jetty8
JETTY_HOME=/home/host/jetty-distribution-8.1.0.v20120127
DAEMON1="$JETTY_HOME/bin/jetty.sh start"
DAEMON2="$JETTY_HOME/bin/jetty.sh stop"
SCRIPTNAME=/etc/init.d/$NAME

export JAVA_HOME=/usr/java/jdk1.6.0_25
export JETTY_HOME=$JETTY_HOME

case "$1" in
  start)
    echo -n "Starting Server: $NAME"
    $DAEMON1
    ;;
  stop)
    echo -n "Stopping Server: $NAME"
    $DAEMON2
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop}" >&2
    exit 1
    ;;
esac
[host@ec2]$ sudo chmod +x /etc/init.d/jetty8
[host@ec2]$ /etc/init.d/jetty8 start
[host@ec2]$ /etc/init.d/jetty8 stop