1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VirtualBox上へのOpenAMインストール

Last updated at Posted at 2020-08-26

業務で技術情報誌に OSS x セキュリティ 的な記事を書くことになり、その実験メモの第一弾として、この記事では、OpenAMがMacの中のVirtualBox上でこそっと動くまで。第二弾として、次の記事では、そのOpenAMに作ったユーザIDでAWSマネジメントコンソールにログインできるところまで。
build-openam.png

#参考

#環境
以前、会社貸与のMacBook Airで実施。今回、この記事を書くために個人使用のMacBook Proにて再実施。前提ソフトがほぼ何も入ってない状態から始めたので、同じような状況の方に良いかも。Unix好きの私としては、TerminalでUnixコマンドがバシバシ打てるmacOSは非常に好きです。

  • MacBook Pro (Retina, 15-inch, Mid 2015)
    • Processor: 2.2GHz QuadCore Intel Core i7
    • Memory: 16GB
    • macOS Catalina 10.15.6
macbookpro% sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.6
BuildVersion:	19G73

#VirtualBoxの準備
##VirtualBoxのダウンロード
最新のVirtualBoxをインストールします。言わずと知れたOracle提供の仮想化Hypervisorです。macOSでも動きます。以下からダウンロードします。

##VirtualBoxのインストール
dmgファイルを起動し、指示に従ってインストール開始。
vbox-install.png
しかし、下記のようにエラーが出て進めません。
macblock.png
これは、こちらによると、macOS 10.13 High Sierra以降で追加されたSKELと言うセキュリティ強化機能により、サードパーティ製カーネル拡張”KEXT”をロードしようとする際には許可を与えなくてはいけなくなったことによる、らしいです。システム環境設定からセキュリティとプライバシーを開くと、下部に同じ内容のメッセージが出ているので、鍵マークをクリックして、許可ボタンを押して許可します。あとは指示に従って。
sec&privacy.png

VirtualBoxを直接いじっても良いのですが、この先、いろいろなVMを立ち上げて試すことになると思うので、楽にいじりたい。ってことで、VirtaulBoxやVMwareなどのVMの構築、設定を自動で行えるVagrantを使用することにする。VagrantはHashiCorp提供のOSSで、macOS版あり。

#Vagrantの準備
##Vagrantのインストール

dmgファイルを起動して、特に問題なくインストール。
vagrant-install.png

macbookpro% vagrant --version
Vagrant 2.2.9

##Vagrantの設定
続いて、Vagrantの設定です。
Vagrant用のディレクトリ(ここではqiita)を用意して、初期化すると、Vagrantfileと言う設定ファイルが作られます。

macbookpro% mkdir qiita
macbookpro% cd qiita
macbookpro% vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

今回、構築するOpenAMのVMを下記の前提で用意します。

ホスト名 機能 OS IPアドレス ポート 備考
samlidp OpenAM CentOS 7 192.168.75.200 10022

フリーのLinuxはいくつかから選べますが、一応、Red Hatを買収した企業の社員ですので、RHELクローンのCentOSを選択。CentOSの最新版は8.2ですが、こちらによると、OpenAMはCentOSの6, 7しか対応していません。VagrantではメジャーなOSイメージが標準で提供されており、こちらを確認して、CentOS 7を選択。

このために、Vagrantfileを修正します。viなど好きなエディタで下記の通り修正。synced_folderについては後ほど解説します。

macbookpro% diff Vagrantfile.org Vagrantfile
69a70,76
>   config.vm.box="centos/7"
>   config.vm.synced_folder "../data","/vagrant_data"
>   config.vm.define "samlidp" do |node|
>     node.vm.hostname = "samlidp"
>     node.vm.network :private_network, ip: "192.168.75.200"
>     node.vm.network :forwarded_port, guest: 22, host: 10022, id: "ssh"
>   end
>   end

CentOS 7をダウンロードするには、下記コマンドを利用します。途中、VMタイプの選択を迫られるので、VirtualBoxを選びます。

