Ansible
PDS
Personium
情報銀行
Version1.7.4

情報銀行のプラットフォームとして利用できるかもしれないPersonium(PDS) を検証してみる 3 <Ansibleでインストールする>


さて! ようやくOSSチームから提供されているAnsibleを利用し「Personium」をセットアップする。

いよいよ本題に突入です。

百聞は一見にしかず… 論より証拠… 触れる「Personium」を建てましょう。


 参照ドキュメント:https://personium.io/docs/ja/server-operator/setup.html

前提として…

今回私は、MicrosoftクラウドサービスであるAzureのVirtual Machinesでインスタンスを建て、これにセットアップします。またAnsibleのドキュメントでは自己証明書でサーバ証明書を取得する方法が提示されていますが、せっかく Let's Encrypt という無料でサーバ証明書を発行できるサービスがあるので、それを利用することにします。

ただしこれは、自分でホストを追加できるドメインを保持していて、且つDNSでHOST名を付与することができる場合です。自社でドメインは保持しているけど、HOSTを追加するには非常に煩雑な手続きが必要な場合などやHOSTの払い出しに長時間を費やすこととなるような場合は、ドキュメントの通り自己証明書で実現することになります。


セットアップ手順


1.セットアップ対象のサーバーを建て、


2.セキュリティグループなどでポートを必要な範囲で解放し、


3.Global IP を DNS に登録し FQDN でアクセスが可能なことを確認する

設定項目

Host名
personium.takky.org  ※自身のドメインにホストを登録

Private IP
10.0.12.4

OS
CentOS 7.5

インスタンスサイズ
Azure Standard D2sv3 (2vcpu、8GBメモリ) <最低メモリ:4GB>

解放ポート
ssh(22),https(443),http(80)  ※必要に応じ解放範囲を限定


4.Gitに公開されているPersonium用のAnsibleをCloneし対象のサーバーに配置する

 ダウンロードファイル:https://github.com/personium/ansible/archive/master.zip


まずは対象のサーバーにログイン


$ ssh {user}@personium.takky.org


ダウンロードと圧縮ファイルの伸張


$ wget https://github.com/personium/ansible/archive/master.zip
--2019-02-03 01:55:24-- https://github.com/personium/ansible/archive/master.zip
github.com (github.com) をDNSに問いあわせています... 192.30.255.112, 192.30.255.113
github.com (github.com)|192.30.255.112|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://codeload.github.com/personium/ansible/zip/master [続く]
--2019-02-03 01:55:24-- https://codeload.github.com/personium/ansible/zip/master
codeload.github.com (codeload.github.com) をDNSに問いあわせています... 192.30.255.121, 192.30.255.120
codeload.github.com (codeload.github.com)|192.30.255.121|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [application/zip]
`master.zip' に保存中
[ <=> ] 557,085 1.01MB/s 時間 0.5s
2019-02-03 01:55:25 (1.01 MB/s) - `master.zip'
へ保存終了 [557085]

$ ls
master.zip

$ unzip master.zip
Archive: master.zip
b820dac705e81e5be61e90e83b80807776327bfb
creating: ansible-master/
creating: ansible-master/1-server_unit/
inflating: ansible-master/1-server_unit/1-server_unit.jpg
inflating: ansible-master/1-server_unit/Ansible_Settings_Instruction.md
inflating: ansible-master/1-server_unit/README.md
inflating: ansible-master/1-server_unit/ansible.cfg
:
inflating: ansible-master/3-server_unit/web.yml
inflating: ansible-master/Create_Server_Certificate_for_Letsencript.md
inflating: ansible-master/How_to_generate_Self-signed_Unit_Certificate.md
inflating: ansible-master/LICENSE
inflating: ansible-master/README.md

$ ls
ansible-master master.zip


Ansibleの実行用に配置(1-server)

(ドキュメントではコピーしていたが、シンボリックリンクで実施)

$ sudo ln -s /home/pds/ansible-master/1-server_unit/ /root/ansible

$ sudo ls -l /root | grep ^l
lrwxrwxrwx. 1 root root 39 2月 3 02:20 ansible -> /home/pds/ansible-master/1-server_unit/


5.Ansibleの設定ファイル(static_inventory/hosts)を環境に合わせるため修正

 参考ドキュメント:https://github.com/personium/ansible/blob/master/1-server_unit/Ansible_Settings_Instruction.md

$ vim ~/ansible-master/1-server_unit/static_inventory/hosts

############ Private IP Address of Bastion server ############
[tag_ServerType_bastion]
#Fill in the Private IP Address of Bastion server
#{Bastion_Private_IP}
# 上の行を、下 ↓ ↓ ↓ のようにプライベートIPに修正
10.0.12.4

############ Private IP Address of Personium server ############
[tag_ServerType_personium]
#Fill in the Private IP Address of Personium server
#{Personium_Private_IP}
# 上の行を、下 ↓ ↓ ↓ のようにプライベートIPに修正
10.0.12.4

############ Setting items of bastion server ############
[tag_ServerType_bastion:vars]

## Hostname
#tag_Name={Bastion_Tag_Name}
# 上の行を、下 ↓ ↓ ↓ のように修正
tag_Name=bastion-web

