SBOM管理ツール SW360 - オープンソースをオープンソースで管理しよう （2．設定編 その1）

<font color="DeepPink">この記事で取り扱うSW360のバージョンはとても古いです。以下を参照に最新のバージョンの導入をお勧めします。（2023年追記）
https://www.eclipse.org/sw360/docs/deployment/nativeinstall/</font>

This article is written in Japanese and I am writing an English version now. If you can read English, you can check  https://www.eclipse.org/sw360/docs/deployment/nativeinstall

If you have any questions in English, please send emails to <a href="m&#97;i&#108;t&#111;:&#115;&#119;&#51;&#54;&#48;-&#100;&#101;v&#64;&#101;&#99;&#108;i&#112;&#115;&#101;&#46;&#111;&#114;&#103;">&#115;&#119;&#51;&#54;&#48;-&#100;&#101;v&#64;&#101;&#99;&#108;i&#112;&#115;&#101;&#46;&#111;&#114;&#103;</a>

###### この記事は[SW360](https://github.com/eclipse/sw360)の設定方法を説明する記事です。 SW360のインストール方法や概要は[OSS管理ツール SW360 - オープンソースをオープンソースで管理しよう （1．インストール編）](https://qiita.com/K-Hama/items/90a6105a16400ce3e718) に記載しています。

#はじめに

今回の設定編で構築されるツールの全体像は以下の図のようになる。
<img width="326" alt="all.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/2f02d446-8527-a400-7619-f775dd0810c9.png">

図における各ソフトウェアの役割は下記のとおり。

* SW360： ソフトウェアコンポーネントとその利用状況を管理するソフトウェアカタログツール
* Fossology： 管理するコンポーネントがOSSの場合にOSSライセンスの解析と解析結果のレビューを行うツール

製品開発でこれらのツールを用いてソフトウェアコンポーネントを管理するには、大まかに次の3ステップを行うことになる。
1. SW360: OSSコンポーネントの一般情報とソースコードの登録
2. Fossology: OSSライセンス解析とレビュー
3. SW360: 開発プロジェクトへのOSS利用状況の登録


今回の設定編その1では、下記の 1~3 の作業を始めるために必要な作業に焦点をあてて解説。

インストール完了後SW360利用開始までに必要な作業は大きく分けて次の6つになる。
1. SW360利用ユーザの設定・追加
2. 検索機能の有効化
3. Fossologyとの連携設定
4. 脆弱性情報自動取得設定
5. ライセンス情報管理設定
6. ログ取得設定


