LoginSignup
0
0

More than 3 years have passed since last update.

RDAPサーバを構築する

Posted at

RDAPとは?

WHOIS(ドメインやIPアドレスの所有者を検索するサービス)をドメインやIPアドレス事業者が提供しているが、EUのGDPR(欧州データ一般保護規則に対応できない(検索して表示される項目に住所や担当者名・連絡先などが表示される)ため、それに代わる検索システムとしてRDAPというプロトコルをICANNで策定された。
また、WHOISでは、すべてテキストベースで結果が表示されていたため、人間が見るにはよいが、プログラムで処理するには適していなかった。そのため、RDAPではREST APIで問い合わせを行い、結果をJSON形式で返すように定められている。
通常、自社のサーバ等でRDAPをサービスする機会はほぼない(レジストリ以外では不要)と思われる。

前提ソフトウェアのインストール

RDAPサーバとして、現時点(2019年11月)で、openrdapとreddogのオープンソースソフトウェアが確認されている。
今回はreddogを使用してRADAPサーバの構築を行った。

RDAPサーバはTomcatで動作するため、前提ソフトウェアとして、Apache Tomcat、MySQL(Mariadb)、Apache、openjdk、mysql-connector-javaが必要となる。今回はすべてyumレポジトリよりインストールしている。

$ sudo yum install java-latest-openjdk httpd mariadb mariadb-server mysql-connector-java tomcat

RDAPサーバのインストール

reddogはwar形式で配布されているので、公式サイトより最新版をダウンロードする。

$ cd $CATALINA_HOME/webapps/rdap/
$ wget https://github.com/NICMx/rdap-server/releases/download/v1.4.3/rdap-server-1.4.3.war
$ jar -xvf rdap-server-1.4.3.war
$ rm rdap-server-1.4.3.war

次にサンプルのDAOファイルをダウンロードします。
reddogでは、ビルトインDBやMySQLなどの外部DBなど様々なDAOが利用できます。

$ cd $CATALINA_HOME/webapps/rdap/WEB-INF/lib
$ wget https://github.com/NICMx/releases/raw/master/RedDog/rdap-sample-daa-impl-0.0.2.jar

本来であれば、”$CATALINA_HOME/webapps/rdap/WEB-INF/data-access.properties”にどのDAOを使用するか記載する必要があるのですが、1つしかない場合は、自動的に設定してくれますので、以上で終了です。

$ sudo systemctl start tomcat

Tomcatを起動します。エラーなく起動できていることを確認してください。ブラウザから”http://サーバ名:8080/rdap/”にアクセスすると
image.png
が表示されます。

MySQLをデータソースとして使用する

これまではビルトインのデータベースを使用していた。しかし、このままでは使い勝手が悪く他のアプリケーション(例えばドメイン管理用のアプリなど)との連携がしにくくデータの登録・削除・更新もしずらい。そこで、データベースをMySQL(Mariadb)に変更する。
MariaDBのインストールと初期設定(rootユーザのパスワード設定等)は完了しているものとする。

まずは、データベースの初期化(テーブルの作成など)を行う

$ wget https://raw.githubusercontent.com/NICMx/rdap-sql-provider/v1.4.2/src/test/resources/META-INF/sql/Database.sql
$ mysql -u root -p < Database.sql

これで、データベースの作成と初期データ(カントリーコードだけ)の登録がされる。
つぎにJavaから接続するユーザを作成する。

$ mysql -u root -p
mysql > create user 'rdap'@'localhost' identified by 'password';
mysql > grant all on rdap.* to 'rdap'@'localhost' identified by 'password';

つぎにSQL用のDAOをインストールする。

$ cd $CATALINA_HOME/webapps/rdap/WEB-INF/lib/
$ wget https://github.com/NICMx/rdap-sql-provider/releases/download/v1.4.2/rdap-sql-provider-1.4.2.jar
$ rm rdap-sample-daa-impl-0.0.2.jar

なお、先ほど使ったdemo用のDAOは消しておきます。
次にResourceの設定を$CATALINA_HOME/webapps/rdap/META-INF/context.xmlに記述します。

META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/rdap">
        <Resource name="jdbc/rdap"
                type="javax.sql.DataSource"
                auth="Container"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost/rdap"
                username="rdap"
                password="パスワード"
                validationQuery="select 1" />
</Context>

yumで入ったtomcatはバグがあるらしく

Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]

と起動時にエラーが発生し、起動しません。いろいろ調べた結果、エラーで見つからないと言われたfactoryを明示的に指定することに。

META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/rdap">
        <Resource name="jdbc/rdap"
                type="javax.sql.DataSource"
                auth="Container"
                factory="org.apache.commons.dbcp.BasicDataSourceFactory"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost/rdap"
                username="rdap"
                password="パスワード"
                validationQuery="select 1" />
</Context>

これで起動してもやはりエラーになる。

java.lang.IllegalArgumentException: mx.nic.rdap.db.exception.InitializationException: Trouble loading country codes from the DB.
....
   Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

よくログをみるとSQLのドライバが読めていないよう。そこで、SQLのドライバをWEB-INF/libにコピー。

$ cp /usr/share/java/mysql-connector-java.jar $CATALINA_HOME/webapps/rdap/WEB-INF/lib/.

これで完了。
なお、DBの中身はカントリーコード以外空白なので、何も値を返しません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0