end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

政府系システムの調達指針 - 機能要求や非機能要求(特にセキュリティ)

外部委託する際の 要求のまとめ方について、ググってみた

以下は、いずれも、「記載されていて当然」的な内容ですが、 漏れがちな内容でもありますので、自分用にメモ。

情報システム調達のための技術参照モデル(TRM)調達仕様書ひな形編

IPAが公開する 要求/要件仕様等、全般のサンプル(テンプレート)

1) https://www.ipa.go.jp/osc/trm/index.html

└ 2) https://www.ipa.go.jp/osc/trm/trmtemplate.html

図や表でなく、多くを文章で記載されていますが、さすがの情報量、というか網羅性。

上記 2)にある資料には、機能要求や非機能要求だけでなく、 納品物の定義やプロジェクト推進方法まで記載されています。

まぁ、ここまで細かく指定してくれるシステム発注者は、いないんですけどね。

政府機関等の情報セキュリティ対策のための統一基準群(平成28年度版)

http://www.nisc.go.jp/active/general/kijun28.html

内閣サイバーセキュリティセンターが公開する特にセキュリティ対策の資料。

こちらも、多くを文章で記載されていますが、さすがの網羅性。

情報システムに係る政府調達におけるセキュリティ要件策定マニュアル

http://www.nisc.go.jp/active/general/sbd_sakutei.html

こちらも、内閣サイバーセキュリティセンターによる公開資料。

特に * セキュリティ要件策定マニュアル 付録A.対策要件集 * には 具体的セキュリティリスクの内容と、それに対する仕様記載例、対策例 が、 表形式で記載されていて、読み休みです。

地方公共団体における情報セキュリティポリシーに関するガイドライン

http://www.soumu.go.jp/denshijiti/jyouhou_policy/index.html

こちらは「地方公共団体」向けで、 前述の「情報システム調達のための技術参照モデル(TRM)」と重複している 部分も多くありますので、参考程度。

JPCERT CC による インシデント ハンドリング マニュアル

システム運用に関しては、以前、以下のエントリを記載しています。

ITILにおけるインシデント管理と、問題管理 - end0tknr's kipple - 新web写経開発

システム運用管理の勘どころ - end0tknr's kipple - 新web写経開発

JPCERT CC が公開する インシデント ハンドリング マニュアル (以下)は、 ITILのフローと異なりますが、JPCERT CC が出してるものですので、参考になります

f:id:end0tknr:20180502055142p:plain

https://www.jpcert.or.jp/csirt_material/files/manual_ver1.0_20151126.pdf

CentOS 7.4 へ mysql 5.6.40 を src から install

以前も mysql 5.7 に関して同様のentryを記載していますが、 virtual boxで動作させている centos を ver.7.4 にした為、改めてinstall

先程のentryにも記載していますが、mysql 5.7.18 より、

my.cnf が提供されない為、mysql 5.6.40をinstallしています

mysql5.7 をsrcからinstall - end0tknr's kipple - 新web写経開発

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.9 ソースから MySQL をインストールする

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

前準備 - readline と ncurses の intall

以前は、とっくにreadlineやncurses (≒ curses) がinstall された centos7 環境に mysql をinstallしていたらしい。

そこで今回は、readline と ncurses を install

readline

$ ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz
$ tar -xvf readline-6.3.tar.gz
$ cd readline-6.3
$ configure
$ make
$ sudo make install

ncurses ≒ curses

https://www.gnu.org/software/ncurses/

https://invisible-island.net/ncurses/ncurses.html

$ sudo yum install ncurses-devel

mysql の build や install

$ tar -xvf mysql-5.6.40.tar.gz
$ cd mysql-5.6.40
$ cmake . \
   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
   -DDEFAULT_CHARSET=utf8 \
   -DDEFAULT_COLLATION=utf8_general_ci \
   -DENABLED_LOCAL_INFILE=true \
   -DWITH_INNOBASE_STORAGE_ENGINE=1 \
   -DWITH_EXTRA_CHARSETS=all \
   -DWITH_READLINE=ON \
$ make
$ make test
$ sudo make install

設定

ユーザやグループ追加

$ sudo groupadd mysql
$ sudo useradd -r -g mysql mysql

mysql_install_db 実行による data dirや my.cnfの作成

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.9.2 標準ソース配布を使用して MySQL をインストールする

