w3mのリコンパイル
Posted:
背景
といってもコードを書く訳ではなく、本家に取り込まれていないパッチをマージして当てたい、という要件
arakiken さんのこのページのパッチfedora23のsrpm由来の最新のw3mのコードに当てたい。 意図としては『sixel対応のw3mを最新の状態で使いたい』
作業
下記の順番で作業を行った
- arakiken / w3m / コミット Bitbucketを私のアカウントにフォークする
- フォークする際の理由は「hgコマンドに慣れてなくて怖いのでフォーク」とした…
- フォークした自分のレポジトリからクローンを作成
- 差分を取り出す
- hg diff -r 0:29 ./ > ../arakiken.path これは、この時のリビジョンが29だった。つまりイニシャルコミットから最新までの差分、を出力しようとしている
下記のようにパッチを当てた
- 作業ディレクトリ : /usr2/home/example-user/tmp/w3m/w3m_arakiken
- パッチファイルの場所 : /usr2/home/example-user/tmp/w3m/w3m_arakiken/arakiken.path 先を実行した
tar xvzf /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
cd /usr2/home/example-user/tmp/w3m/w3m_arakiken/w3m-0.5.3
patch -p1 < ../arakiken.path
srpm由来のtar.gzを差し替える(差し替え後、うまく行かない場合、srpmの削除、インストールからやり直し)
cp w3m-0.5.3.tar.gz /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
ビルドする
rpmbuild -bb ~/rpmbuild/SPECS/w3m.spec
独自パッチを当てるとSRPM由来の Patch3 が通らなくなる。
Patch #3 (w3m-0.5.2-glibc2.14-fix_file_handle_error.patch):
+ /bin/cat /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.2-glibc2.14-fix_file_handle_error.patch
+ /usr/bin/patch -p1 --fuzz=0
patching file istream.c
Hunk #1 FAILED at 22.
Hunk #2 FAILED at 114.
Hunk #3 FAILED at 658.
3 out of 3 hunks FAILED -- saving rejects to file istream.c.rej
patching file istream.h
Hunk #1 FAILED at 20.
Hunk #2 FAILED at 53.
2 out of 2 hunks FAILED -- saving rejects to file istream.h.rej
エラー: /var/tmp/rpm-tmp.SUBizt の不正な終了ステータス (%prep)
今度は『srpmパッチを当て終わった段階』からパッチを当ててみよう
# To SPEC
# * build_options に --with-migemo --disable-mouse 追加は変わらない
# * # BuildRequires: gdk-pixbuf2-xlib-devel CentOS6, fedora22以前(22を含む)では、この箇所をコメ>ントアウト
#
# * コンパイルエラーがでるパッチを削除 GC_get_warn_proc()
# + # Patch0: %{name}-rh555467_FTBFS.patch をコメントアウト
# + # %patch0 -p0 をコメントアウト
$ rpm -ivh ../w3m-0.5.3-22.fc23.src.rpm
$ tar xvzf /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
$ cd w3m-0.5.3
$ patch -p0 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-rh566101_Fix-DSO-X11.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.2-ssl_verify_server_on.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.2-glibc2.14-fix_file_handle_error.patch
$ patch -p0 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-rh707994-fix-https-segfault.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3-parallel-make.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3-format-security.patch
$ patch -p1 < /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3-FTBFS-sys-errlist.patch
$ patch -p1 < ../arakiken.path
$ cd ..
$ tar cvzf w3m-0.5.3.tar.gz ./w3m-0.5.3/
$ mv w3m-0.5.3.tar.gz /usr2/home/example-user/rpmbuild/SOURCES/w3m-0.5.3.tar.gz
$ vi /usr2/chef-home/site-cookbooks/w3m/recipes/default.rb
$ vi /usr2/home/example-user/rpmbuild/SPECS/w3m.spec
$ rpmbuild -bb ~/rpmbuild/SPECS/w3m.spec
Fedoraの場合のメモ
依存関係があるので、必要なパッケージは事前にインストールしておく
fedora17で
yum -y install gcc-c++ perl-NKF bzip2 findutils sed ncurses-devel openssl-devel pkgconfig gettext-devel automake gtk2-devel gpm-devel gc-devel nkf lynx rpm-build ImageMagick
ダウンロード
yumdownloader --enablerepo=fedora-source --source w3m && rpm -ihv w3m-* && vi ~/rpmbuild/SPECS/w3m.spec
上記の*.specファイルにはコンパイルオプションも記載されている。
--with-migemo --disable-mouse
を追加
リコンパイル
rpmbuild -bb ~/rpmbuild/SPECS/w3m.spec
既存パッケージのアンインストール
sudo yum remove w3m w3m-img && rpm -qa |grep w3m
リコンパイルしたパッケージのインストール
sudo rpm -i ~/rpmbuild/RPMS/i*/w3m-* && sudo rpm -i ~/rpmbuild/RPMS/i*/w3m-img-*
確認
rpm -qa |grep w3m
独自パッチを取り込む ( コンパイル処理などは rpmbuild用のspecファイルを流用したい、という方法 )
ソースダウンロード( sixelフォーマットへの対応が含まれたソース )
hg clone https://example_user@bitbucket.org/example_user/w3m