## User who runs ansible
#ansible_ssh_user={Ansible_Execution_User}
# 上の行を、下 ↓ ↓ ↓ のようにユーザー名に修正
ansible_ssh_user=root

## Secret key for executing ansible(Absolute path)
#ansible_ssh_private_key_file={SSH_PrivateKey}
# 上の行を、下 ↓ ↓ ↓ のようにホルダー名に修正
ansible_ssh_private_key_file=/root/.ssh/id_rsa

# Master Token of Personium
#master_token={Master_Token}
# 上の行を、下 ↓ ↓ ↓ のようにパスワードに修正
# 非常に強力なユーザーのパスワードなので、容易に想像できないものを設定
# 且つ第三者に渡らないよう管理してください。
master_token={********}

## Web server FQDN
#base_url={Personium_FQDN}
# 上の行を、下 ↓ ↓ ↓ のようにFQDNに修正
base_url=personium.takky.org

############ Setting items of Personium server ############
[tag_ServerType_personium:vars]

## Hostname
#tag_Name={Personium_Tag_Name}
# 上の行を、下 ↓ ↓ ↓ のように修正
tag_Name=test-ap

## User who runs ansible
#ansible_ssh_user={Ansible_Execution_User}
# 上の行を、下 ↓ ↓ ↓ のようにユーザー名に修正
ansible_ssh_user=root

## Secret key for executing ansible(Absolute path)
#ansible_ssh_private_key_file={SSH_PrivateKey}
# 上の行を、下 ↓ ↓ ↓ のようにホルダー名に修正
ansible_ssh_private_key_file=/root/.ssh/id_rsa

# Master Token of Personium
#master_token={Master_Token}
# 上の行を、下 ↓ ↓ ↓ のように(bastionで設定しものと同じ)パスワードに修正
# 非常に強力なユーザーのパスワードなので、容易に想像できないものを設定
# 且つ第三者に渡らないよう管理してください。
master_token={********}

## Web server FQDN
#base_url={Personium_FQDN}
# 上の行を、下 ↓ ↓ ↓ のようにFQDNに修正
base_url=personium.takky.org


6.ユニット証明として利用するサーバ証明書を生成する

$ sudo su -

# cd /root/ansible/resource/ap/opt/x509/
# ls
empty

# openssl genrsa -out unit.key 2048 -outform DER
Generating RSA private key, 2048 bit long modulus
..+++
..............+++
e is 65537 (0x10001)

# ls
empty unit.key


ここまでは準備。


そして、ここでCSRを作成する。

「 Common Name 」以外は、オプションです。オプションのままで進める場合は Enter のみを入力。

 Country Name (2 letter code) [XX]:            オプション(EnterのみでOK)

 State or Province Name (full name) []:           オプション(EnterのみでOK)

 Locality Name (eg, city) [Default City]:           オプション(EnterのみでOK)

 Organization Name (eg, company) [Default Company Ltd]:   オプション(EnterのみでOK)

 Organizational Unit Name (eg, section) []:          オプション(EnterのみでOK)

 Common Name (eg, your name or your server's hostname) []: に personium.taky.org を入力

 Email Address []:                      オプション(EnterのみでOK)


# openssl req -new -key unit.key -out unit.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]: <Enter>
State or Province Name (full name) []: <Enter>
Locality Name (eg, city) [Default City]: <Enter>
Organization Name (eg, company) [Default Company Ltd]: <Enter>
Organizational Unit Name (eg, section) []: <Enter>
Common Name (eg, your name or your server's hostname) []:personium.takky.org
Email Address []: <Enter>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <Enter>
An optional company name []: <Enter>

# ls
empty unit.csr unit.key


CSRからCRT(証明書)を作成する

# openssl x509 -req -days 3650 -signkey unit.key -out unit-self-sign.crt < unit.csr

Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd/CN=personium.takky.org
Getting Private key

# ls
empty unit.csr unit.key unit-self-sign.crt


7.nginx にセットする、サーバ証明書を Let's Encrypt で取得する


Let's Encryptでサーバ証明書を取得するるためには、以下の条件が整っている必要があります。


  • 443ポートでコネクションを接続することができる(セキュリティグループなどで443が解放されている)

  • 80ポートでコネクションを接続することができる(セキュリティグループなどで80が解放されている)

  • サーバ証明書を取得するホスト(personium.takky.org)が名前解決できる(digなどでIPを取得できる)


まずは Gitをインストールする


$ sudo su -
# yum install git-all
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
openlogic | 2.9 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/5): base/7/x86_64/group_gz | 166 kB 00:00:00
(2/5): openlogic/7/x86_64/primary_db | 76 kB 00:00:00
    :
Transaction Summary
=======================================================================================
Install 1 Package (+118 Dependent packages)
Upgrade ( 2 Dependent packages)

Total download size: 73 M
Is this ok [y/d/N]: y


ここで"y"を入力する。

…と、実際のインストールがそのまま進みます。

Downloading packages:

Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/121): adwaita-cursor-theme-3.28.0-1.el7.noarch.rpm | 641 kB 00:00:00
(2/121): apr-1.4.8-3.el7_4.1.x86_64.rpm | 103 kB 00:00:00
(3/121): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:00
(4/121): at-spi2-atk-2.26.2-1.el7.x86_64.rpm | 81 kB 00:00:00
   :
