Amazon

2013年10月16日水曜日

oracle xe をdebパッケージ化

Oracle11g xeをalienコマンドを使わずにパッケージ化しましたが途中で時間切れとなりました。

RPMパッケージからバイナリを取り出す

rpm2cpiコマンドでバイナリを取り出します。
$ mkdir oracle-xe-11.2.0-2
$ cd oracle-xe-11.2.0-2/
$ rpm2cpio ../oracle-xe-11.2.0-1.0.x86_64.rpm | cpio -id
1156280 ブロック
$ ls -F
etc/  u01/  usr/

debianパッケージのテンプレートを作成

dh_makeコマンドでdebianパッケージのひな形を作成します。
$ mkdir oracle-xe-11.2.0-2
$ dh_make --native

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
 [s/i/m/l/k/n] s

Maintainer name  : ***
Email-Address    : ***
Date             : Tue, 15 Oct 2013 00:48:53 +0900
Package Name     : oracle-xe-11.2.0
Version          : 2
License          : gpl3
Type of Package  : Single
Hit  to confirm: 
Currently there is no top level Makefile. This may require additional tuning.
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the oracle-xe-11.2.0 Makefiles install into $DESTDIR and not in / .
$ ls -F
debian/  etc/  u01/  usr/
$ mkdir debian/patches
$ 

インストールファイルを設定

ビルドしないけどもインストールが必要となるファイルは、debian/installに指定します。
$ mkdir oracle-xe-11.2.0-2
$ cat debian/install 
etc
u01
usr
$

パッケージをビルド

dpkg-buildpackageコマンドで一連のコマンドが実行されてパッケージが作成されます。
$ dpkg-buildpackage
dpkg-buildpackage: source package oracle-xe-11.2.0
dpkg-buildpackage: source version 2
dpkg-buildpackage: host architecture amd64
 dpkg-source --before-build oracle-xe-11.2.0-2
 fakeroot debian/rules clean
dh clean
   dh_testdir
   dh_auto_clean
   dh_clean
 dpkg-source -b oracle-xe-11.2.0-2
dpkg-source: info: using source format `3.0 (native)'  
dpkg-source: info: building oracle-xe-11.2.0 in oracle-xe-11.2.0_2.tar.gz
dpkg-source: info: building oracle-xe-11.2.0 in oracle-xe-11.2.0_2.dsc
 debian/rules build
dh build
   dh_testdir
   dh_auto_configure
   dh_auto_build
   dh_auto_test
 fakeroot debian/rules binary
dh binary
   dh_testroot
   dh_prep
...中略...
   dh_shlibdeps
dpkg-shlibdeps: warning: /lib/x86_64-linux-gnu/libbz2.so.1 has an unexpected SONAME (libbz2.so.1.0)
dpkg-shlibdeps: error: no dependency information found for /lib/x86_64-linux-gnu/libbz2.so.1 (used by debian/oracle-xe-11.2.0/u01/app/oracle/product/11.2.0/xe/bin/zip)
...
エラーメッセージからdpkg-shlibdepsコマンドやlddコマンドで確認するしかなさそうです。
$ ldd debian/oracle-xe-11.2.0/u01/app/oracle/product/11.2.0/xe/bin/zip
        linux-vdso.so.1 =>  (0x00007fff681b2000)
        libbz2.so.1 => /lib/x86_64-linux-gnu/libbz2.so.1 (0x00007f8d98597000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8d981cf000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8d987b4000)
$ ls /lib/x86_64-linux-gnu/libbz2.so.1
/lib/x86_64-linux-gnu/libbz2.so.1
$ ls -l /lib/x86_64-linux-gnu/libbz2.so.1
lrwxrwxrwx 1 root root 15  9月  7 07:19 /lib/x86_64-linux-gnu/libbz2.so.1 -> libbz2.so.1.0.4
$ ls -l /lib/x86_64-linux-gnu/libbz2.so.1.0.4 
-rw-r--r-- 1 root root 66600  8月  4  2012 /lib/x86_64-linux-gnu/libbz2.so.1.0.4
$ dpkg-shlibdeps -v -v -v -O debian/oracle-xe-11.2.0/u01/app/oracle/product/11.2.0/xe/bin/zip symbol
>> Scanning symbol (for Depends field)
objdump: 'symbol': No such file
dpkg-shlibdeps: warning: binaries to analyze should already be installed in their package's directory
Analyzing all undefined symbols
>> Scanning debian/oracle-xe-11.2.0/u01/app/oracle/product/11.2.0/xe/bin/zip (for Depends field)
Library libbz2.so.1 found in /lib/x86_64-linux-gnu/libbz2.so.1
Library libc.so.6 found in /lib/x86_64-linux-gnu/libc.so.6
Using symbols file /var/lib/dpkg/info/libc6:amd64.symbols for libc.so.6
 Initialize dependency (libc6 #MINVER#) with minimal version (2.2.5)
Using shlibs+objdump for libbz2.so.1 (file /lib/x86_64-linux-gnu/libbz2.so.1)
dpkg-shlibdeps: warning: /lib/x86_64-linux-gnu/libbz2.so.1 has an unexpected SONAME (libbz2.so.1.0)
 Looking up shlibs dependency of libbz2.so.1 provided by 'libbz2-1.0:amd64'
 Found nothing
dpkg-shlibdeps: error: no dependency information found for /lib/x86_64-linux-gnu/libbz2.so.1 (used by debian/oracle-xe-11.2.0/u01/app/oracle/product/11.2.0/xe/bin/zip)
$ 

どうやら下記に.symbolというファイルがないのでエラーとなっているらしい。
$ ls /var/lib/dpkg/info/libbz2-*
/var/lib/dpkg/info/libbz2-1.0:amd64.list      /var/lib/dpkg/info/libbz2-1.0:amd64.shlibs
/var/lib/dpkg/info/libbz2-1.0:amd64.md5sums   /var/lib/dpkg/info/libbz2-dev:amd64.list
/var/lib/dpkg/info/libbz2-1.0:amd64.postinst  /var/lib/dpkg/info/libbz2-dev:amd64.md5sums
/var/lib/dpkg/info/libbz2-1.0:amd64.postrm
$ 
これを解決したら、quiltでパッチを作成です。

0 件のコメント: