2014年1月11日土曜日

OVS3 UEK のソース RPM から kernel-uek-devel と kernel-uek-headers を作成する。

最近、Oracle VM Server 3.2.6 に NIC のドライバをインストールしようとしたところ
「make install」 するために kernel-uek-devel と kernel-uek-headers の
RPMパッケージが必要になりました。
しかし、OVS のインストールメディアやパブリック YUM サイト(public-yum.oracle.com)では
このパッケージが見つけられませんでした。

そこで、kernel-uek のソース RPM から
kernel-uek-devel と kernel-uek-headers のRPMを作成してみました。

今回は、Oracle Linux 5.8 (64bit) の環境でビルドしてみました。
[root@sv2 ~]# cat /etc/oracle-release
Oracle Linux Server release 5.8
[root@sv2 ~]# uname -a
Linux sv2 2.6.18-308.el5 #1 SMP Sat Feb 25 12:40:07 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

ソース RPM のインストール

まず、ソース RPM(kernel-uek-2.6.39-300.32.5.el5uek.src.rpm)を入手します。
e-Delivery から Oracle VM Server 3.2.6 のソースファイルメディアを DL してもよいと思いますが、
容量が大きいので、下記のパブリックYUMリポジトリから DL しました。
http://public-yum.oracle.com/repo/OracleVM/OVM3/latest/x86_64/

UEK のソース RPM をインストールします。
[root@sv2 ~]# rpm -ivh kernel-uek-2.6.39-300.32.5.el5uek.src.rpm
警告: kernel-uek-2.6.39-300.32.5.el5uek.src.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 1e5e0159
   1:kernel-uek             ########################################### [100%]
[root@sv2 ~]# ls /usr/src/redhat/SOURCES/
Makefile.config      config-powerpc-generic    find-provides
Module.kabi_i686     config-powerpc32-generic  genkey
Module.kabi_x86_64   config-powerpc32-smp      kabi_whitelist_i686
check-kabi           config-powerpc64          kabi_whitelist_x86_64
config-arm           config-rhel-generic       kabitool
config-debug         config-s390x              linux-2.6.39.tar.bz2
config-generic       config-sparc64-generic    merge.pl
config-i686          config-x86-generic        perf
config-ia64-generic  config-x86_64-generic
config-nodebug       extrakeys.pub
[root@sv2 ~]# ls /usr/src/redhat/SPECS/
kernel-uek.spec

RPM のビルド

rpmbuild コマンドで SPECファイルを指定して RPM をビルドします。
[root@sv2 ~]# cd /usr/src/redhat/
[root@sv2 redhat]# rpmbuild -ba SPECS/kernel-uek.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.96057
+ 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 ']'
+ '[' -d kernel-2.6.39/vanilla-2.6.39 ']'
+ rm -f pax_global_header
+ [[ ! -z '' ]]
+ cd /usr/src/redhat/BUILD
+ rm -rf kernel-2.6.39
+ /bin/mkdir -p kernel-2.6.39
+ cd kernel-2.6.39
+ /usr/bin/bzip2 -dc /usr/src/redhat/SOURCES/linux-2.6.39.tar.bz2
+ tar -xf -
(省略)