xkeyboard-config.noarch 0:2.24-1.el7

Dependency Updated:
freetype.x86_64 0:2.8-12.el7_6.1 glib2.x86_64 0:2.56.1-2.el7

Complete!

問題なくインストールが完了すると、"Complete!"で終了。


次に、Let's Encrypt のクライアントである certbot をインストールする。


# cd /usr/local
# git clone https://github.com/certbot/certbot
Cloning into 'certbot'...
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 62290 (delta 6), reused 2 (delta 2), pack-reused 62270
Receiving objects: 100% (62290/62290), 20.40 MiB | 11.99 MiB/s, done.
Resolving deltas: 100% (45300/45300), done.


ここからが、Let's Encrypt で証明書取得作業の本番です。

# cd /usr/localcertbot

# ./certbot-auto certonly --standalone -t
Bootstrapping dependencies for RedHat-based OSes... (you can skip this with --no-bootstrap)
yum is /bin/yum
yum is hashed (/bin/yum)
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package ca-certificates-2018.2.22-70.0.el7_5.noarch already installed and latest version
No package python-pip available.
   :
Transaction Summary
========================================================================================
Install 7 Packages (+23 Dependent packages)
Upgrade 2 Packages (+17 Dependent packages)

Total download size: 65 M
Is this ok [y/d/N]: y


ここで"y"を入力する。

…と、インストールが進みます。


Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/49): dwz-0.11-3.el7.x86_64.rpm | 99 kB 00:00:00
(2/49): e2fsprogs-1.42.9-13.el7.x86_64.rpm | 699 kB 00:00:00
(3/49): e2fsprogs-libs-1.42.9-13.el7.x86_64.rpm | 167 kB 00:00:00
   :
Complete!
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): メールアドレス


メールアドレスが求められますので、あなたのメールアドレスを入力します。

ここでやめる場合は 'c' を入力し、処理をキャンセルします。


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A


ライセンスの承諾を求められますので、 'A' と入力し進めます。

ここでやめる場合は 'c' を入力し、処理をキャンセルします。


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'
d like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:


先ほど登録したメールアドレスに、「Electronic Frontier」に共有しても良いか問われます。 'Y' か 'N' のいずれかを入力し進めます。

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'

to cancel): personium.takky.org


証明書を発行する対象のホスト名(domain)を指定します。


※重要 このホスト名(domain)はこの時点で名前解決できる必要があります。

ここでやめる場合は 'c' を入力し、処理をキャンセルします。

Obtaining a new certificate

Performing the following challenges:
http-01 challenge for personium.takky.org
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/personium.takky.org/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/personium.takky.org/privkey.pem
Your cert will expire on 2019-05-05. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le


上記の様にエラーがでなければ、証明書の取得が完了です。


取得した証明書等は、以下のように確認します。


                  ↓ 取得対象のホスト名
# ls -alh /etc/letsencrypt/live/personium.takky.org/
total 4.0K
drwxr-xr-x. 2 root root 93 Feb 4 03:26 .
drwx------. 3 root root 47 Feb 4 03:26 ..
lrwxrwxrwx. 1 root root 43 Feb 4 03:26 cert.pem -> ../../archive/personium.takky.org/cert1.pem
lrwxrwxrwx. 1 root root 44 Feb 4 03:26 chain.pem -> ../../archive/personium.takky.org/chain1.pem
lrwxrwxrwx. 1 root root 48 Feb 4 03:26 fullchain.pem -> ../../archive/personium.takky.org/fullchain1.pem
lrwxrwxrwx. 1 root root 46 Feb 4 03:26 privkey.pem -> ../../archive/personium.takky.org/privkey1.pem
-rw-r--r--. 1 root root 692 Feb 4 03:26 README


次に、取得した Let's Encrypt の証明書を、Ansible実行時の環境に合わせて配置します。

# cd /root/ansible/resource/web/opt/nginx/conf

# ls
backend.conf.j2 host-acl.conf nginx.conf personium_version.d server_name.conf

                 ↓ 取得対象のホスト名
# ln -s /etc/letsencrypt/live/personium.takky.org/fullchain.pem server.crt
                 ↓ 取得対象のホスト名
# ln -s /etc/letsencrypt/live/personium.takky.org/privkey.pem server.key

# ls -l | grep ^l
lrwxrwxrwx. 1 root root 55 Feb 4 03:37 server.crt -> /etc/letsencrypt/live/personium.takky.org/fullchain.pem
lrwxrwxrwx. 1 root root 53 Feb 4 03:37 server.key -> /etc/letsencrypt/live/personium.takky.org/privkey.pem


8.公開鍵の生成


公開鍵を[/root/.ssh/id_rsa]として生成する。公開鍵の出力先は変更しないほうが作業上混乱が少ないと思うので、デフォルト(Enter)のままで良い。


「Enter passphrase (empty for no passphrase):」で任意のパスフレーズを入力。


# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <Enter>
Enter passphrase (empty for no passphrase): <任意のパスフレーズを入力>
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:nouAmV991MQtbzu5ii5mmmLt0UVLLM92iej6EUcqNjI root@personium
The key's randomart image is:
+---[RSA 2048]----+
| |
| . . . |
| . = + . |
| X = + |
| E + S X + o |
| + + B B . . o |
| + ..o B . + |
| .oo.=++ . o |
| ..o*=ooo ... |
+----[SHA256]-----+

# cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

# chmod 600 /root/.ssh/authorized_keys

# ls -alh /root/.ssh/
total 12K
drwx------. 2 root root 61 Feb 4 03:56 .
dr-xr-x---. 6 root root 238 Feb 4 03:48 ..
-rw-------. 1 root root 396 Feb 4 03:55 authorized_keys
-rw-------. 1 root root 1.8K Feb 4 03:48 id_rsa
-rw-r--r--. 1 root root 396 Feb 4 03:48 id_rsa.pub


9.Ansible の実行


EPEL(7-11)リポジトリの追加


$ sudo su -

# yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
Loaded plugins: fastestmirror, langpacks
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Examining /var/tmp/yum-root-2MVxSQ/epel-release-7-11.noarch.rpm: epel-release-7-11.noarch
Marking /var/tmp/yum-root-2MVxSQ/epel-release-7-11.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================
Package Arch Version Repository Size
=========================================================================================
Installing:
epel-release noarch 7-11 /epel-release-7-11.noarch 24 k

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

Total size: 24 k
Installed size: 24 k
Is this ok [y/d/N]: y


ここで"y"を入力する。

…と、実際のインストールがそのまま進みます。


Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-11.noarch 1/1
Verifying : epel-release-7-11.noarch 1/1

Installed:
epel-release.noarch 0:7-11

Complete!

問題なくインストールが完了すると、"Complete!"で終了。


ansible のインストール

# yum install ansible

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 9.9 kB 00:00:00
* epel: ftp.riken.jp
epel | 4.7 kB 00:00:00
(1/3): epel/x86_64/group_gz | 88 kB 00:00:00
(2/3): epel/x86_64/updateinfo | 956 kB 00:00:00
(3/3): epel/x86_64/primary_db | 6.6 MB 00:00:00
Resolving Dependencies
--> Running transaction check
   :
Transaction Summary
==============================================================================================================================================================
Install 1 Package (+17 Dependent packages)

Total download size: 16 M
Installed size: 79 M
Is this ok [y/d/N]: y


ここで"y"を入力する。


Downloading packages:
(1/18): python-cffi-1.6.0-5.el7.x86_64.rpm | 218 kB 00:00:00
(2/18): libtommath-0.42.0-6.el7.x86_64.rpm | 36 kB 00:00:00
(3/18): python-httplib2-0.9.2-1.el7.noarch.rpm | 115 kB 00:00:00
(4/18): python-enum34-1.0.4-1.el7.noarch.rpm | 52 kB 00:00:00
    :
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
Userid : "Fedora EPEL (7) <epel@fedoraproject.org>"
Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
Package : epel-release-7-11.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Is this ok [y/N]: y


もう一度"y"を入力する。

Running transaction check

Running transaction test
Transaction test succeeded
Running transaction
Installing : python-babel-0.9.6-8.el7.noarch 1/18
Installing : python-ply-3.4-11.el7.noarch 2/18
Installing : python-pycparser-2.14-1.el7.noarch 3/18
Installing : python-cffi-1.6.0-5.el7.x86_64 4/18
   :
Installed:
ansible.noarch 0:2.7.6-1.el7

Dependency Installed:
libtomcrypt.x86_64 0:1.17-26.el7 libtommath.x86_64 0:0.42.0-6.el7 python-babel.noarch 0:0.9.6-8.el7
python-cffi.x86_64 0:1.6.0-5.el7 python-enum34.noarch 0:1.0.4-1.el7 python-httplib2.noarch 0:0.9.2-1.el7
python-idna.noarch 0:2.4-1.el7 python-jinja2.noarch 0:2.7.2-2.el7 python-keyczar.noarch 0:0.71c-2.el7
python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7 python-ply.noarch 0:3.4-11.el7
python-pycparser.noarch 0:2.14-1.el7 python2-crypto.x86_64 0:2.6.1-15.el7 python2-cryptography.x86_64 0:1.7.2-2.el7
python2-jmespath.noarch 0:0.9.0-3.el7 sshpass.x86_64 0:1.06-2.el7

Complete!

問題なくインストールが完了すると、"Complete!"で終了。


Oracle JDK(1.8.0_131) のダウンロード

※ Ansible実行中に Oracle JDK をダウンロードする工程があるが、13:00ころに実行するとなぜかエラーとなり、Ansibleが中断する。15:00ころ以降に実行すると問題はないのだが、結構これがイライラします。

しかし、Ansibleの実行直前に、JKDを wget しておくと、この問題が回避される様である。

これがなぜ回避されるのかは深くは追求していませんが、なぜかうまくいくので良しとします。


$ sudo su -

# wget -q -O /usr/src/jdk1.8.0_131.tar.gz --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz creates=/usr/src/jdk1.8.0_131.tar.gz


Ansible 実行


# cd /root/ansible/

# date; ansible-playbook init_personium.yml ; date
Mon Feb 4 04:55:13 UTC 2019
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be removed in
version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [tag_ServerType_bastion] *****************************************************************************************

TASK [Change base_url] *****************************************************************************************
skipping: [10.0.12.4]

TASK [install unzip] *****************************************************************************************
ok: [10.0.12.4]

TASK [install wget] *****************************************************************************************
ok: [10.0.12.4]

TASK [install parted] *****************************************************************************************
ok: [10.0.12.4]

TASK [Hostname setting] *****************************************************************************************
changed: [10.0.12.4]

TASK [Deploy /etc/hosts] *****************************************************************************************
changed: [10.0.12.4]

TASK [Download JDK] *****************************************************************************************
[WARNING]: Consider using the get_url or uri module rather than running wget. If you need to use command because get_url or uri is insufficient you can add
warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message.

changed: [10.0.12.4]

TASK [Expand JDK] *****************************************************************************************
[WARNING]: Consider using the unarchive module rather than running tar. If you need to use command because unarchive is insufficient you can add warn=False
to this command task or set command_warnings=False in ansible.cfg to get rid of this message.

changed: [10.0.12.4]

TASK [Change owner JDK] *****************************************************************************************
changed: [10.0.12.4]

TASK [Deploy JDK] *****************************************************************************************
changed: [10.0.12.4]
   :


Ansible中のJDKのダウンロードもうまく行っています。このまま15分ほど、処理が続きます…

TASK [build module] *****************************************************************************************

changed: [10.0.12.4]

TASK [move module] *****************************************************************************************
changed: [10.0.12.4]

PLAY [tag_ServerType_personium] *****************************************************************************************

TASK [Deploy /etc/cron.d/log-delete-cron] *****************************************************************************************
Enter passphrase for key '/root/.ssh/id_rsa': <公開鍵の作成時に入力したパスフレーズ>


15分後くらいに、公開鍵の作成時に入力したパスフレーズの入力が求められるので、間違わず入力。

もし間違っても、再度Ansibleを実行すれば、面倒なことはなく再実行できます。


   :
changed: [10.0.12.4]

TASK [install unzip] *****************************************************************************************
ok: [10.0.12.4]

TASK [install wget] *****************************************************************************************
ok: [10.0.12.4]

TASK [install parted] *****************************************************************************************
ok: [10.0.12.4]
   :

その後10分くらいで全行程が完了します。

しばらくお待ちください…

   :

TASK [Deploy /tmp/personium-init-svcmgr.sh] *****************************************************************************************
changed: [10.0.12.4]

TASK [Execute /tmp/personium-init-svcmgr.sh] *****************************************************************************************
changed: [10.0.12.4]

TASK [Delete /tmp/personium-init-svcmgr.sh] *****************************************************************************************
changed: [10.0.12.4]

TASK [Delete personium-init-svcmgr.log] *****************************************************************************************
changed: [10.0.12.4]

PLAY RECAP *****************************************************************************************
10.0.12.4 : ok=271 changed=196 unreachable=0 failed=0

Mon Feb 4 05:28:43 UTC 2019


failed=0 なので正常終了です!!


では、簡単に確認してみましょう。


# curl -L -i https://personium.takky.org/
HTTP/1.1 200
Date: Mon, 04 Feb 2019 05:33:54 GMT
Content-Type: text/plain
Content-Length: 84
Connection: keep-alive
X-Personium-Version: 1.7.4
Server: Personium

{"unit":{"path_based_cellurl_enabled":true,"url":"https:\/\/personium.takky.org\/"}}


レスポンスコードが"HTTP/1.1 200"です。いい感じですね…


"X-Personium-Version: 1.7.4"とバージョンは 1.7.4 がセットアップされている様です。


10.personium-plugins のインストール

Ansibleでのセットアップでは、この後のエントリーで説明したい作業で使用する「personium-plugins」がインストールされていません。

なのでついでに、ここでインストールしてしまいましょう。


mavenのインストール

この作業の前に、一度ログアウトして、そして再ログインしておいてください。

Ansible実行直後では、maven の実行ディレクトリである"/opt/jdk/bin"に path に登録されていません。

再ログインすることにより、path がセットされ maven が実行できるようになります。


$ sudo su -

# mkdir ~/maven
# cd ~/maven

# wget http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
--2019-02-04 05:42:19-- http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
Resolving ftp.jaist.ac.jp (ftp.jaist.ac.jp)... 150.65.7.130, 2001:df0:2ed:feed::feed
Connecting to ftp.jaist.ac.jp (ftp.jaist.ac.jp)|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9063587 (8.6M) [application/x-gzip]
Saving to: ‘apache-maven-3.6.0-bin.tar.gz’
100%[===================================================>] 9,063,587 11.7MB/s in 0.7s
2019-02-04 05:42:20 (11.7 MB/s) - ‘apache-maven-3.6.0-bin.tar.gz’ saved [9063587/9063587]

