2ヶ月ぶりのDebian HackCafeに参加。¶
2ヶ月振りのDebian Hack Cafeに参加。前回同様、大崎のスターバックスの会議室での開催でした。
昨夜やったことは、blockdiagのパッケージ作成、の中で漏れていた部分です。
debuild時にblockdiagのソースツリーに含まれているユニットテストを実行させる¶
setup.py testかbuildbot使えばテストできるのは分かったが、setup.py testをそのままdebuild/rulesに書いてしまうと、ネット経由でコーディングスタイルのチェック用のpep8.pyやユニットテスト用のnoseをダウンロードしてしまう。また、imageがpython-imagingとひもづいて無いので、テストを実行するとコケル問題も。いずれもDebianパッケージとしてあるので、Build-Dependで指定すれば解決しないか、あるいはdebuild時のように、debian/pydistみたいなのでマッピングできないか要確認、が宿題で帰宅してからやってて寝オチしてた…。
testsディレクトリをパッケージに含めないようにする¶
dhコマンドのオプションで–ignore-dirnameというのを使えばいいのかな、と試してみたがダメで、インストールするディレクトリをdebian/installに列挙するのが正解、と。これはpython2.6, 2.7, pysharedなどはそれぞれ列挙しないといけないのかなぁ?要確認。
debuild実行するとupstreamのソースが書き換えられてしまう問題¶
PKG-INFOファイルのMetadata-Versionが1.0から1.1
に勝手に書き換えられてしまう問題。未解決。
その他¶
blockdiagシリーズ以外の分かったこと
宿題は次のとおり。
自分で作ったパッチを独自に適用してパッケージ作成できるか¶
upstreamにパッチも取り込んでもらうようにするのが正しい。だけど、upstream自体の開発が止まっているので、forkしてパッチ取り込んでしまうのが良いのかなぁ…。 1
OSCのセッションで何かネタしる¶
Debian勉強会参加→常連化→勉強会運営→JP参加→選挙管理委員→adminグループ参加→会長就任→Debianパッケージメンテナンス始めた
という、なんか順番おかしくね?という経緯と今ごろようやくパッケージメンテナンスはじめたモチベーションとかの話とかどうだろう?OSCに来るようなユーザー層には興味ある内容でしょうかねぇ…?
python-tomahawkのスポンサー¶
岩松さんにお願いしました。
サインくれ by 岩松さん¶
今度のOSCで、ですね。ワシももらおう。
- 1
PowerDNS GUIの話。
Python2.6から2.7になってfuncparserlibのテストがコケる。¶
公式パッケージになった際には問題なかったのだが、登録されたBTSのメールを見て、自分の環境でもdebuildを実行してみたら同様にコケた。ビルドログは こちら 。
make[2]: ディレクトリ `/home/kohei/devel/debpkg/funcparserlib/funcparserlib-0.3.5/examples/json' に入ります
../run-tests
test-1-array ok
test-1-object ok
test-bool-and-null ok
test-empty-array ok
test-empty-object ok
test-many-array ok
test-many-object ok
test-null ok
test-numbers
--- test-numbers.out 2009-07-17 09:13:39.000000000 +0900
+++ /tmp/tmp5HRA_i 2011-10-27 00:55:08.000000000 +0900
@@ -5,9 +5,9 @@
-14,
65536,
0.0,
- 3.1400000000000001,
- -3.1400000000000001,
+ 3.14,
+ -3.14,
-123.456,
- 6.6742799999999995e-11,
+ 6.67428e-11,
-1.602176e-19,
- 6.6742799999999995e-11]
+ 6.67428e-11]
fail
test-strings ok
test-toplevel-string ok
--- stats ---
fail 1 ok 10 excpt 0
make[2]: *** [test] エラー 1
make[2]: ディレクトリ `/home/kohei/devel/debpkg/funcparserlib/funcparserlib-0.3.5/examples/json' から出ます
make[1]: *** [override_dh_auto_test] エラー 2
make[1]: ディレクトリ `/home/kohei/devel/debpkg/funcparserlib/funcparserlib-0.3.5' から出ます
make: *** [build] エラー 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debuild: fatal error at line 1348:
dpkg-buildpackage -rfakeroot -D -us -uc failed
コケているtest-numbersのコードはこれ。
#!/bin/sh
exec python json.py <<END
[
0, 1, -1, 14, -14, 65536,
0.0, 3.14, -3.14, -123.456,
6.67428e-11, -1.602176e-19, 6.67428E-11
]
END
この1ヶ月で大きく変わったことと言えば、Pythonのデフォルトのバージョンが2.6から2.7になったことくらいだろうと思い、”exec python json.py”の部分を、python2.6に変えて実行してみた。
$ ../run-tests
test-1-array ok
test-1-object ok
test-bool-and-null ok
test-empty-array ok
test-empty-object ok
test-many-array ok
test-many-object ok
test-null ok
test-numbers ok
test-strings ok
test-toplevel-string ok
--- stats ---
fail 0 ok 11 excpt 0
予想通り、問題無し。
python2.6でtest-numbersを手動で組み込みコマンドのreprで表示させてみるとこんな感じになる。
$ python2.6
Python 2.6.7 (r267:88850, Aug 3 2011, 11:33:52)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> repr(0);repr(1);repr(-1);repr(14);repr(-14);repr(65536);repr(0.0)
'0'
'1'
'-1'
'14'
'-14'
'65536'
'0.0'
python2.7だと次のとおり。
$ python
Python 2.7.2+ (default, Oct 5 2011, 10:41:47)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> repr(0);repr(1);repr(-1);repr(14);repr(-14);repr(65536);repr(0.0)
'0'
'1'
'-1'
'14'
'-14'
'65536'
'0.0'
ここまでは差異無し。浮動小数点で違いがはっきり。
python2.6の場合
>>> repr(3.14);repr(-3.14);repr(-123.456);repr(6.67428e-11);repr(-1.602176e-19);repr(6.67428E-11)
'3.1400000000000001'
'-3.1400000000000001'
'-123.456'
'6.6742799999999995e-11'
'-1.602176e-19'
'6.6742799999999995e-11'
python2.7
>>> repr(3.14);repr(-3.14);repr(-123.456);repr(6.67428e-11);repr(-1.602176e-19);repr(6.67428E-11)
'3.14'
'-3.14'
'-123.456'
'6.67428e-11'
'-1.602176e-19'
'6.67428e-11'
先ほどのテストの結果のとおりですね。2進数で割りきれない数字が、 2.6と2.7の浮動小数点の扱いが変わったのがの原因で、2.7から丸められるようになった ためのようです。
2.6系と同じ結果にするには、下記のようにすれば良いようです。
>>> from decimal import Decimal
>>> format(Decimal.from_float(3.14), '.16f')
'3.1400000000000001'
>>> format(Decimal.from_float(-3.14), '.16f')
'-3.1400000000000001'
>>> format(Decimal.from_float(6.67428e-11), '.16e')
'6.6742799999999995e-11'
>>> format(Decimal.from_float(6.67428E-11), '.16e')
'6.6742799999999995e-11'
でも、2.7ではなく2.6に合わせるというのではそもそも問題は解決しないので、さて、どうしたもんかなぁ。
第81回 東京エリアDebian勉強会開催。¶
昨日、筑波大にて開催 してきました。筑波大では昨年の5月のつくらぐさんとの合同勉強会に続いて2回目、 坂口さん (id:pi8027)の要望による出張勉強会としては昨年の木更津高専でのDebian温泉2010に続いて2回目です。つくば駅に到着して昼飯食べてつくばセンターのバスロータリーに行ったらちょうど同じタイミングで参加者が数名いました。
今回は初心者から常連までをカバーするべく、内容的には結構網羅的に入門的~濃い内容のセッションでした。筑波大の授業では基本的にはMac OS Xを使うか、一部の人がWindows 7のPCをデュアルブートでLinuxディストロを使っているそうなので、ターゲットとして筑波大生の初心者を狙ったものの、都合あわず参加できない人が多かったみたいです。が、幸いにも、都心の方からもターゲットに合致する参加者が参加してくれたり、以前Debian JP Projectに参加されていた方や、仕事で在日中のフランスのDDの方など、初参加の方が半分くらいに迫る感じの結構よい感じの比率となり、合計21名の方が参加してくれました。
ネタの内容は、岩松さんによる「Debianとは何なのか? Debianについてさらいしてみる」「月刊 Debhelper 第1回」、岡部さんによる「HaskellとDebianの辛くて甘い関係」、坂口さんによる「Debian で快適な LaTeX 作業環境」「レポートの自動生成」の5本でした。個人的には、一番おもしろかったのは坂口さんの内容で、昨日は偶然、 TeXユーザの集い 2011 とバッティングしましたが 1 、坂口さんの発表内容は分かりやすい&濃い内容で、TeXユーザの集いに参加された皆さんは残念でした。w
宴会は、岡部さんが会場を抑えてくれた、つくば駅前の つくば一丁目十番地酒場 ガマの油 でした。カエルの唐揚げは久しぶりに食べましたが 2 、美味かったですね。ちなみに、フランスでは普通にカエルを食べるそうです。 3
次回は、OSC 2011 Tokyo/Fallの初日11/19(土)にブース&セッションの予定です。
PowerDNS GUIの困った話(その5)。¶
pdns-gui、見た目もGUIとしての登録画面もかなり使いやすいのですが、困った問題が。Toolsに、”Search and replace”というボタンがあります。これをクリックして表示されるのが下のフォーム。
このツールは”検索と置換”ができるのかと思いきや、”検索かつ置換”しかできないのです。まぁ”and”だし、意味合いは正しいですね、そうですよね。
んが!非常に使いにくい!これじゃあ困る。それで目を着けたのが、同じくToolsにある”History”という機能。これはレコードのCRUDを行い、 その4 で書いたCommit changesを行ったときに記録されるAuditの情報です。
この下にある検索フォームが結構使いやすいので、これを流用してレコード検索専用のフォームを作って、 issue にパッチを投稿しておきました。
余談。¶
pdns-guiは、PHP + Symfony + Ext.JSを使って作られています。SymfonyもExt.JSも今回初めてだったのですが、最初のうちはSymfonyの構成がよく分からず、grepでソースコード読んで理解していましたが、パッチ書いているうちに大分SymfonyもExt.JS分かってきた感じですね。
PowerDNS GUIの困った話(その4)。¶
PowerDNS GUIはインストールするだけなら、PowerDNS自体のゾーン転送の機能を使う方法も、バックエンドのDBのレプリケーションの機能を使う方法 1 のどちらも使えます。しかし、画面上の右上の”Commit changes”ボタンは、前者でしか実質的に使えません。このボタンは裏では下記のようにshell execして、/usr/bin/pdns_controlコマンドを実行しています。
public static function commit()
{
// do some checks first
$pdns_version = trim(shell_exec("sudo /usr/bin/pdns_control version 2>&1"));
if (!preg_match('/^[0-9,\.]+$/',$pdns_version))
{
if (preg_match('/\[sudo\] password/',$pdns_version))
{
return "Unable to run 'sudo /usr/bin/pdns_control'. Is it defined in sud
oers file?";
}
else
{
return $pdns_version;
}
}
このコマンドはpdnsユーザとしての実行権限が必要なので、
$ sudo bash -c "
chmod 640 /etc/sudoers
sed -i 's/\(Defaults\).*env_reset/\1 visiblepw/' /etc/sudoers
echo 'www-data localhost=(pdns) NOPASSWD: /usr/bin/pdns_control' >> /etc/sudoers
chmod 440 /etc/sudoers"
のように、Defaultsをvisiblepwに、www-dataユーザにパスワード無しでpdnsユーザとして/usr/bin/pdns_controlの実行を許可してやらないといけません。 2
そもそも、このCommit changesボタンはpdns-guiを介した変更履歴の専用のauditテーブルを更新し、マスターからPowerDNSのゾーン転送をスレーブに通知するので、ネイティブモードの場合は実質的には必要ありません。が、変更したままCommit changesボタンを押して正常にバックグラウンドの処理が実行されないと、auditテーブルが更新されず、変更したレコードにフラグが立ったままで太字のままになっているというかなーり気持ち悪い状態です 3 。そもそも、/usr/bin/pdns_controlコマンドがsudoで実行されない様に、コードを変更してもそれとは無関係でServer Internal Error 500が返ってしまいます。何だかなぁ。
で、今回はこの修正を、と思ったのですが、時間がかかりそうなので、もう一つ別の問題を修正しました。
PowerDNS自体のレプリケーションでの問題。¶
前述のとおり、PowerDNS自体の機能でゾーン転送を行うのですが、PowerDNSの設定 4 を変更するだけではできません。スレーブサーバ側で、ドメイン情報を格納しているdomainsテーブルで、ドメイン毎にTYPE属性をSLAVEに、MASTER属性をマスターサーバのIPアドレスを指定しなければなりません。pdns-guiのWeb管理画面ではDomainテンプレートをMASTER, SLAVE, NATIVEの三種類を選べるのですが、残念ながらSLAVEを指定してドメインを作成しようとしても、マスターサーバのIPアドレスは指定できないため、mysqlで直接MASTER属性を変更しなければなりません。これは困った。
なので、
のような感じで、ドメイン作成時に、マスターサーバのIPアドレスを指定できるようにしました。この”Master IP addr”のフォームにIPアドレスを入力して実際にスレーブサーバのdomainsテーブルに反映されるのは、選択したテンプレートがSLAVEの場合で、かつ、IPアドレスが入力されている場合にしています。
これも、パッチを作って issueに登録 しておきました。