dev.mysql.comのdocument のように単純?に scripts/mysql_install_db を実行すると data dir が /usr/local/mysql 以下に作成されます。

/usr/local/mysql 以下にデータがある構成は、好みではありませんので、「 --datadir=/var/mysql_data/ 」を追加しています。

( dev.mysql.comのdocument では、/usr/local/mysql 以下に data dir を作成する為、 余計な chown や chgrp の実行が必要です )

$ cd /usr/local/mysql
$ sudo /usr/local/bin/perl \
       scripts/mysql_install_db \
         --user=mysql  --datadir=/var/mysql_data/

edit /etc/my.cnf

先程の scripts/mysql_install_db により /usr/local/mysql/my.cnf が作成されますので、 /etc/my.cnf へ移動し、編集します。

$ sudo su -
# cd /etc
# mv /usr/local/mysql/my.cnf ./my.cnf
# vi ./my.cnf

以下、編集内容

old) # basedir = .....
new) basedir = /usr/local/mysql
old) # datadir = .....
new) datadir = /var/mysql_data

mysql 5.1頃から使用していたmy.cnfでは、 他にも様々、設定していましたが、上記だけの編集でも動作はするようです。

一旦、接続test

$ cd /usr/local/mysql
$ sudo bin/mysqld_safe --user=mysql

上のようにmysqldaemonを起動し、 下のようにmysqlのclientで接続できれば、OKです。

$ /usr/local/mysql/bin/mysql -u root
 :
Server version: 5.6.40 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
 :
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

接続test完了後は、mysqldaemonを停止してOKです。

ただし、停止方法が分からなかった為、kill しています。

自動起動

自動起動の設定自体は、mysql.server を /etc/init.d 以下にcopyするだけです。 設定後、centosを再起動して、mysqldaemonが動作していることを確認しましょう。

$ sudo su -
# cd /etc/init.d
# cp /usr/local/mysql/support-files/mysql.server ./mysql.server
# systemctl enable mysql.server

# reboot

mysql 5.7.18 より、default設定file ( my-default.cnf )が同包されない?

MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.18 (2017-04-10, General Availability)

上記のrelease noteに以下のように記載されています。

