このリポジトリを知ったので、動かしてみました。インフラはGCPの無料クレジット余っていたのでGCEを使いました。
- SAP側インストールメディア取得手続き
- GCE仮想マシン立ち上げ
- OS環境準備(Dockerインストール)
- Systemd版openSUSEビルド
- リポジトリの取得とDockerfile修正
- SAPメディア配置
- Dockerイメージのビルド
- コンテナ起動とSAPインストール
- GCEにSSHトンネルを掘る
- SAP GUIでログオン
- インストール直後の環境をCommit
- 所感
- 参考
SAP側インストールメディア取得手続き
こちらにDeveloper Editionの記載があります。SAP StoreからTrial版をダウンロードできるとあります。
https://tools.hana.ondemand.com/#abap
SAP NetWeaver AS ABAP Developer Edition
If you want to try out the tools without having access to an ABAP Server, you can run your own one using the "SAP NetWeaver AS ABAP Developer Editon". You can download the Trial Version of 7.50 SP02 and 7.51 SP02 from the SAP Store.
今回つかったバージョンはこちら。 SAP NetWeaver AS ABAP 7.51 SP02
です。これでABAPがDocker上で動くはず。
手続きするとダウンロードリンクが記載されたメールが飛んできます。
以下のようにダウンロードページに飛びます。さすがSAP、開発環境でも巨大な10ファイルが必要・・・
こちらのページのダウンロードリンクは後で利用します。
GCE仮想マシン立ち上げ
初年度クレジットがまだ残っていたので、今回はGCE使って作業してみます。
どのLinuxでも動くはずなので、Container-Optimized OSとか使ってみたかったのですが、ビルドの処理などで周辺ツールが色々必要で、インストールメディア等もSCPでやりとりできるサイズでもないのでUbuntuにしておきました。
ディスクは中間ファイル含めて150GB近く使うことになりますので、200GB程度用意しておいた方が安心です。
GCEの初回起動は本当に一瞬で仮想マシン立ち上がります。
OS環境準備(Dockerインストール)
OS起動したらSSHつなぎます。(今回はdefaultのVPCにしているので最初からSSH開いています)
gcloud compute ssh sapdev --zone asia-northeast1-c
Dockerインストールします。dockerコマンドsudo無しで叩きたいので、ついでにdockerグループに自身を追加します。
$ sudo apt-get update && sudo apt-get install docker.io $ sudo usermod -aG docker $USER
ログインしなおして、dockerのソケットにアクセスできていることを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Ubuntuの場合は元々色々入っていることもあり、SAPのインストールメディアを展開する unrar
のみ追加すれば大丈夫でした。
他に必要なのは vim
等のエディタと wget
と git
くらいですが、Ubuntuの場合は全て最初から入っています。
$ sudo apt-get install unrar
Systemd版openSUSEビルド
SAP NW Developer EditionのイメージはopenSUSEのものです、Systemdが使われているのですが、Dockerでは普通に起動するとSystemdが立ち上がりません。
Systemdが立ち上がらないとuuiddのサービスが起動できず、SAPのSICKでエラーが出ます。
ということでこちらのイメージをビルドして使います。
ビルドの手順は以下の通り。
$ git clone https://github.com/openSUSE/docker-containers.git
$ docker build -t opensuse/systemd ./docker-containers/derived_images/systemd/
リポジトリの取得とDockerfile修正
次に前述のsap-nw-abap-dockerリポジトリをクローンしてきます。ここにDockerfileが含まれています。
GitHub - tobiashofmann/sap-nw-abap-docker: SAP NetWeaver ABAP Developer Edition in Docker
ホームディレクトリに移動してリポジトリをクローンします。クローンしたディレクトリに移動しておきます。
$ cd $ git clone https://github.com/tobiashofmann/sap-nw-abap-docker.git $ cd ./sap-nw-abap-docker/
先程ビルドしたSystemd版openSUSEで立ち上げるためDockerfileを修正します。
最後のrun.sh
も後から自分で叩くのでコメントアウトしておきます。ここでrun.sh動かすと一時的なホスト名を元にSAPがインストールされてしまいます。
$ cd ~/sap-nw-abap-docker/
$ vim Dockerfile
ということでDockerfileの変更点は以下の通り。
$ git diff -U0 diff --git a/Dockerfile b/Dockerfile index cf09a1d..365ed1e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1 +1 @@ -FROM opensuse:latest +FROM opensuse/systemd @@ -47 +47 @@ EXPOSE 3200 -RUN ./run.sh +# RUN ./run.sh
SAPメディア配置
メディアのダウンロード
最初のSAPからのメールに記載のあったダウンロードページ。作業ディレクトリを作って、そこにある10ファイルをダウンロードしてきます。
wget
を使って、 part01.rar
〜 part10.rar
という名前でダウンロードしてきます。
$ mkdir ~/sap_work $ cd ~/sap_work # このようなコマンドを10ファイル分実行 $ wget "http://download.store.sap.com/SCN/14493/sap_netweaver_as_abap_751_sp02_ase_dev_edition_part07.rar?_avtstr=xxxxxxxxxxxxxxxxxx&fileExt=.rar" -O part07.rar
メディアの解凍・配置
sap-nw-abap-dockerリポジトリ内にNW751という名前のメディア格納用のディレクトリを掘ります。
$ cd ~/sap-nw-abap-docker/ $ mkdir NW751
作成したNW751というディレクトリにメディアを解凍します。一つ目のrarファイルをunrarで解凍すると全ファイルが解凍されます。
# この10ファイルを解凍します。 $ ls -lh ~/sap_work/ total 14G -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part01.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part02.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part03.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part04.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part05.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part06.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part07.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part08.rar -rw-rw-r-- 1 yomon8 yomon8 1.4G Oct 22 2017 part09.rar -rw-rw-r-- 1 yomon8 yomon8 1.1G Oct 22 2017 part10.rar # 作業は先程作ったNW751のディレクトリで行います。 $ cd ./NW751 # このコマンドで10ファイルが解凍される $ unrar x ~/sap_work/part01.rar
Dockerイメージのビルド
これでやっとDockerイメージをビルドする準備が整いました。
$ cd ~/sap-nw-abap-docker;ls -1 Docker.qcow2.zip Dockerfile LICENSE NW751 README.md
Dockerのビルドします。時間かかるので気長に待ちます。
$ docker build -t nwabap . 〜 省略 〜 Instance Service on host 2e760f470df3 started ------------------------------------------- starting SAP Instance D00 Startup-Log is written to /home/npladm/startsap_D00.log ------------------------------------------- /usr/sap/NPL/D00/exe/sapcontrol -prot NI_HTTP -nr 00 -function Start Instance on host 2e760f470df3 started Installation of NPL successful Removing intermediate container 2e760f470df3 ---> 8d26c0d92dd6 Successfully built 8d26c0d92dd6 Successfully tagged nwabap:latest
作業後のDockerのイメージ確認してみます。開発環境でも大きい。Build、Ship、RunのShipは気軽にはできなさそうですね。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nwabap latest f54430ada5d8 3 minutes ago 14.6GB opensuse/systemd latest 97a81ab30f97 2 hours ago 162MB opensuse latest 35057ab4ef08 3 weeks ago 110MB
コンテナ起動とSAPインストール
これでDockerでSAP Netweaver 7.5 AS ABAP のコンテナを起動する準備は整いました。
以下のコマンドで、まずは、コンテナのコンソールに/bin/bashで入ります。ポート番号は適宜指定してください。
$ docker run -d \ -p 44300:44300 -p 8000:8000 -p 3200:3200 -p 3300:3300 \ --privileged -e 'container=docker' -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -h sapnwdev --name nwabap751 \ -it nwabap:latest $ docker exec -it nwabap751 /bin/bash sapnwdev:/tmp/NW751 #
コンテナに入ったカレントのディレクトリ /tmp/NW751
に置いてある run.sh
を実行すると、ログが流れ始めてSAPがインストールされます。
sapnwdev:/tmp/NW751 # ./run.sh 〜〜〜〜 〜省略〜 〜〜〜〜 OK Instance Service on host sapnwdev started ------------------------------------------- starting SAP Instance ASCS01 Startup-Log is written to /home/npladm/startsap_ASCS01.log ------------------------------------------- /usr/sap/NPL/ASCS01/exe/sapcontrol -prot NI_HTTP -nr 01 -function Start Instance on host sapnwdev started Starting Startup Agent sapstartsrv OK Instance Service on host sapnwdev started ------------------------------------------- starting SAP Instance D00 Startup-Log is written to /home/npladm/startsap_D00.log ------------------------------------------- /usr/sap/NPL/D00/exe/sapcontrol -prot NI_HTTP -nr 00 -function Start Instance on host sapnwdev started Installation of NPL successful sapnwdev:/tmp/NW751 #
npladm
ユーザにスイッチして、SAPを起動してみます。
sapnwdev:/tmp/NW751 # su - npladm sapnwdev:npladm 2> startsap ALL
ホスト側でプロセス見てみると、SAPのNPLインスタンスが起動しているのがわかります。
$ ps -ef | grep sapNPL ubuntu 4420 30298 0 09:19 ? 00:00:10 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev yomon8 16263 4867 0 09:46 pts/2 00:00:00 grep --color=auto sapNPL ubuntu 25206 25194 0 08:55 ? 00:00:00 ms.sapNPL_ASCS01 pf=/usr/sap/NPL/SYS/profile/NPL_ASCS01_sapnwdev ubuntu 25207 25194 0 08:55 ? 00:00:10 en.sapNPL_ASCS01 pf=/usr/sap/NPL/SYS/profile/NPL_ASCS01_sapnwdev ubuntu 30298 30192 0 08:55 ? 00:00:01 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30299 30192 0 08:55 ? 00:00:00 ig.sapNPL_D00 -mode=profile pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30308 30298 0 08:55 ? 00:00:12 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30309 30298 0 08:55 ? 00:00:10 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30310 30298 0 08:55 ? 00:00:07 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30311 30298 0 08:55 ? 00:00:06 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30312 30298 0 08:55 ? 00:00:02 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30313 30298 3 08:55 ? 00:01:58 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30315 30298 0 08:55 ? 00:00:02 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev ubuntu 30316 30298 0 08:55 ? 00:00:02 dw.sapNPL_D00 pf=/usr/sap/NPL/SYS/profile/NPL_D00_sapnwdev
GCEにSSHトンネルを掘る
SAPに接続するために、この記事を参考にSSHトンネル掘ります。
VM インスタンスへの安全な接続 | Compute Engine ドキュメント | Google Cloud
私のローカルPCはUbuntuなのでbashですが、Windowsでも似たような手順でいけると思います。
PROJECT=myproject01-123456 HOST=sapdev ZONE=asia-northeast1-c gcloud compute ssh ${HOST} --project ${PROJECT} --zone ${ZONE} -- \ -L 8000:localhost:8000 \ -L 44300:localhost:44300 \ -L 3200:localhost:3200 \ -L 3300:localhost:3300
SAP GUIでログオン
SAP GUI for Javaの設定ですが、以下の通り localhost:3200
に接続します。
conn=/H/localhost/S/3200
ログオン画面が表示されました。
初期のログオン情報はこちら。
項目 | 値 |
---|---|
Client | 000 |
User | SAP* |
Password | Appl1ance |
ログオンできた!
インストール直後の環境をCommit
いつもはDockerfileに全て書いてしまうのですが、今回はそうもいかないので、内容をCommitしておきます。
SAP 停止して。
sapnwdev:/tmp/NW751 # su - npladm sapnwdev:npladm 9> stopsap ALL
Commit!
docker stop nwabap751
docker commit nwabap751 nwabap751:sapinstalled
そしてこのCommitにも凄い時間かかる・・・
REPOSITORY TAG IMAGE ID CREATED SIZE nwabap751 sapinstalled 452b8f96dc7a 5 minutes ago 64.7GB nwabap latest 4b27a087921f 3 hours ago 14.6GB opensuse/systemd latest 97a81ab30f97 5 hours ago 162MB opensuse latest 35057ab4ef08 3 weeks ago 110MB
Commitできました。後はどうにでもなりそうなので、ここまでにしておきます。
所感
大変だった点
- ファイルが大きく一つ一つの処理にも時間がかかる(SAPあるある)
- Systemdの件は知っていたはずなのに、最後まで見落としていて、手戻り時間考えて辛かった
- 作業内容からDockerである良さはかなり少ない気がした
良かった点
- 小さいは正義のDockerで巨大なイメージを扱う大変さを身を持って知ることができた
- SAP知らなくてもインストールできるかも
- こういう検証だとGCEへのSSHトンネルはとても便利
- 単純に面白かったので、リポジトリの作者に感謝
参考
SAP Developper Edition FAQs
SAP AS ABAP 7.51 Developer Edition: FAQs | SAP Blogs
1391070 - Linux UUID solutions
https://launchpad.support.sap.com/#/notes/1391070
Dockerでそのままではsystemdが立ち上がらないの見落としていて、このノートの現象に引っかかった。最後の最後にエラーが出たので辛かった。