Version 40 (modified by tomop, 9 years ago) (diff) |
---|
%prep [ "%{version}-%{release}" != $(rpm -q --queryformat "%%{version}-%%{release}\n" --specfile %{SOURCE0} | tail -1) ] && exit 1
%post /usr/lib/rpm/self-build-rpm.sh self-build-lame lame.spec http://...(ソースダウンロード URL) 12345(ログサイズ)
%post /usr/lib/rpm/pre-allocate-rpm.sh %{pkgname}-%{version}-%{release} \ %{pkgname}-devel-%{version}-%{release}
実際にはパッケージ名やターゲットのプログラムの名前、ソースのダウンロード URL 等は %define でマクロとして最初に宣言しておいた方が管理しやすくなります。 self-build-lame.spec がサンプルとして使えると思いますので、初めて作成する方は apt-get source self-build-lame を実行して ~/rpm/SPECS に展開された spec ファイルを参考してみてください。
ある self-build なパッケージが、他の self-build なパッケージが提供する rpm に依存する場合、以下の点に注意する必要があります。
self-build パッケージは、non-free カテゴリに属しております。 そのため、self-build パッケージに依存するパッケージのカテゴリは、 non-free カテゴリになります。
現時点で、例外のあるパッケージは以下の通りです。
self-build パッケージは、基本的には noarch で作成します。
ただし、BuildArch?: noarch を使うと、%ifarch が使えないので、 arch に依存するパッケージでは BuildArch? タグを使えません。
現時点で、arch に依存するのは、以下のパッケージです。
self-build 系パッケージ | arch に依存する理由 |
self-build-ffmpeg | %{ix86} x86_64: Requires(post): yasm |
self-build-x264 | %{ix86} x86_64: Requires(post): yasm |
self-build-vlc | %{ix86} x86_64: Requires(post): svgalib-devel libXvMC-devel |
self-build-xvidcore | %{ix86}: Requires(post): nasm; x86_64: Requires(post): yasm |
self-build-mplayer-codecs | %{ix86} ppc x86_64: arch により source0path が異なる |
self-build-lame | %{ix86} x86_64: Requires(post): nasm |
ソースアーカイブのダウンロード時に http と ftp が選べる場合は、 http を選ぶことを推奨します。
ftp は Active/Passive? いずれにおいても firewall や router の
設定によってはアクセスできない場合がある為、これを極力避ける
必要があります。
(<VineLinux:wishes:0191> と [VineSeed:18681] 以降のスレッド参照)
リリースバージョンの場合、原則として、 so name の変更を伴う self-build パッケージの更新をしないで下さい。
詳しくは、Package Maintenance Policy を参照。
例えば、faad2-2.6.1 を faad2-2.7 へ更新すると仮定します。
faad2-2.6.1 は libfaad.so.0.0.0 を提供しますが、 faad2-2.7 は libfaad.so-2.0.0 を提供しますので、 self-build-faad2-2.7 だけ put すると、 以下のように libfaad.so.0 の欠如により、 faad2-2.7 をインストールすることができません。
$ sudo apt-get install self-build-faad2-2.7-1vl6.noarch.rpm パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 'self-build-faad2-2.7-1vl6.noarch.rpm' として self-build-faad2 を選択しました アップグレード: 0 個, 新規インストール: 0 個, 再インストール: 1 個, 削除: 0 個, 保留: 0 個 0B/7698B のアーカイブを取得する必要があります。 展開後に 0B のディスク容量が追加消費されます。 続行しますか? [Y/n]Y 変更を適用しています... 準備中 ############################## [100%] 更新/インストール中 self-build-faad2-2.7-1vl6.noarch ############################## [100%] rpm パッケージの作成を開始します。(self-build-faad2) ソースファイルのダウンロード中... (snip) ソースファイルのダウンロードが完了しました。 rpm パッケージをビルド中... (詳細は /var/tmp/self-build-faad2.log を参照してください。) rpm パッケージのビルドが完了しました。 作成した rpm パッケージから必要なファイルを事前に配置しました。 完了 作成/ダウンロードした rpm パッケージをインストール中... エラー: 依存性の欠如: libfaad.so.0()(64bit) は (インストール済み)ffmpeg-libs-0.5-6vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)gpac-libs-0.4.5-6vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)libquicktime-1.1.2-1vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)avidemux-cli-2.4.4-1vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)avidemux-qt-2.4.4-1vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)gstreamer-plugins-bad-0.10.12-1vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)avidemux-gtk-2.4.4-1vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)ffmpeg-mh-0.33-10vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)xine-lib-faad-1.1.16.3-2vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)vlc-1.0.1-1vl5.x86_64 に必要とされています libfaad.so.0()(64bit) は (インストール済み)mplayer-1.0-23.20090821vl5.x86_64 に必要とされています *エラー: rpm パッケージをインストールできません。 rpm ファイルは /var/cache/self-build に残っています。
この問題を解決する方法は、
で対処可能です。
しかしながら、非常にリポジトリの依存関係の壊れの元になりかねません。 原則として self-build 系のパッケージで lib 系のパッケージの更新においては、 so name の変更を伴う version up をしない方が懸命です。
$ date 2010年 2月 17日 水曜日 17:20:27 JST $ sudo vbuilder --version 5.0 --clean --install-rpm self-build-vlc --install-rpm self-build-mplayer $ du -b /var/local/vbootstrap/5.0/var/tmp/self-build-* 26148 /var/local/vbootstrap/5.0/var/tmp/self-build-a52dec.log 25711 /var/local/vbootstrap/5.0/var/tmp/self-build-faac.log 66762 /var/local/vbootstrap/5.0/var/tmp/self-build-faad2.log 609432 /var/local/vbootstrap/5.0/var/tmp/self-build-ffmpeg.log 373437 /var/local/vbootstrap/5.0/var/tmp/self-build-gpac.log 64384 /var/local/vbootstrap/5.0/var/tmp/self-build-lame.log 32482 /var/local/vbootstrap/5.0/var/tmp/self-build-libdca.log 78717 /var/local/vbootstrap/5.0/var/tmp/self-build-libdvbpsi.log 16699 /var/local/vbootstrap/5.0/var/tmp/self-build-libdvdnav.log 24200 /var/local/vbootstrap/5.0/var/tmp/self-build-libmad.log 56955 /var/local/vbootstrap/5.0/var/tmp/self-build-libmp4v2.log 63615 /var/local/vbootstrap/5.0/var/tmp/self-build-libmpeg2.log 2119 /var/local/vbootstrap/5.0/var/tmp/self-build-mplayer-codecs.log 1378555 /var/local/vbootstrap/5.0/var/tmp/self-build-mplayer.log 2586749 /var/local/vbootstrap/5.0/var/tmp/self-build-vlc.log 18876 /var/local/vbootstrap/5.0/var/tmp/self-build-x264.log 10053 /var/local/vbootstrap/5.0/var/tmp/self-build-xvidcore.log
ばっちりのバイト数を指定すると、98%, 99% などになる場合がしばしばある。そこで、1000バイト単位で指定しても良いのでは?
例:$ du -b /var/tmp/self-build-a52dec.log 27240 /var/tmp/self-build-a52dec.log このとき、 /usr/lib/rpm/self-build-rpm.sh %{name} %{pkgname}.spec "%{sourceurl}" 27000 公式:self-build-hoge.log $ echo $(($(du -b self-build-hoge.log | cut -f 1)/1000*1000))