# tar xzvf apache-maven-3.6.0-bin.tar.gz
# ls
apache-maven-3.6.0 apache-maven-3.6.0-bin.tar.gz

# ln -s ~/maven/apache-maven-3.6.0/bin/mvn /opt/jdk/bin/
# ls -l /opt/jdk/bin | grep ^l
lrwxrwxrwx. 1 root root 38 Feb 4 05:44 mvn -> /root/maven/apache-maven-3.6.0/bin/mvn

# mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18:41:47Z)
Maven home: /root/maven/apache-maven-3.6.0
Java version: 1.8.0_192, vendor: Oracle Corporation, runtime: /opt/jdk8u192-b12/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.11.6.el7.x86_64", arch: "amd64", family: "unix"


正しく実行されれば、上記のようにバージョン(3.6.0)が表示されます。


personium-plugins(4つ)のインストール


◆ personium-ex-httpclient

# mkdir /personium/personium-ex-xxxxx

# cd /personium/personium-ex-xxxxx

# wget https://github.com/personium/personium-ex-httpclient/archive/master.zip
--2019-02-04 05:57:47-- https://github.com/personium/personium-ex-httpclient/archive/master.zip
Resolving github.com (github.com)... 192.30.255.113, 192.30.255.112
Connecting to github.com (github.com)|192.30.255.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/personium/personium-ex-httpclient/zip/master [following]
--2019-02-04 05:57:47-- https://codeload.github.com/personium/personium-ex-httpclient/zip/master
Resolving codeload.github.com (codeload.github.com)... 192.30.255.120, 192.30.255.121
Connecting to codeload.github.com (codeload.github.com)|192.30.255.120|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
[ <=> ] 21,256 --.-K/s in 0.1s
2019-02-04 05:57:48 (200 KB/s) - ‘master.zip’ saved [21256]

# unzip master.zip
   :
creating: personium-ex-httpclient-master/src/test/java/io/personium/engine/extension/
creating: personium-ex-httpclient-master/src/test/java/io/personium/engine/extension/httpclient/
inflating: personium-ex-httpclient-master/src/test/java/io/personium/engine/extension/httpclient/Ext_HttpClientTest.java

# cd personium-ex-httpclient-master/
# mvn clean package -DskipTests
   :
[INFO] Replacing /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient.jar with /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient-1.1.2-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.395 s
[INFO] Finished at: 2019-02-04T06:01:28Z
[INFO] ------------------------------------------------------------------------

# ln -s /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient.jar /personium/personium-engine/extensions

# ls -l /personium/personium-engine/extensions | grep ^l
lrwxrwxrwx. 1 root root 95 Feb 4 06:03 personium-ex-httpclient.jar -> /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient.jar

# mv ../master.zip ../personium-ex-httpclient.zip


◆ personium-ex-mailsender

# cd /personium/personium-ex-xxxxx

# wget https://github.com/personium/personium-ex-mailsender/archive/master.zip
--2019-02-04 06:10:40-- https://github.com/personium/personium-ex-mailsender/archive/master.zip
Resolving github.com (github.com)... 192.30.255.113, 192.30.255.112
Connecting to github.com (github.com)|192.30.255.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/personium/personium-ex-mailsender/zip/master [following]
--2019-02-04 06:10:41-- https://codeload.github.com/personium/personium-ex-mailsender/zip/master
Resolving codeload.github.com (codeload.github.com)... 192.30.255.121, 192.30.255.120
Connecting to codeload.github.com (codeload.github.com)|192.30.255.121|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
[ <=> ] 21,516 --.-K/s in 0.1s
2019-02-04 06:10:42 (196 KB/s) - ‘master.zip’ saved [21516]

# unzip master.zip
   :
creating: personium-ex-mailsender-master/src/test/java/io/personium/engine/
creating: personium-ex-mailsender-master/src/test/java/io/personium/engine/extension/
creating: personium-ex-mailsender-master/src/test/java/io/personium/engine/extension/mailsender/
inflating: personium-ex-mailsender-master/src/test/java/io/personium/engine/extension/mailsender/Ext_MailSenderTest.java

# cd personium-ex-mailsender-master/
# mvn clean package -DskipTests
   :
[INFO] Replacing /personium/personium-ex-xxxxx/personium-ex-mailsender-master/target/personium-ex-mailsender.jar with /personium/personium-ex-xxxxx/personium-ex-mailsender-master/target/personium-engine-extension-mailsender-1.5.1-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.749 s
[INFO] Finished at: 2019-02-04T06:13:16Z
[INFO] ------------------------------------------------------------------------

# ln -s /personium/personium-ex-xxxxx/personium-ex-mailsender-master/target/personium-ex-mailsender.jar /personium/personium-engine/extensions

# ls -l /personium/personium-engine/extensions | grep ^l
lrwxrwxrwx. 1 root root 95 Feb 4 06:03 personium-ex-httpclient.jar -> /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient.jar
lrwxrwxrwx. 1 root root 95 Feb 4 06:13 personium-ex-mailsender.jar -> /personium/personium-ex-xxxxx/personium-ex-mailsender-master/target/personium-ex-mailsender.jar