The my-default.cnf.sh file
(used to produce a default my-default.cnf or my-default.ini file)
is no longer included in source distributions and my-default.cnf
and my-default.ini are no longer included in or
installed by distribution packages. (Bug #22525354)

「my-default.cnf.sh だけの話で、my-default.cnf はあるのかも」と思い、 mysql 5.7.22 をsrcから installしましたが /etc/my.cnf や cd /usr/local/mysql/support-files/my-default.cnf がない。

全く最初からinstallする場合、my.cnf をどうやって準備しろと?

しばらくは、↓こちらを参考に my.cnfを作成しよう

mysql5.7 をsrcからinstall - end0tknr's kipple - 新web写経開発

バーバラ・ミント - 考える技術・書く技術 - 問題解決力を伸ばすピラミッド原則

「バーバラ・ミントさんの名前は聞いたことがあるかなぁ...」程度でしたが、 とあるきっかけで「考える技術・書く技術」の「書く技術」を中心に読んでみた。

以下、自分用メモ

https://www.amazon.co.jp/dp/4478490279www.amazon.co.jp

https://www.amazon.co.jp/dp/4478490279

ピラミッド原則のトップダウンアプローチと、ボトムアップアプローチ とは?

f:id:end0tknr:20180422042533p:plain

上記のように図示できますが、単純には以下のように理解してよい気がします。

アプローチ 説明
トップダウン なぜなぜ分析
ボトムアップ KJ法

マジックナンバー7 or マジックナンバー4 に気をつける

「人が短期記憶できる情報はかなり少ない」為、 「各グループ内のメッセージは削減する or 集約すべき」らしい

f:id:end0tknr:20180422042536p:plain

導入部のストーリー展開

伝えようとするテーマについて読み手が既に知っていると思われることを要約し、 これから文書中で答えなければならない疑問を明らかにする。

導入部は省略しない。状況や過去の出来事は導入部を利用する。

「導入部のストーリー展開」とは「状況(Situation)」→「複雑化(Complication)」 →「疑問(Question)」。

ほとんどの文書は4つの疑問のどれかに答える

状況
(主題に関し
確認されている事実)
複雑化
(次に起こった
疑問へつながる事実)
疑問
しなければならない仕事がある その仕事の妨げに
なることが起きた
どうすればよいか
問題がある 解決方法を知っている 解決方法を実行するには
どうすればよいか
問題がある 解決方法が提案された それは正しい解決方法か
行動をとった その行動は効果がなかった なぜ効果がなかったか

グループ化の順序を規定する

f:id:end0tknr:20180422042539p:plain

install clamav v.0.99.4 to centos 7 と、独自virus 定義の作成

超大量のサーバがあり && EOLなミドルウエア管理ができていない場合、 「独自virus定義を作成し、virus scanに検知だけさせれば」と思ったのがきっかけ

参考url

install

groupadd

$ su - 
# groupadd clamav
# useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav

download , configure , make ...

$ wget https://www.clamav.net/downloads/production/clamav-0.99.4.tar.gz
$ tar -xvf clamav-0.99.4.tar.gz
$ cd clamav-0.99.4
$ ./configure
  :
configure: Summary of detected features follows
              OS          : linux-gnu
              pthreads    : yes (-lpthread)
configure: Summary of miscellaneous features
              check       : no (auto)
              fanotify    : yes
              fdpassing   : 1
              IPv6        : yes
configure: Summary of optional tools
              clamdtop    : -lncurses (auto)
              milter      : yes (disabled)
              clamsubmit  : yes
configure: Summary of engine performance features
              release mode: yes
              llvm        : yes, from built-in (auto)
              mempool     : yes
configure: Summary of engine detection features
              bzip2       : ok
              zlib        : /usr
              unrar       : yes
              pcre        : /usr
              libxml2     : yes, from /usr
              yara        : yes
$
$ su
# make install

setting clamav( freshclam.conf )

install後、virus定義file(DB)を更新しようと、freshclam を実行したところ、 errorとなった為、freshclam.conf を作成。

freshclam.conf のファイルすらなかったので、サンプルよりcopy

# /usr/local/bin/freshclam
ERROR: Can't open/parse the config file /usr/local/etc/freshclam.conf

# cp ~/clamav-0.99.4/etc/freshclam.conf.sample /usr/local/etc/freshclam.conf

が、freshclam.conf 内に「Example」という記述があったので、コメント化

# /usr/local/bin/freshclam
ERROR: Please edit the example config file /usr/local/etc/freshclam.conf
ERROR: Can't open/parse the config file /usr/local/etc/freshclam.conf

# vi /usr/local/etc/freshclam.conf

が、virus定義file 用のdirがない為、mkdir

# /usr/local/bin/freshclam
ERROR: Can't change dir to /usr/local/share/clamav

# mkdir /usr/local/share/clamav

が、ユーザ(clamav)への書込み権限が必要らしく、chown

# /usr/local/bin/freshclam
ERROR: Can't create temporary directory /usr/local/share/clamav/clamav-3187640ea28ef290eedab5f5bfa9fc8c.tmp
Hint: The database directory must be writable for UID 1003 or GID 1003

# ls -l /usr/local/share
# chown clamav /usr/local/share/clamav

で、やっと成功。

# /usr/local/bin/freshclam 
ClamAV update process started at Sun Apr  8 10:47:58 2018
Downloading main.cvd [100%]
main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Downloading daily.cvd [100%]
daily.cvd updated (version: 24459, sigs: 1902655, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 319, sigs: 75, f-level: 63, builder: neo)
Database updated (6468979 signatures) from database.clamav.net (IP: 27.96.54.66)
#

独自virus 定義の作成 (.db , .hdb , *.mdb)

clamavには、3種類の定義fileの書式があるようです。 以下に記載していますが、いずれも clamav付属の sigtool を利用できます。

その1 - hexdump による *.db

hexdumpし、適当な範囲(40~400文字程度?)でcutし、これを*.dbに保存

$ cat /usr/local/openssl_1_0_1/bin/openssl | \
    /usr/local/bin/sigtool --hex-dump | \
    cut -c 1-100 >> /home/endo/tmp/CLAM_DATA/test.db 

その2 - md5チェックサムによる *.hdb

$ /usr/local/bin/sigtool --md5 /usr/local/openssl_1_0_1/bin/openssl \
   > /home/endo/tmp/CLAM_DATA/test.hdb

その3 - 実行ファイルのPEセクションを使用する *.mdb

$ /usr/local/bin/sigtool --mdb /usr/local/openssl_1_0_1/bin/openssl \
  > /home/endo/tmp/CLAM_DATA/test.mdb

独自virus 定義によるscan実行

以下の通りです。infected オプションにより検知のみ(削除等を行わない)にしています

$ /usr/local/bin/clamscan --verbose --infected \
    --database=/home/endo/tmp/CLAM_DATA \
    -r /home/endo/tmp/CLAM_TEST

Thunderbird ver.52 のaddon(plug-in)開発を中断

やりたかったことと、必要な技術要素

誤送信防止プラグインである Secure Addressing の送信前確認画面において 宛先に応じた顔写真を表示。 顔写真は、WEB上(イントラ内)にあり、httpsにてアクセス可能。

https://addons.mozilla.org/ja/thunderbird/addon/secure-addressing/

これを実現するには、Thunderbirdのaddonにおいて、以下の技術要素が必要

  • ldapまたはアドレス帳に対する メールアドレスからの会員ID(uid)の検索
  • XUL上での < image src="http://$画像URL" /> による画像表示

中断した理由

imageタグ内のsrc属性は「https://~.png」のように拡張子で終わる場合、問題ないが、 拡張子で終わらない場合、画像が表示されない為。

(XULの問題かと思いましたが、Thunderbirdのアドレス帳の「顔写真」タブで、 拡張子なしのURLを指定した場合も表示されなかったので)

また、Thunderbird環境で画像ファイルをダウンロード & 保存する方法も 分かりませんでしたので

参考url

今回、初めてThunderbirdのアドオン開発に触れてみましたが、以下のurlを読み、 更にダウンロードした実際のThunderbirdアドオンをunzipして読経するとよいと思います。

http://www.magicvox.net/archive/2014/03161644/ http://www.koikikukan.com/archives/2018/01/30-000300.php http://thinkami.hatenablog.com/entry/20140429/1398721329

http://remotehost.blog54.fc2.com/blog-entry-22.html?q=thunderbird&charset=utf-8 http://d.hatena.ne.jp/mallowlabs/20080807/1218106360 https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Thunderbird_extensions/Building_a_Thunderbird_extension

apache 2.4 の ssl設定 (conf/extra/httpd-ssl.conf)のオレオレ サンプル

以下の内容で、ssl化するはずですし、起動時のパスフレーズも聞かれないはず。

自分用メモ

Listen 443 https


#SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLPassPhraseDialog builtin


SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300


#SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512


SSLCryptoDevice builtin
#SSLCryptoDevice ubsec

<VirtualHost _default_:443>

#DocumentRoot "/var/www/html"
ServerName www.sexy-example.com:443

ErrorLog /data/sexyexample/logs/ssl_error_log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
TransferLog /data/sexyexample/logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/cert/sexyexample_crt.pem

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/cert/sexyexample_key.pem

#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
SSLCertificateChainFile /etc/httpd/cert/sexyexample.cer


BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog /var/log/sexyexample/httpd/logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

PostgreSQL 9.6 に対し、sjis環境のclient (perl)から機種依存文字を登録 - 環境変数:PGCLIENTENCODINGを利用

ERROR:  invalid byte sequence for encoding "SJIS": ...

きっかけは上記のようなエラー。 機種依存文字が影響していることは、すぐに分かりましたが、client側での対処に手こずった。

随分、久しぶりにpostgresを触ったせいですね。

参考url

https://www.postgresql.jp/document/9.6/html/multibyte.html

サーバ側(postgres)側の環境

今回の為、test DBをencoding=utf8で createdb しています。 ちなみにサーバ側のencodingに、sjisやcp932はないようです。

$ /usr/local/pgsql/bin/psql --version
psql (PostgreSQL) 9.6.5

$ /usr/local/pgsql/bin/psql --username=postgres -l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
$ /usr/local/pgsql/bin/psql --username=postgres test

$ test=#  CREATE TABLE test (
        atri_id     serial, /* = AUTO_INCREMENT of mysql */
        atri_val    varchar(20),
        PRIMARY KEY (atri_id) );

