OSSのライセンスを容易に把握するためにDoSOCSv2でソースコードを解析する

# はじめに

近年、ソフトウェア開発にOSSを用いることは必要不可欠になってきています。
OSSを利用するときには、そのライセンスを把握し適切に対応することが大切です。
ソースコードを入手して1つ1つ手作業で確認していくこともできますが、とても時間がかかってしまいます。
ソースコードの解析を行うツールを導入し自動化することで、ライセンスを容易に把握することができます。

本記事では、ソースコードの解析を行うツールの1つであるDoSOCSv2の実行環境を構築してOSSの解析を行い、ライセンスを確認する手順を示します。

# 前提知識

## SPDXとは

SPDXは"Software Package Data Exchange"の略で、ソフトウェア パッケージに関連するコンポーネントやライセンス、コピーライト等の情報をやり取りするための標準的なフォーマットの仕様です。
さらに詳しく知りたい場合は下記のWebサイトをご覧ください。
https://spdx.org/

## DoSOCSv2とは

DoSOCSv2は、SPDXドキュメントとデータを管理するためのコマンドライン ツールです。
ソース コードを解析し、SPDX情報を出力することができます。
さらに詳しく知りたい場合は下記のWebサイトをご覧ください。
https://github.com/DoSOCSv2/DoSOCSv2

# 実行環境

DoSOCSv2の開発者によってDockerイメージが公開されていたため、Ubuntu上のDockerを用いて環境構築を行います。
執筆者の都合上、認証が必要なプロキシサーバー配下で作業を行うものとします。
Ubuntuは既にインストールされ、aptコマンドが利用できるように設定されていることを前提とします。

主なソフトウェアとバージョンを下記に示します。

- Ubuntu 16.04
- Docker 1.13.1
- DoSOCSv2 0.16.1

# 手順

## Dockerのインストール

aptコマンドでdocker.ioパッケージをインストールします。

```shell-session
$ sudo apt install docker.io
```

## Dockerコマンドのプロキシの設定

認証が必要なプロキシサーバー配下でdockerコマンドを使うために、下記のファイルを準備します。

```shell-session
$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://user:pass9@proxy-server:port/" 
$
```

ファイル作成後はデーモンをリロードし、docker.serviceを再起動します。

```shell-session
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service
```

## DoSOCSv2のDockerイメージを取得と実行

DockerHubにて公開されているDoSOCSv2がセットアップされたDockerイメージを利用します。
https://hub.docker.com/r/ushan89/dosocsv2/

dockerコマンドにてイメージを取得し、実行します。

```shell-session
$ sudo docker image pull ushan89/dosocsv2
$ sudo docker run -it ushan89/dosocsv2
```

## wgetコマンドでソースコードを取得する

wgetコマンドを用いて、http,https,ftpサーバーからソースコードします。
※scp, rsyncコマンド等でソースコードを取得する場合にはこの手順は不要です。

dockerコンテナ内でaptコマンドを利用できるようにし、wgetパッケージをインストールします。

```shell-session
# echo "Acquire::http::proxy \"http://user:pass@proxy-server:port/\";" >> /etc/apt/apt.conf
# echo "Acquire::ftp::proxy \"ftp://user:pass@proxy-server:port/\";" >> /etc/apt/apt.conf
# echo "Acquire::https::proxy \"https://user:pass@proxy-server:port/\";" >> /etc/apt/apt.conf
# apt update
# apt install wget
```

ここでは例としてsedのソースコードを取得します。
wgetコマンドでhttpサーバーにアクセスするため、事前にhttp_proxy環境変数を設定しています。

```shell-session
# export http_proxy=http://user:pass@proxy-server:port
# wget http://ftp.gnu.org/gnu/sed/sed-4.2.tar.gz
```

## データベースのセットアップ

DoSOCSv2を利用するために必要なデータベースのセットアップを行います。

```shell-session
# dosocs2 dbinit
```

## ソースコードの解析とSPDX形式のドキュメントの出力

sedのソースコードをスキャンし、SPDX形式のドキュメントを出力します。

```shell-session
# dosocs2 oneshot sed-4.2.tar.gz > sed-4.2.spdx
```

## ライセンスの確認

sed 4.2のライセンスに関する情報はCOPYINGファイルに記述されており、GPLv3であることがわかります。

```shell-session
# less sed-4.2.spdx
(略)
FileName: ./sed-4.2/COPYING
SPDXID: SPDXRef-file-COPYING-8427-faa689eb
FileType: OTHER
FileChecksum: SHA1: 842745cb706f8f2126506f544492f7a80dbe29b3
LicenseConcluded: NOASSERTION
LicenseInfoInFile: GPL-3.0
LicenseComments: <text></text>
FileCopyrightText: NOASSERTION
FileComment: <text></text>
FileNotice: <text></text>
## Relationships
Relationship: SPDXRef-file-COPYING-8427-faa689eb CONTAINED_BY SPDXRef-package-sed_4_2_tar_gz-b0a9-7f98cbdc
Relationship: SPDXRef-file-COPYING-8427-faa689eb DESCRIBED_BY SPDXRef-DOCUMENT
(略)
```

# まとめ

本記事では、ソースコードの解析を行うツールの1つであるDoSOCSv2の実行環境を構築してOSSの解析を行い、ライセンスを確認する手順を示しました。
ソースコードの解析を自動化することによって、OSSのライセンスを容易に把握することができ、
ソフトウェア開発で用いるOSSのライセンスのコンプライアンスの活動を促進できます。

# 参考情報

- The Software Package Data Exchange
    - https://spdx.org/
- DoSoCSv2
    - https://github.com/DoSOCSv2/DoSOCSv2
- ushan89/dosocsv2
    - https://hub.docker.com/r/ushan89/dosocsv2/
- systemd と Docker の管理・設定
    - http://docs.docker.jp/engine/articles/systemd.html


『各種製品名は、各社の製品名称、商標または登録商標です。本記事に記載されているシステム名、製品名には、必ずしも商標表示（(R)、TM）を付記していません。』