source: projects/web/trunk/vlmagazine/20111128.dat @ 5222

Revision 5222, 31.6 KB checked in by kenta, 12 years ago (diff)

fix broken tag

Line 
1<date>
22011,11,28
3
4<author>
5kenta
6
7<title>
8RPMパッケージ作成って意外と簡単
9
10<description>
11<p>
12Project Vine は、2011/11/19, 20 の 2日間、明星大学 日野校で開催された <a href="http://www.ospn.jp/osc2011-fall/">オープンソースカンファレンス 2011 Tokyo/Fall</a>(以下 OSC 2011 Tokyo/Fall)に参加してきました。
13今号の Vine Linux Magazine では、OSC のセミナーでは時間が足りなかった、「パッケージ作成って簡単ですよ」という話を紹介したいと思います。
14</p>
15
16
17<h2>オープンソースカンファレンス 2011 Tokyo/Fallに行ってきました</h2>
18<p>
19Project Vineでは OSC 2010 Tokyo/Spring から OSCに出展しています。
20今回の OSC 2011 Tokyo/Fall も munepiさん、Takemikaduchiさん、kudohさんと私 (kenta) の 4名で、展示出展とセミナーを開催してきました。
21いやー、1日目はとっても寒かったですね。特に Project Vineのブースはドアの近くに割り当てられていたので、自動ドアが開くたびに凍えるようでした。
222日目は打って変わっての暖かいいい天気。お昼に開催した Project Vine 主催のセミナーも参加者の熱気に頼ることなく、暖かい和やかな会になりました。
23</p>
24<p>
25展示内容は主に 2つでした。
26<ul>
27<li>Vine Linux 6のインストールメディア配布
28<li>開発版 VineSeed と Gnome Shell UIのデモ
29</ul>
30基本はブースの近くでたむろしており、その場に来て頂いた皆さんの質問や相談に答えていました。
31</p>
32<p>
33Project Vine & Vine Linux Developer 有志主催のセミナー「第7回 Vine Linuxユーザーの集い」では、Vine Linux 7ではどんなデスクトップが標準だといいかを見てもらうため、開発版 VineSeed での Gnome-3.2.1 (Gnome Shell), Gnome 3.2.1, KDE 4.7.2, LXDE, Xfce デスクトップ環境をそれぞれ紹介しました。
34また、ユーザー事例紹介として 2件の発表がありました。
35<ul>
36  <li>透明感のあるデスクトップでWineを楽しむ (Takemikaduchiさん)
37  <li>Vineの上で TeX Loveを叫ぶ (munepiさん)
38</ul>
39セミナーに参加下さった <a href=http://www.enterpriseoss.jp/>EnterpriseOSS</a> の方にはユーザー事例紹介を聞いて Vine が何であるかを大いに誤解されてしまったかもしれません。。。
40Vineはスケスケを楽しんだりもしますが、国内の老舗ディストリビュータとしての基本を常に忘れず、これからも変わることなくユーザーに優しい Linuxディストリビューションを作り続けます。
41</p>
42<p>
43<img src="images/20111128-1.jpg" alt="Takemikaduchiさんの透明感あふれるデスクトップ" width="400" height="300" Hspace="20" Vspace="10">
44<img src="images/20111128-3.jpg" alt="TakemikaduchiさんによるWineのデモンストレーション" width="400" height="300" Hspace="20" Vspace="10">
45</p>
46
47<h2>RPMパッケージ作成 はじめの一歩</h2>
48<h3>RPMパッケージ作成に挑戦してみませんか?</h3>
49<p>
50OSCでは時間がなくて紹介できなかったのですが、もう1つ「Vine Linuxの開発もしてみませんか?」という話題を用意していました。
51ユーザーの多くの方は、ソースコードの tar.gz をダウンロードしてきて
52<pre class="screen">
53$ tar xfvz hoge.tar.gz
54$ cd hoge
55$ ./configure
56$ make
57$ make install
58</pre>
59と、何かしら自分が使うアプリケーションをビルドして追加したことがあるかと思います。
60今回のユーザーの集いで参加されたユーザーの皆様に訊いたところ全員に経験が有りました。
61</p>
62<p>
63単に <Tt>make install</Tt> でインストールすると、アンインストールが困難だったり、重複したファイルが意図せずに上書きされてしまったりします。
64自分だけしか使わないアプリケーションでも、とりあえず RPMパッケージを作ってパッケージ管理できる便利なことはとても多いのです。
65だけど、RPMパッケージ作るのは大変でそんな簡単にはできない、、、って思われる方も多いですよね。<br>
66本当でしょうか?<br>
67ご自身でソースからビルドした経験があれば、RPMパッケージを作るのは案外簡単なんです。
68今回はまず、<b>最低限の手間で</b>RPMパッケージを作る手順をご紹介します。
69例としてたまたま見かけたブログ <a href="http://huchiura.blogspot.com/2011/11/netcdf-413-gmt-457-install-on-vine.html">Linux life</a> で紹介されていた、NetCDF 4.1.3のパッケージを作ってみます。
70</p>
71
72<h3>はじめに</h3>
73<p>
74使用したのは Vine Linux 6 (x86_64) を、標準のデスクトップ設定でインストールした環境です。
75</p>
76
77<p>
78RPMパッケージ作成には <Tt>rpmbuild</Tt> コマンドを使用します。そのために、まず <Tt>rpm-build</Tt> パッケージをインストールしておきます。
79<pre class="screen">
80$ sudo apt-get install rpm-build
81パッケージリストを読みこんでいます... 完了
82依存情報ツリーを作成しています... 完了       
83以下の追加パッケージがインストールされます:
84  elfutils elfutils-libs patch
85以下のパッケージが新たにインストールされます:
86  elfutils elfutils-libs patch rpm-build
87アップグレード: 0 個, 新規インストール: 4 個, 削除: 0 個, 保留: 0 個
88938kB のアーカイブを取得する必要があります。
89展開後に 2405kB のディスク容量が追加消費されます。
90続行しますか? [Y/n]Y
91取得:1 http://updates.vinelinux.org 6/x86_64/main elfutils-libs 0.152-2vl6 [238kB]
92取得:2 http://updates.vinelinux.org 6/x86_64/main elfutils 0.152-2vl6 [516kB]
93取得:3 http://updates.vinelinux.org 6/x86_64/main patch 2.6.1-2vl6 [87.6kB]
94取得:4 http://updates.vinelinux.org 6/x86_64/main rpm-build 4.8.1-3vl6 [97.3kB]
95938kB を 0s 秒で取得しました (2070kB/s)
96変更を適用しています...
97準備中                                ############################## [100%]
98更新/インストール中
99  patch-2.6.1-2vl6.x86_64                ############################## [100%]
100  elfutils-libs-0.152-2vl6.x86_64        ############################## [100%]
101  elfutils-0.152-2vl6.x86_64             ############################## [100%]
102  rpm-build-4.8.1-3vl6.x86_64            ############################## [100%]
103完了
104</pre>
105</p>
106
107<p>
108自分で <Tt>./configure && make && make install</Tt> されている環境ならばきっとビルド環境は一通り揃っていると思います。
109もし開発環境をインストールしていない場合には最低限の一式として <Tt>build-essential</Tt> をインストールして下さい。
110<pre class="screen">
111$ sudo apt-get install build-essential
112パッケージリストを読みこんでいます... 完了
113依存情報ツリーを作成しています... 完了       
114以下の追加パッケージがインストールされます:
115  autoconf automake gcc-c++ gettext gettext-devel gettext-libs intltool libsigsegv libstdc++-devel libtool m4 make
116  perl-HTML-Parser perl-HTML-Tagset perl-URI perl-XML-Parser perl-libwww-perl
117以下のパッケージが新たにインストールされます:
118  autoconf automake build-essential gcc-c++ gettext gettext-devel gettext-libs intltool libsigsegv libstdc++-devel
119  libtool m4 make perl-HTML-Parser perl-HTML-Tagset perl-URI perl-XML-Parser perl-libwww-perl
120アップグレード: 0 個, 新規インストール: 18 個, 削除: 0 個, 保留: 0 個
12117.5MB のアーカイブを取得する必要があります。
122展開後に 45.1MB のディスク容量が追加消費されます。
123続行しますか? [Y/n]Y
124
125(中略)
126
127  perl-HTML-Parser-3.68-2vl6.x86_64      ############################## [100%]
128  perl-libwww-perl-5.833-3vl6.noarch     ############################## [100%]
129  perl-XML-Parser-2.40-1vl6.x86_64       ############################## [100%]
130  intltool-0.41.1-2vl6.noarch            ############################## [100%]
131  build-essential-1.6-1vl6.noarch        ############################## [100%]
132完了
133</pre>
134</p>
135
136<h3>vine-rpm-helper を使ったRPMパッケージ作成</h3>
137<p>
138RPMパッケージを作るには <a href="http://ml.vinelinux.org/vine-users/msg31524.html">yasumichiさんが最近公開された <Tt>vine-rpm-helper</Tt></a> に含まれている <Tt>mkrpmspec</Tt> を使うのが簡単です。
139<Tt>mkrpmspec</Tt> コマンドは、引数に指定したソースコードをダウンロードして <Tt>~/rpm/SOURCES/&laquo;パッケージ名&raquo;</Tt> 以下に配置し、specファイルのひな形を <Tt>~rpm/SPECS/&laquo;パッケージ名&raquo;</Tt> 以下に作ってくれます。
140<pre class="screen">
141$ sudo apt-get install vine-rpm-helper
142$ mkrpmspec http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.3.tar.gz
143--2011-11-24 22:16:53--  http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.3.tar.gz
144www.unidata.ucar.edu をDNSに問いあわせています... 128.117.149.64
145www.unidata.ucar.edu|128.117.149.64|:80 に接続しています... 接続しました。
146HTTP による接続要求を送信しました、応答を待っています... 200 OK
147長さ: 11097157 (11M) [application/x-gzip]
148`/home/vine/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz' に保存中
149
150100%[==========================================================================>] 11,097,157  3.04M/s 時間 4.2s   
151
1522011-11-24 22:16:58 (2.51 MB/s) - `/home/vine/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz' へ保存完了 [11097157/11097157]
153
154パッケージを /home/vine/rpm/BUILD/netcdf-4.1.3 に展開しました。
155パッケージ形式は、autotoolize であると認識しました。
156ドキュメントを発見: README
157mkdir: ディレクトリ `/home/vine/rpm/SPECS/netcdf' を作成しました
158/home/vine/rpm/SPECS/netcdf/netcdf-vl.spec  を作成しました
159</pre>
160</p>
161
162<h3>RPMパッケージのビルド</h3>
163<p>
164では早速 <Tt>mkrpmspec</Tt> で作られた specファイルを使ってビルドしてみましょう。
165<pre class="screen">
166$ cd ~/rpm/SPECS/
167$ rpm -ba netcdf/netcdf-vl.spec
168実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.Zv9qlh
169+ umask 022
170+ cd /home/vine/rpm/BUILD
171+ cd /home/vine/rpm/BUILD
172+ rm -rf netcdf-4.1.3
173+ /bin/tar -xf -
174+ /bin/gzip -dc /home/vine/rpm/SOURCES/netcdf/netcdf-4.1.3.tar.gz
175+ STATUS=0
176+ '[' 0 -ne 0 ']'
177+ cd netcdf-4.1.3
178+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
179+ exit 0
180実行中(%build): /bin/sh -e /var/tmp/rpm-tmp.YV3T4f
181+ umask 022
182+ cd /home/vine/rpm/BUILD
183+ cd netcdf-4.1.3
184+ CFLAGS='-O2 -m64 -mtune=generic -fno-strict-aliasing -fno-schedule-insns2'
185+ export CFLAGS
186+ CXXFLAGS='-O2 -m64 -mtune=generic -fno-strict-aliasing -fno-schedule-insns2'
187+ export CXXFLAGS
188+ FFLAGS='-O2 -m64 -mtune=generic -fno-strict-aliasing -fno-schedule-insns2'
189+ export FFLAGS
190+ ./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
191configure: netCDF 4.1.3
192checking build system type... x86_64-unknown-linux-gnu
193checking host system type... x86_64-unknown-linux-gnu
194checking target system type... x86_64-unknown-linux-gnu
195checking for a BSD-compatible install... /usr/bin/install -c
196checking whether build environment is sane... yes
197checking for a thread-safe mkdir -p... /bin/mkdir -p
198checking for gawk... gawk
199checking whether make sets $(MAKE)... yes
200
201(中略)
202
203checking whether byte ordering is bigendian... no
204checking size of short... 2
205checking size of int... 4
206checking size of long... 8
207checking size of float... 4
208checking size of double... 8
209checking size of off_t... 8
210checking size of size_t... 8
211checking for library containing deflate... no
212configure: 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.
213エラー: /var/tmp/rpm-tmp.YV3T4f の不正な終了ステータス (%build)
214</pre>
215エラーになってしまいました。
216最後のメッセージを見ると、どうも <Tt>zlib-devel</Tt> が足りないようですね。
217この対処法は 2通りありますが、今回のコンセプト最小限の手間で簡単に対処しましょう。
218</p>
219
220<p>
221エラーメッセージには、<Tt>--disable-netcdf-4</Tt> を使うようにとも書かれていますよね。
222そういえば、先の<a href="http://huchiura.blogspot.com/2011/11/netcdf-413-gmt-457-install-on-vine.html">ブログ</a>に載っていた手順
223<pre class="screen">
224$ cd /tmp
225$ wget http://www.gfd-dennou.org/library/netcdf/unidata-mirror/netcdf-4.1.3.tar.gz
226$ gtar xfvz ~/tmp/netcdf-4.1.3.tar.gz
227$ cd netcdf-4.1.3
228$ ./configure --prefix=/usr/local/netcdf --disable-netcdf-4
229$ make check
230$ su -
231# make install
232</pre>
233でも <Tt>./configure</Tt> の際に <Tt>--disable-netcdf-4</Tt> オプションがついていました。
234ここは真似して <Tt>--disable-netcdf-4</Tt> オプションをつけましょう。
235</p>
236
237<p>
238先ほど自動生成された specファイルをコピーして編集します。
239<pre class="screen">
240$ cp -a netcdf/netcdf-vl.spec .
241$ vim netcdf-vl.spec
242</pre>
243
244書き換えた行は次の通りです。
245<pre class="screen diffUnifiedStyle">
246$ diff -u netcdf/netcdf-vl.spec netcdf-vl.spec
247--- netcdf/netcdf-vl.spec       2011-11-24 22:17:01.708999998 +0900
248+++ netcdf-vl.spec      2011-11-24 22:25:35.253996625 +0900
249@@ -30,7 +30,7 @@
250 %setup -q
251 
252 %build
253-%configure
254+%configure --disable-netcdf-4
255 %{__make} %{?_smp_mflags}
256 
257 %install
258</pre>
259</p>
260
261<p>
262もう一度ビルドしてみましょう。
263<pre class="screen">
264$ rpm -ba netcdf-vl.spec
265
266(中略)
267
268make[3]: Leaving directory `/home/vine/rpm/BUILD/netcdf-4.1.3'
269make[2]: Leaving directory `/home/vine/rpm/BUILD/netcdf-4.1.3'
270make[1]: Leaving directory `/home/vine/rpm/BUILD/netcdf-4.1.3'
271+ /usr/lib/rpm/brp-compress
272+ /usr/lib/rpm/brp-strip
273+ /usr/lib/rpm/brp-strip-static-archive
274+ /usr/lib/rpm/brp-strip-comment-note
275Processing files: netcdf-4.1.3-1vl6.x86_64
276実行中(%doc): /bin/sh -e /var/tmp/rpm-tmp.Wetkf1
277+ umask 022
278+ cd /home/vine/rpm/BUILD
279+ cd netcdf-4.1.3
280+ DOCDIR=/home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
281+ export DOCDIR
282+ rm -rf /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
283+ /bin/mkdir -p /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
284+ cp -pr README /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
285+ exit 0
286Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
287伸張ファイルの検査中: /usr/lib/rpm/check-files /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
288警告: インストール済み(ただし未伸張)ファイルが見つかりました:
289   /usr/bin/nc-config
290   /usr/bin/nccopy
291   /usr/bin/ncdump
292   /usr/bin/ncgen
293   /usr/bin/ncgen3
294   /usr/include/ncvalues.h
295   /usr/include/netcdf.h
296   /usr/include/netcdf.hh
297   /usr/include/netcdfcpp.h
298   /usr/lib64/libnetcdf.a
299   /usr/lib64/libnetcdf.la
300   /usr/lib64/libnetcdf.so
301   /usr/lib64/libnetcdf.so.7
302   /usr/lib64/libnetcdf.so.7.1.1
303   /usr/lib64/libnetcdf_c++.a
304   /usr/lib64/libnetcdf_c++.la
305   /usr/lib64/libnetcdf_c++.so
306   /usr/lib64/libnetcdf_c++.so.4
307   /usr/lib64/libnetcdf_c++.so.4.1.0
308   /usr/lib64/pkgconfig/netcdf.pc
309   /usr/share/info/dir
310   /usr/share/info/netcdf-c.info-1.gz
311   /usr/share/info/netcdf-c.info-2.gz
312   /usr/share/info/netcdf-c.info.gz
313   /usr/share/info/netcdf-cxx.info.gz
314   /usr/share/info/netcdf-f77.info-1.gz
315   /usr/share/info/netcdf-f77.info-2.gz
316   /usr/share/info/netcdf-f77.info.gz
317   /usr/share/info/netcdf-f90.info.gz
318   /usr/share/info/netcdf-install.info.gz
319   /usr/share/info/netcdf-tutorial.info.gz
320   /usr/share/info/netcdf.info.gz
321   /usr/share/man/man1/nccopy.1.gz
322   /usr/share/man/man1/ncdump.1.gz
323   /usr/share/man/man1/ncgen.1.gz
324   /usr/share/man/man1/ncgen3.1.gz
325   /usr/share/man/man3/netcdf.3.gz
326書き込み完了: /home/vine/rpm/SRPMS/netcdf-4.1.3-1vl6.src.rpm
327書き込み完了: /home/vine/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm
328実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.NGMuhd
329+ umask 022
330+ cd /home/vine/rpm/BUILD
331+ cd netcdf-4.1.3
332+ /bin/rm -rf /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
333+ exit 0
334</pre>
335今度はビルドできたみたいです。
336でも、"警告: インストール済み(ただし未伸張)ファイルが見つかりました:" と警告が出てますね。
337</p>
338
339<p>
340できた rpm を見てみましょう。
341<pre class="screen">
342$ rpm -qlp /home/vine/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm
343/usr/share/doc/netcdf-4.1.3
344/usr/share/doc/netcdf-4.1.3/README
345</pre>
346README ファイルしか入ってませんね。。。
347</p>
348
349<h3><Tt>%files</Tt> セクションの編集</h3>
350<p>
351これを修正するには、specファイルの <Tt%files</Tt> セクションを変更します。
352とりあえず、<a href="http://trac.vinelinux.org/wiki/SpecTemplates/PlainPackage">SPEC Template</a> に倣って、<Tt>%files</Tt> セクションを埋めてみましょう。
353<pre class="screen">
354$ cp -a netcdf-vl.spec netcdf-vl.spec.old
355$ vim netcdf-vl.spec
356$ diff -u netcdf-vl.spec.old netcdf-vl.spec
357--- netcdf-vl.spec.orig 2011-11-24 22:17:01.708999998 +0900
358+++ netcdf-vl.spec      2011-11-24 23:51:14.222999998 +0900
359@@ -45,6 +45,11 @@
360 %files
361 %defattr(-,root,root)
362 %doc README
363+%{_bindir}/*
364+%{_libdir}/*
365+%{_datadir}/*
366+%{_mandir}/man?/*
367+%{_sysconfdir}/*
368 
369 %changelog
370 * Thu Nov 24 2011 Your Name <name@yours.example.com> 4.1.3-1
371</pre>
372</p>
373
374<p>
375もう一度ビルドすると時間が掛かるので、今度はコンパイルをスキップして試してみましょう。
376<pre class="screen">
377$ rpm -bi --short-circuit netcdf-vl.spec
378
379(中略)
380+ /usr/lib/rpm/brp-compress
381+ /usr/lib/rpm/brp-strip
382+ /usr/lib/rpm/brp-strip-static-archive
383+ /usr/lib/rpm/brp-strip-comment-note
384Processing files: netcdf-4.1.3-1vl6.x86_64
385エラー: ファイルが見つかりません (by glob): /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/etc/*
386実行中(%doc): /bin/sh -e /var/tmp/rpm-tmp.c6xhcf
387+ umask 022
388+ cd /home/vine/rpm/BUILD
389+ cd netcdf-4.1.3
390+ DOCDIR=/home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
391+ export DOCDIR
392+ rm -rf /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
393+ /bin/mkdir -p /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
394+ cp -pr README /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
395+ exit 0
396
397
398RPM ビルドエラー:
399    ファイルが見つかりません (by glob): /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/etc/*
400</pre>
401</p>
402
403<p>
404<Tt>/etc</Tt> は不要だったようですね。<Tt>%{_sysconfdir}</Tt> を外しましょう。
405<pre class="screen">
406$ cp -a netcdf-vl.spec netcdf-vl.spec.old
407$ vim netcdf-vl.spec
408$ diff -u netcdf-vl.spec.old netcdf-vl.spec
409--- netcdf-vl.spec.old  2011-11-24 23:51:14.222999998 +0900
410+++ netcdf-vl.spec      2011-11-24 23:56:07.656999868 +0900
411@@ -49,7 +49,6 @@
412 %{_libdir}/*
413 %{_datadir}/*
414 %{_mandir}/man?/*
415-%{_sysconfdir}/*
416 
417 %changelog
418 * Thu Nov 24 2011 Your Name <name@yours.example.com> 4.1.3-1
419</pre>
420</p>
421
422<p>
423もう一度試してみましょう。
424<pre class="screen">
425$ rpm -bl --short-circuit netcdf-vl.spec
426Processing files: netcdf-4.1.3-1vl6.x86_64
427警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3
428警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3/README
429警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz
430警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz
431警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz
432警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz
433警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz
434Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3
435Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1
436Requires: /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)
437伸張ファイルの検査中: /usr/lib/rpm/check-files /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
438警告: インストール済み(ただし未伸張)ファイルが見つかりました:
439   /usr/include/ncvalues.h
440   /usr/include/netcdf.h
441   /usr/include/netcdf.hh
442   /usr/include/netcdfcpp.h
443$ rpm -bl --short-circuit netcdf-vl.spec
444Processing files: netcdf-4.1.3-1vl6.x86_64
445警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3
446警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3/README
447警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz
448警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz
449警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz
450警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz
451警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz
452Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3
453Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1
454Requires: /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)
455伸張ファイルの検査中: /usr/lib/rpm/check-files /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
456警告: インストール済み(ただし未伸張)ファイルが見つかりました:
457   /usr/include/ncvalues.h
458   /usr/include/netcdf.h
459   /usr/include/netcdf.hh
460   /usr/include/netcdfcpp.h
461</pre>
462</p>
463
464<p>
465ヘッダーファイルが入っていなかったので、include ディレクトリを追加して、
466<pre class="screen">
467$ cp -a netcdf-vl.spec netcdf-vl.spec.old
468$ vim netcdf-vl.spec
469$ diff -u netcdf-vl.spec.old netcdf-vl.spec
470--- netcdf-vl.spec.old  2011-11-24 23:56:07.656999868 +0900
471+++ netcdf-vl.spec      2011-11-25 00:02:37.313000003 +0900
472@@ -47,6 +47,7 @@
473 %doc README
474 %{_bindir}/*
475 %{_libdir}/*
476+%{_includedir}/*
477 %{_datadir}/*
478 %{_mandir}/man?/*
479 
480</pre>
481</p>
482
483<p>
484もう一度やってみます。
485<pre class="screen">
486$ rpm -bl --short-circuit netcdf-vl.spec
487Processing files: netcdf-4.1.3-1vl6.x86_64
488警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3
489警告: ファイルが2回表記されています: /usr/share/doc/netcdf-4.1.3/README
490警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz
491警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz
492警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz
493警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz
494警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz
495Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3
496Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1
497Requires: /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)
498伸張ファイルの検査中: /usr/lib/rpm/check-files /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
499</pre>
500今度は良さそうですね。
501</p>
502
503<p>
504警告はまた後で調べることにして、これでパッケージを作ってインストールしてみましょう。
505<pre class="screen">
506$ rpm -bb --short-circuit netcdf-vl.spec
507
508(中略)
509
510+ cp -pr README /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64/usr/share/doc/netcdf-4.1.3
511+ exit 0
512警告: ファイルが2回表記されています: /usr/share/man/man1/nccopy.1.gz
513警告: ファイルが2回表記されています: /usr/share/man/man1/ncdump.1.gz
514警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen.1.gz
515警告: ファイルが2回表記されています: /usr/share/man/man1/ncgen3.1.gz
516警告: ファイルが2回表記されています: /usr/share/man/man3/netcdf.3.gz
517Provides: libnetcdf.so.7()(64bit) libnetcdf_c++.so.4()(64bit) pkgconfig(netcdf) = 4.1.3
518Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1
519Requires: /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)
520伸張ファイルの検査中: /usr/lib/rpm/check-files /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
521書き込み完了: /home/vine/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm
522実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.62PB3T
523+ umask 022
524+ cd /home/vine/rpm/BUILD
525+ cd netcdf-4.1.3
526+ /bin/rm -rf /home/vine/rpm/BUILDROOT/netcdf-4.1.3-1vl6.x86_64
527+ exit 0
528</pre>
529</p>
530
531<p>
532では、早速インストールしてみます。
533<pre class="screen">
534$ sudo rpm -Uhv /home/vine/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm
535[sudo] password for vine:
536準備中...                ########################################### [100%]
537        ファイル /usr/share/info/dir (パッケージ netcdf-4.1.3-1vl6.x86_64 から) は、パッケージ install-info-4.13a-1vl6.x86_64 からのファイルと競合しています。
538$ rpm -qf /usr/share/info/dir
539install-info-4.13a-1vl6.x86_64
540</pre>
541ふーむ、netcdfパッケージに入っている /usr/share/info/dir が install-info とぶつかっているようです。
542</p>
543
544<p>
545とりあえずやっつけですが /usr/share/info/dir を外してしまいましょう。その上でバイナリパッケージ作成のところだけ再実行してインストールしてみます。
546<pre class="screen">
547$ cp -a netcdf-vl.spec netcdf-vl.spec.old
548$ vim netcdf-vl.spec
549$ diff -u netcdf-vl.spec.old netcdf-vl.spec
550--- netcdf-vl.spec.old  2011-11-25 00:22:45.191000089 +0900
551+++ netcdf-vl.spec      2011-11-25 00:21:34.061999867 +0900
552@@ -49,6 +49,7 @@
553 %{_libdir}/*
554 %{_includedir}/*
555 %{_datadir}/*
556+%exclude %{_infodir}/dir
557 %{_mandir}/man?/*
558 
559 %changelog
560$ rpm -bb --short-circuit netcdf-vl.spec
561$ sudo rpm -Uhv /home/vine/rpm/RPMS/x86_64/netcdf-4.1.3-1vl6.x86_64.rpm
562準備中...                ########################################### [100%]
563   1:netcdf                 ########################################### [100%]
564</pre>
565今度はうまくいきました。
566</p>
567
568<p>
569警告が出ていたり、やっつけの修正もありますが、mkrpmspec を使うと、たった 7行の書き換えだけで RPMパッケージを作ることができました。
570<pre class="screen diffUnifiedStyle">
571$ diff -u netcdf/netcdf-vl.spec netcdf-vl.spec
572--- netcdf/netcdf-vl.spec       2011-11-24 22:17:01.708999998 +0900
573+++ netcdf-vl.spec      2011-11-25 00:21:34.061999867 +0900
574@@ -30,7 +30,7 @@
575 %setup -q
576 
577 %build
578-%configure
579+%configure --disable-netcdf-4
580 %{__make} %{?_smp_mflags}
581 
582 %install
583@@ -45,6 +45,12 @@
584 %files
585 %defattr(-,root,root)
586 %doc README
587+%{_bindir}/*
588+%{_libdir}/*
589+%{_includedir}/*
590+%{_datadir}/*
591+%exclude %{_infodir}/dir
592+%{_mandir}/man?/*
593 
594 %changelog
595 * Thu Nov 24 2011 Your Name <name@yours.example.com> 4.1.3-1
596</pre>
597</p>
598
599<p>
600make install と較べてもほとんど手間無く、パッケージ管理されたきれいな環境が作れると思います。
601やっていくと細かくいじるところがいくつも出てきますが、それは問題に出会ったときに少しずつ覚えていくことになります。試してみて困ったことがありましたら MLなどで質問して下さい。
602なお、最終的に作った SPECファイルを<a href="./20111128/netcdf-vl.spec">こちら</a>に置いています。何が書き換わっているかを比較しながら、<a href="http://vinelinux.org/docs/vine5/manuals/make-spec.html">Develppers Guide</a>と見較べてみてください。
603</p>
604
605<h3>参考資料</h3>
606<ul>
607<li><a href="http://vinelinux.org/docs/vine5/manuals/make-spec.html">Vine Linux開発者ガイド: 第5章 SPECファイルの記述</a>
608<li><a href="http://trac.vinelinux.org/wiki/Packages/vine-rpm-helper">Packages/vine-rpm-helper -- VineSeed</a>
609<li><a href="http://trac.vinelinux.org/wiki/SpecTemplates/PlainPackage">spec ファイルのテンプレート - サブパッケージがない単純なパッケージ</a>
610<li><a href="http://huchiura.blogspot.com/2011/11/netcdf-413-gmt-457-install-on-vine.html">Linux life: NetCDF 4.1.3, GMT 4.5.7 install on Vine Linux 6</a>
611</ul>
612
613<h2>おわりに</h2>
614<p>
615Project Vineではこれまでにも munepiさんが中心となって RPMパッケージ作成ハンズオンを実施してきました。
616<ul>
617<li><a href="http://trac.vinelinux.org/wiki/OfflineMeeting/20100529">第 2 回 Vine Linux ユーザの集い - RPM パッケージ作成ハンズオン</a>
618<!-- <li>第 ?? 回 Vine Linux ユーザの集い - RPM パッケージ作成ハンズオン -->
619<li><a href="http://trac.vinelinux.org/wiki/OfflineMeeting/20110717">第 6 回 Vine Linux ユーザの集い with LILO - RPM パッケージ作成ハンズオン - in 大阪</a>
620</ul>
621ここでは最小限の手間でRPMパッケージ作成を体験できる方法を紹介しました。
622普段は面倒で <Tt>make install</Tt> されているときに、ちょっとだけ頑張って vine-rpm-helper を使ったRPMパッケージ作成に挑戦してみてください。
623手間を掛けた以上に快適な管理ができること間違いありません。
624</p>
625<p>
626なお、環境によっては今回紹介した結果と同じようにならないこともあるかもしれません。
627その場合には是非 ML等で質問して下さい。
628いろんな疑問やコメントが頂けましたら、続編として様々な問題に対処するより実践的なパッケージ作成を紹介するつもりです。
629</p>
630<p>
631Vine Linux Magazine では、Vine Linux に関する様々な情報、小ネタ、Tips、ノウハウ(バッドノウハウ含む)、活用事例などを書いていただける方を募集しています。また、「XXの記事を書いて欲しい」などのご要望なども随時お待ちしておりますので、<a href="http://vinelinux.org/ml.html">ML</a> や Twitter のハッシュタグ <a href="http://twitter.com/#search?q=%23VineLinux">#VineLinux</a>、IRC、個別メールなどでお知らせください。
632</p>
Note: See TracBrowser for help on using the repository browser.