test=# \d
                List of relations
 Schema |       Name       |   Type   |  Owner   
--------+------------------+----------+----------
 public | test             | table    | postgres
 public | test_atri_id_seq | sequence | postgres
(2 rows)

test=# \d test
                                    Table "public.test"
  Column  |         Type          |                       Modifiers                        
----------+-----------------------+--------------------------------------------------------
 atri_id  | integer               | not null default nextval('test_atri_id_seq'::regclass)
 atri_val | character varying(20) | 
Indexes:
    "test_pkey" PRIMARY KEY, btree (atri_id)

クライアント側(perl)の環境変数に PGCLIENTENCODING = SJIS を設定

https://www.postgresql.jp/document/9.6/html/multibyte.html

上記のpostgresのdocumentにおいて、client側encodingの指定として 1)「SET CLIENT_ENCODING TO '~'」2)「SET NAMES '~'」3)「$ENV{PGCLIENTENCODING}」 があるように記載されていますが、 私の環境において1),2)は上手く動作せず、3)の$ENV{PGCLIENTENCODING}に落ち着きました。

#!/usr/local/bin/perl
use utf8;
use strict;
use warnings;
use DBI;
use Encode;
use Data::Dumper;

my $DB_CONF =
    {db=>"DBI:Pg:dbname=test;host=localhost;",
     user=>'postgres',
     pass=>'',
     client_encoding => 'SJIS',
     option => {AutoCommit=>0,
#                pg_enable_utf8=>0,
                RaiseError => 1,
                PrintError => 0}
    };


