jpiere を ubuntu20.04 でインストールしてみる。最新版を動くように設定してみたいが・・・20210101版にしとけって話。

# はじめに
　フリーのERPシステムを構築してみたくなった。最近はOdooが流行っているのかな？しかし、odooのカスタマイズ開発をするには、開発者用ツールの利用契約（有料）が必要らしい。今回は、Multi-tier ERP であること、日本語対応（将来的には多言語対応）が条件なので、カスタム開発が必須。開発からフリーでできるもので探し直すことにした。
　ネットで検索して見つかる程度では、あまり選択肢がないようだ。日本の商習慣（具体的に何を指しているのかよくわからないが）にも配慮していて、2021年６月現在も開発が続いていると思われる JPiere を試してみることにした。

# JPiere とは
　こちらにプロジェクトのページがある。2021年６月現在も更新が行われている。
　https://ja.osdn.net/projects/jpiere/

　こちらの会社のホームページにある程度載っている。
　https://www.compiere-distribution-lab.net/jpiere-lab/about-jpiere/

# インストール
　手順の確認：　ファイルのダウンロード、DB（PostgreSQL）のデータベース準備などを行い、ソフトウェアを配置後、セットアップ操作を行う。
　こちらのホームページを参考にさせていただいたが・・・まんま、というわけにはいかなかった。
　https://www.compiere-distribution-lab.net/idempiere-lab/install/gce-centos7-idempiere8-2/

## 前提
　セットアップ済みの　ubuntu20.04 （システムは、amd64（Armではない））に　openjdk11 および postgresql12 が, aptを使ってインストール済み、と前提。なお、できる限りの最新版JPiereをインストールしたい。

## 準備

- JPiere のダウンロード
    - https://ja.osdn.net/projects/jpiere/ へアクセスして、ダウンロードドロップダウンメニューのリリース一覧から最新の次の２つのファイルをダウンロード。
        - JpiereServer82.Linux.x86_x64.zip
            - システムソフトウェア群
        - ExpDat.jar
            - データベースの雛形
 
       注意書きあり。

      > 補足説明】本番環境にはソースコードからビルドしたインストールパッケージを使用して下さい。
iDempiereのインストールパッケージもJPiereのインストールパッケージも、公開されているインストールパッケージは検証用です。本番環境で使用する際には、ソースコードからビルドしたインストールパッケージを使用して下さい。そしてビルドしたソースコードはGitHubなどに大切に保管しておいて下さい。

　　今回は、検証ということで。

- インストール先の選定
　参照しているページでは、/user/local/etc をターゲットにしているが、本記事では、筆者の趣味で /opt をターゲットにしてみた。特に理由はない。

- postgresの事前設定（テーブルの作成）
 こちらを参考に。 https://www.compiere-distribution-lab.net/postgresql-0017/
 ユーザーロール： adempiere （パスワード: adempiere ）を作成し、　データベース： idempiere を作成して、adempiere ユーザーと紐づけておく。


```
    - ユーザーロールの作成

sudo su - postgres

psql -U postgres -c "CREATE ROLE adempiere SUPERUSER LOGIN PASSWORD 'adempiere'"

logout

    - テーブルの作成

createdb --template=template0 -E UNICODE -O adempiere -U adempiere idempiere

psql -d idempiere -U adempiere -c "ALTER ROLE adempiere SET search_path TO adempiere, pg_catalog"
```


## セットアップ操作

　ダウンロードしたファイルを解凍してターゲットフォルダに配置する。

```
unzip JPiereServer82.Linux.x86_64.zip
sudo cp -r idempiere-server/ /opt
```

　データベースにテーブル作成（リストアファイルを使用）

```
unzip ExpDat.jar
psql -d idempiere -U adempiere -f ExpDat.dmp
```

