Changes between Version 11 and Version 12 of Developers/kenta


Ignore:
Timestamp:
2011/11/30 00:21:46 (12 years ago)
Author:
kenta
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Developers/kenta

    v11 v12  
    11= Todo = 
    2  * vlmag (due 2011/11/28) 
     2 * vlmag (done 2011/11/28: http://vinelinux.org/vlmagazine/20111128.html) 
    33 * VMWare Image 
     4   * 作っちゃいてどこに置くかを要検討 
    45 * ToolChain 
    5    * binutils-2.21.53.0.2-1vl7 
     6   * binutils-2.22-1vl7 (done 2011/11/26: http://ml.vinelinux.org/vineseed/msg07495.html) 
    67  * gcc-4.6.2 
    7    * glibc-?? 
     8     * known issue 1: /usr/lib/gcc/*-vine-linux/4.6.2/libgcj.spec のパーミッションが 600 になる謎。 
     9   * glibc-2.14.1? 
    810 * KVM ? 
    911 
    1012 
    1113= vlmag 下書きメモ = 
    12  == OSC 2011 Tokyo/Fall に行ってきました == 
    13   2011/11/19, 20 の 2日間、OSC 2011 Tokyo/Fall に参加してきました。 
    14   展示内容は 2つでした。 
    15   * Vine Linux 6のインストールメディア配布 
    16   * 開発版 Vine Seed と Gnome Shell UIのデモ 
    17   あとは、ブースの近くにいた munepiさん、Takemikaduchiさん、kudohさんと私 (kenta) の 4名で、その場で質問や相談に答えていました。 
    18  
    19   いやー、一日目はとっても寒かったですね。Project Vineのブースはドアの近くで、自動ドアが開くたびに凍えるようでした。 
    20   2日目は打って変わっての暖かいいい天気。ユーザーの集いも参加者の熱気に頼ることなく、暖かい和やかな会になりました。 
    21  
    22   <写真貼っとく?> 
    23  
    24  
    25   EnterpriseOSS の方には Vine が何であるかを大いに誤解されてしまったかもしれません。 
    26   Vineはスケスケを楽しんだりもしますが、国内の老舗ディストリビュータとしての基本は常に忘れず、これからも変わることなくユーザーに優しいLinuxディストリビューションを作り続けます。 
    27  
    28  
    29  == RPMパッケージを作ってみよう == 
    30   さて本題ですが、今回はrpmパッケージの作り方、はじめの一歩を紹介します。 
    31   これまでにも munepiさんが中心となって rpm開発講座を開催してきました。 
    32  
    33   * 第 1 回 Vine Linux ユーザの集い - RPM パッケージ作成ハンズオン 
    34   * 第 2 回 Vine Linux ユーザの集い - RPM パッケージ作成ハンズオン 
    35     * http://trac.vinelinux.org/wiki/OfflineMeeting/20100529 
    36   * 第 3 回 Vine Linux ユーザの集い - RPM パッケージ作成ハンズオン in 大阪 
    37  
    38  
    39 tar.gz をダウンロード、./configure && make && make install で何かしら自分が使うアプリケーションを追加したことがあるかと思います。 
    40 さて、今回もOSCで開催したユーザーの集いで参加者に挙手の形でアンケートを採ったところ、全員が経験有りでした。 
    41  
    42  
    43 単に make install すると、アンインストールが困難だったり、重複したファイルが意図せずに上書きされてしまったりします。 
    44 Prefixを間違えて意図しないディレクトリを書き換えてしまった時にはもう後には戻れなくなってしまいます。 
    45  
    46  
    47  
    48 ここでは、まず最低限の手間でパッケージを作る手順を紹介します。 
    49 例として hogehoge のサイトで紹介されていた、GXXをビルドしてみます。 
    50  
    51  
    52  
    53  == Let's Try == 
    54   === はじめに === 
    55   使用したのは Vine Linux 6 (x86_64)、標準のデスクトップ設定でインストールした環境です。 
    56  
    57   === vine-rpm-helper === 
    58  
    59   使い方は Trac http://trac.vinelinux.org/wiki/Packages/vine-rpm-helper を参照。 
    60  
    61    {{{ 
    62 $ sudo apt-get install rpm-build 
    63 パッケージリストを読みこんでいます... 完了 
    64 依存情報ツリーを作成しています... 完了         
    65 以下の追加パッケージがインストールされます: 
    66   elfutils elfutils-libs patch 
    67 以下のパッケージが新たにインストールされます: 
    68   elfutils elfutils-libs patch rpm-build 
    69 アップグレード: 0 個, 新規インストール: 4 個, 削除: 0 個, 保留: 0 個 
    70 938kB のアーカイブを取得する必要があります。 
    71 展開後に 2405kB のディスク容量が追加消費されます。 
    72 続行しますか? [Y/n]Y 
    73 取得:1 http://updates.vinelinux.org 6/x86_64/main elfutils-libs 0.152-2vl6 [238kB] 
    74 取得:2 http://updates.vinelinux.org 6/x86_64/main elfutils 0.152-2vl6 [516kB] 
    75 取得:3 http://updates.vinelinux.org 6/x86_64/main patch 2.6.1-2vl6 [87.6kB] 
    76 取得:4 http://updates.vinelinux.org 6/x86_64/main rpm-build 4.8.1-3vl6 [97.3kB] 
    77 938kB を 0s 秒で取得しました (2070kB/s) 
    78 変更を適用しています... 
    79 準備中                                ############################## [100%] 
    80 更新/インストール中 
    81   patch-2.6.1-2vl6.x86_64                ############################## [100%] 
    82   elfutils-libs-0.152-2vl6.x86_64        ############################## [100%] 
    83   elfutils-0.152-2vl6.x86_64             ############################## [100%] 
    84   rpm-build-4.8.1-3vl6.x86_64            ############################## [100%] 
    85 完了 
    86    }}} 
    87    自分で ./configure && make && make install されている環境ならきっとビルド環境は揃っていると思いますが、もしインストールしていない場合は最低限の一式として build-essential をインストールして下さい。 
    88    {{{ 
    89 $ sudo apt-get install build-essential  
    90 パッケージリストを読みこんでいます... 完了 
    91 依存情報ツリーを作成しています... 完了         
    92 以下の追加パッケージがインストールされます: 
    93   autoconf automake gcc-c++ gettext gettext-devel gettext-libs intltool libsigsegv libstdc++-devel libtool m4 make 
    94   perl-HTML-Parser perl-HTML-Tagset perl-URI perl-XML-Parser perl-libwww-perl 
    95 以下のパッケージが新たにインストールされます: 
    96   autoconf automake build-essential gcc-c++ gettext gettext-devel gettext-libs intltool libsigsegv libstdc++-devel 
    97   libtool m4 make perl-HTML-Parser perl-HTML-Tagset perl-URI perl-XML-Parser perl-libwww-perl 
    98 アップグレード: 0 個, 新規インストール: 18 個, 削除: 0 個, 保留: 0 個 
    99 17.5MB のアーカイブを取得する必要があります。 
    100 展開後に 45.1MB のディスク容量が追加消費されます。 
    101 続行しますか? [Y/n]Y 
    102  
    103 (中略) 
    104  
    105   perl-HTML-Parser-3.68-2vl6.x86_64      ############################## [100%] 
    106   perl-libwww-perl-5.833-3vl6.noarch     ############################## [100%] 
    107   perl-XML-Parser-2.40-1vl6.x86_64       ############################## [100%] 
    108   intltool-0.41.1-2vl6.noarch            ############################## [100%] 
    109   build-essential-1.6-1vl6.noarch        ############################## [100%] 
    110 完了 
    111    }}} 
    112  
    113    {{{ 
    114 $ apt-get install vine-rpm-helper 
    115    }}} 
    116    できるようにしないと先に進めないね。 
    117  
    118    {{{ 
    119 $ mkrpmspec http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.3.tar.gz 
    120 --2011-11-24 22:16:53--  http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.3.tar.gz 
    121 www.unidata.ucar.edu をDNSに問いあわせています... 128.117.149.64 
    122 www.unidata.ucar.edu|128.117.149.64|:80 に接続しています... 接続しました。 
    123 HTTP による接続要求を送信しました、応答を待っています... 200 OK 
    124 長さ: 11097157 (11M) [application/x-gzip] 
    125 `/home/kenta/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz' に保存中 
    126  
    127 100%[==========================================================================>] 11,097,157  3.04M/s 時間 4.2s     
    128  
    129 2011-11-24 22:16:58 (2.51 MB/s) - `/home/kenta/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz' へ保存完了 [11097157/11097157] 
    130  
    131 パッケージを /home/kenta/rpm/BUILD/netcdf-4.1.3 に展開しました。 
    132 パッケージ形式は、autotoolize であると認識しました。 
    133 ドキュメントを発見: README 
    134 mkdir: ディレクトリ `/home/kenta/rpm/SPECS/netcdf' を作成しました 
    135 /home/kenta/rpm/SPECS/netcdf/netcdf-vl.spec  を作成しました 
    136    }}} 
    137   ソースをダウンロードして ~/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz に配置し、specファイルのひな形を rpm/SPECS/netcdf/netcdf-vl.spec に作ってくれます。 
    138  
    139   では、ビルドしてみましょう。 
    140    {{{ 
    141 $ cd ~/rpm/SPECS/ 
    142 $ rpm -ba netcdf/netcdf-vl.spec  
    143 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.Zv9qlh 
    144 + umask 022 
    145 + cd /home/kenta/rpm/BUILD 
    146 + cd /home/kenta/rpm/BUILD 
    147 + rm -rf netcdf-4.1.3 
    148 + /bin/tar -xf - 
    149 + /bin/gzip -dc /home/kenta/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz 
    150 + STATUS=0 
    151 + '[' 0 -ne 0 ']' 
    152 + cd netcdf-4.1.3 
    153 + /bin/chmod -Rf a+rX,u+w,g-w,o-w . 
    154 + exit 0 
    155 実行中(%build): /bin/sh -e /var/tmp/rpm-tmp.YV3T4f 
    156 + umask 022 
    157 + cd /home/kenta/rpm/BUILD 
    158 + cd netcdf-4.1.3 
    159 + CFLAGS='-O2 -m64 -mtune=generic -fno-strict-aliasing -fno-schedule-insns2' 
    160 + export CFLAGS 
    161 + CXXFLAGS='-O2 -m64 -mtune=generic -fno-strict-aliasing -fno-schedule-insns2' 
    162 + export CXXFLAGS 
    163 + FFLAGS='-O2 -m64 -mtune=generic -fno-strict-aliasing -fno-schedule-insns2' 
    164 + export FFLAGS 
    165 + ./configure --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/share --mandir=/usr/share/man --infodir=/usr/share/info 
    166 configure: netCDF 4.1.3 
    167 checking build system type... x86_64-unknown-linux-gnu 
    168 checking host system type... x86_64-unknown-linux-gnu 
    169 checking target system type... x86_64-unknown-linux-gnu 
    170 checking for a BSD-compatible install... /usr/bin/install -c 
    171 checking whether build environment is sane... yes 
    172 checking for a thread-safe mkdir -p... /bin/mkdir -p 
    173 checking for gawk... gawk 
    174 checking whether make sets $(MAKE)... yes 
    175  
    176 (中略) 
    177  
    178 checking whether byte ordering is bigendian... no 
    179 checking size of short... 2 
    180 checking size of int... 4 
    181 checking size of long... 8 
    182 checking size of float... 4 
    183 checking size of double... 8 
    184 checking size of off_t... 8 
    185 checking size of size_t... 8 
    186 checking for library containing deflate... no 
    187 configure: error: Can't find or link to the z library. Turn off netCDF-4 and      opendap with --disable-netcdf-4 --disable-dap, or see config.log for errors. 
    188 エラー: /var/tmp/rpm-tmp.YV3T4f の不正な終了ステータス (%build) 
    189    }}} 
    190    どうも zlib-devel が足りないようにみえますね。 
    191    ここからは道が2つに分かれます。 
    192  
    193    まずはブログの記事にならって、--disable-netcdf-4 オプションをつけてみましょう。 
    194    specファイルをコピーして書き換え、再度ビルドしてみます。 
    195    {{{ 
    196 $ cp -a netcdf/netcdf-vl.spec . 
    197 $ vim netcdf-vl.spec  
    198 $ diff -u netcdf/netcdf-vl.spec netcdf-vl.spec  
    199 --- netcdf/netcdf-vl.spec       2011-11-24 22:17:01.708999998 +0900 
    200 +++ netcdf-vl.spec      2011-11-24 22:25:35.253996625 +0900 
    201 @@ -30,7 +30,7 @@ 
    202  %setup -q 
    203   
    204  %build 
    205 -%configure 
    206 +%configure --disable-netcdf-4 
    207  %{__make} %{?_smp_mflags} 
    208   
    209  %install 
    210    }}} 
    211  
    212  
    213    {{{ 
    214 $ rpm -ba netcdf-vl.spec 
    215  
    216 (中略) 
    217  
    218 make[3]: Leaving directory `/home/kenta/rpm/BUILD/netcdf-4.1.3' 
    219 make[2]: Leaving directory `/home/kenta/rpm/BUILD/netcdf-4.1.3' 
    220 make[1]: Leaving directory `/home/kenta/rpm/BUILD/netcdf-4.1.3' 
    221 + /usr/lib/rpm/brp-compress 
    222 + /usr/lib/rpm/brp-strip 
    223 + /usr/lib/rpm/brp-strip-static-archive 
    224 + /usr/lib/rpm/brp-strip-comment-note 
    225 Processing files: netcdf-4.1.3-1vl6.x86_64 
    226 実行中(%doc): /bin/sh -e /var/tmp/rpm-tmp.Wetkf1 
    227 + umask 022 
    228 + cd /home/kenta/rpm/BUILD 
    229 + cd netcdf-4.1.3 
    230 + DOCDIR=/home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    231 + export DOCDIR 
    232 + rm -rf /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    233 + /bin/mkdir -p /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    234 + cp -pr README /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    235 + exit 0 
    236 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 
    237 伸張ファイルの検査中: /usr/lib/rpm/check-files /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    238 警告: インストール済み(ただし未伸張)ファイルが見つかりました: 
    239    /usr/bin/nc-config 
    240    /usr/bin/nccopy 
    241    /usr/bin/ncdump 
    242    /usr/bin/ncgen 
    243    /usr/bin/ncgen3 
    244    /usr/include/ncvalues.h 
    245    /usr/include/netcdf.h 
    246    /usr/include/netcdf.hh 
    247    /usr/include/netcdfcpp.h 
    248    /usr/lib64/libnetcdf.a 
    249    /usr/lib64/libnetcdf.la 
    250    /usr/lib64/libnetcdf.so 
    251    /usr/lib64/libnetcdf.so.7 
    252    /usr/lib64/libnetcdf.so.7.1.1 
    253    /usr/lib64/libnetcdf_c++.a 
    254    /usr/lib64/libnetcdf_c++.la 
    255    /usr/lib64/libnetcdf_c++.so 
    256    /usr/lib64/libnetcdf_c++.so.4 
    257    /usr/lib64/libnetcdf_c++.so.4.1.0 
    258    /usr/lib64/pkgconfig/netcdf.pc 
    259    /usr/share/info/dir 
    260    /usr/share/info/netcdf-c.info-1.gz 
    261    /usr/share/info/netcdf-c.info-2.gz 
    262    /usr/share/info/netcdf-c.info.gz 
    263    /usr/share/info/netcdf-cxx.info.gz 
    264    /usr/share/info/netcdf-f77.info-1.gz 
    265    /usr/share/info/netcdf-f77.info-2.gz 
    266    /usr/share/info/netcdf-f77.info.gz 
    267    /usr/share/info/netcdf-f90.info.gz 
    268    /usr/share/info/netcdf-install.info.gz 
    269    /usr/share/info/netcdf-tutorial.info.gz 
    270    /usr/share/info/netcdf.info.gz 
    271    /usr/share/man/man1/nccopy.1.gz 
    272    /usr/share/man/man1/ncdump.1.gz 
    273    /usr/share/man/man1/ncgen.1.gz 
    274    /usr/share/man/man1/ncgen3.1.gz 
    275    /usr/share/man/man3/netcdf.3.gz 
    276 書き込み完了: /home/kenta/rpm/SRPMS/netcdf-4.1.3-1vl6.src.rpm 
    277 書き込み完了: /home/kenta/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm 
    278 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.NGMuhd 
    279 + umask 022 
    280 + cd /home/kenta/rpm/BUILD 
    281 + cd netcdf-4.1.3 
    282 + /bin/rm -rf /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    283 + exit 0 
    284    }}} 
    285   こんどはビルドできたみたいです。 
    286   でも、"警告: インストール済み(ただし未伸張)ファイルが見つかりました:" と警告が出てますね。 
    287   できた rpm を見てみましょう。 
    288    {{{ 
    289 $ rpm -qlp /home/kenta/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm 
    290 /usr/share/doc/netcdf-4.1.3 
    291 /usr/share/doc/netcdf-4.1.3/README 
    292    }}} 
    293  READMEファイルしか入ってませんね。。。 
    294  
    295   これを修正するには %files セクションを変更します。 
    296  
    297   とりあえず、SPEC Template (http://trac.vinelinux.org/wiki/SpecTemplates/PlainPackage) に倣って、%files セクションを埋めてみます。 
    298    {{{ 
    299 $ cp -a netcdf-vl.spec netcdf-vl.spec.old 
    300 $ vim netcdf-vl.spec 
    301 $ diff -u netcdf-vl.spec.old netcdf-vl.spec 
    302 --- netcdf-vl.spec.orig 2011-11-24 22:17:01.708999998 +0900 
    303 +++ netcdf-vl.spec      2011-11-24 23:51:14.222999998 +0900 
    304 @@ -45,6 +45,11 @@ 
    305  %files 
    306  %defattr(-,root,root) 
    307  %doc README 
    308 +%{_bindir}/* 
    309 +%{_libdir}/* 
    310 +%{_datadir}/* 
    311 +%{_mandir}/man?/* 
    312 +%{_sysconfdir}/* 
    313   
    314  %changelog 
    315  * Thu Nov 24 2011 Your Name <name@yours.example.com> 4.1.3-1 
    316    }}} 
    317  
    318    もう一度ビルドすると時間が掛かるので、コンパイルをスキップして試してみましょう。 
    319    {{{ 
    320 $ rpm -bi --short-circuit netcdf-vl.spec 
    321  
    322 (中略) 
    323 + /usr/lib/rpm/brp-compress 
    324 + /usr/lib/rpm/brp-strip 
    325 + /usr/lib/rpm/brp-strip-static-archive 
    326 + /usr/lib/rpm/brp-strip-comment-note 
    327 Processing files: netcdf-4.1.3-1vl6.x86_64 
    328 エラー: ファイルが見つかりません (by glob): /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/etc/* 
    329 実行中(%doc): /bin/sh -e /var/tmp/rpm-tmp.c6xhcf 
    330 + umask 022 
    331 + cd /home/kenta/rpm/BUILD 
    332 + cd netcdf-4.1.3 
    333 + DOCDIR=/home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    334 + export DOCDIR 
    335 + rm -rf /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    336 + /bin/mkdir -p /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    337 + cp -pr README /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    338 + exit 0 
    339  
    340  
    341 RPM ビルドエラー: 
    342     ファイルが見つかりません (by glob): /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/etc/* 
    343    }}} 
    344  
    345    /etc は不要だったので、%{_sysconfdir} を外しましょう。 
    346    {{{ 
    347 $ cp -a netcdf-vl.spec netcdf-vl.spec.old 
    348 $ vim netcdf-vl.spec 
    349 $ diff -u netcdf-vl.spec.old netcdf-vl.spec 
    350 --- netcdf-vl.spec.old  2011-11-24 23:51:14.222999998 +0900 
    351 +++ netcdf-vl.spec      2011-11-24 23:56:07.656999868 +0900 
    352 @@ -49,7 +49,6 @@ 
    353  %{_libdir}/* 
    354  %{_datadir}/* 
    355  %{_mandir}/man?/* 
    356 -%{_sysconfdir}/* 
    357   
    358  %changelog 
    359  * Thu Nov 24 2011 Your Name <name@yours.example.com> 4.1.3-1 
    360    }}} 
    361  
    362    もう一度試してみましょう。 
    363    {{{ 
    364 $ rpm -bl --short-circuit netcdf-vl.spec 
    365 Processing files: netcdf-4.1.3-1vl6.x86_64 
    366 警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3 
    367 警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3/README 
    368 警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz 
    369 警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz 
    370 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz 
    371 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz 
    372 警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz 
    373 Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3 
    374 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 
    375 Requires: /bin/sh /usr/bin/pkg-config libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.7)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit) 
    376 伸張ファイルの検査中: /usr/lib/rpm/check-files /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    377 警告: インストール済み(ただし未伸張)ファイルが見つかりました: 
    378    /usr/include/ncvalues.h 
    379    /usr/include/netcdf.h 
    380    /usr/include/netcdf.hh 
    381    /usr/include/netcdfcpp.h 
    382 $ rpm -bl --short-circuit netcdf-vl.spec 
    383 Processing files: netcdf-4.1.3-1vl6.x86_64 
    384 警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3 
    385 警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3/README 
    386 警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz 
    387 警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz 
    388 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz 
    389 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz 
    390 警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz 
    391 Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3 
    392 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 
    393 Requires: /bin/sh /usr/bin/pkg-config libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.7)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit) 
    394 伸張ファイルの検査中: /usr/lib/rpm/check-files /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    395 警告: インストール済み(ただし未伸張)ファイルが見つかりました: 
    396    /usr/include/ncvalues.h 
    397    /usr/include/netcdf.h 
    398    /usr/include/netcdf.hh 
    399    /usr/include/netcdfcpp.h 
    400    }}} 
    401  
    402   ヘッダーファイルが入っていなかったので、 
    403    {{{ 
    404 $ cp -a netcdf-vl.spec netcdf-vl.spec.old 
    405 $ vim netcdf-vl.spec 
    406 $ diff -u netcdf-vl.spec.old netcdf-vl.spec 
    407 --- netcdf-vl.spec.old  2011-11-24 23:56:07.656999868 +0900 
    408 +++ netcdf-vl.spec      2011-11-25 00:02:37.313000003 +0900 
    409 @@ -47,6 +47,7 @@ 
    410  %doc README 
    411  %{_bindir}/* 
    412  %{_libdir}/* 
    413 +%{_includedir}/* 
    414  %{_datadir}/* 
    415  %{_mandir}/man?/* 
    416   
    417    }}} 
    418  
    419   もう一度やってみます。 
    420    {{{ 
    421 $ rpm -bl --short-circuit netcdf-vl.spec 
    422 Processing files: netcdf-4.1.3-1vl6.x86_64 
    423 警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3 
    424 警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3/README 
    425 警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz 
    426 警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz 
    427 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz 
    428 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz 
    429 警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz 
    430 Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3 
    431 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 
    432 Requires: /bin/sh /usr/bin/pkg-config libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.7)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit) 
    433 伸張ファイルの検査中: /usr/lib/rpm/check-files /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    434    }}} 
    435  
    436   今度は良さそうですね。警告はまた後で調べることにして、これでパッケージを作ってインストールしてみましょう。 
    437    {{{ 
    438 $ rpm -bb --short-circuit netcdf-vl.spec 
    439  
    440 (中略) 
    441  
    442 + cp -pr README /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3 
    443 + exit 0 
    444 警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz 
    445 警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz 
    446 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz 
    447 警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz 
    448 警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz 
    449 Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3 
    450 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 
    451 Requires: /bin/sh /usr/bin/pkg-config libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.7)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit) 
    452 伸張ファイルの検査中: /usr/lib/rpm/check-files /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    453 書き込み完了: /home/kenta/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm 
    454 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.62PB3T 
    455 + umask 022 
    456 + cd /home/kenta/rpm/BUILD 
    457 + cd netcdf-4.1.3 
    458 + /bin/rm -rf /home/kenta/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64 
    459 + exit 0 
    460    }}} 
    461  
    462   では、早速インストールしてみます。 
    463    {{{ 
    464 $ sudo rpm -Uhv /home/kenta/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm  
    465 [sudo] password for kenta:  
    466 準備中...                ########################################### [100%] 
    467         ファイル /usr/share/info/dir (パッケージ netcdf-4.1.3-1vl6.x86_64 から) は、パッケージ install-info-4.13a-1vl6.x86_64 からのファイルと競合しています。 
    468 $ rpm -qf /usr/share/info/dir 
    469 install-info-4.13a-1vl6.x86_64 
    470    }}} 
    471  
    472   ふーむ、netcdfパッケージに入っている /usr/share/info/dir が install-info とぶつかっているようです。 
    473   とりあえずやっつけですが、/usr/share/info/dir を外してしまいましょう。 
    474    {{{ 
    475 $ cp -a netcdf-vl.spec netcdf-vl.spec.old  
    476 $ diff -u netcdf-vl.spec.old netcdf-vl.spec 
    477 --- netcdf-vl.spec.old  2011-11-25 00:22:45.191000089 +0900 
    478 +++ netcdf-vl.spec      2011-11-25 00:21:34.061999867 +0900 
    479 @@ -49,6 +49,7 @@ 
    480  %{_libdir}/* 
    481  %{_includedir}/* 
    482  %{_datadir}/* 
    483 +%exclude %{_infodir}/dir 
    484  %{_mandir}/man?/* 
    485   
    486  %changelog 
    487 $ rpm -bb --short-circuit netcdf-vl.spec 
    488 $ sudo rpm -Uhv /home/kenta/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm  
    489 準備中...                ########################################### [100%] 
    490    1:netcdf                 ########################################### [100%] 
    491    }}} 
    492  
    493   今度はインストールできました。 
    494   警告が出ていたり、/usr/share/info/dir を外したりしていますが、まずはとりあえずできました。 
    495   mkrpmspec を使うと、たった 7行の書き換えだけで rpm パッケージを作ることができました。 
    496    {{{ 
    497 $ diff -u netcdf/netcdf-vl.spec netcdf-vl.spec 
    498 --- netcdf/netcdf-vl.spec       2011-11-24 22:17:01.708999998 +0900 
    499 +++ netcdf-vl.spec      2011-11-25 00:21:34.061999867 +0900 
    500 @@ -30,7 +30,7 @@ 
    501  %setup -q 
    502   
    503  %build 
    504 -%configure 
    505 +%configure --disable-netcdf-4 
    506  %{__make} %{?_smp_mflags} 
    507   
    508  %install 
    509 @@ -45,6 +45,12 @@ 
    510  %files 
    511  %defattr(-,root,root) 
    512  %doc README 
    513 +%{_bindir}/* 
    514 +%{_libdir}/* 
    515 +%{_includedir}/* 
    516 +%{_datadir}/* 
    517 +%exclude %{_infodir}/dir 
    518 +%{_mandir}/man?/* 
    519   
    520  %changelog 
    521  * Thu Nov 24 2011 Your Name <name@yours.example.com> 4.1.3-1 
    522    }}} 
    523  
    524   make install と較べてほとんど手間無く、パッケージ管理されたきれいな環境が作れると思います。 
    525  
    526   やっていくと細かくいじるところがいくつも出てきますが、それは問題に出会ったときに少しずつ覚えていくことになります。 
    527   試してみて困ったことがありましたら、MLなどでご相談下さい。 
    528  
    529  
    530   なお、最終的に作った SPECファイルを ::: に置いています。 
    531   何が書き換わっているかを比較しながら、Develppers Guideを見てみてください。 
    532  
    533  == 参考資料 == 
    534   Vine Linux開発者ガイド: 第5章 SPECファイルの記述 
    535   http://vinelinux.org/docs/vine5/manuals/make-spec.html 
    536  
    537   Packages/vine-rpm-helper – VineSeed 
    538   http://trac.vinelinux.org/wiki/Packages/vine-rpm-helper 
    539  
    540   spec ファイルのテンプレート - サブパッケージがない単純なパッケージ 
    541   http://trac.vinelinux.org/wiki/SpecTemplates/PlainPackage 
    542  
    543   Linux life: NetCDF 4.1.3, GMT 4.5.7 install on Vine Linux 6 
    544   http://huchiura.blogspot.com/2011/11/netcdf-413-gmt-457-install-on-vine.html 
    545  
    546    
    547  
    548  == Follow up == 
    549   ここでは最小限の手間でrpmパッケージ作成を体験できる方法を紹介しました。 
    550   読者の環境によっては同じようにならないこともあると思います。その場合にはML等で質問して下さい。 
    551   続編として様々な問題に対処したパッケージ作成を紹介するつもりです。 
     14しばらく順番回ってこないよね。