main();

sub main {
    
    $ENV{PGCLIENTENCODING} = $DB_CONF->{client_encoding};
    
    my $dbh = connect_db();

    my $sql =<<EOF;
insert into test (atri_val) values(?)
EOF
    my $sth = $dbh->prepare($sql);

    my $org_val = '髙';
#    my $new_val = Encode::encode('utf8',$org_val);
    my $new_val = Encode::encode('cp932',$org_val);
    
    unless( $sth->execute($new_val) ){
        print STDERR $sth->errstr,"\n";
    }
    $dbh->commit;
    $dbh->disconnect;
}

sub connect_db {
    my $dbh = DBI->connect($DB_CONF->{db},
                           $DB_CONF->{user},
                           $DB_CONF->{pass},
                           $DB_CONF->{option});
#    $dbh->do("SET NAMES '$DB_CONF->{client_encoding}'") or
#        die "cannot set encoding $!";
#    $dbh->do("SET CLIENT_ENCODING TO $DB_CONF->{client_encoding}") or
#        die "cannot set encoding $!";
    return $dbh;
}

PostgreSQL 9.5 で、「pg_ctl: ERROR: invalid byte sequence for encoding」

具体的には、insert sql時に以下のようなエラー

pg_ctl: ERROR:  invalid byte sequence for encoding "SJIS": 0xff 0xff

どうやら"髙"のような、いわゆる機種依存文字の影響らしい。

postgres側の文字コードを変更すれば、解消するかもしれませんが、 一旦は、perl側で

my $str = '髙橋';
$str = Encode::encode('sjis', Encode::decode('cp932',$str) );

のようにすることで機種依存文字を「?」に変換

Sonar Qube 6.7.1と Sonar Scanner 3.0.3 による java (web) projectのsrc解析

Continuous Code Quality | SonarQube

以前、pmdで、javaのcode metricsを計測しましたが、SonarQube というものを見かけたのでお試し。

今回は、spring-bootで書いたjava, javascriptのsample srcを解析しましたが、 他にも c/c++/c# , python , php 等、多くの言語をサポートしているようです。

参考url

PMD で java の循環的複雑度(code metrics CyclomaticComplexity )を計測 - end0tknr's kipple - 新web写経開発

SonarQubeでソースコードの品質チェック - Qiita

前準備 1/2

Requirements - SonarQube Documentation - Doc SonarQube

javaや、DB(mysql)を必要とします。また、私の環境は以下の通り。

$ cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

$ /usr/bin/java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)

$ /usr/local/mysql/bin/mysql --version
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.7.14, for Linux (x86_64) using  EditLine wrapper

前準備 2/2 - CREATE DATABASE

mysql> CREATE DATABASE sonarqube CHARACTER SET utf8;

install SonarQube

と言っても、ダウンロードして、解凍するだけです。