macbookpro% vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'centos/7' (v2004.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box
==> box: Box download is resuming from prior download progress
Download redirected to host: cloud.centos.org
    box: Calculating and comparing box checksum...
==> box: Successfully added box 'centos/7' (v2004.01) for 'virtualbox'!

Vagrantには、ホスト側とVM側でファイルを共有できる便利な機能があります。今回もmacOS側でダウンロードしたファイルなどをVM側から参照できると非常に便利なので、使うことにします。その設定が、Vagrantfileの

config.vm.synced_folder "../data","/vagrant_data"

の部分です。これにより、ホスト側の(Vagrantfileのあるディレクトリから見て)../dataディレクトリがVM側の/vagrant_dataディレクトリとして参照可能となり、ファイルが共有できます。このため、../dataディレクトリを作った上で、OpenAM用ホスト(samlidp)を起動してみます。

macbookpro% mkdir ../data
macbookpro% vagrant up samlidp
Bringing machine 'samlidp' up with 'virtualbox' provider...
==> samlidp: Importing base box 'centos/7'...
==> samlidp: Matching MAC address for NAT networking...
==> samlidp: Checking if box 'centos/7' version '2004.01' is up to date...
==> samlidp: Setting the name of the VM: qiita_samlidp_1596494850684_97193
  (中略)
==> samlidp: Rsyncing folder: /Users/kobesuzuobu/qiita/ => /vagrant
==> samlidp: Mounting shared folders...
    samlidp: /vagrant_data => /Users/kobesuzuobu/data
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant_data /vagrant_data

The error output from the command was:

mount: unknown filesystem type 'vboxsf'

私の環境では、上記の通り、何やらエラーが出て止まりました。こちらによると、上に書いたホスト側とVM側でのファイル共有機能のバージョン不一致によるエラーらしく、Plug-Inのインストールで解消するようですので、やってみます。

macbookpro% vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching micromachine-3.0.0.gem
Fetching vagrant-vbguest-0.24.0.gem
Installed the plugin 'vagrant-vbguest (0.24.0)'!
macbookpro% vagrant up samlidp                    
Bringing machine 'samlidp' up with 'virtualbox' provider...
==> samlidp: Checking if box 'centos/7' version '2004.01' is up to date...

これでVM起動時のエラーは消えました。

##VagrantからのVM利用
早速、macOS側からvagrant sshコマンドを用いて、起動したVMにsshログインしてみます。

macbookpro% vagrant ssh samlidp
[vagrant@samlidp ~]$ 

無事にログインできたので、続いて、VM上にOpenAMのインストールを進めていきます。早速、ファイル共有機能を使おうとしましたが、VM上から/vagrant_dataファイルシステムが見えない状況になっていました。イマイチ、状況がよく分かりませんでしたが、一度、vagrant halt samlidpでVMを停止したのち、再び、upしてみたところ、何やらいろいろなものが追加インストールされた上で、正常に起動しました。

macbookpro% vagrant up samlidp    
Bringing machine 'samlidp' up with 'virtualbox' provider...
==> samlidp: Checking if box 'centos/7' version '2004.01' is up to date...
==> samlidp: Clearing any previously set forwarded ports...
==> samlidp: Clearing any previously set network interfaces...
  (中略)
==> samlidp: Rsyncing folder: /Users/kobesuzuobu/qiita/ => /vagrant
==> samlidp: Mounting shared folders...
    samlidp: /vagrant_data => /Users/kobesuzuobu/data
==> samlidp: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> samlidp: flag to force provisioning. Provisioners marked to run always will still run.

これで以下のように、dfで/vagrant_fileファイルシステムが見えるようになりました。

macbookpro% vagrant ssh samlidp
Last login: Mon Aug  3 23:10:38 2020 from 10.0.2.2
[vagrant@samlidp ~]$ df -k
Filesystem     1K-blocks      Used Available Use% Mounted on
devtmpfs          241824         0    241824   0% /dev
tmpfs             249340         0    249340   0% /dev/shm
tmpfs             249340      4584    244756   2% /run
tmpfs             249340         0    249340   0% /sys/fs/cgroup
/dev/sda1       41921540   3438796  38482744   9% /
vagrant_data   244912536 185393884  59518652  76% /vagrant_data
tmpfs              49872         0     49872   0% /run/user/1000

#ホスト側のダウンロードツール準備
今後、様々なOSSをいじることになりますが、各種ファイルのダウンロードを一発でやれるようにしておきたいので、ここで少々、準備をします。
具体的には、VM上のCentOSにwgetがないので、ホスト側で入れておこうと思います。そのwgetのインストールにはbrewコマンドが必要なので、Homebrewのインストールを行います。

##Homebrewの準備

Homebrewのインストール方法は、上記サイトに行くと書かれているように、以下のように行います。私の環境には既にインストールされていたXcodeの更新が途中で入りました。

macbookpro% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Password:
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
  (中略)
Receiving objects: 100% (775016/775016), 308.92 MiB | 1.86 MiB/s, done.
Resolving deltas: 100% (516220/516220), done.
Updating files: 100% (5415/5415), done.
Tapped 2 commands and 5161 formulae (5,440 files, 338.8MB).
Already up-to-date.
==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics data has been sent yet (or will be during this `install` run).

==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations

==> Next steps:
- Run `brew help` to get started
- Further documentation: 
    https://docs.brew.sh

以下のように、Homebrew(brewコマンド)が使用可能となりました。

macbookpro% brew --version
Homebrew 2.4.9
Homebrew/homebrew-core (git revision 2e056; last commit 2020-08-03)

##wgetの準備
次にこのHomebrewを使ってwgetをインストールします。

  • wget 1.20.3
macbookpro% brew install wget
==> Downloading https://homebrew.bintray.com/bottles/gettext-0.21.catalina.bottl
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cdea54f52b7c36ebcb5fe
######################################################################## 100.0%
  (中略)

If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

これでwgetも使用可能となりました。

macbookpro% wget --version
GNU Wget 1.20.3 built on darwin19.0.0.

-cares +digest -gpgme +https +ipv6 +iri +large-file -metalink +nls 
+ntlm +opie -psl +ssl/openssl 

Wgetrc: 
    /usr/local/etc/wgetrc (system)
Locale: 
    /usr/local/Cellar/wget/1.20.3_2/share/locale 
Compile: 
    clang -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/usr/local/etc/wgetrc" 
    -DLOCALEDIR="/usr/local/Cellar/wget/1.20.3_2/share/locale" -I. 
    -I../lib -I../lib -I/usr/local/opt/openssl@1.1/include -DNDEBUG -g 
    -O2 
Link: 
    clang -DNDEBUG -g -O2 -lidn2 -L/usr/local/opt/openssl@1.1/lib -lssl 
    -lcrypto -ldl -lz ftp-opie.o openssl.o http-ntlm.o ../lib/libgnu.a 
    -liconv -lintl -Wl,-framework -Wl,CoreFoundation -lunistring 

Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://www.gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Originally written by Hrvoje Niksic <hniksic@xemacs.org>.
Please send bug reports and questions to <bug-wget@gnu.org>.

#OpenAMの準備
##Java SDKの準備
###Java SDKのダウンロード
OpenAMのベースとしてApache Tomcatが必要です。TomcatにはJava SDKが必要です。下記を../dataディレクトリにダウンロードします。Oracleに自身のプロファイルを持っていない場合は先に登録が必要で、メールアドレスとパスワードでログインすると、ダウンロードできるようになります。

###Java SDKのインストール
VM上の/vagrant_data内にダウンロードされたファイルが見えるので、rootになって、yumでlocalinstallを試みます。

[root@samlidp ~]# yum localinstall /vagrant_data/jdk-8u261-linux-x64.rpm 
Loaded plugins: fastestmirror
Examining /vagrant_data/jdk-8u261-linux-x64.rpm: 2000:jdk1.8-1.8.0_261-fcs.x86_64
Marking /vagrant_data/jdk-8u261-linux-x64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package jdk1.8.x86_64 2000:1.8.0_261-fcs will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package    Arch       Version                   Repository                Size
================================================================================
Installing:
 jdk1.8     x86_64     2000:1.8.0_261-fcs        /jdk-8u261-linux-x64     245 M

Transaction Summary
================================================================================
Install  1 Package

Total size: 245 M
Installed size: 245 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2000:jdk1.8-1.8.0_261-fcs.x86_64                             1/1 
Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
  Verifying  : 2000:jdk1.8-1.8.0_261-fcs.x86_64                             1/1 

Installed:
  jdk1.8.x86_64 2000:1.8.0_261-fcs                                              

Complete!

##Apache Tomcatの準備
###Apache Tomcatのダウンロード
うまく行った模様なので、次にOpenAMの前提となるWebアプリケーションサーバ、Apache Tomcatのインストールに進みます。再びこちらによると、OpenAMの制約により、Tomcatは7か8を入れる必要があるので、そのうちで最新の8.5.57をインストールします。

Apache Tomcat本体のソースコードを先程、準備したwgetで../dataディレクトリにダウンロードします。

macbookpro% wget https://ftp.riken.jp/net/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz
--2020-08-26 14:19:29--  https://ftp.riken.jp/net/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz
Resolving ftp.riken.jp (ftp.riken.jp)... 134.160.38.1
Connecting to ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10379806 (9.9M) [application/x-gzip]
Saving to: ‘apache-tomcat-8.5.57.tar.gz’

apache-tomcat-8.5.5 100%[===================>]   9.90M  3.35MB/s    in 3.0s    

2020-08-26 14:19:32 (3.35 MB/s) - ‘apache-tomcat-8.5.57.tar.gz’ saved [10379806/10379806]

###Apache Tomcatのインストールと設定
VMにログインして、インストール、設定を続けます。まずはTomcatの稼働に必要なユーザIDとグループの作成です。

[vagrant@samlidp ~]$ sudo su -
[root@samlidp ~]# useradd tomcat
[root@samlidp ~]# passwd tomcat
Changing password for user tomcat.
New password: ナイショ
BAD PASSWORD: The password contains the user name in some form
Retype new password: 
passwd: all authentication tokens updated successfully.

ホストOSとの共有ディレクトリ/vagrant_dataに行くと、ダウンロードしたtar.gzファイルが見えるので、それを展開、所定の場所に移動して、所有者、所有グループを上で作ったものに変更します。

[root@samlidp ~]# cd /vagrant_data
[root@samlidp vagrant_data]# tar xvpzf apache-tomcat-8.5.57.tar.gz
apache-tomcat-8.5.57/conf/
apache-tomcat-8.5.57/conf/catalina.policy
apache-tomcat-8.5.57/conf/catalina.properties
  (中略)
apache-tomcat-8.5.57/bin/startup.sh
apache-tomcat-8.5.57/bin/tool-wrapper.sh
apache-tomcat-8.5.57/bin/version.sh
[root@samlidp vagrant_data]# mv apache-tomcat-8.5.57 /opt/tomcat
[root@samlidp vagrant_data]# cd /opt
[root@samlidp opt]# chown -R tomcat:tomcat tomcat

次に、TomcatをSystemd経由で起動させるため、そのサービス登録用のファイルを用意します。viなどのエディタで下記のように2つのファイルを作成し、Systemdをリロードします。

[root@samlidp opt]# cat /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 8
After=network.target

[Service]
User=tomcat
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
KillMode=none
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

[root@samlidp opt]# cat /etc/sysconfig/tomcat
Java_HOME="/usr/java/jdk1.8.0_261-amd64/jre/"
Java_OPTS="-DJava.security.egd=file:/dev/./urandom"

[root@samlidp opt]# systemctl daemon-reload

これで準備が出来たので、TomcatをSystemd経由で起動し、確認します。

[root@samlidp opt]# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
[root@samlidp opt]# systemctl start tomcat
[root@samlidp opt]# systemctl status tomcat
● tomcat.service - Apache Tomcat 8
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-08-26 05:30:19 UTC; 6s ago
  Process: 7993 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 8007 (java)
   CGroup: /system.slice/tomcat.service
           └─8007 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/c...

Aug 26 05:30:19 samlidp systemd[1]: Starting Apache Tomcat 8...
Aug 26 05:30:19 samlidp systemd[1]: Started Apache Tomcat 8.
[root@samlidp opt]# ss -nat | grep 8080
LISTEN     0      100       [::]:8080                  [::]:*                  

問題なく、8080ポートでApache Tomcatが起動しているようなので、早速、ブラウザからアクセスしてみます。Vagrantfileに書いた通り、Tomcatが動いているsamlidpと言うVMはIPアドレス: 192.168.75.200で動いてるので、macOS本体のFirefoxから、http://192.168.75.200:8080/ でアクセスします。
apache-tomcat.png

##OpenAMの準備
###OpenAMのダウンロード
Apache Tomcatに無事にアクセスできましたので、OpenAMのインストールに進みます。OpenAMの最新は13.5.2のようですが、13.5.xはどれもSubscriptionが必要なようなので、13.0.0のzipファイルをダウンロードします。ダウンロードにあたり、ユーザ登録が必要で、ユーザID、パスワードと認証メソッド(私は単に無償ソフトを使うだけなのでSkipを選択)でログインします。

###OpenAMのインストールと設定
CentOSにはunzipがデフォルトで入ってないので、ホスト側のmacOSで解きます。

macbookpro% unzip OpenAM-13.0.0.zip 
Archive:  OpenAM-13.0.0.zip
   creating: openam/
   creating: openam/legal-notices/
  inflating: openam/legal-notices/license.txt  
  inflating: openam/legal-notices/THIRDPARTYREADME.txt  
   creating: openam/ldif/
  inflating: openam/ldif/fam_sds_schema.ldif  
  inflating: openam/ldif/fam_sds_index.ldif  
  inflating: openam/ldif/fam_tivolids_schema.ldif  
  inflating: openam/ldif/fam_ad_schema.ldif  
  inflating: openam/ldif/README      
  inflating: openam/OpenAM-13.0.0.war  
  inflating: openam/ClientSDK-13.0.0.jar  
  inflating: openam/Fedlet-13.0.0.zip  
  inflating: openam/SSOAdminTools-13.0.0.zip  
  inflating: openam/ExampleClientSDK-CLI-13.0.0.zip  
  inflating: openam/ExampleClientSDK-WAR-13.0.0.war  
  inflating: openam/IDPDiscovery-13.0.0.war  
  inflating: openam/SSOConfiguratorTools-13.0.0.zip  

VMにログインし、展開された中のwarファイルをTomcatの所定ディレクトリにコピーして所有者を変更します。

[vagrant@samlidp ~]$ sudo su -
Last login: Wed Aug 26 05:24:47 UTC 2020 on pts/0
[root@samlidp ~]# cd /vagrant_data/openam/
[root@samlidp openam]# cp OpenAM-13.0.0.war /opt/tomcat/webapps/openam.war
[root@samlidp openam]# cd /opt/tomcat/webapps/
[root@samlidp webapps]# chown tomcat:tomcat openam.war
[root@samlidp webapps]# chmod 755 openam.war

次に、Apache Tomcatを再起動して確認します。

[root@samlidp webapps]# systemctl restart tomcat
[root@samlidp webapps]# ss -nat | grep 808
LISTEN     0      100       [::]:8080                  [::]:*                  
TIME-WAIT  0      0        [::1]:34808                [::1]:8080    

うまく稼働しているようなので、ブラウザから http://192.168.75.200:8080/openam/ にアクセスしてみます。
openam-default.png
今後のことを考えて、macOS上で/etc/hostsで名前解決できるようにしておきます。ここでは、勝手に作ったドメインkawajun.localを利用します。

macbookpro% sudo vi /etc/hosts
Password:
  (以下を追記)
192.168.75.200  samlidp.kawajun.local samlidp

この名前を使ったアクセスも念のため試しておきます。
openam-domain.png
めでたく、macOS上のFirefoxからOpenAMのデフォルトページを開くことができました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?