このタイトルだと謎とは何ぞや?となる人が多いと思います・・・ どういうことかというと、2015/11/12の時点ではカーネル 4.4のマージウィンドウが開いている段階で、カーネルのMakefileに書かれているバージョンは4.3です。 これを書いている時の最新のコミットだとこうなってます。
VERSION = 4 PATCHLEVEL = 3 SUBLEVEL = 0 EXTRAVERSION = NAME = Blurry Fish Butt
で、fedora rawhide(今の時点ではfedora 24)のカーネルパッケージは4.4系のバージョン番号になっています。
そして、タイトルの「fedora rawhideのカーネルパッケージのバージョンの付け方の謎」になるわけです。
この謎を調べるためにはkernel.specを見る必要があります。 まずは、現時点でのsoucesファイルを見るとベースは4.3系なことがわかります。
58b35794eee3b6d52ce7be39357801e7 linux-4.3.tar.xz 7c516c9528b9f9aac0136944b0200b7e perf-man-4.3.tar.gz 7969fc8a820c526832269b78dbef685b patch-4.3-git8.xz
次にkernel.specを見ましょう。
最初にリリース版のカーネルかどうかの変数があります。4.4系はまだリリース版のカーネルではないので0になってます。
# For a stable, released kernel, released_kernel should be 1. For rawhide # and/or a kernel built from an rc or git snapshot, released_kernel should # be 0. %global released_kernel 0
ここから下に進んでいくと、リリース版じゃないカーネルの場合のバージョン番号をセットする箇所が見つかります。
## The not-released-kernel case ## %else # The next upstream release sublevel (base_sublevel+1) %define upstream_sublevel %(echo $((%{base_sublevel} + 1))) # The rc snapshot level %define rcrev 0 # The git snapshot level %define gitrev 8 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif
まず、一番最後のところですが、ここで4.4.0のようなバージョンが作られますね。なので、upstream_sublevelが4.xのxの部分ですね。
%define rpmversion 4.%{upstream_sublevel}.0
ここは下のようになっていて、base_sublevelの値+1のバージョンが設定されるようです。
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
base_sublevelは上記の設定箇所より前で設定されてます。ここは機械的に設定されるのではなくて、必要に応じて書き換えてる感じですね。 3.1のrc7だとベースになるのは3.0ということなので、4.4のrcということはbase_sublevelは4.3の3ということっぽいです。
# base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. %define base_sublevel 3
というわけで、upstream_sublevelはbase_sublevelに1を足しているので4になります。
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
そして、ここで4.4.0という番号が作られるということです。
%define rpmversion 4.%{upstream_sublevel}.0
最後にgitのリビジョンやrcの番号は
# non-released_kernel %if 0%{?rcrev} %define rctag .rc%rcrev %else %define rctag .rc0 %endif %if 0%{?gitrev} %define gittag .git%gitrev %else %define gittag .git0 %endif %define pkg_release 0%{?rctag}%{?gittag}.%{fedora_build}%{?buildid}%{?dist}
2015/11/12時点ではnon-releasedカーネルなのでrcrevには0が設定されているのでrctagは.rc0になります。 ↓の部分ですね。
# The rc snapshot level %define rcrev 0
gitのリビジョンは下のように8が設定されているので、gittagは.git8というふうになります。
# The git snapshot level %define gitrev 8
それで最終的に細かいバージョン番号を↓のように設定しています。
%define pkg_release 0%{?rctag}%{?gittag}.%{fedora_build}%{?buildid}%{?dist}
buildidはspecファイル内で再定義しない場合は1からインクリメントされていってると思います。distは現時点での最新のfc24です。 そうすると0.rc0.git8.1.fc24となります。
最後にrpmversionとpkg_releaseを合わせるとkernel-4.4.0-0.rc0.git8.1.fc24となるわけです。
プロのための Linuxシステム・10年効く技術 (Software Design plus)
- 作者: 中井悦司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/06/15
- メディア: 大型本
- 購入: 6人 クリック: 88回
- この商品を含むブログ (18件) を見る