# mv ../master.zip ../personium-ex-mailsender.zip


◆personium-ex-slack-messenger

# cd /personium/personium-ex-xxxxx

# wget https://github.com/personium/personium-ex-slack-messenger/archive/master.zip
--2019-02-04 06:16:48-- https://github.com/personium/personium-ex-slack-messenger/archive/master.zip
Resolving github.com (github.com)... 192.30.255.112, 192.30.255.113
Connecting to github.com (github.com)|192.30.255.112|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/personium/personium-ex-slack-messenger/zip/master [following]
--2019-02-04 06:16:49-- https://codeload.github.com/personium/personium-ex-slack-messenger/zip/master
Resolving codeload.github.com (codeload.github.com)... 192.30.255.121, 192.30.255.120
Connecting to codeload.github.com (codeload.github.com)|192.30.255.121|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
[ <=> ] 18,144 --.-K/s in 0.1s
2019-02-04 06:16:49 (162 KB/s) - ‘master.zip’ saved [18144]

# unzip master.zip
   :
creating: personium-ex-slack-messenger-master/src/test/java/io/personium/engine/extension/
creating: personium-ex-slack-messenger-master/src/test/java/io/personium/engine/extension/slack/
inflating: personium-ex-slack-messenger-master/src/test/java/io/personium/engine/extension/slack/Ext_SlackTest.java

# cd personium-ex-slack-messenger-master/
# mvn clean package -DskipTests
[INFO] Replacing /personium/personium-ex-xxxxx/personium-ex-slack-messenger-master/target/personium-ex-slack.jar with /personium/personium-ex-xxxxx/personium-ex-slack-messenger-master/target/personium-ex-slack-1.0.1-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.293 s
[INFO] Finished at: 2019-02-04T06:18:28Z
[INFO] ------------------------------------------------------------------------

# ln -s /personium/personium-ex-xxxxx/personium-ex-slack-messenger-master/target/personium-ex-slack.jar /personium/personium-engine/extensions

# ls -l /personium/personium-engine/extensions | grep ^l
lrwxrwxrwx. 1 root root 95 Feb 4 06:03 personium-ex-httpclient.jar -> /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient.jar
lrwxrwxrwx. 1 root root 95 Feb 4 06:13 personium-ex-mailsender.jar -> /personium/personium-ex-xxxxx/personium-ex-mailsender-master/target/personium-ex-mailsender.jar
lrwxrwxrwx. 1 root root 95 Feb 4 06:18 personium-ex-slack.jar -> /personium/personium-ex-xxxxx/personium-ex-slack-messenger-master/target/personium-ex-slack.jar

# mv ../master.zip ../personium-ex-slack-messenger.zip


◆personium-ex-ew-services

# cd /personium/personium-ex-xxxxx

# wget https://github.com/personium/personium-ex-ew-services/archive/master.zip
--2019-02-04 06:20:43-- https://github.com/personium/personium-ex-ew-services/archive/master.zip
Resolving github.com (github.com)... 192.30.255.113, 192.30.255.112
Connecting to github.com (github.com)|192.30.255.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/personium/personium-ex-ew-services/zip/master [following]
--2019-02-04 06:20:44-- https://codeload.github.com/personium/personium-ex-ew-services/zip/master
Resolving codeload.github.com (codeload.github.com)... 192.30.255.121, 192.30.255.120
Connecting to codeload.github.com (codeload.github.com)|192.30.255.121|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
[ <=> ] 14,024 --.-K/s in 0.1s
2019-02-04 06:20:44 (136 KB/s) - ‘master.zip’ saved [14024]

# unzip master.zip
   :
creating: personium-ex-ew-services-master/src/main/java/io/personium/engine/extension/
creating: personium-ex-ew-services-master/src/main/java/io/personium/engine/extension/ews/
inflating: personium-ex-ew-services-master/src/main/java/io/personium/engine/extension/ews/Ext_Ews.java

# cd personium-ex-ew-services-master/
# mvn clean package -DskipTests
[INFO] Replacing /personium/personium-ex-xxxxx/personium-ex-ew-services-master/target/personium-ex-ew-services.jar with /personium/personium-ex-xxxxx/personium-ex-ew-services-master/target/personium-ex-ew-services-1.0.1-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.680 s
[INFO] Finished at: 2019-02-04T06:23:40Z
[INFO] ------------------------------------------------------------------------

# ln -s /personium/personium-ex-xxxxx/personium-ex-ew-services-master/target/personium-ex-ew-services.jar /personium/personium-engine/extensions

# ls -l /personium/personium-engine/extensions | grep ^l
lrwxrwxrwx. 1 root root 97 Feb 4 06:23 personium-ex-ew-services.jar -> /personium/personium-ex-xxxxx/personium-ex-ew-services-master/target/personium-ex-ew-services.jar
lrwxrwxrwx. 1 root root 95 Feb 4 06:03 personium-ex-httpclient.jar -> /personium/personium-ex-xxxxx/personium-ex-httpclient-master/target/personium-ex-httpclient.jar
lrwxrwxrwx. 1 root root 95 Feb 4 06:13 personium-ex-mailsender.jar -> /personium/personium-ex-xxxxx/personium-ex-mailsender-master/target/personium-ex-mailsender.jar
lrwxrwxrwx. 1 root root 95 Feb 4 06:18 personium-ex-slack.jar -> /personium/personium-ex-xxxxx/personium-ex-slack-messenger-master/target/personium-ex-slack.jar

