debian や ubuntu の deb パッケージのメンテナンス(パッチの管理)で使う quilt コマンドの利用方法をまとめます
debパッケージのメンテナンスをしていると,以下の様なエラーが出る場合があります
Applying patch 04_hyphen-manpage.diff patching file docs/man/django-admin.1 Hunk #1 FAILED at 194. 1 out of 1 hunk FAILED -- rejects in file docs/man/django-admin.1 Patch 04_hyphen-manpage.diff can be reverse-applied
つまり patch を当てるのに失敗しています
この場合 patch の修正が必要となりますが,quilt コマンドを使うとその作業が大幅に省力化できます
quilt の使い方 (エラーが出ない場合)
とりあえず
$ quilt
と実行すると quilt のサブコマンドの一覧が表示されます
まず,debパッケージに含まれるパッチの一覧は debian/patches フォルダ以下に保存されています.
$ quilt series
これで一覧が確認できます
debパッケージはこれらパッチを上から順にソースコードに適用していきます
先頭のパッチを適用するには
$ quilt push
とします
パッチが正しくあたった場合は,ひたすら quilt push を繰り返すと,どんどん次のパッチが適用されていきます
現在適用済みのパッチを確認するには
$ quilt applied
まだ適用していないパッチを確認するには
$ quilt unapplied
を実行します
またパッチを外す場合は
$ quilt pop
とします
pushやpopを繰り返すと次にどのパッチファイルがpushされるのか判らなくなる場合があります.その場合は
$ quilt next
で次にpushされるパッチが確認できます
quilt の使い方 (エラーが出た場合)
ここからが本題です
$ quilt push
でエラーが出た場合は次のような表示になります
Applying patch 04_hyphen-manpage.diff patching file docs/man/django-admin.1 Hunk #1 FAILED at 194. 1 out of 1 hunk FAILED -- rejects in file docs/man/django-admin.1 Patch 04_hyphen-manpage.diff can be reverse-applied
この場合,パッチの内容は全て破棄され,ソースコードは quilt push する前の状態に戻ります
パッチを修正する作業に取り掛かる場合は,quilt push コマンドに "-f" を付けて実行します
$ quilt push -f
これで *.rej ファイルが生成されるので,後はソースコードを手作業で修正します
修正が終わったら
$ quilt refresh
を実行します
これで修正がパッチファイルに自動で反映されます.
まとめ
まとめると
- quilt はパッチのリストを管理している
- quilt applied / quilt unapplied で適用済み/適用前パッチの一覧が確認できる
- パッチを適用するときは quilt push
- quilt next で次にpushされるパッチのファイル名が確認できる
- パッチを外すときは quilt pop
- エラーがでるパッチを修正したい場合
- まず quilt push -f して rejファイルを作る
- rejファイルを見ながら,ソースコードを修正
- 修正が追わたら quilt refresh .これでパッチが自動更新される
となります