Mantis BTでユーザー認証をActive Directoryと連携する

はじめに

Mantis BTは、ユーザー認証をLDAPの情報を使って行なえるようになっている。 とある事情でActive DirectoryのLDAPの情報を使ってユーザー認証をしたい機会があったので、その設定を書いておく。 しかし、Admin Guideには、一般的なLDAPについて書かれているので、ちゃんと読まないとActive Directoryで使えるようにならない。

残念ながら、私はLDAPにもMantis BTにもさほど詳しい訳ではないので、最適解ではないかもしれないが、動く例として記載しておく。

Mantis BTは、pkgsrc/devel/mantisから導入したMantis BT 1.3.1であり、/usr/pkg/share/mantis 以下に配置されている。LDAP機能を使うため、pkgsrc/databases/php-ldapも追加でインストールしている。

Active Directoryでの認証の有効化方法

まず最初にやらないといけないのは、Active Directory認証に移行した後に使う管理者ユーザーの追加である。 Mantis BTのインストールをしたばかりの状態では、ユーザーID/パスワード = administrator/root でログインできる。ここで、Active Directoryに登録されているユーザーを管理者として登録しておく。 Active Directory認証を有効化した後には、administratorユーザーでログインすることはできないので、先に管理者ユーザーを作っておく必要がある。

Active Directoryについては、以下のような情報が与えられている。

Active Directoryサーバー
tetera-ad.tetera.org
ブラウジングするユーザーID/パスワード
aduser/aduser_password

これらに対して、/usr/pkg/share/mantis/config/config_inc.php の末尾に、以下のように追加する。


$g_login_method = LDAP;
$g_ldap_server = 'tetera-ad.tetera.org';
$g_ldap_port = '3268';
$g_ldap_root_dn = 'dc=tetera,dc=org';
$g_ldap_organization = '';
$g_ldap_uid_field = 'sAMAccountName';
$g_ldap_bind_dn = 'aduser@tetera.org';
$g_ldap_bind_passwd = 'aduser_password';
$g_use_ldap_email = OFF;
$g_use_ldap_realname = OFF;
$g_show_realname = OFF;
$g_ldap_protocol_version = 3;
$g_allow_signup = OFF;
$g_lost_password_feature = OFF;
$g_ldap_follow_referrals = OFF;

$g_use_ldap_realname = ON;にすることで、cnをユーザーの名称として使うことができるはずである。 しかし、今回の環境では、sAMAccountNameとcnは一緒なので、OFFにして各ユーザーが設定するようにした。

Google Static Mapsの代替としてのOpenStreetMap

はじめに

Google Mapsには、Google Maps Static API というものがあって、パラメーターを渡すと、PNG画像を返してくれる。 これを散布図グラフの背景に設定すれば、地図上に散布図で示した情報をマッピングできるので、便利である。 しかし、Google Static Mapsは、例えばイントラネットに閉じたサービスでは使用できない。 Open Street Mapは、Creative Commons Attribution-ShareAlike 2.0 Genericでライセンスされているので、 このような環境でも使用できるのだが、tile.openstreetmap.orgのAPIは、 Google Static Maps APIとは指定の方法が違うようで、Google Static Maps用のパラメーター計算の方法がそのまま使えない。

調べてみると、staticmapliteというのが、Google Static Maps APIに類似のAPIで、 tile.openstreetmap.orgから画像を取得できるようだ。 特にズームの値の指定が一緒なのが大変助かる。 しかし、インストール方法も書かれていないのが難点だった。

後からよく調べてみると、 staticMapLiteExtと言うものもあって、こちらの方が高機能であるようだ。しかもインストール方法もちゃんと書かれている。 新規で導入するのであれば、こちらの方が良いかもしれない。

インストールの事前準備

