PowerDNS を PostgreSQL バックエンドでインストールして、PowerDNS Admin を動かしたいということで、 順を追って手順を記録していきます。
もくじ
- PostgreSQL をインストールする
- PowerDNS をインストールする
- PowerDNS Admin をインストールする ← 今回
- h2o + Gunicorn で実行する
参考
準備
pdnsadm ユーザーの作成
PowerDNSAdmin を実行するユーザーを用意します。
# pw useradd pdnsadm -u 5120 -g pdns -s /usr/sbin/nologin -c "PowerDNSAdmin unpriviledged user" # mkdir -p /usr/home/pdnsadm # chown pdnsadm:pdns /usr/home/pdnsadm
ホームディレクトリは、本来 pw コマンドが自動で作ってくれるはずなのですが、なぜか作られませんでした。
PowerDNSAdmin v0.3.0 の取得
pdnsadm ユーザーになってホームディレクトリで
$ fetch https://github.com/PowerDNS-Admin/PowerDNS-Admin/archive/refs/tags/v0.3.0.zip $ tar -xvs /PowerDNS-Admin-0.3.0/powerdns-admin/ -f v0.3.0.zip
必要なパッケージのインストール
まずは FreeBSD のパッケージをインストールします。
# pkg install python39 node16 yarn rust # pkg install libxml2 libxslt pkgconf py39-bcrypt py39-cffi py39-ldap py39-xmlsec
本当は py39-cryptography を入れることで rust の必要性を回避したいところですが、なかなか ports が 3.4.8 から上がらないので、仕方なく rust も入れます。 次に Python の virtualenv を用意しますが、上でインストールしたものは pip でのインストールが面倒なので、--system-site-packages オプションをつけます。pdnsadm ユーザーで、ホームディレクトリにて
$ python3.9 -m venv webpy39 --system-site-packages $ . ./webpy39/bin/activate (webpy39) $ python -m pip install --upgrade pip wheel
shell を tcsh にしている場合は
source ./webpy39/bin/activate.csh
そのまま PowerDNSAdmin のディレクトリに入って、要求されている python ライブラリをインストールします。
pip install
の前に、mysqlclient==2.0.1
をコメントアウトします。また、PostgreSQL を利用するので、psycopg2 をインストールします。細かいですが、shell を上記の通りに /usr/sbin/nologin に設定している場合、su -m
か何かで pdnsadm ユーザー権限になっていると思うので、HOME 環境変数の設定を忘れないでください。(tcsh だと setenv ですね)
(webpy39) $ export HOME=/usr/home/pdnsadm (webpy39) $ cd powerdns-admin (webpy39) $ pip install -r requirements.txt (webpy39) $ pip install psycopg2
PowerDNSAdmin の設定と実行
PowerDNSAdmin の設定
powerdns-admin/powerdnsadmin/default_config.py に設定があるので、それを書き換えるという手もありますが、ひとまず powerdns-admin/configs/standalone.py にコピーしていじります。
import urllib.parse # Basic App Configuration SALT = "なんかランダム文字列" SECRET_KEY = "なんかランダム文字列" BIND_ADDRESS = "0.0.0.0" PORT = 9191 OFFLINE_MODE = False # Database Configuration SQLA_DB_USER = "pdns" SQLA_DB_PASSWORD = "DBに設定したpdns roleのパスワード" SQLA_DB_HOST = "[::1]" SQLA_DB_NAME = "pdns" SQALCHEMY_TRACK_MODIFICATIONS = True # Database - PostgreSQL SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://{}:{}@{}/{}".format( urllib.parse.quote_plus(SQLA_DB_USER), urllib.parse.quote_plus(SQLA_DB_PASSWORD), SQLA_DB_HOST, SQLA_DB_NAME ) SAML_ENABLED = False SAML_ASSERTION_ENCRYPTED = True
PostgreSQL への接続の設定については公式サイトに記述があります。 パスワードというかランダム文字列の生成については、専用のプログラムを使う方法や、汎用の方法があるので、参考にしてください。
Flask の設定
環境変数 FLASK_CONF と FLASK_APP を設定します。
$ cd /usr/home/pdnsadm/powerdns-admin $ export FLASK_CONF=/usr/home/pdnsadm/powerdns-admin/configs/standalone.py $ export FLASK_APP=powerdnsadmin/__init__.py
次にデータベースを初期化して web assets をビルドします。(よく分かっていませんが、参考サイトの言うがままに)
$ flask db upgrade $ yarn install --pure-lockfile $ flask assets build
実行
これで PowerDNSAdmin のインストールと設定ができたはずなので、
./run.py
を実行して 9191 番ポートで PowerDNSAdmin が動いているかを確認します。
h2o + Gunicorn で実行する
ちょっと長くなるので、次回に。