ksaitoの日記

日々試したことの覚え書き

debパッケージにパッチを当てる(その2)

おとといの続きです。
libapache2-mod-auth-mysqlパッケージにRedmine1.2から導入されたsaltのパッチを適用します。

パッチの適用

dpatchでパッチを適用します。
debian/patches/00listで既存のパッチを確認します。

$ tail -1 debian/patches/00list 
017-doc_persistent_conn.dpatch
$ 

dpatch-edit-patchコマンドで既存パッチに依存して新規パッチを作成します。

$ dpatch-edit-patch 018-redmine-salt 017-doc_persistent_conn
... 中略 ...
$ pwd
/tmp/dpep-work.CinHvb/mod-auth-mysql-4.3.9

2つ目の引数に指定したパッチまであたった状態でソースのコピーができるので、パッチを適用したり、必要に応じてソースを修正します。
exitするとdebian/pachesに修正パッチが作成されます。

$ patch < ~/work/apt/mod_auth_mysql.patch 
patching file mod_auth_mysql.c
$ exit
dpatch-edit-patch: * Creating new patch ~/apt/auth-mysql-org/mod-auth-mysql-4.3.9/debian/patches/018-redmine-salt.dpatch
dpatch-edit-patch: Warning: debian/patches/00template not exist, using hardcoded default.
dpatch-edit-patch: ~/apt/auth-mysql-org/mod-auth-mysql-4.3.9/debian/patches/018-redmine-salt.dpatch created.
$ 

changelogの作成

changelogに修正の概要を追加します。
バージョン番号は、プライベートなパッケージであることが分かるように適当な名称をつけます。

$ dch -i

エディタが開いてchangelogのひな形が表示されるので1行の概要説明とバージョンを修正します。

mod-auth-mysql (4.3.9-13private4) quantal; urgency=low

  * Change redmine salt 
...

パッケージのビルド

プライベートなパッケージの場合には、オフションを指定して署名を省略します。

$ dpkg-buildpackage -us -uc

下記のようにパッケージが出来上がります。

$ ls ../*private*deb
../libapache2-mod-auth-mysql_4.3.9-13private4_amd64.deb
$ 

dpkg -iでインストールすることができます。

$ dpkg -i ../libapache2-mod-auth-mysql_4.3.9-13private4_amd64.deb 
$ dpkg -l | grep ksaito
ii  libapache2-mod-auth-mysql                   4.3.9-13private4                     Apache 2 module for MySQL authentication
$

これで、どんなパッケージにもパッチや実験用のコードを追加でき、本体のパッケージがバージョンアップした場合にもパッチ単位についていくことができます。