CentOS6の練習-#10(Apacheのrpmを作る)。

 httpd-2.4.3.tar.bz2をダウンロードして,展開して中を見てみたら,httpd.specがあった。しかも,Using Apache With RPM Based Systems (Redhat / CentOS / Fedora)というページもある。となれば,やはりrpmを作ってみるのが,CentOSを使い,ディストリのパッケージを使わないものの態度としては,正しい行ないだろう。ということで,Apache2.4.3のrpm作りに挑戦!! (爆)

 長いです。いざ,覚悟!!!

 それに取り掛かる前に,「鍵を信用する作業」や「鍵の信用を取り消す作業」の練習も含めて,この間やったシグネチャの確認をApacheでやってみる。

  1. ソースをダウンロードする。
       $ wget http://ftp.tsukuba.wide.ad.jp/software/apache/httpd/httpd-2.4.3.tar.bz2
    シグネチャをダウンロードする。
       $ wget http://www.apache.org/dist/httpd/httpd-2.4.3.tar.bz2.asc
  2. 以下のコマンドで,シグネチャの確認。正しい署名と確認された。
       $ gpg –verify httpd-2.4.3.tar.bz2.asc
  3. 現在よからぬ話は聞いていないので,一応,www.apache.orgの鍵を信用する作業をやってみる。
       $ gpg –edit-key RSA鍵ID
         ————————————————————————————————————————
         コマンド> trust  <<— trustを入力
         あなたの決定は? 5  <<— 一応5にしておく
         本当にこの鍵を絶対的に信用しますか? (y/N) y  <<— 一応yにしておく
         コマンド> q  <<— qを打って,gpg –edit-keyを抜ける。
         ————————————————————————————————————————
  4. もう一度,シグネチャの確認をしてみる。先ほどのメッセージの最後の3行は表示されなくなった。
       $ gpg –verify httpd-2.4.3.tar.bz2.asc
  5. 公開鍵の信用を取り消してみる。
       $ gpg –delete-key RSA鍵ID
    更にも一度,シグネチャの確認をしてみると,メッセージは元に戻っている。

    まっ,こんなとこだね。これで,備忘録の役目は果たせるから,今後,この件は書かない。

 さて,rpmを作るにはrpm-buildがいるので,何はともあれ,これをインストールする。
   $ sudo yum install rpm-build

 では,Apacheのrpmのビルドに入る。

  1.    $ rpmbuild -tb httpd-2.4.3.tar.bz2
    をやったら,早速以下のメッセージが出た。「-devel」パッケージについては,ビルドのときだけしかいらないから,あとはアンインストールしていいと,上記のApache.orgのページに書いてあるのだが,結構な数に上るなあ。サーバ機と開発機は分けておくべきなんだろうか。今のところは,練習なので問題ないがその辺,セキュリティ面ではどうなのだろう。

    エラー: ビルド依存性の失敗:
         autoconf は httpd-2.4.3-1.i386 に必要とされています
         zlib-devel は httpd-2.4.3-1.i386 に必要とされています
         libselinux-devel は httpd-2.4.3-1.i386 に必要とされています
         apr-devel >= 1.4.0 は httpd-2.4.3-1.i386 に必要とされています
         apr-util-devel >= 1.4.0 は httpd-2.4.3-1.i386 に必要とされています
         pcre-devel >= 5.0 は httpd-2.4.3-1.i386 に必要とされています
         openldap-devel は httpd-2.4.3-1.i386 に必要とされています
         lua-devel は httpd-2.4.3-1.i386 に必要とされています
         libxml2-devel は httpd-2.4.3-1.i386 に必要とされています
         distcache-devel は httpd-2.4.3-1.i386 に必要とされています
         openssl-devel は httpd-2.4.3-1.i386 に必要とされています

    地道に,インストール。
       $ sudo yum install autoconf
       $ sudo yum install zlib-devel
       $ sudo yum install libselinux-devel
    ここで,問題発生。
       $ sudo yum install apr-devel
    ディストリのパッケージが1.3.9-5になっている。BuildRequiresでは,上記の通り1.4.0以上だからまずい。

  2. Apacheから,tarballを落としてくる。シグネチャもちゃんと確認すること。
       $ wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-1.4.6.tar.gz
  3. 落としてきたのはgz方式だが,rpmbuildではアーカイブとして扱ってくれないようなので,一度展開し,
       $ tar zxvf apr-1.4.6.tar.gz
    bzip2形式に圧縮し直す。
       $ tar cf – apr-1.4.6/ | bzip2 -c > apr-1.4.6.tar.bz2
  4.    $ rpmbuild -tb apr-1.4.6.tar.bz2

    エラー: ビルド依存性の失敗:
         libtool は apr-1.4.6-1.i386 に必要とされています
         doxygen は apr-1.4.6-1.i386 に必要とされています

    なんだってさ。「どこまで続く泥濘ぞ」ダネ。
       $ sudo yum install libtool
       $ sudo yum install doxygen

  5. 改めて,
       $ rpmbuild -tb apr-1.4.6.tar.bz2
    今度は通った。表示されたメッセージにより調べてみると,/home/centos/rpmbuild/RPMS/i386/に
         apr-1.4.6-1.i386.rpm apr-devel-1.4.6-1.i386.rpm
    ができている。cd コマンドでrpmのできたところに移動。
       $ cd /home/centos/rpmbuild/RPMS/i386/
    これをインストールする。
       $ sudo rpm -Uvh apr-1.4.6-1.i386.rpm apr-devel-1.4.6-1.i386.rpm
    終了後, cd でホームディレクトリに戻っておく。

    apr-develのインストにaprが必要だから,両方ともインストールしないとだめ。それにしても,Minimalインストールで,何も入っていないせいだろうけど,開発環境を整えるのが大変だ。devel用のコレクションか何かを入れたほうが早いかもしれないが,いらないものは入れないスタンスだから,ちょっと我慢してやらないとね。

  6. 同様に,
       $ wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.4.1.tar.gz
       $ tar zxvf apr-util-1.4.1.tar.gz
       $ tar cf – apr-util-1.4.1/ | bzip2 -c > apr-util-1.4.1.tar.bz2
  7.    $ rpmbuild -tb apr-util-1.4.1.tar.bz2

    エラー: ビルド依存性の失敗:
         expat-devel は apr-util-1.4.1-1.i386 に必要とされています
         libuuid-devel は apr-util-1.4.1-1.i386 に必要とされています
         db4-devel は apr-util-1.4.1-1.i386 に必要とされています
         postgresql-devel は apr-util-1.4.1-1.i386 に必要とされています
         mysql-devel は apr-util-1.4.1-1.i386 に必要とされています
         sqlite-devel >= 3.0.0 は apr-util-1.4.1-1.i386 に必要とされています
         freetds-devel は apr-util-1.4.1-1.i386 に必要とされています
         unixODBC-devel は apr-util-1.4.1-1.i386 に必要とされています
         openldap-devel は apr-util-1.4.1-1.i386 に必要とされています
         openssl-devel は apr-util-1.4.1-1.i386 に必要とされています
         nss-devel は apr-util-1.4.1-1.i386 に必要とされています

    これまたすごい数だ。真面目な話,postgresql-develやsqlite-develなんかは,全然使わないと思うんだが,この辺も分かってきたら,SPECを弄れるようになりたいな。

  8. また,地道にインストール。
       $ sudo yum install expat-devel
       $ sudo yum install libuuid-devel
       $ sudo yum install db4-devel
       $ sudo yum install postgresql-devel
       $ sudo yum install mysql-devel  依存関係で,openssl-develもここで,インストールされる。
       $ sudo yum install sqlite-devel
       $ sudo yum install freetds-devel
       $ sudo yum install unixODBC-devel
       $ sudo yum install openldap-devel
       $ sudo yum install nss-devel
  9. 改めて,
       $ rpmbuild -tb apr-util-1.4.1.tar.bz2
  10. cd コマンドで,
    /home/centos/rpmbuild/RPMS/i386/ に移動して,
       $ sudo rpm -Uvh apr-util*
    終了後, cd でホームディレクトリに戻っておく。
  11. Apacheの依存パッケージの続きのインストール。
       $ sudo yum install pcre-devel
       $ sudo yum install lua-devel
       $ sudo yum install libxml2-devel
    openssl-develはさっき入れたから,あとはdistcacheだけ。

  12. ところが,これがCentOS6.3のパッケージになかった。tarballを見に行ったが,展開してみても,SPECが入っていなくて手におえない。結局,Fedora17のsrc.rpmを拾ってきた。URLの枝番は18になってるね。なんでだろう。
       $ wget ftp://ftp.riken.jp/Linux/fedora/development/18/source/SRPMS/d/distcache-1.4.5-23.src.rpm
    これをリビルド。
       $ rpmbuild –rebuild distcache-1.4.5-23.src.rpm
       $ cd /home/centos/rpmbuild/RPMS/i386/
       $ sudo rpm -Uvh distcache*
    ホーム・ディレクトリに戻る。
  13.    $ rpmbuild -tb httpd-2.4.3.tar.bz2
    やっと,Apache2.4.3のrpmができたのでインストール。
       $ cd /home/centos/rpmbuild/RPMS/i386/
       $ sudo rpm -U httpd-2.4.3-1.i386.rpm

    やれやれと思ったら,
         /etc/mime.types は httpd-2.4.3-1.i386 に必要とされています
    が出たので,
       $ sudo yum provides /etc/mime.types
    と調べてみると,どうやらmailcapというパッケージを入れればいいらしい。
       $ sudo yum install mailcap
    改めて,
       $ sudo rpm -U httpd-2.4.3-1.i386.rpm

 httpd-2.4.3-1のインストール完了。一応,「It works!」表示までいかないと終わられません(爆)。

  1. Apacheのテストのために,80番ポートを開ける。
       $ sudo /sbin/iptables -I INPUT 5 -p tcp –dport http -j ACCEPT #HTTP
       $ sudo /sbin/iptables -L –line-number   変更の確認
       $ sudo /sbin/service iptables save
  2. BINDを入れていないので,名前解決のために,/etc/hostsにローカルのサーバ名と,IPアドレスを追加。
  3.    $ sudo vi /etc/httpd/conf/httpd.conf
    のServerNameをローカルなものに書き換え。
       $ sudo service httpd restart
    実は,ここで少しはまった。restartをrootでやらないとSocketエラーが出る。
  4. 自鯖Lan内のWin端末のブラウザから,ローカルのサーバ名で,アクセス。
    「It works!」が無事表示された。

 本日は,ここまで。