ここでinstallする SonarQube は解析結果を表示するwebアプリで、 実際の解析は、後程、installする SonarScanner が行います。

$ cd /home/endo/local
$ wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip
$ unzip sonarqube-6.7.1.zip
$ ln -s sonarqube-6.7.1 sonarqube

config sonar.properties

先程解答した sonarqube 内に conf/sonar.properties がありますので、これを編集します。

以下では、sonar.jdbc.url を複数行に分けて記載していますが、実際は1行で記載して下さい。

$ vi ~/local/sonarqube/conf/sonar.properties

sonar.jdbc.username=root
sonar.jdbc.password=
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?
     useUnicode=true&characterEncoding=utf8&
     rewriteBatchedStatements=true&
     useConfigs=maxPerformance&useSSL=false

start SonarQube ... and login using id/pw = admin/admin

$ ~/local/sonarqube/bin/linux-x86-64/sonar.sh start

を実行後、 ブラウザで http://localhost:9000 へアクセスすると、 ログイン画面のようなものが表示されます。

この画面から、id/pw = admin/admin でログインできますので、 プロジェクトの作成や、解析プラグインのinstallを行って下さい。

install plugin - analysers

SonarQubeのブラウザ画面丈夫にある Administration からMarketplace を開くと、 様々な解析用プラグインをinstallできます。

install Sonar Scanner

続いて、実際の解析を行う Sonar Scanner の installです。 と言っても、こちらも解凍するだけです。

$ cd /home/endo/local
$ wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
$ unznip sonar-scanner-cli-3.0.3.778-linux.zip
$ ln -s sonar-scanner-3.0.3.778-linux sonar-scanner

config sonar-scanner.properties

$ vi ~/local/sonar-scanner/conf/sonar-scanner.properties


#Configure here general information about the environment, such as SonarQube DB details for example
#No information about specific project should appear here

#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

sonar.jdbc.username=root
sonar.jdbc.password=

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

解析対象のjava projectに対する設定と解析実行

解析対象のプロジェクト直下に sonar-project.properties を作成します

$ vi ~/dev/StemDocMaint

# Project identification
sonar.projectName=StemDocMaint
sonar.projectKey=StemDocMaint
sonar.projectVersion=1.0

# Info required for Sonar
sonar.sources=/home/endo/dev/StemDocMaint/src/main
sonar.exclusions=/home/endo/dev/StemDocMaint/src/main/test/*

# Comma-separated paths to directories with sources (required)
#sonar.language=java,js,jsp

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

sonar.java.binaries=/home/endo/dev/StemDocMaint/target/classes/jp/end0tknr/stemdoc
  • ※最近のsonar qube では、 sonar.java.binaries の設定が必要なようです
  • sonar.exclusions による解析対象の除外はあまり理解していません
  • ※「sonar.language=java,js,jsp」のように書かなくても、installされた解析プラグインに従い解析されます

そして、解析実行

$ cd ~/dev/StemDocMaint
$ ~/local/sonar-scanner/bin/sonar-scanner

解析結果

は、コードの複雑度等をブラウザから確認できます。

Re: Perlコアモジュールに寄せてみる

私のperl core moduleに対する理解は、随分と遅れているようですので、 次の機会の為に、メモ。

LWP::UserAgent → HTTP::Tiny 、JSONJSON::PP で、乗り換えてみたい

Perlコアモジュールに寄せてみる – Wyton

jackson for javaによる json → Map<String,Object> map 変換

import java.util.LinkedHashMap;
import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJson {

    public TestJson() { }

    public static void main(String[] args) {

        String jsonStr =
                "{\"id\":\"1\",\"orders\":["+
                "{\"hinban\":\"H11111\",\"name\":\"商品名A\"},"+
                "{\"hinban\":\"H22222\",\"name\":\"商品名B\"}]}";                
        
        ObjectMapper mapper = new ObjectMapper();
        Map<String,Object> map = new LinkedHashMap<>();
        try {
            map = mapper.readValue(
                    jsonStr,
                    new TypeReference<LinkedHashMap<String,Object>>(){});

        } catch (Exception e) {
            e.printStackTrace();
            return;
        }        
        System.out.println(map.toString());
    }
}

↑こう書くと↓こう表示されるみたい

{id=1, orders=[{hinban=H11111, name=商品名A}, {hinban=H22222, name=商品名B}]}