.@_hito_ さんの「RHEL互換ディストリビューションの話」を聞こう

33
hito @_hito_

RHEL互換ディストリビューションの話をしよう。常識の再確認も含めて。

2012-08-09 19:35:45
hito @_hito_

きわめて簡単に説明するなら、「CentOSはRHEL互換が基本、必要に応じてCentPlusを足す」「SL(FNAL版)はRHEL互換が基本だがやっぱり追加repoあり」「SL(CERN版)はRHEL互換にしよーかなー程度でカーネルにも改造加えたらー」ぐらい。

2012-08-09 19:37:21
hito @_hito_

「RHEL互換ディストリビューションはftp://ftp.redhat.com/pub/redhat/linux/updates/enterprise/からSRPMをもらってきて、rpmbuildして作っているよってRHELと互換になる」という認識は *おおむね* 正しい。

2012-08-09 19:39:47
hito @_hito_

なにが「おおむね」なのか、というのは、世間では「商標除去とか、redhat-releaseの書き換えとか、イメージ変更」ぐらいに思われている気がする。が、実際にはそれだけでもなくて、たとえばntpパッケージは各ディストリで設定を変えている。

2012-08-09 19:41:18
hito @_hito_

なんでかっつーと、RHELのntpパッケージはデフォルトではhttp://t.co/fIvRNQlGとか見に行くから。さすがに道義的にマズいので、みなさん自主的に変更している。こういう変更は結構ちまちまと行われている。

2012-08-09 19:42:50
hito @_hito_

この手の「互換ディストリビューションで細工しているパッケージ」は、*一応のルールとして* バージョン文字列の .elN の部分を .slN とか、自分のディストリを表す文字列に置き換えている。たまに忘れられているケースもあるが。

2012-08-09 19:45:02
hito @_hito_

でだ。「ディストリビュータが細工を入れているかどうか」を確実に見きる方法は、たぶん存在しない。rpm -qa --queryformat '%{NAME} %{VERSION}-%{RELEASE} %{ARCH} %{Packager}\n' で近似はできるけども。

2012-08-09 19:51:48
hito @_hito_

もちろんrpm -qiでSRPMを見て、RHELのやつと対応取っていけば分かるんだけども、コマンド一発やったー、という方法はパッケージを作っている人が真面目にspecを修正してくれているかに依存する。

2012-08-09 19:53:11
hito @_hito_

で。RPMでも.debでもたいていのパッケージはそうなのだけど、ソースからのビルドには常に、「ビルド時の環境によって、できあがるバイナリがリンクしているライブラリが異なる」というリスクにさらされる。./configure の結果が環境によって違う現象、経験したことありますよね?

2012-08-09 19:54:42
hito @_hito_

で、互換ディストリのたぐいは、この「ビルド時の環境によって結果違うぜ問題」のリスクを考えておいた方がいい。実際、CentOSもSLもこの手の問題をやらかしてしまっている。

2012-08-09 19:57:28
hito @_hito_

たとえばScientific Linux CERN(CERN版SL)では、NTPパッケージに「知らない間に」mDNS対応ビルドが混ざりこんでしまったことがあった。dns_sd.hが./configure時に存在するとこーなる。

2012-08-09 20:00:50
hito @_hito_

あるいはScientific Linux(無印=FNAL版)4系には、「yum-versionfix」なんぞという、RHELには存在しないパッケージが入っていたりする。

2012-08-09 20:02:42
hito @_hito_

yum-versionfixは何かっつーと、SRPMのbuild時に%{dist}をセットし忘れていたせいで、RHELと揃わなくなったせい。RHELと同じバージョン文字列だとアップデート不能になって、yumを細工してアップデートされるようにした。

2012-08-09 20:03:40
hito @_hito_

CentOSはNTPの独自設定ファイルを入れたバージョンを作るときに、バージョン文字列の付与をしくじって、やっぱり「RHELと同じバージョン文字列だとアップデート不能」をやらかしている。

2012-08-09 20:04:22
hito @_hito_

で、バイナリはビルドする環境によって違うぜー問題というのに対応するために、tmverifyrpmsというスクリプトがある。CentOSはこれをかけて、互換性を確認していると明言している。SLもやってるらしい。

2012-08-09 20:08:40
hito @_hito_

あと、ビルドは当然mockでminiroot展開して、ということをやっている、はず。でないとtmverifyrpmが一致しないケースが炸裂してbuilddの管理者が死ぬ。

2012-08-09 20:14:36
hito @_hito_

で、「%{dist}をセットし忘れるなんてSLダメじゃーん」と思ったCentOSユーザーのあなた、Centはbuilddの管理者のトラックナンバーが1だったせいでリリースが遅れた事件をお忘れか。

2012-08-09 20:15:48
hito @_hito_

あとは「FNALとCERNが共同で開発しているScientific Linux」というのも、ちょっと最近では微妙だったりする。昔はともかく今はFNALとCERNでそれぞれbuildd持ってるし、共通する魔改造パッケージもほぼない。

2012-08-09 20:19:27
hito @_hito_

だいたい、FNALはSL、CERNはSLCと事実上別のリリースをしているわけでして。もっとも予算の出処とか、困ったときの対応とかは協働してるっぽいけども。

2012-08-09 20:20:25