debパッケージにパッチを当てます。
libapache2-mod-auth-mysqlにパッチを当ててみます。
事前準備
ビルドに必要なコマンドが含まれたパッケージを事前にインストールしておきます。
build-essentialパッケージは毎回入れる必要はありません。
$ sudo apt-get install build-essential
パッケージのコンパイルに必要なパッケージをインストール
パッケージをコンパイルするためには、依存関係があるパッケージやリンクする必要のあるライブラリが入ったパッケージをインストールする必要があります。
apt-getのbuild-depで必要なパッケージをインストールできます。
$ sudo apt-get build-dep libapache2-mod-auth-mysql パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 'libapache2-mod-auth-mysql' の代わりに 'mod-auth-mysql' をソースパッケージとして選出しています 以下のパッケージが新たにインストールされます: apache2-threaded-dev libapr1-dev libaprutil1-dev libpq-dev libpq5 uuid-dev アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 3 個。 2,068 kB のアーカイブを取得する必要があります。 この操作後に追加で 13.5 MB のディスク容量が消費されます。 続行しますか [Y/n]?
ソースの取得
apt-get sourceで適当なディレクトリにソース一式を取得します。
$ apt-get source libapache2-mod-auth-mysql
パッチの適用
パッケージにもともとあるパッチを適用します。
debian/rulesのpatchターゲットを使う
$ cd mod-auth-mysql-4.3.9/ $ debian/rules patch test -d debian/patched || install -d debian/patched dpatch apply-all applying patch 001-usage to ./ ... ok. applying patch 003-ftbfs_apache2.2 to ./ ... ok. applying patch 004-reconnect to ./ ... ok. applying patch 005-directives to ./ ... ok. applying patch 006-options to ./ ... ok. applying patch 007-unify_namespace to ./ ... ok. applying patch 008-make_scrambled_password to ./ ... ok. applying patch 009-port-int to ./ ... ok. applying patch 010-enctype-apache to ./ ... ok. applying patch 011-auth_basic to ./ ... ok. applying patch 012-charset to ./ ... ok. applying patch 013-CVE-2008-2384_charset to ./ ... ok. applying patch 014-default-password to ./ ... ok. applying patch 015-empty-passwords to ./ ... ok. applying patch 016-apr_pstrcat to ./ ... ok. applying patch 017-doc_persistent_conn to ./ ... ok. dpatch cat-all >>patch-stampT mv -f patch-stampT patch-stamp $
パッケージには、17個のパッチがありました。
全部当てたあとに、必要なパッチを当てます。
$ patch < ../../mod_auth_mysql.patch patching file mod_auth_mysql.c $
コンパイル
debian/rules buildでコンパイルできるか確認します。
$ debian/rules build dh_testdir ./configure --disable-apache13 --enable-apache2 --with-mysql-libs=`mysql_config --variable=pkglibdir` checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking for mysql_init in -lmysqlclient... yes checking how to run the C preprocessor... gcc -E checking for egrep... grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking crypt.h usability... yes checking crypt.h presence... yes checking for crypt.h... yes checking for crypt in -lcrypt... yes checking for an ANSI C-conforming const... yes checking return type of signal handlers... void configure: creating ./config.status config.status: creating Makefile config.status: creating config.h touch configure-stamp dh_testdir /usr/bin/make make[1]: ディレクトリ `~/apt/auth-mysql/mod-auth-mysql-4.3.9' に入ります /usr/bin/apxs2 -o apache2_mod_auth_mysql.la -I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu -lmysqlclient -DAPACHE2 -c mod_auth_mysql.c /usr/share/apr-1.0/build/libtool --silent --mode=compile --tag=disable-static x86_64-linux-gnu-gcc -prefer-pic -DLINUX=2 -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_REENTRANT -I/usr/include/apr-1.0 -I/usr/include/openssl -I/usr/include/xmltok -pthread -I/usr/include/apache2 -I/usr/include/apr-1.0 -I/usr/include/apr-1.0 -I/usr/include/mysql -DAPACHE2 -c -o mod_auth_mysql.lo mod_auth_mysql.c && touch mod_auth_mysql.slo /usr/share/apr-1.0/build/libtool --silent --mode=link --tag=disable-static x86_64-linux-gnu-gcc -o apache2_mod_auth_mysql.la -L/usr/lib/x86_64-linux-gnu -lmysqlclient -rpath /usr/lib/apache2/modules -module -avoid-version mod_auth_mysql.lo cp .libs/apache2_mod_auth_mysql.so . make[1]: ディレクトリ `~/apt/auth-mysql/mod-auth-mysql-4.3.9' から出ます touch build-stamp $
あとは、パッケージ化ですがdpatchの使い方が、まだよくわからないので、後日…
元に戻す
もとに戻すには、debian/rules cleanを実行するのですが、一連の処理でパッチをリバースするため、手動で当てたパッチを当てたままだとエラーになります。
まずは、手動で当てたパッチを戻します。
$ patch -R < ../../mod_auth_mysql.patch patching file mod_auth_mysql.c $
あとは、debian/rules cleanで元に戻ります。
dh_testrootが実行されるのでfakerootで実行します。
$ fakeroot debian/rules clean
これでソースを取得してきた時と同じ状態に戻ります。