ビルド処理の途中で、PGP鍵生成でエントロピーが足らないようなメッセージがでて
処理が止まります。(ビルド環境が VM のせいかもしれません)
+ cp /usr/src/redhat/SOURCES/extrakeys.pub .
+ cat
###
### Now generating a PGP key pair to be used for signing modules.
###
### If this takes a long time, you might wish to run rngd in the background to
### keep the supply of entropy topped up.  It needs to be run as root, and
### should use a hardware random number generator if one is available, eg:
###
###     rngd -r /dev/hwrandom
###
### If one isn't available, the pseudo-random number generator can be used:
###
###     rngd -r /dev/urandom
###
+ gpg --homedir . --batch --gen-key /usr/src/redhat/SOURCES/genkey
gpg: WARNING: unsafe permissions on homedir `.'
gpg: keyring `./secring.gpg' created
gpg: keyring `./pubring.gpg' created
+++++++++++++++.++++++++++++++++++++.+++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++.+++++>+++++....<+++++...............<.+++++...>+++++.............................................................................................................................................................................................................+++++
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 280 more bytes)

上記のようにビルドがとまったら、別のターミナル(SSHのセッションなど)から
下記の乱数生成コマンドを実行すると、ビルド処理が進みます。
[root@sv2 ~]# rngd -r /dev/urandom

4万2000行くらい出力され、ビルド完了します。
ここまで数時間(2VCPUのVMでも5時間以上・・・)かかります。
(省略)
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5uek.debug/usr/Makefile
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5uek.debug/virt
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5uek.debug/virt/kvm
警告: ファイルが2回表記されています: /usr/src/kernels/2.6.39-300.32.5uek.debug/virt/kvm/Kconfig
ファイルの処理中: kernel-uek-debug-debuginfo-2.6.39-300.32.5uek
伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/kernel-2.6.39-300.32.5uek-root
警告: ホスト名を正式なものにできません: sv2
書き込み完了: /usr/src/redhat/SRPMS/kernel-uek-2.6.39-300.32.5uek.src.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-headers-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debuginfo-common-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-devel-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debuginfo-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debug-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debug-devel-2.6.39-300.32.5uek.x86_64.rpm
書き込み完了: /usr/src/redhat/RPMS/x86_64/kernel-uek-debug-debuginfo-2.6.39-300.32.5uek.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.22326
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd kernel-2.6.39
+ rm -rf /var/tmp/kernel-2.6.39-300.32.5uek-root
+ exit 0
[root@sv2 redhat]# 

ビルドで作成されたRPMファイルの確認。

kernel-uek のソース RPM に同梱されている SPECファイルで RPM を作成すると、
kernel-uek-~ のRPM が一式まとめて
(kernel-uek-devel と kernel-uek-headers も)作成されます。
[root@sv2 redhat]# pwd
/usr/src/redhat
[root@sv2 redhat]# ls -l RPMS/
合計 8
drwxr-xr-x 2 root root 4096  2月 24  2012 noarch
drwxr-xr-x 2 root root 4096  1月  7 03:32 x86_64
[root@sv2 redhat]# ls -l RPMS/x86_64/
合計 951480
-rw-r--r-- 1 root root  33143636  1月  7 02:22 kernel-uek-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root  33171772  1月  7 02:59 kernel-uek-debug-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root 421300455  1月  7 03:32 kernel-uek-debug-debuginfo-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root   9159971  1月  7 02:59 kernel-uek-debug-devel-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root 421330234  1月  7 02:55 kernel-uek-debuginfo-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root  44890858  1月  7 02:23 kernel-uek-debuginfo-common-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root   9145631  1月  7 02:23 kernel-uek-devel-2.6.39-300.32.5uek.x86_64.rpm
-rw-r--r-- 1 root root   1164167  1月  7 02:22 kernel-uek-headers-2.6.39-300.32.5uek.x86_64.rpm

ちなみに、ビルドで使用したソースファイルやSPECファイルをもとに、ソース RPM も生成されます。
[root@sv2 redhat]# ls -l SRPMS/
合計 81244
-rw-r--r-- 1 root root 83105131  1月  7 02:19 kernel-uek-2.6.39-300.32.5uek.src.rpm

カーネルのビルドには結構容量が必要です。
/usr/src/redhat ディレクトリ配下の使用容量は今回のビルドによるものなので、
8.5GBぐらいの空き容量があったほうがよさそうです。
[root@sv2 redhat]# pwd
/usr/src/redhat
[root@sv2 redhat]# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda3             8.5G  3.3G  4.8G  41% /
/dev/sda1             251M   27M  212M  12% /boot
tmpfs                1006M     0 1006M   0% /dev/shm
/dev/sdb1              16G  8.4G  6.7G  56% /usr/src/redhat
[root@sv2 redhat]# du -sh *
7.2G BUILD
930M RPMS
80M SOURCES
828K SPECS
80M SRPMS
16K lost+found

以上、 kernel-uek-devel と kernel-uek-headers のRPM作成でした。


【補足】 2014/01/12

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

そして行儀のよい方法を模索中です。
[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

こんなシェルもありましたが…
[root@sv2 redhat]# /usr/lib/rpm/redhat/dist.sh
.el5[root@sv2 redhat]#
[root@sv2 redhat]# /usr/lib/rpm/redhat/dist.sh --help
Usage: /usr/lib/rpm/redhat/dist.sh [OPTIONS]
 Default mode is --dist. Possible options:
 --el           for RHEL version (if RHEL)
 --fc           for Fedora version (if Fedora)
 --rhl          for RHL version (if RHL)
 --dist         for distribution tag
 --distnum      for distribution number (major)
 --disttype     for distribution type
[root@sv2 redhat]# rpmbuild -bs SPECS/kernel-uek.spec --define "dist `/usr/lib/rpm/redhat/dist.sh`"
警告: ホスト名を正式なものにできません: sv2
書き込み完了: /usr/src/redhat/SRPMS/kernel-uek-2.6.39-300.32.5.el5uek.src.rpm

ちなみに、「警告: ホスト名を正式なものにできません:」は、
この Linux のホスト名が名前解決できていないから警告が出ています。

ビルドやり直しました。2014/01/13



0 件のコメント:

コメントを投稿