未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

ipa fontのDebian Packageを公開した

初めてのDebian package。初めてのgithub公開。後悔はしていない。

githubのアカウントは随分前にとっていたのだが、公開するネタがなかったので放置していた。来週の楽天テクノロジーカンファレンスでディストリビューション大集合の打ち合わせをいろいろしているのだが、IPAフォントの評判がライセンスがオープンソースライセンス(debian的な意味で)でないので、debianにふくめることができなくて、苦労しているという話が出ていて、それはそれとして有名な話なのであるが、自分が作ったパッケージを公開しても問題は解決しないということを判っていたうえで、パッケージの作り方、githubの利用の仕方の勉強の意味もかねて、ここに公開することにする。

公開までの手順。

githubのアカウント登録方法などは略。

  • 自分のアカウントにログイン
  • 右上あたりに、Your Repositories (create a new one)というのがあるので、そこをクリック
  • Project Name/Description/Homepage URLなどを適当にいれる。Project Name はパッケージ名になるので、ここではttf-ipafontなどとする
  • github上にrepositoryができるので、ローカル環境にgitの環境を作り、pushする。
  $ git config --global user.email hyoshiok@miraclelinux.com
あらかじめ、ローカルにレポジトリがあれば
  $ git remote add origin git@github.com:hyoshiok/ttf-ipafont.git
  $ git push origin master
みたいな感じでOKだし、
新規に作成するならば、
  $ mkdir ttf-ipafont
  $ cd ttf-ipafont
  $ git init
  $ touch README
  $ git add README
  $ git commit -m 'first commit'
  $ git remote add origin git@github.com:hyoshiok/ttf-ipafont.git
  $ git push origin master
てな感じだ。
簡単簡単。

上記パッケージの利用方法。ソースコードからのビルド

  $ git-clone git://github.com/hyoshiok/ttf-ipafont.git 
  $ cd ttf-ipafont/
  $ dpkg-buildpackage -rfakeroot

簡単簡単。

packagerが会社名(MIRACLE LINUX CORPORATION)になっているのは会社で作ったから。

追記:debian/copyrightの内容が正しくないという指摘を岩松さんからいただいた。早速直した。感謝します。(オープンソースの力ですね)

rubyの一行パッチを書いた。

rubyについてはまったくの門外漢であるが、http://redmine.ruby-lang.org/issues/show/699 という問題を教えてもらったので、早速解析してみた。

$ svn diff
Index: vm_method.c
===================================================================
--- vm_method.c	(revision 20238)
+++ vm_method.c	(working copy)
@@ -314,7 +314,7 @@
     if (OBJ_FROZEN(klass))
 	rb_error_frozen("class/module");
     if (mid == object_id || mid == __send__ || mid == idInitialize) {
-	rb_warn("removing `%s' may cause serious problem", rb_id2name(mid));
+	rb_bug("removing `%s' may cause serious problem", rb_id2name(mid));
     }
     if (st_lookup(RCLASS_M_TBL(klass), mid, &data)) {
 	body = (NODE *)data;

rb_warn()でエラーを報告するのではなくrb_bug()でエラーを報告し、すなおにabortする。

$ ./ruby -e 'class Exception; remove_method(:initialize); end;'
-e:1: [BUG] removing `initialize' may cause serious problem
ruby 1.9.0 (2008-11-15 revision 20237) [i686-linux]

-- control frame ----------
c:0005 p:---- s:0012 b:0012 l:000011 d:000011 CFUNC  :remove_method
c:0004 p:0013 s:0008 b:0008 l:000007 d:000007 CLASS  -e:1
c:0003 p:0009 s:0006 b:0006 l:000005 d:000005 TOP    -e:1
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP    <dummy toplevel>:17
---------------------------
DBG> : "-e:1:in `remove_method'"
DBG> : "-e:1:in `<class:Exception>'"
DBG> : "-e:1:in `<main>'"
-- backtrace of native function call (Use addr2line) --
0x812b7d4
0x81593f1
0x8159448
0x8125668
0x81257c2
0x811943d
0x811b313
0x811dd8d
0x81220c4
0x81222ac
0x805d32f
0x805e756
0x805bd50
0xb7d5c685
0x805bc51
-------------------------------------------------------
Aborted

どうせリカバリできないbugなので、情報を出力してabortする方がいろいろヒントを出してくれるので、実装者としてはウレシイのではないかと思ったのだが、いらないお世話ですかね。