今回は、nginxとphp-fpmを使って動かすことにしたため、 pkgsrc/www/nginxpkgsrc/www/php-fpmpkgsrc/www/php-curlpkgsrc/graphics/php-gd、 をインストールしておく。私の場合は、既にnginxでウェブサイトを構築しているため、新規にインストールはしなかった。 導入したPHPは、5.6.25である。 php-curlとphp-gdは、staticmapliteの動作に必要である。

php-fpmの設定

php-fpmは、localhostからのみ接続できるように、/usr/pkg/etc/php-fpm.confに

listen.allowed_clients = 127.0.0.1

を追加した。

nginxの設定

以下のような設定を/usr/pkg/etc/nginx/nginx.confに追加した。


http {
        upstream php-handler {
            server 127.0.0.1:9000;
        }
}
server {
        location /osm-staticmap/staticmaplite {
                root /home/YOUR_NAME/osm;
        }
        location ~ ^(.+?\.php)(/.*)?$ {
                root /home/YOUR_NAME/osm;
                try_files $1 =404;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_pass php-handler;
        }
}


このように設定した上で、php-fpmとnginxをrestartさせておく。

staticmapliteの配置

staticmapliteは~/osm/osm-staticmap/staticmaplite/staticmaplite.phpとして配置するので、 以下のようにgithubからcloneしておく。

$ mkdir -p ~/osm/osm-staticmap
$ cd ~/osm/osm-staticmap
$ git clone git@github.com:dfacts/staticmaplite.git

動作確認

https://deuterium.ryoon.net/osm-staticmap/staticmaplite/のように表示されたら、正常に使用開始できている。

おまけ

デバッグメッセージの表示

標準ではエラーメッセージが表示されないので、動作確認中は、以下のように変更しておくと良いかもしれない。

diff --git a/staticmap.php b/staticmap.php
index a9855e5..118c399 100644
--- a/staticmap.php
+++ b/staticmap.php
@@ -25,8 +25,8 @@
  *
  */

