FOSSologyの CLI / REST API を叩いてみた
2019年 6月 20日
NECソリューションイノベータ株式会社

1© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

AboutAbout FOSSology
The Linux Foundation傘下のプロジェクトで開発中のライセンススキャナ
FOSSology自体もOSSで公開されており無料で利用可能▌FOSSologyの主な機能
 検査対象のファイルの，ライセンス，著作権（帰属告知）を検出する
 あくまでライセンススキャナであり，某商用ツールと異なり，どのOSSのソースであるかの判定は行わない．

▌FOSSologyの主な使い方
 Web UI
 CLI
 REST API
3© NEC Solution Innovators, Ltd. 2019

引用:

https://www.fossology.org/
Creative Commons CC BY-SA 4.0

About this Document
本書はFOSSologyのインターフェースのうち，CLI と REST API を調査した結果をまとめたものである．
▌評価環境FOSSology環境
FOSSologyバージョン

FOSSology Version: [3.5.0], Branch: [master],Commit: [#171d4d] 2019/04/12 08:47 UTC built @ 2019/04/12 09:32 UTC

インストール方法

Docker版

仮想マシン環境(Hyper-V)
OSUbuntu 16.04 LTS

リソース

V-CPU 1core (2thread), MEM 4GB

ホストマシン環境

4OS

Windows 10 Pro

リソース

Core i7-8700 (6core/12thread), MEM 32GB

© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

FOSSology CLI

引用:
http://archive15.fossology.org/projects/fossology/wiki/Using_FOSSology_from_the_Command_Line

6© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

FOSSology CLI
以下のコマンドでDocker内でコマンドを叩くようにする$ sudo docker exec -it [container ID] bash
基本的な使い方# cp2foss --username fossy --password fossy -q all -A /usr/local/検査対象.zip# fo_copyright_list --user fossy --password fossy -u 3
# fo_nomos_license_list --username fossy --password fossy -u 3

★検査対象を送信し検査する コマンド応答でupload Noが表示される★copyrightレポ出力 これだけ --user なので注意．(おそらくバグ？)★licenseレポ出力 “3” はupload No

管理上，FOSSology上のツリー分けや，プロジェクト名/概要記載が必要な場合は各オプションで指定する# cp2foss --username fossy --password fossy -q all -f fossology_tree -n project_name -d project_description -A /usr/local/検査対象.zip
検査エージェントを指定する場合は以下の種類が使える(WebUIで表示されるチェックボックスに対応)# cp2foss --username fossy --password fossy -q agent_copyright -A /usr/local/検査対象.zip# cp2foss --username fossy --password fossy -q agent_nomos,agent_monk -A /usr/local/検査対象.zip# cp2foss --username fossy --password fossy –Q
The available agents are:agent_copyrightagent_ecc
agent_keyword
agent_mimetypeagent_monk
agent_nomos
agent_pkgagent
agent_unpack
agent_adj2nest
wget_agent★copyrightのみ★nomosとmonk★使えるエージェントは以下(公式のマニュアルはこちら) http://archive15.fossology.org/projects/fossology/wiki/Using_FOSSology_from_the_Command_Line7© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

Problem of CLI▌CLIの問題点
 出力可能なレポート形式がショボい• License ListとCopyright Listしか出力できない• ベタテキストのみ

 SPDX出力に対応していない• SPDXならSPDX Tools で スプレッドシート等各種フォーマット変換できるがテキストは不可• 他ツールとのデータ交換ができない

8© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

FOSSology REST API

引用:
http://archive15.fossology.org/projects/fossology/wiki/REST_API

10© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API▌REST API

https://www.fossology.org/get-started/basic-rest-api-calls/
こちらが最新のDocumentだそうです…（ご指摘ありがとうございます！）
Web UI の [Help]-[Documentation] からは古い方に飛ぶんです…ググっても古い方がトップ…;-(

 Document (http://archive15.fossology.org/projects/fossology/wiki/REST_API)• Proposalと書かれている．ましてや The only api that has been implemented to date is thefollowing,とまで書かれている.
...と言うことに当初気づいていなかった...どうやら未リリースのようです．

まさに 3.5.0 のリリースメモ に↓と書かれている…！
Mainly 3.5.0 adds more documentation, infrastructure improvements and support for brand new FOSSology REST API.

 Source (https://github.com/fossology/fossology/tree/master/src/www/ui/api)• 一方，ソースを探してみると実装は進みつつある模様？
– https://github.com/fossology/fossology/blob/master/src/www/ui/api/Controllers/AuthController.php
https://github.com/fossology/fossology/blob/master/src/www/ui/api/documentation/openapi.yaml
このあたりとか．

 Try-Error• HTTPリクエスト投げたら responce(error) が返ってくる！
• FiddlerでHTTP通信キャプチャしたらWeb UIからの操作も似たようなHTTPリクエストを送っている．
– token取得→検査対象ファイルupload→report出力 を試そう．
11© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

というわけで試してみた...
結論からいうと，動きます．

12© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: token取得 (1of2)

getリクエストだけを使う場合はreadでよい
getリクエスト以外を使う場合write
検査対象をuploadする際はpostするのでwrite

以降のページのスクリーンショットは Chrome Extension の Restlet Client 2.19.2 を使用しています．
© 2019 Restlet, Inc. https://restlet.com/modules/client/13© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: token取得 (2of2)

アクセストークンが返される

14© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: folder取得

アクセストークンで認証する

FOSSology上のフォルダID(1)が返される

15© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: folder作成 (1of2)

親(ルート)フォルダのID(1)を指定してpost

16© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: folder作成 (2of2)

作成したフォルダのID(2)が返される

17© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: folder作成後 再度folder取得

作成したフォルダID(2)の情報が返される

Web UI 上にもきちんと作成されている
18© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: file upload (1of3)

フォルダ，解析オプションを指定してファイルをmultipart/form-data形式でpostする

19© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: file upload (2of3)

各パラメータはWeb UI経由で検査する際のこの部分に対応
ただし，deciderRules[] (Web UIの「7.」)はどうもうまく動作しなかった

20© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: file upload (3of3)

解析のjob ID(2)が返される

21© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: file upload get

job ID(2)のuploadsがあることが確認できる

22© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: file upload get

Web UI 上にもきちんと作成されている

23© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: report生成(1of2)

解析のjob ID(2)とレポート出力形式(spdx2)を指定する'dep5','spdx2','spdx2tv','readmeoss','unifiedreport'の5種類が指定可能

24© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: report生成(2of2)

report ID(3)が返される

25© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

REST API: report取得

report ID(3)を指定する

reportが返される

26© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

Reports<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:spdx="http://spdx.org/rdf/terms#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"><spdx:SpdxDocument rdf:about="http://c2ee8a2dec83/repo/SPDX2_Volumio2-master.zip_1560151604-spdx.rdf#SPDXRef-DOCUMENT"><spdx:specVersion>SPDX-2.1</spdx:specVersion><spdx:dataLicense rdf:resource="http://spdx.org/licenses/CC0-1.0" /><spdx:creationInfo>
SPDXVersion: SPDX-2.1<spdx:CreationInfo>
DataLicense: CC0-1.0<spdx:licenseListVersion>2.6</spdx:licenseListVersion><spdx:creator>Person: fossy (y)</spdx:creator>##------------------------<spdx:creator>Organization: </spdx:creator>## Document Information<spdx:creator>Tool: spdx2</spdx:creator>##------------------------<spdx:created>2019-06-10T07:26:44Z</spdx:created></spdx:CreationInfo>
DocumentNamespace: http://c2ee8a2dec83/repo/SPDX2TV_Volumio2-master.zip_1560151800.spdx</spdx:creationInfo>
DocumentName: /srv/fossology/repository/report
SPDXID: SPDXRef-DOCUMENT <spdx:name>/srv/fossology/repository/report</spdx:name><rdfs:comment>This document was created using license information and a generator from Fossology.
##------------------------</rdfs:comment>## Creation Information<spdx:hasExtractedLicensingInfo>##------------------------<spdx:ExtractedLicensingInfo rdf:about="http://c2ee8a2dec83/repo/SPDX2_Volumio2-master.zip_1560151604-spdx.rdf#LicenseRef-GPL"><spdx:licenseId>LicenseRef-GPL</spdx:licenseId>
Creator: Tool: spdx2<spdx:name>GNU General Public License</spdx:name>Creator: Person: fossy (y)<spdx:extractedText><![CDATA[CreatorComment: <text>
GPL license
is referenced
withouta version
number.
look up GPL in the License Admin to view the different versions.
This document was created using
informationanda generator
fromPlease
Fossology.
]]></spdx:extractedText></text></spdx:ExtractedLicensingInfo>
Created: 2019-06-10T07:30:00Z</spdx:hasExtractedLicensingInfo>
LicenseListVersion: 2.6
27© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0

SummarySummary▌REST API の実装状況
 Requestを投げればResponseが返ってくる
 試した限りではどのRequestもほぼ正常処理された▌課題
 Document上はProposalであり未リリースとみられる 3.5.0 でリリースされました！
• 一部リクエストについては，パラメータが処理されないケースも見受けられる．

 Documentも整備が未だという状況であり，実装にはソース解読が必要• 特に以下のソースが有用（これ見れば大体分かる）– https://github.com/fossology/fossology/blob/master/src/www/ui/api/documentation/openapi.yaml– https://github.com/fossology/fossology/blob/master/src/www/ui/api/index.php• 上記で分からなければ（Requestがerrorで返ってくる場合等）以下の各実装を確認する– https://github.com/fossology/fossology/tree/master/src/www/ui/api/Controllers

29© NEC Solution Innovators, Ltd. 2019

Creative Commons CC BY-SA 4.0