以下、[上述の参考](https://www.compiere-distribution-lab.net/idempiere-lab/install/gce-centos7-idempiere8-2/)を参照（引用）しつつ・・・

まずは、サーバーを配置したフォルダへ移動。以下、サーバーフォルダで作業。

```
cd /opt/jpiere-server
```


>◆idempiereファイルの権限をゆるくする
idempiere-serverディレクトリの直下にあるidempiereファイルの権限をゆるくしないと、初期セットアップがパーミッションエラーになるので、ゆるくしておきます。

```
sudo chmod 777 idempiere
```

>◆console-setup-alt.sh の JAVA変数の修正
Javaの変数を修正します。

これは、JAVA_HOME環境変数が設定されていない人向け。ubuntu20ユーザーのほとんどは該当するはず。

```
sudo vi console-setup-alt.sh

（６行目　if 文に　-z を加えたほうがいいと思う。）
 if [ -z "$JAVA_HOME" ]; then

（９行目　JAVA= の右辺を書き換える。 apt でセットアップした openjdk11 ならば・・・）
 JAVA=/usr/lib/jvm/java-11-openjdk-amd64/bin/java
```
また、各行末に ^M という記号が表示されている。これがあると、スクリプトが sh で作動しないのですべて削除する。筆者は手動で削除した。

>◆console-setup-alt.shの実行
console-setup-alt.shを実行して、初期セットアップを行います。

```
sudo sh console-setup-alt.sh
```

以下、筆者環境での設定値。


Java Home [/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64] ※自動入力(Default)
iDempiere Home [/opt/jpiere-server] ※自動入力(Default)

【SSLの設定】
Key Store Password [myPassword] ※自動入力(Default)
(ON) Common Name [root] ※自動入力(Default)
(OU) Organization Unit [iDempiereUser] ※自動入力(Default)
(O) Organization [root] ※自動入力(Default)
(L) Local/Town [MyTown] ※自動入力(Default)
(s) State \[] ※自動入力(Default)
(c) Country(2 Char) [JP] ※自動入力かどうかはサーバ環境による

【アプリケーションサーバー】
Application server host Name [localhost]
Application Server Web Port [8880]
Application Server SSL Port  [8443]

【データベースサーバー】
DB Already Exists? (Y/N)   [Y]
Database Type  [2] ※PostgreSQL
Database Server Host name  [localhost] ※自動入力(Default)
Database Server Port  [5432] ※自動入力(Default)
Database Name  [idempiere] ※自動入力(Default)
Database user  [adempiere] ※自動入力(Default)
Database password  [adempiere] ※自動入力(Default)
Database System User Password   [] ※postgresユーザーのパスワード

【データベースサーバー】
DB Already Exists? (Y/N)   [Y]
Database Type  [2] ※PostgreSQL
Database Server Host name  [localhost] ※自動入力(Default)
Database Server Port  [5432] ※自動入力(Default)
Database Name  [idempiere] ※自動入力(Default)
Database user  [adempiere] ※自動入力(Default)
Database password  [adempiere] ※自動入力(Default)
Database System User Password   [] ※postgresユーザーのパスワード

【メールサーバー】

Mail Server Host Name  [localhost] ※自動入力(Default)
Mail User Login  []
Mail User Password  []
Administrator Email  []
Save changes (Y/N)  [Y]

”保存のエラー”（Failed to save changes.）が表示されるが、大丈夫みたい？

参考サイトでは、ここまでの情報しかない。このままで idempiere-server.sh を使ってサーバを起動させても・・・起動しない。
これで動作すると、参考サイトでは言われているが、エラーが出て動かない。

エラーは、以下の２つの環境変数の設定値がないこと。
１：　IDEMPIERE_HOME  ( /opt/jpiere_server/utils/myEnvironment.sh line 27, 39 )
２：　IDEMPIERE_JAVA_OPTIONS ( /opt/jpiere_server/idempiere-server.sh line 56 )


以下のファイル操作で対応しようと考えたが・・・。

◆ idempiere-server.sh の JAVA変数の修正
　JAVAの実行ファイルを指定する。

```
sudo vi idempiere-server.sh

（7行目　if 文に　-z を加えたほうがいいと思う。）
 if [ -z "$JAVA_HOME" ]; then

（10行目　JAVA= の右辺を書き換える。 apt でセットアップした openjdk11 ならば・・・）
 JAVA=/usr/lib/jvm/java-11-openjdk-amd64/bin/java

（56行目　$IDEMPIERE_JAVA_OPTIONS を削除する）
```

◆ utils/myEnvironment.sh の編集

```
　（17行目　IDEMPIERE_HOME= の右辺を書き換える。）
　IDEMPIERE_HOME="/opt/jpiere-server"

　（19行目　JAVA_HOME=　の右辺を書き換える。）
　JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
```

（こいつ、20行目で JAVA_HOME を export してくれやがる・・・。複数のJAVA環境を切り替えて使っている人は、このサーバーソフトウェアを起動してはいけないかもしれない。）


## iDempiereの起動
```
sudo sh idempiere-server.sh &
```

・・・起動しない。

>iDempiere or JPiereの初期セットアップをデフォルトのポート(8080)で設定した場合は、下記のURLにアクセスしてみて下さい。iDempiereのログイン画面が表示されれば完了です!!
>http://localhost:8080/webui/


・・・表示されない。
・・・なぜだ？なぜ、誰もツッコミを入れてないんだ？

利用ユーザーが少なすぎるのか？　最新リリースだけの問題かもしれん、と思い、気を取り直して、 jpiere82-20210606 でセットアップし直してみる。
https://www.compiere-distribution-lab.net/jpiere-lab/install/jpiere7-1/


・・・おなじ結果だ。


エラーのログを見ると、このとおり。 @ADEMPIERE_SSL_PORT@ の値がおかしい。設定した数値（ポート番号）に置き換えられていない？

2021-06-11 20:51:18.139:WARN:oejx.XmlConfiguration:Start Level: Equinox Container: e91bcf8a-6b36-43cd-8c44-88a2d14705bf: Config error at <Set name="securePort"><Property name="jetty.httpConfig.securePort" deprecated="jetty.secure.port" default="@ADEMPIERE_SSL_PORT@"/></Set> java.lang.reflect.InvocationTargetException in file:///opt/jpiere-server/jettyhome/etc/jetty.xml

ええい、それではもうひとつさかのぼって、 jpiere82-20210101 で再度セットアップだ。

しかも面倒くさくなったので、 JAVA_HOME を設定してから再度セットアップする。

```
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

（以下、本投稿の、セットアップ操作手順を実行）
```

・・・エラーがない。 http://localhost:8880 を開くと・・・


動いた〜。動き出した〜。
![Screenshot from 2021-06-11 21-13-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699890/6e596ac7-9751-68cf-9b0d-09a043147104.png)



# まとめ
2021年6月11日の最新版、JPiere82-20210606 やデイリーリリースは、従来説明されている手順でセットアップしても動かない。きっと近日中に公式から訂正版が発表されると思うので、それまでは動かしたければ、JPiere82-20210101版を使いましょう。

# 今後の展望
さて、今後はこのサーバーをカスタマイズして行くことになるのだが・・・本当にできるのか？
現状考えている業務機能範囲は、PHPでフルスクラッチで作ったほうが早いとかってこと、ないよね？不安だ・・・