Raspberry Pi で GlassFish を動かすまでのメモ

こんな小さな基盤の上で Java EE サーバーが動くなんて、胸熱ですね。
ケースに入れれば、 Java EE サーバーをポケットに入れて持ち歩けるわけですね。なんだかワクワクしてきますね！

#必要なものを用意（購入）する

- Raspberry Pi 本体（type B）
- SD カード
- LAN ケーブル
- HDMI ケーブル
- USB マウス
- USB キーボード
- モニター（HDMI の入力ができるやつ）
- micro USB ケーブル（携帯の充電とかで使ってやつで OK）

どれも Amazon で買える。
買った後で、 type B+ という新しいモデルがあることを知った orz。

あと、基盤丸出しが気になる場合はケースを買うといい（1000 円強くらい）。

#OS をインストールするためのファイルをダウンロードする
http://www.raspberrypi.org/downloads/

上記公式サイトから、 `NOOBS Lite` を落としてくる。
落としたら、 zip を解凍する。

#SD カードに NOOBS Lite を書き込む
SD カードをパソコンに挿して、先ほどダウンロードした `NOOBS Lite` の中身を SD カードにコピーする。

#Raspberry Pi に色々接続する
- インターネットに繋がっている LAN ケーブルを接続する（要 DHCP）。
- HDMI でモニターと接続する。
- USB マウスとキーボードを接続する。
- 先ほどインストール用のファイルを保存した SD カードを接続する。

以上が完了したら、電源（1A 以上）に繋がった micro USB を接続する。
接続したら勝手に起動して、画面に OS のインストール画面が表示される。

#Raspbian をインストールする
言語で日本語を選んで、公式が推奨している Raspbian をインストールする。
OS を選択して Install をクリックするだけ。簡単！

インストールが終わったらダイアログが表示されるので、「OK」をクリックして完了。

#日本語化
続いて青背景の Raspbian の設定画面が表示される。
ロケールなどの設定がここでできるが、そのままだと文字化けして分けがわからないので、一旦 `Finish` を選んで終了させる。

コマンドラインに移るので、以下のコマンドを実行。

```bash:
$ sudo aptitude -y install jfbterm

$ jsbterm

$ sudo raspi-config
```

今度は日本語が表示されるようになっているはず。
※再起動すると日本語化が解けるので、また `jfbterm` しないといけない。

#raspi-config での設定
##ロケールとかの設定
- [4 Internationalisation Options] → [l1 Change Locale] → [ja_JP.UTF-8.UTF-8] を選択。
- [4 Internationalisation Options] → [l2 Change Timezone] → [アジア] → [Tokyo] を選択。
- [4 Internationalisation Options] → [l3 Change Keyboard Layout] → [標準 105 キー（国際）PC] → [日本語 - 日本語（OADG 109A）] を選択。
    - [AltGr] の設定では、 [キーボード配置のデフォルト] を選択する。
    - [コンポーズキー] の設定ではい、 [コンポーズキーなし] を選択する。

##GPU に割り当てるメモリ量を変更する
デフォルトだと 64MB のメモリを GPU のために使用するようになっているが、サーバー用途で動かすのであれば無駄になる。
なので、 GPU に割り当てられているメモリ量を減らして、少しでもメイン処理にメモリが使えるようにする。

- [8 Advanced Options] → [A3 Memory Split] → [16] と入力して [了解] を選択。

##SSH を有効にする
- [8 Advanced Options] → [A4 SSH] → [Enable] を選択。

設定が終わったら [Finish] を選択。
マシンが再起動する。

#SSH で接続できるようにする
以後は SSH でリモート接続して作業できるようにする。

※家の中でのローカル作業なので、セキュリティ的なことは一切考えていない作業手順です。

##パスワードログインを有効にする
```bash:
$ sudo vi /etc/ssh/ssh_config
```

```diff:/etc/ssh/ssh_config
- #   PasswordAuthentication yes
+    PasswordAuthentication yes
```

※25 行目

##sshd の再起動
```bash:
$ service ssh restart
```

##他の端末から接続できるか確認
```text:
> ssh pi@<Raspberry Pi の IP アドレス>
```

パスワードは、デフォルトは `raspberry`

接続できたら OK。

#GlassFish をインストールする
Web プロファイルを落として動かす。
ちなみに、 Java は JDK 8 がデフォルトで入っていたので特にインストール作業はしなくていい。

##インストール
```bash:
$ sudo mkdir -p /app/glassfish

$ sudo chown pi /app/glassfish

$ cd /app/glassfish

$ wget http://dlc.sun.com.edgesuite.net/glassfish/4.1/release/glassfish-4.1-web.zip

$ unzip glassfish-4.1-web.zip
```

ディレクトリ作って zip 落として解凍するだけ。

##外部から管理コンソールをさわれるようにする
```bash:
$ cd /app/glassfish/glassfish4/bin

$ ./asadmin change-admin-password --user admin
Enter the admin password>【未入力のまま Enter】
Enter the new admin password>【admin】
Enter the new admin password again>【admin】
Command change-admin-password executed successfully.

$ ./asadmin start-domain

$ ./asadmin enable-secure-admin

$ ./asadmin stop-domain

$ ./asadmin start-domain
```

結構起動に時間がかかる。さすがにスペック的に仕方ないか。

##確認する
別のマシンから `https://<Raspberry Pi の IP アドレス>:4848/` にアクセスしてみる。

コンソールの立ち上がりに５～１０分くらいかかる。
気長に待つ。。。

![raspberrypi.JPG](https://qiita-image-store.s3.amazonaws.com/0/28302/90e305d5-673f-1d53-ac15-419b0e08edd0.jpeg)

ｷﾀ!!

`admin` / `admin` でログインする。

![raspberrypi.JPG](https://qiita-image-store.s3.amazonaws.com/0/28302/5d32ab50-e3af-e97a-8f04-dd4045894846.jpeg)

ページ遷移ごとに結構時間がかかる。
しかし、一応待てば数分以内にレスポンスは返ってくる。

#試しにアプリをデプロイしてみる。
簡単な JAX-RS の Web アプリをデプロイして、動かしてみる。

```java:PiApplication.java
package gl8080.pi;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class PiApplication extends Application {
}
```

```java:HelloResource.java
package gl8080.pi;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("hello")
public class HelloResource {
    
    @GET
    public String hello() {
        return "Hello Java EE on Raspberry Pi";
    }
}
```

```bash:
$ curl http://192.168.0.109:8080/pi/rest/hello
Hello Java EE on Raspberry Pi
```

当たり前ですけど、動いてます。
あの小さな板の上で、確かに Java EE アプリが動いてます。感動的ですね。

さすがに Web コンソールは重くて厳しいので、サーバーの管理は asadmin を活用することになりそう。
しかし、それ以外は問題なく動きます。

#参考
- [Ｒａｓｐｂｅｒｒｙ Ｐｉクイックスタートアップガイド （日本語）の補足 » DesignSpark](http://www.rs-online.com/designspark/electronics/nodes/view/type:knowledge-item/slug:jpn-quick-start-guide-supplementary)
- [Quick & Dirty How-to Guide: Install GlassFish 4 on Raspberry Pi | The Hecklers](http://www.thehecklers.org/2013/10/27/glassfish4-raspberrypi/)