* 設定編その(4~6)　や 設定後の詳細な利用方法は以下
[OSS管理ツール SW360 - オープンソースをオープンソースで管理しよう （2．設定編 その2）](https://qiita.com/K-Hama/items/6443ce1b42dd49bbeccd)

* 他の参考資料

 - [GoogleSummerCode](https://wiki.eclipse.org/Google_Summer_of_Code_2019_Ideas#Eclipse_SW360)
 - [公式スライド](https://github.com/sw360/sw360slides)
 - [企業利用例 (SIEMENS): (PDF)](https://wiki.linuxfoundation.org/_media/openchain/036_oss_tooling_20190506_fossology_and_sw360_updates_04.pdf)
 - [日本語資料 : (pptx)](https://github.com/sw360/sw360slides/raw/master/sw360slides-collection-JPN.pptx)


* [SW360のバージョン 3.3.0-M1　/ Commit id : a3a0698](https://github.com/eclipse/sw360/releases/tag/sw360-3.3.0-M1) 利用

<font color="Red">追記：以下で利用方法を記したドキュメントを公開</font>
https://docs.google.com/document/d/1wNV--UhIDiRPP10Hhk0vspiKtoLupug7v2AAu4yxEC8/edit?usp=sharing

誰でも閲覧編集できるので，ご確認ください．

# 1. ユーザ情報設定
## 1.1 初期ユーザ設定

[前記事](https://qiita.com/K-Hama/items/90a6105a16400ce3e718)の通りインストールが完了していると、Home画面は以下のようになっている。
<img width="881" alt="0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/9c8bed9d-d37b-3d6a-bbd0-f5715843c6cd.png">

しかし、このままではユーザの設定が行われておらず一部の画面が表示されない。例えば、Componentsを開くとunavailableとなっている。

<img width="876" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/40b6545f-ff3f-0085-6e0c-19ac46819b7e.png">


ユーザ設定を行うには画面右上の[Admin]->[Control Panel]から移動する。
* ここからは主に[Liferay 6.2](https://github.com/liferay/liferay-portal)での設定作業となる。[参照:ドキュメント(PDF)](https://dev.liferay.com/documents/10184/510059/indexed-using-liferay-portal-62.pdf)

<img width="891" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/02127bec-d75d-1e5d-8311-9706a3b31f9c.png">

[Users and Organizations] と [User groups] をそれぞれ行う。
<img width="892" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/986793a6-2495-45c9-abaa-63806dbedf2e.png">

まず、[Users and organizations]の設定を行う。
<img width="893" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/11c64484-bf52-354f-8aeb-e6301d3ff5d7.png">

[Users and Organizations] -> [All Organization] -> [+ Add] ->  [Regular Organization] を選択

Details に 適当な　Organization名　を記入し、[Save]する。
<img width="888" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/85e44dcf-5e4f-40af-5185-e67b4018495f.png">

次に[User Groups] ->  [+add] でグループ追加を行う　
<img width="890" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/d18ddbd2-2894-d8df-ddd2-deb32eb6f564.png">

Name(必須) と管理に必要な項目を適宜入力して[Save]する。
<img width="893" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/bd0de4ce-1024-011f-4d9d-92708a25e7f1.png">

登録に成功したら以下のように表示される
<img width="890" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/35a98615-7ba1-71dc-cca1-7bc8fe1b683e.png">

ここまでで作成した、[Organization] と　[User Groups]をユーザ情報として登録する。
[User and Organization] -> [Users Without an Organization] -> ユーザ -> [Actions] -> Edit から編集。
<img width="891" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/4f3a86cd-92f0-a678-e300-4cc8d9d4789c.png">

ユーザの編集画面が出てくるので[Organizations] [User Groups]にそれぞれ移動して登録を行う。
<img width="894" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/0fefe5c9-0329-9e45-ac16-2eebf687334c.png">

Organizations の場合
<img width="894" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/5f3e419f-7f0a-c401-994c-d344f5ad3dff.png">
<img width="892" alt="12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/a7044e7f-893c-31aa-516d-759925897ceb.png">

User Groups の場合も同様に選択
<img width="891" alt="13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/cbaf6a55-bd74-4071-93bf-ec220d31ffe1.png">

設定後は右下の[Save]で登録を行う
<img width="890" alt="14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/100e112c-9268-7012-4a73-47ad97a6f79c.png">

[Users and Organizations] -> [All Users] で登録されていることが確認できる
<img width="891" alt="14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/4c2947f9-63f5-31ce-f08f-a07807cb3fca.png">

ここまでできたら一度サインアウトする
<img width="890" alt="15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/4ee8b338-baab-ee86-5d5c-143200d0f6d2.png">

その後再度ログインする。
<img width="887" alt="16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/816ca448-8af4-baa1-b73c-bed3f675a2fa.png">

My Sites の下の目(プライバシーマーク?)から再度 [Components] に移動すると、今度はユーザ設定前は見れなかったページが確認できるようになっている。
<img width="890" alt="16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/090bf474-c18a-6133-2c54-a5e0f2fc7740.png">

また、 Preferences から　Group が登録されていることが確認できる
* LiferayのOrganization が SW360のGroupになっていることに注意

<img width="890" alt="17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/1209f768-83a3-58f5-727e-0e5c0b6a1b33.png">


## 1.2 追加ユーザ設定
また、ユーザを増やしたい場合は、もう一度サインアウトしトップ画面の[Sing up] -> [Create Account]から行う。
* Request Roleについては[ここ](https://github.com/eclipse/sw360/wiki/Dev-Role-Authorisation-Model)を参照 
<img width="894" alt="18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/a409b3f4-2b0f-cad3-0a67-88d2327cbcdd.png">

Sing Up 後　Moderation request has been sent. と表示されれば　Sing UpはOK.
<img width="892" alt="19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/4e597d93-966a-7dd8-6452-1b31a9a79f52.png">

このままでは、以下のように先ほどSing UPしたユーザでSign inできないので、ユーザのActive化を行う。
<img width="891" alt="20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/c6ed1580-dbab-dfc9-febd-dab1a8d4f840.png">

まずは、最初に作った(admin権限を持つ)ユーザでSing inを行う。その後 [Admin] -> [Control Panel] 

<img width="892" alt="21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/50beffcd-057d-b533-3241-4a4c8152dbec.png">

[Control Panel] -> [Users and Organizations] 
<img width="892" alt="22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/c09f5cac-256e-6d7f-8afa-768ab7f6511e.png">

[Users and Organizations] -> [All Users] -> Sing Upしたユーザの[Actions] -> Activate
*なお、Job Titleにアドレスが入っている理由は調査中
<img width="891" alt="23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/ed7a4881-8a2e-5ec2-bfeb-f1f2ac8db2be.png">
<img width="894" alt="24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/5d770af2-5fb8-fab8-4a97-307dc5208a94.png">

現在のユーザをサインアウトして、先ほどSign Up したユーザでログインすると以下の画面が表示される
<img width="890" alt="25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/85b7c423-70b2-80d4-d3d6-b6839334b648.png">

上記が画面下[I agree]でPassword Reminderの設定が開始する。
<img width="890" alt="26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/e95fca6a-a9f6-3edd-1d86-927cf08bd4c7.png">

[Save]後 ログイン完了
<img width="893" alt="26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/4161537b-b162-9750-dd63-9c903200554f.png">

他にもユーザの登録方法がいくつかあるが、ここでは割愛する。

# 2. 検索機能有効化

SW360は検索に[Couchdb-lucene](https://github.com/rnewson/couchdb-lucene)を利用する。インストールや設定方法は[ここ](https://smartregister.atlassian.net/wiki/spaces/Documentation/pages/33259522/CouchDB-Lucene+installation+guideline+for+Full-Text+search)が参考になる。SW360のgithubにあるwikiだと[ここ](https://github.com/eclipse/sw360/wiki/Deploy-Configuration-Files)や[ここ](https://github.com/eclipse/sw360/wiki/Dev-Troubleshooting)にも少し設定方法などが記載されている。

これらを参考にCouchdb-luceneの導入を行う。作業前に必要に応じてproxy設定をしておく。

```console
$ export http_proxy="http://proxy.example:port"
$ export https_proxy="http://proxy.example:port"
$ export no_proxy="localhost,127.0.0.1,noproxy_example"
```

最初にSW360停止しておく

```console
$ cd liferay-portal-6.2-ce-ga5/tomcat-7.0.62/bin
$ ./catalina stop
```

続いてCouchDB停止

```console
$ sudo systemctl stop couchdb.service
```

Couchdb-luceneをソースからビルド
- (参考) Couchdb-lucene の Minimum System Requirements 
-- Java 1.8 is required; Oracle Java 8 or OpenJDK 8 are recommended.

```console
$ git clone https://github.com/rnewson/couchdb-lucene.git
$ cd couchdb-lucene
$ mvn
$ cd target
```
成功するとtargetが作成され、中に以下のようなファイルができている

<img width="368" alt="27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/90f97284-8262-e3f1-4244-6bbff3b6893b.png">

Couchdb-luceneを利用するには上記をzipを展開

```console
$ unzip couchdb-lucene-2.2.0-SNAPSHOT-dist.zip
```

Couchdb-luceneを起動する前に Couchdbのlocal.iniの設定する。

```console
$ cd /usr/local/etc/coucdb/
$ vi local.ini
```
以下を追記(33行目)[httpd_global_handlers]に追記

```console
_fti = {couch_httpd_proxy, handle_proxy_req, <<"http://127.0.0.1:5985">>}
```
<img width="549" alt="28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/896fdcce-ffc2-04e3-3a49-662559ac0618.png">

上記の設定が完了したらCouchdbを再起動

```console
$ sudo systemctl start couchdb.service
```

Couchdb-luceneを先ほど展開したzipの中にあるrunを実行させる。その後SW360を起動させる。
* マシンを再起動したときはもう一度runするか、予め自動で起動するように設定しておく

```console
# Couchdb-lucene起動
$ cd /PATH/couchdb-lucene/target/couchdb-lucene-2.2.0-SNAPSHOT/bin
$ nohup ./run & 

#　SW360起動
$ cd liferay-portal-6.2-ce-ga5/tomcat-7.0.62/bin
$ ./catalina start
```

上記が完了すればSW360の全文検索機能が有効になる。

# 3. FOSSologyと連携
本章ではFossologyとの連携設定を紹介する。ただし、Fossoloyへソースを送付する方法などの詳細な使い方は後日紹介することにし、ここでは、あくまで設定の説明にとどめる。
## 3.1 Fossology 情報
Fossologyの紹介や利用方法などは参考になりそうなリンクを以下に貼っておくにとどめる。
・[Fossology公式](https://www.fossology.org/)
・[Fossology Github](https://github.com/fossology/fossology)
・[Fossologyインストール方法](https://github.com/fossology/fossology/wiki/Install-from-Source)
・[Fossologyインストール方法 日本語](https://github.com/OpenChain-Project/Japan-WG-General/blob/master/Compliance-Tooling/FOSSology/Installation/install_from_source_debian_jp.md)
## 3.2 Fossology と SW360の連携
基本的な手順は[SW360 GithubのDeploy-FOSSology](https://github.com/eclipse/sw360/wiki/Deploy-FOSSology)に記載されている。ここを参考に手順紹介を行う。

以下 Fossologyが動いてるサーバにて、設定を行う 

最初にssh-keygenでキーの作成を行う
- 以下の例はvagrant上で動いてるFossologyにアクセス
-- 他でインストールし場合は適宜読み替える

```console 
$ ssh-keygen 
```

鍵の権限設定

```console 
$ ssh vagrant@127.0.0.1 -p 2222
$ sudo useradd -m sw360 -g fossy
$ sudo su sw360
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
```
作成したキーを配置する

```console 
$ cp /vagrant/sw360ssh/authorized_keys ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ cd /PATH/TO/liferay/apache-tomcat-7.0.X/webapps/fossology/WEB-INF/classes 
$ vi fossology.properties
```

fossology.propertiesに配置した鍵の記述をする
- id_rsa.pubはfossologyサーバの公開鍵

```console:fossology.properties
fossology.host = 127.0.0.1
fossology.port = 22
fossology.user = sw360
fossology.key.file = /id_rsa
fossology.key.pub.file = /id_rsa.pub
```

まずはadmin権限を持つユーザ(基本的には一番最初に作ったユーザ)でログインする。
そして、[Admin] -> [Fossology]と移動
<img width="891" alt="29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/2610f8ff-ecc7-a8ef-68eb-37885d03ff3b.png">

以下の画面が表示される。KnownFingerPrintsがあることを確認。(なければ鍵の設定にミスがある)
ここにある[Download Public key]はFossologyの動いてるサーバの公開鍵情報。
<img width="803" alt="29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/72699694-7191-085a-ed1c-09ad864ae9be.png">


Fossologyの動いてるサーバの公開鍵情報鍵の例
<img width="455" alt="30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/9523fe88-ff64-b2d9-7425-74dbb044b3e8.png">

次に[KnownFingerPrints]のチェックマークを付けて[Accept fingerprint]をクリックし、
[Check connectivity To Fossology Server]をクリックしてSUCCSESSが表示されたら、sw360とfossologyの通信は成功である。
<img width="798" alt="31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/516ad64a-8abb-72ce-c4f7-6695fc2c6f6f.png">

最後にDeploy Scripts To Fossology Serverでスクリプトを送る。これも成功したらSUCCSESSが表示される。
<img width="794" alt="32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/057b33b9-3fcd-e8ff-78b4-42da224cc73a.png">

Fossologyのサーバをターミナル等で開くと、homeに以下の五つのファイルがあることが確認できる。
- duplicateUpload
- folderManeger
- getStatusOfUplad
- uploadFromSW360
- utilSW360
<img width="503" alt="32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/531e8b8b-2fb0-0904-13ab-26ae225f902e.png">

#さいごに
ここまでの設定が完了すると、コンポーネント登録などをGUI上で一通り行うことが可能である。ただし、脆弱性やライセンスの登録設定については以下の記事を確認してほしい。

[OSS管理ツール SW360 - オープンソースをオープンソースで管理しよう (3．設定編 その2)](https://qiita.com/K-Hama/items/6443ce1b42dd49bbeccd)

この記事のフィードバックやコメント等はいつでもお待ちしております。気軽にお申し付けください。