# mv ../master.zip ../personium-ex-ew-services.zip


Tomcatの再起動

# systemctl restart tomcat



ここまでで、Personium のセットアップ作業は全て完了です!! お疲れ様でした…


最後に、OSSチームから提供されているユニットマネージャでユニットの状態を確認しましょう。


11.ユニットマネージャでのユニットへのアクセス


「ユニットアドミンのパスワード」の取得

以下のコマンドを実行した結果の"unitudmin_password="の右辺の値がパスワードです。

非常に重要な値ですので、厳重に管理し第三者に渡らないよう注意が必要です。

$ sudo grep unitudmin /root/ansible/unitadmin_account

unitudmin_password=******************


ユニットマネージャへのアクセス

 URL: https://app-uc-unit-manager.demo.personium.io/__/html/login.html

image.png


以下の値をセットし[Sign In]をクリック

Login URL(whith ending slash)  :  https://personium.takky.org/unitadmin/

Username           : unitadmin

Password           : <この前の工程で取得した「ユニットアドミンのパスワード」>

image.png


以下のような画面が表示されれば、ユニットは正しくセットアップされているでしょう…

image.png



もし、独自にFQDNを取得できない場合など、サーバ証明書を自己証明書で代用する場合の(OSSのドキュメントで紹介されている)手順も記載します。


『7.nginx にセットする、サーバ証明書を Let's Encrypt で取得する』の工程全部を以下の作業に置き換えることで実現できます。

$ sudo su -

# cd /root/ansible/resource/web/opt/nginx/conf

# ls -lh
total 16K
-rw-rw-r--. 1 pds pds 288 Aug 21 07:47 backend.conf.j2
-rw-rw-r--. 1 pds pds 0 Aug 21 07:47 host-acl.conf
-rw-rw-r--. 1 pds pds 4.4K Aug 21 07:47 nginx.conf
drwxrwxr-x. 2 pds pds 60 Aug 21 07:47 personium_version.d
-rw-rw-r--. 1 pds pds 23 Aug 21 07:47 server_name.conf

# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.........++++++
...............................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: <任意のパスフレーズ>
Verifying - Enter pass phrase for server.key: <任意のパスフレーズ(再入力)>

# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:  <この前のコマンドで入力したパスフレーズ>

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []: <TOKYO など>
Locality Name (eg, city) [Default City]: <Minato-Ku など>
Organization Name (eg, company) [Default Company Ltd]: <会社名>
Organizational Unit Name (eg, section) []: <部署名>
Common Name (eg, your name or your server's hostname) []: <personium.takky.org>
Email Address []: <メールアドレス>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<Enter>
An optional company name []:<Enter>

# cp server.key server.key.org
# ls
backend.conf.j2 host-acl.conf nginx.conf personium_version.d server.csr server.key server.key.org server_name.conf

# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:  <この前のコマンドで入力したパスフレーズ>
writing RSA key

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=/ST=/L=/O=/OU=/CN=personium.takky.org/emailAddress=
Getting Private key

# ls -l server.*
-rw-r--r--. 1 root root 1025 Oct 22 06:19 server.crt
-rw-r--r--. 1 root root 741 Oct 22 06:19 server.csr
-rw-r--r--. 1 root root 887 Oct 22 06:19 server.key
-rw-r--r--. 1 root root 963 Oct 22 06:19 server.key.org


『Ansible で構築したユニットの環境情報』ということで、以下のドキュメントが提供されています。

https://personium.io/_doccheck/ja/server-operator/Confirm_environment_settings.html

image.png

ここまでの手順で実行したホルダは、Ansibleに渡すための環境であり、Ansible実行後はPeronium稼働用の環境に移されています。

Peronium稼働時の情報は、上記ドキュメントを参照してください。



メニュー

  • セットアップ手順
  • 5.Ansibleの設定ファイル(static_inventory/hosts)を環境に合わせるため修正
  • 6.ユニット証明として利用するサーバ証明書を生成する
  • 7.nginx にセットする、サーバ証明書を Let's Encrypt で取得する
  • 8.公開鍵の生成
  • 9.Ansible の実行
  • レスポンスコードが"HTTP/1.1 200"です。いい感じですね…
  • "X-Personium-Version: 1.7.4"とバージョンは 1.7.4 がセットアップされている様です。
  • 10.personium-plugins のインストール
  • ここまでで、Personium のセットアップ作業は全て完了です!! お疲れ様でした…
  • 最後に、OSSチームから提供されているユニットマネージャでユニットの状態を確認しましょう。
  • 11.ユニットマネージャでのユニットへのアクセス
  • 以下のような画面が表示されれば、ユニットは正しくセットアップされているでしょう…
  • もし、独自にFQDNを取得できない場合など、サーバ証明書を自己証明書で代用する場合の(OSSのドキュメントで紹介されている)手順も記載します。