2014年1月13日月曜日

UEK の RPM ビルド(失敗談 と リテイク)

前回、Oracle VM Server にインストールすべく UEK の RPM を作成しましたが、
結果が微妙であることに気づきました。
そこで、もう一度 RPM をビルドします。

前回のポストで RPM をビルドしたところ・・・
よく見るとちょっと RPM のリリース番号がおかしいので
SPEC ファイルの修正などがいるのかもしれません。
今回作成されたのは 上の RPM で、本当は下ファイル名の方が・・・
kernel-uek-devel-2.6.39-300.32.5
uek.x86_64.rpm
kernel-uek-devel-2.6.39-300.32.5
.el5uek.x86_64.rpm

微妙だったところ

RPM のリリース表記がおかしかったのですが、
実際にインストールしてみるとソースファイルへのシンボリックリンクが切れていたり
インストールしたドライバのモジュールが意図しないディレクトリに配置されたりしました。

配置されたソースファイルへのシンボリックリンクが切れている・・・
[root@ovs326-6 ~]# ls /lib/modules/2.6.39-300.32.5.el5uek/source/
ls: /lib/modules/2.6.39-300.32.5.el5uek/source/: No such file or directory ★ソース見つからない
[root@ovs326-6 ~]# cd /lib/modules/2.6.39-300.32.5.el5uek/
[root@ovs326-6 2.6.39-300.32.5.el5uek]# ls -l source build
lrwxrwxrwx 1 root root 47 Jan  7 14:48 build -> ../../../usr/src/kernels/2.6.39-300.32.5.el5uek
lrwxrwxrwx 1 root root  5 Jan  7 14:48 source -> build
[root@ovs326-6 2.6.39-300.32.5.el5uek]# ls ../../../usr/src/kernels/2.6.39-300.32.5.el5uek
ls: ../../../usr/src/kernels/2.6.39-300.32.5.el5uek: No such file or directory
[root@ovs326-6 2.6.39-300.32.5.el5uek]# ls ../../../usr/src/kernels/
2.6.39-300.32.5uek ★ディレクトリ名がよくない。
[root@ovs326-6 2.6.39-300.32.5.el5uek]# rm build ★シンボリックリンクの張り直し
rm: remove symbolic link `build'? y
[root@ovs326-6 2.6.39-300.32.5.el5uek]# ln -s ../../../usr/src/kernels/2.6.39-300.32.5uek build
[root@ovs326-6 2.6.39-300.32.5.el5uek]# ls /lib/modules/2.6.39-300.32.5.el5uek/source/
arch     firmware  ipc             kernel    Module.symvers  security    usr
block    fs        kabi_whitelist  lib       net             sound       virt
crypto   include   Kbuild          Makefile  samples         System.map
drivers  init      Kconfig         mm        scripts         tools

★リンク先がみられるようになった・・・
「make install」 でドライバをインストールしても
モジュールが意図しないところに配置されてしまいました。
※下記のように新しいモジュールはディレクトリが変・・・
[root@ovs326-6 ~]# ls -l /lib/modules/2.6.39-300.32.5*/kernel/drivers/net/e1000e/e1000e.ko
-rwxr--r-- 1 root root  390968 Aug  6 03:42 /lib/modules/2.6.39-300.32.5.el5uek/kernel/drivers/net/e1000e/e1000e.ko
-rw-r--r-- 1 root root 4673493 Jan  9 12:01 /lib/modules/2.6.39-300.32.5uek/kernel/drivers/net/e1000e/e1000e.ko
そこで、ちゃんとしたリリース表記(uname -r と一致するような)
になるように RPM をビルドしなおしました。


UEK の RPM ビルドやり直し

今回は、ビルドするマシンも UEK にしました。(今回の失敗とは関係ないですが)
[root@sv2 ~]# cat /etc/oracle-release
Oracle Linux Server release 5.8
[root@sv2 ~]# uname -a
Linux sv2 2.6.32-300.10.1.el5uek #1 SMP Wed Feb 22 17:37:40 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
[root@sv2 ~]# uname -r
2.6.32-300.10.1.el5uek  ★この表記と RPM のリリース表記を合わせたい。

カーネルのビルドをしてしまうと時間がかかるため、
まず ソース RPM だけビルドしてみて、リリース表記を確認してみました。

SPEC ファイルの「dist」という定義が見当たらなかったので
仕方なく rpmbuild コマンド実行時に「--define」で直接指定したところ
RPM リリース表記は期待通りになりました。
※「警告: ホスト名を正式なものにできません」 はホスト名が名前解決できないためです。
[root@sv2 ~]# rpmbuild --help | grep define
  -D, --define='MACRO EXPR'     値 EXPR を持つ MACRO を定義します。
そして…
[root@sv2 redhat]# grep -n "define pkg_release" SPECS/kernel-uek.spec
143:%define pkg_release 300.32.5%{?dist}uek%{?buildid}
158:%define pkg_release 300.32.5%{?dist}uek%{?buildid}
190:%define pkg_release 300.32.5%{?dist}uek%{?buildid}
194:%define pkg_release 300.32.5%{?dist}uek%{?buildid}
[root@sv2 redhat]# rpmbuild -bs SPECS/kernel-uek.spec --define "dist .el5"
警告: ホスト名を正式なものにできません: sv2
書き込み完了: /usr/src/redhat/SRPMS/kernel-uek-2.6.39-300.32.5.el5uek.src.rpm

RPM をビルドしなおします。
今回は途中で rngd (手動での乱数生成)を実行する必要がありませんでした。
(UEKでビルドしたため?)
[root@sv2 redhat]# rpmbuild -ba SPECS/kernel-uek.spec --define "dist .el5"
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.7437
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ patch_command='patch -p1 -F1 -s'
+ '[' -f .shared-srctree ']'
+ '[' '!' -d kernel-2.6.39/vanilla-2.6.39 ']'
+ cd kernel-2.6.39
+ '[' -d linux-2.6.39.x86_64 ']'
+ rm -rf deleteme.x86_64
+ mv linux-2.6.39.x86_64 deleteme.x86_64
+ cp -rl vanilla-2.6.39 linux-2.6.39.x86_64
+ rm -rf deleteme.x86_64
+ cd linux-2.6.39.x86_64
(★4万2000行くらい省略。ビルドに数時間かかる。)
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5.el5uek.debug/virt
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5.el5uek.debug/virt/kvm
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5.el5uek.debug/virt/kvm/Kconfig
ファイルの処理中: kernel-uek-debug-debuginfo-2.6.39-300.32.5.el5uek
伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/kernel-2.6.39-300.32.5.el5uek-root
警告: ホスト名を正式なものにできません: sv2
書き込み完了: /usr/src/redhat/SRPMS/kernel-uek-2.6.39-300.32.5.el5uek.src.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-headers-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debuginfo-common-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-devel-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debuginfo-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debug-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debug-devel-2.6.39-300.32.5.el5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debug-debuginfo-2.6.39-300.32.5.el5uek.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.83740
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd kernel-2.6.39
+ rm -rf /var/tmp/kernel-2.6.39-300.32.5.el5uek-root
+ exit 0
[root@sv2 redhat]#

作成された RPM ファイル

期待どおりになりました・・・
[root@sv2 redhat]# pwd
/usr/src/redhat
[root@sv2 redhat]# ls -sh RPMS/x86_64/
合計 930M
 32M kernel-uek-2.6.39-300.32.5.el5uek.x86_64.rpm
 32M kernel-uek-debug-2.6.39-300.32.5.el5uek.x86_64.rpm
403M kernel-uek-debug-debuginfo-2.6.39-300.32.5.el5uek.x86_64.rpm
8.8M kernel-uek-debug-devel-2.6.39-300.32.5.el5uek.x86_64.rpm
403M kernel-uek-debuginfo-2.6.39-300.32.5.el5uek.x86_64.rpm
 43M kernel-uek-debuginfo-common-2.6.39-300.32.5.el5uek.x86_64.rpm
8.8M kernel-uek-devel-2.6.39-300.32.5.el5uek.x86_64.rpm
1.2M kernel-uek-headers-2.6.39-300.32.5.el5uek.x86_64.rpm
[root@sv2 redhat]# ls -sh SRPMS/
合計 80M
80M kernel-uek-2.6.39-300.32.5.el5uek.src.rpm

以上、UEK の RPM 作成の失敗談とリテイクでした。

0 件のコメント:

コメントを投稿