-error_reporting(0);
-ini_set('display_errors', 'off');
+error_reporting(1);
+ini_set('display_errors', 'on');

 Class staticMapLite
 {

右下のattributionの画像の変更

標準では、「(c) OpenStreetMap contributors」ではないので、使いにくい。 osm_logo.pngを置き換えてやれば良い。 画像の右下同士を合わせるので、ピクセル数を変えてもstaticmaplite.php等の変更は必要ない。

HTTPプロキシーの使用

イントラネットからインターネットに出るのに、HTTPプロキシーサーバーを経由しないといけない場合もあると思う。 staticmapliteは、php-curlを使っているので、curl_setoptのCURLOPT_HTTPPROXYTUNNEL等を設定してやれば良い。 例えば、認証が必要なHTTPプロキシーサーバーを経由する場合には、以下のようにする。


diff --git a/staticmap.php b/staticmap.php
index a9855e5..4851575 100644
--- a/staticmap.php
+++ b/staticmap.php
@@ -339,6 +345,12 @@ Class staticMapLite
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0");
         curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
+        curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
+        curl_setopt($ch, CURLOPT_PROXYPORT, '8080');
+        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+        curl_setopt($ch, CURLOPT_PROXY, 'http://PROXYSERVER');
+        curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'USERNAME:PASSWORD');
         $tile = curl_exec($ch);
         curl_close($ch);
         if ($tile && $this->useTileCache) {

jwmのタスクバーに年月日も表示する

jwmでのタスクバーの時刻表示を24時間制にするで、24時間制で時刻を表示するようにしたが、使っていると日付も表示して欲しいと思うようになった。以下のように変更することで、2016-08-18 21:36のように表示できた。


--- /usr/pkg/share/examples/jwm/system.jwmrc    2016-08-05 00:30:50.000000000 +0900
+++ .jwmrc      2016-08-18 21:27:42.149972917 +0900
@@ -58,7 +58,7 @@
         <TaskList maxwidth="256"/>

         <Dock/>
-        <Clock><Button mask="123">exec:xclock</Button></Clock>
+        <Clock format="%Y-%m-%d %R"><Button mask="123">exec:xclock</Button></Clock>

     </Tray>
 

ibus-skkのデフォルトで全角になっている記号を半角で入力するようにする

uim-skkとibus-skkをきまぐれに行き来して使っているのだが、 操作性としては、Ctrj-jの動作がより自然なisus-skk 1.4.2が使いやすい。 しかし、細かい入力規則の設定方法が分からず、クエスチョンマークやコロン等が全角で入力されてしまうのを放置していて、非常に面倒だった。

ふと、/usr/pkg/share/libskk/rules ディレクトリーを見ると、libskkの設定ファイルを書くことで変更できるようなので、やってみた。

しかし、入力規則は、Defaultを変更は一般ユーザー権限ではできず、自分独自の入力規則を作成することで、カスタマイズするらしい。 以下のように操作して、記号類を半角にできた。

$ mkdir ~/.config/libskk/rules
$ cd ~/.config/libskk/rules
$ cp -r /usr/pkg/share/libskk/rules/default hankakusymbols
$ vi metadata.json
$ diff -u /usr/pkg/share/libskk/rules/default/metadata.json metadata.json
--- /usr/pkg/share/libskk/rules/default/metadata.json   2016-08-05 05:24:16.000000000 +0900
+++ metadata.json       2016-08-13 08:20:46.044465179 +0900
@@ -1,4 +1,4 @@
 {
-    "name": "Default",
-    "description": "Default typing rule"
+    "name": "Hankaku Symbols",
+    "description": "Default typing rule with hankaku symbols"
 }
$ vi rom-kana/default.json
$ diff -u /usr/pkg/share/libskk/rules/default/rom-kana/default.json rom-kana/default.json
--- /usr/pkg/share/libskk/rules/default/rom-kana/default.json   2016-08-05 05:24:16.000000000 +0900
+++ rom-kana/default.json       2016-08-13 08:21:47.733380728 +0900
@@ -232,9 +232,9 @@
             "zyo": ["", "じょ" ],
             "zyu": ["", "じゅ" ],
             "-": ["", "ー" ],
-            ":": ["", ":" ],
-            ";": ["", ";" ],
-            "?": ["", "?" ],
+            ":": ["", ":" ],
+            ";": ["", ";" ],
+            "?": ["", "?" ],
             "[": ["", "「" ],
             "]": ["", "」" ]
         }

これでより快適に生活できるようになった。

jwmでのタスクバーの時刻表示を24時間制にする

長らくopenmotif/motifのmwm (Motif Window Manager)をX11環境のWindow Managerとして使用していたのだが、 さすがに近代的なものに変えたいと考えていた。

sloppy focusであって欲しく、軽量なものを探していたところ、JWM ((Joe's Window Manager)がデフォルトでsloppy focusで、全画面表示を正しく扱える等の近代的なものであったので、 乗り換えることにした、

しかし、LANG=ja_JP.UTF-8なロケールである場合、12時間制で時刻が表示されているのが気になっていた。 以下のパッチのように~/.jwmrcを変更することで変更できた、


--- /usr/pkg/share/examples/jwm/system.jwmrc    2016-08-05 00:30:50.000000000 +0900
+++ .jwmrc      2016-07-14 00:08:47.813229150 +0900
@@ -58,7 +58,7 @@
         <TaskList maxwidth="256"/>

         <Dock/>
-        <Clock><Button mask="123">exec:xclock</Button></Clock>
+        <Clock format="%R"><Button mask="123">exec:xclock</Button></Clock>

     </Tray>


これで快適に生活できる。

MPEG 2.5

MPEG 2.5と言う表記を見掛けたのだが、どういうものか理解できなかった。 /usr/pkgsrc/audio を以下のように検索すると、 /usr/pkgsrc/audio/libmad/DESCR に、MPEG-2 extension to Lower Sam...