From Fedora Project Wiki
m (リンク切れ修正)
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{autolang}}
= EPEL 向けのパッケージングガイドラインとポリシー =
= EPEL 向けのパッケージングガイドラインとポリシー =


EPELのパッケージは、Fedoraのパッケージガイドラインとメンテナンスガイドラインに従います。ガイドラインとは、[[Packaging:Guidelines|パッケージングガイドライン]]に限定されず、[[Packaging:NamingGuidelines|パッケージ命名ガイドライン]] と [[Packaging:ReviewGuidelines|パッケージレビューガイドライン]] を含みます。これらは、[[Development/SteeringCommittee| Fedora運営委員会]] と [[Packaging/Committee|パッケージング委員会]] が設計し、保守管理しています。EPEL特有の例外は、本ガイドラインと [[EPEL:Packaging]] のページに文書化されています。


 
「ガイドライン」と「ポリシー」の各セクションでは、意図的にそれらの名前を使用しています。ガイドラインとは通常守られるべきものであると考えていますが、理由があればそうする必要はありません -- あなたの理由が正しいかどうか疑わしい場合はEPEL SIGメンバーに尋ねてください。 「ポリシー」とはガイドラインよりも強い意味を持っており、そのセクションに書かれていることは常に従わなければならない規則と考えられるべきです。
EPEL におけるパッケージングは Fedora のパッケージングとメンテナンスガイドラインに従います。[[Development/SteeringCommittee|  FESCo]] と[[Packaging/Committee|パッケージング委員会]]によってメンテナンスされた[[Packaging/Guidelines|パッケージングガイドライン]]、[[Packaging/NamingGuidelines|パッケージ名ガイドライン]]、[[Packaging/ReviewGuidelines|パッケージレビューガイドライン]]、そして[[Extras/Policies|パッケージングポリシー]]になりますが、それらに制限されたものではありません。次のような EPEL に特化した例外事項もあります。
 
"ガイドライン" と "ポリシー" のセクションはわざとそのような名前を使用していることに注意してください。''ガイドライン''は通常守るべき内容と考えてください。しかし、そうしない理由が何かあるなら守る必要はありません。その理由が適切かどうか疑問に思ったら EPEL SIG メンバーへ尋ねてください。"ポリシー"という言葉には強い意味があります。そのセクションに記載された内容は必ず守らなければならないルールと考えてください。


== パッケージメンテナンスと更新ポリシー ==
== パッケージメンテナンスと更新ポリシー ==


EPEL は我々のリポジトリのユーザに対して共通の "見た目" を提供したいです。そのため EPEL SIG は EPEL におけるパッケージメンテナンスと更新のための規定を定めたポリシーを作成しました。そのポリシーは現在の Fedora の規定よりも少しだけ厳しい内容になります。
EPELは、私たちのリポジトリのユーザーに共通の「見た目と使い勝手」を提供したいと考えています。そのため、EPEL SIGは、EPELでのパッケージ保守管理と更新のための規則を記述するこのポリシーを書きました。それらは現在Fedoraにあるものより少し厳しく規制されています。


=== ダイジェスト ===
=== 要約 ===
<!-- INCLUDEPOLICYFRONTSTART
<!-- INCLUDEPOLICYFRONTSTART
-->
-->


その目的はエンタープライズ Linux ディストリビューションを拡張するパッケージを EPEL に持つことです。つまり、そのディストリビューションから提供されている元のパッケージを置き換えるか、提供されていないパッケージに対してビルドしたものを提供することです。リポジトリにあるパッケージは、可能なら、エンタープライズ Linux ディストリビューション向けにビルドされたエンタープライズなパッケージと似たような方法でメンテナンスされるべきです。言い換えると、何か理由があればその部分のみを変更し、通常は何も変更しないパッケージの安定版セットを多く持つことです。"やあ、新しいバージョンがあるからビルドしたよ、それを提供しようよ"といった考え方ではありません。
EPELの目的は、EPELレポジトリのパッケージを、そのパッケージの邪魔をしたり置き換えたりすることなく、そのパッケージがビルドされたEnterprise Linuxディストリビューションの質を高めるすることです。リポジトリ内のパッケージは、可能であれば、それらがビルドされたエンタープライズパッケージと同様の方法で保守管理する必要があります。言い換えれば、レポジトリ内のパッケージ群は、通常はまったく変更されず、正当な理由がある場合にのみ変更される、ほとんど安定したパッケージのセットです。つまり、「ねえ、新しいバージョンがあるんだけど、ビルドして、出荷しようよ」という考え方はありません。


<!-- INCLUDEPOLICYFRONTEND
<!-- INCLUDEPOLICYFRONTEND
Line 24: Line 24:
=== ポリシー ===
=== ポリシー ===


EPEL パッケージは機能拡張のみを目的にするもので、決してエンタープライズ Linux ディストリビューションのためにビルドされたパッケージの品質を悪くするものではありません。つまり EPEL パッケージは、ベースディストリビューションやその派生プロダクトを含めた対象ディストリビューションで提供されているパッケージを置き換えることは決してしません。例えば、カーネルモジュールの追加は、ちょっとしたことでベースカーネルの動作に影響することがあるので認められません。
EPELパッケージは、それらがビルドされたEnterprise Linuxディストリビューションの質を高めるだけで、邪魔することはありません。したがって、EPELからのパッケージは、ターゲットディストリビューションからのパッケージ(基本ディストリビューション上のものやレイヤードプロダクトを含む)を決して置き換えてはいけません。カーネルモジュールにいたっては、許可されていません。なぜならそれらは基本カーネルを乱すことがあるからです。
 
リポジトリにあるパッケージは、可能ならば、エンタープライズディストリビューション向けにビルドされたパッケージとよく似た方法でメンテナンスすべきです。言い換えれば、ほとんどの安定版パッケージは通常は決して変更せず、変更をするのに適切な理由がある場合のみ変更します。これは安定したエンタープライズ環境を提供するための基本的な考えです。


行わなければならない変更は異なるリリースツリーの中に入れます。重要なバグ(データ汚染、セキュリティの問題、本当に悩ましいバグ)を修正するアップデートのみ、短期間、テストブランチに置かれた後に安定版ブランチへ追加されます。パッケージに署名をして、EPEL パッケージを公開 repo へ追加する担当者は、"安定版ブランチのための重要なアップデートのみ" という目的が実行されていることを確認するために、安定版 repo のための更新パッケージリストに目を通します。
各ディストリビューションのターゲットベースは、古いメーリングリストでの議論で、Koji BuilderがアクセスできるRed Hat Enterprise Linuxのバージョンとして定義されています。


その他のアップデートは徐々にテストリポジトリへ追加されます。テストリポジトリは少なくとも2週間テストされた後に新たな安定版ブランチになります。しかし、これらのアップデートはできるだけ修正のみに制限されるべきです。もしできれば、事前に Fedora でテストすべきです。ABI を変更する、又は設定ファイルの変更が必要なアップデートパッケージはできるだけ避ける必要があります。もし ABI を変更する以外にパッケージをアップデートする方法がないなら、旧 ABI を提供する Compat パッケージをリポジトリで提供する必要があります。テスト repo にあるパッケージは依存関係の問題やメンテナが安定していると感じていない箇所があり、安定版リポジトリへの追加を控えています。メンテナは、2週間後又はアップデートパッケージに十分なカルマを体得した後、安定版リポジトリへ追加するためにリクエストする必要があることを覚えておいてください。テストリポジトリから安定版リポジトリへ自動的に追加するようなことはありません。
* EPEL-6は、Red Hat Enterprise Linux 6チャンネルに対してビルドされています
** dist-6E-Server
** dist-6E-Server-ha
** dist-6E-Server-optional
** dist-6E-Server-lb
* EPEL-7は、Red Hat Enterprise Linux 7チャンネルに対してビルドされています
** rhel7-server
** rhel7-rhel-extras
** rhel7-server-ha
** rhel7-server-optional


3ヶ月ごとの新しいアップデートがリリースされる場合、EPEL はそのアップデートが利用可能になる CentOS のバージョンがリリースされるまで待つでしょう。
他のRed Hat Enterprise Linuxチャンネルにあることが知られているパッケージは、アーキテクチャが限定されているパッケージと同様の方法で保守管理する必要があります。パッケージはソフトウエア開発元(RHEL-6の場合はftp.redhat.com、RHEL-7の場合はgit.centos.org)から入手し、Red Hat Enterprise Linuxリリースのものよりも絶対に少なくしてください。これは、パッケージがワークステーションチャネルからサーバチャネルに移動することが知られており、パッケージを反対に移動することが問題になる可能性があるためです。


=== ワークフローの例 / 情報 ===
リポジトリ内のパッケージは、可能であれば、それらがビルドされたエンタープライズパッケージと同様の方法で保守管理する必要があります。言い換えれば、通常はまったく変更されず、変更に正当な理由がある場合にのみ変更される、ほとんど安定したパッケージのセットを用意します。これは安定したエンタープライズ環境の精神です。


* メンテナは通常 'make build' を使用してパッケージをビルドします
避けられない変更は異なるリリースツリーにルーティングされます。重要なバグを修正したアップデート(たとえば、データの破損、セキュリティの問題、本当に厄介なバグ)だけが短期間テスト用ブランチに行き、その後安定版ブランチにプッシュされます。 EPELパッケージに署名して公開リポジトリにプッシュする人々は、安定版リポジトリ用の更新パッケージのリストにざっと目を通し、「安定版ブランチ用の重要な更新のみ」という目標が確実に満たされるようにします。
* メンテナは bodhi('make update' 又は web インタフェース経由で) を使用してアップデートリクエストを実行します
* セキュリティやクリティカルなバグ修正でない限り、アップデートは少なくとも2週間テストリポジトリに置かれなければなりません。
* 2週間後、bodhi からメンテナへ2週間経過したことを知らせるメールが届くでしょう。
* この時点でメンテナがそのパッケージが安定している、又は十分なカルマを体得して安定版リポジトリへの追加リクエストをするなら、次回のアップデートの追加時に安定版リポジトリへ追加されます。
* テストリポジトリへの追加はほぼ毎日行われます。安定版リポジトリへの追加は隔週の火曜日に行われます。
* アップデートはメンテナが追加リクエストを行う、又は十分なカルマを体得していない限り、決してテストリポジトリから安定版リポジトリへ追加されません。(自動的にアップデートが安定版リポジトリへ追加されません)


=== このポリシーのガイドラインと背景 ===
その他の更新は、時間が経つにつれてtestingレポジトリに入れられます。このリポジトリは、少なくとも2週間のテストの後、新しい安定版ブランチになります。
しかし、これらの更新でさえも可能な限り修正に限定されるべきであり、可能であれば事前にFedoraでテストされるべきです。可能であれば、ABIを変更したり設定ファイルの調整を必要とするアップデートパッケージは避けなければなりません。 ABIを変更するパッケージの更新を回避する方法がない場合は、古いABIを提供する互換パッケージをリポジトリで提供する必要があります。依存関係の問題がある場合や、メンテナが安定しているとメンテナが感じていない場合は、testingリポジトリ内のパッケージは、安定版レポジトリへのプッシュは妨げられます。パッケージ保守管理者は2週間後に彼らのパッケージを安定版にするように要求するか、そうするために彼らのアップデートに十分なカルマを持っている必要があることに注意してください。testingレポジトリから安定版レポジトリへの自動昇格は行われません。


==== パッケージを更新して良いかどうかの例 ====
新しい四半期ごとのアップデートがリリースされると、EPELはそのアップデートのCentOSバージョンが利用可能になるまで待ちます。


上述したポリシーを実際に適用する方法の大まかな概要を把握するのに役立つことを願って複数の例を紹介します。
パッケージの最小テスト時間を含む、EPELパッケージの更新に関する詳細は、[[EPEL_Updates_Policy| EPEL Updates Policy]]を参照してください。


===== マイナーバージョンアップ =====
=== パッケージビルド&更新業務の流れ(例) / 情報 ===


EPEL 5.0 でパッケージ foo がバージョン 1.0.1 として提供されたと仮定します。アップストリームの開発者は、現在 1.0.2 を提供しています。
* パッケージ保守管理者は、通常 'make build'を使ってパッケージをビルドします。
* パッケージ保守管理者は、bodhiを使ってアップデート要求を送信します( 'make update'またはウェブインタフェースを介して)。
* セキュリティ上の問題または重大なバグ修正でない限り、アップデートは少なくとも2週間のtestingレポジトリに置かれます。
* 2週間後、bodhiはパッケージ保守管理者にそれが2週間であることを知らせるためにメールを送ります。
* この時点でパッケージ保守管理者が安定版を要求している場合、または更新に十分なカルマがある場合は、次のプッシュで安定版にプッシュされます。
* testingと安定版の両方のためのプッシュは毎日行われます。
* メンテナがそれを要求しない限り、あるいは十分なカルマがない限り、更新は決してtestingレポジトリを離れて安定版レポジトリに行くことはありません(自動的にアップデートが安定版リポジトリへ追加されません)。


* 通常通りビルドしますが、少なくとも2週間、できればもう少しテストリポジトリで待ちます。
=== このポリシーのガイドラインと背景 ===


===== マイナーバージョンアップよりは少しだけ大きな修正 =====
==== どのようなパッケージ更新がうまくいったかどうかの例 ====


EPEL 5.0 でパッケージ foo がバージョン 1.0.1 として提供されたと仮定します。アップストリームの開発者は、現在 1.2.0 を提供しています。ABI は 1.0.1 と互換性があり、既存の設定ファイルはそのまま動作します。
実際に上述したポリシーを適用するためのやり方の概略を例示します。きっと役立つでしょう。


* 通常通りビルドしますが、安定版リポジトリへ追加するために十分なカルマを体得するまでテストリポジトリに置かれます。
===== マイナーバージョンアップデート =====


===== マイナーバージョンアップより少しだけ大きな修正のさらなる別の修正 =====
パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトウエア開発元の開発者は、現在1.0.2を出荷しています


EPEL 5.0 でパッケージ foo がバージョン 1.0.1 として提供されたと仮定します。アップストリームの開発者は、現在 1.4.0 を提供しています。ABI は 1.0.1 と互換性がありますが、設定ファイルは手動で調整する必要があります。
* 通常どおりにビルドしますが、テストには少なくとも2週間、おそらくそれ以上かかります。


* 安定版ブランチ向けのビルドは通常は認められません。それが修正しなければならない深刻なバグ修正を含んでいるなら、バックポートすることを積極的に検討すべきです。
===== もう少し大きいマイナーバージョンアップデート =====
* テストブランチ向けのビルドも同様に好まれませんが、深刻なバグ修正をする簡単な方法が他にないのであれば認められます。しかし、そのアップデートは設定ファイルを調整する必要があることをユーザへ適切にアナウンスする必要があります。アナウンスには epel-announce メーリングリストを使用してください。
* 可能な限り、テストリポジトリへ置かれます。


===== メジャーバージョンアップ =====
パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトエウア開発元の開発者は、現在1.2.0を出荷しています。 ABIは1.0.1と互換性があり、既存の設定ファイルは引き続き機能します。


EPEL 5.0 でパッケージ foo がバージョン 1.0.1 として提供されたと仮定します。アップストリームの開発者は、現在 2.0.0 を提供しています。ABI が変更されるか、設定ファイルは手動で調整する必要があります。
* 通常どおりにビルドしますが、安定版に移行するのに十分なカルマが存在するまでテストを続けます。


* このアップデートは可能な限り、避けられるべきです。深刻なバグを修正する方法が本当に他にないなら、テストブランチ向けに新たなバージョンをビルドすることが認められる稀なケースです。そして、次回のアップデート時のリリースノートに、そのアップデート内容と設定ファイルの調整が必要なことを記載します。もし ABI が変更されたなら、旧ライブラリを使用する追加の compat パッケージが必要です。
===== もう一度、もう少し大きいマイナーバージョンのアップデート =====


===== セキュリティアップデート =====
パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトウエア開発元の開発者は現在1.4.0を出荷しています。 ABIは1.0.1と互換性がありますが、設定ファイルは手動調整が必要です。


セキュリティアップデートはそれ自体は bodhi と見なされるべきで、安定版リポジトリへ追加されるでしょう。このために、様々な修正内容の中からできるだけ少ない修正でアップデートパッケージを作成するようにすべきです。バックポートされた修正のみ、又はあなたが必須だと思うものを適用するか、その修正のみを提供する新バージョンを提供してください。セキュリティアップデートと他の修正を一緒に追加しないようにやってみてください。
* 安定版ブランチ用のビルドは通常受け入れられません。修正しなければならない重大なバグがある場合は、バックポートを強く考慮する必要があります。
* テストブランチ用のビルドも好まれません。しかし、重大なバグを解決するための簡単な方法が他にない場合は問題ありません。しかし、アップデートと設定ファイルの調整は適切にユーザにアナウンスされる必要があります - これにはepel-announceリストを使用してください。
* できるだけ、testingリポジトリに長く留めてください。


===== パッケージに関する多くのドキュメントを追加する =====
===== メジャーバージョンアップデート =====


もし多くのパッケージに関するドキュメントを追加するなら、分割されたドキュメント内へ追加するようにしてください。
パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトエア開発元の開発者は現在2.0.0を出荷しています。 ABIの変更や設定ファイルの手動調整が必要です。


=== EPEL 向けにパッケージを提供して良いかどうか自信がない ===
* 可能であれば、この更新は避けるべきです。重大なバグを修正する方法が他にない場合は、テストブランチ用に新しいバージョンをビルドして、次のアップデートのためのリリースノートでアップデートと必要な調整について言及することが受け入れられることはまれです。 ABIが変更された場合は、古いライブラリとの追加の互換パッケージが必要です。


[http://www.redhat.com/archives/epel-devel-list/ EPEL 開発者メーリングリスト]か、freenode.org の #epel チャンネルで尋ねてみて EPEL SIG メンバーから意見をもらうようにしてください。
===== セキュリティアップデート =====


=== Fedora Extras で行っていたように最新パッケージでリリースを行わないのはなぜですか? ===
セキュリティアップデートはbodhiでそのようにマークされるべきであり、安定版にプッシュされます。このため、これらの種類の更新では、できるだけ少ない変更を試みるようにしてください。バックポートされた修正のみを適用するか、必要な場合は修正のみを提供する新しいバージョンを適用します。セキュリティ更新プログラムで他の変更をプッシュしないようにしてください。


どうして我々なのですか?Fedora Extras で行われていたことや活動したこと、うまく活動していることもあります。しかし、主には Fedora (Core) があまりにも早い前倒しのリリーススキーム/サイクルのために、多くのアップデートパッケージを持つことになってしまいます。我々がビルドしたエンタープライズ Linux はより長期間のライフサイクルで、もっと慎重なアップデートパッケージを提供します。つまり、EPEL 向けのパッケージもエンタープライズ Linux と同様にすべきです。大半のユーザは、彼らが何らかの理由があって安定したディストリビューションを選択したように、Fedora Extras のような方法よりも EPEL のような慎重なアップデートパッケージを提供する方法をおそらくは好みます。もし最新のパッケージを欲しいなら、Fedora を選択しているでしょう。
=====  より多くの例を追加し表示する =====


もちろん、求められたパッケージに加えて、かなり新しいパッケージのセットと安定したベースとなるパッケージを混在させて提供できる部分も多くあります。*たぶん* EPEL プロジェクトは長期間、それらの問題に対する解決方法(並行して慎重にリポジトリを更新しながら)を提供するでしょう。しかし、それを始めることはしません。既にこの方向性で何らかのパッケージを提供するサードパーティのリポジトリがあります。そのため、もうユーザはそういったリポジトリからパッケージを取得しているでしょう。
表示される数が多すぎる場合は、それらを別の文書に入れてください。


もっと突っ込むと、Fedora Extras が行ったような前倒しのリリーススキームは別の理由で多くの EPEL パッケージャにとっては難しいです。新しいパッケージはよくコアライブラリの特定のバージョンを要求します。これは EPEL において問題を引き起こします。それは OS のコアになるライブラリ群を置き換えるようなアップデートライブラリを提供することができないからです。
===  パッケージがEPELに適しているかまだ自信がない? ===


例として、このドキュメントは RHEL5 がリリースされたときに書かれました。RHEL5 向けにビルドされた多くのパッケージは、この時点で既に RHEL4 向けにはビルドできませんでした。例えば、RHEL4-gtk2 は2年前のもので、多くのカレントのアプリケーションでは古く、依存するパッケージは新しい gtk2 を必要とします。そのため、たとえかなり新しいパッケージを前倒しのスキームで提供しようとしても我々は失敗するでしょう。例えば、ライブラリの依存関係のためにビルドできなかったりします。結果的にリポジトリにはかなり新しいパッケージと大半のかなり古いパッケージが残ります。そういったパッケージを混在させることは "最新パッケージ" か "慎重なアップデートパッケージのみ" かのどちらか一方しか幸せにしないでしょう。そのため、我々は目的を "慎重なアップデートパッケージのみ" に絞り込んでいます。EPEL のサポートとアップデートサイクルは Fedora のライフサイクルよりもずっと長期に渡ることを覚えておいてください。
EPEL SIGメンバーからの意見を、[http://www.redhat.com/archives/epel-devel-list/ EPEL開発者メーリングリスト]またはfreenode.org の #epel で尋ねてください。


{{Anchor|nomaintainerresponse}}
=== Fedora Extrasのような最新のパッケージを含む継続的なリリースでは理由は? ===


=== EPEL から Fedora パッケージを取得する ===
なぜ私たちはそうすべきなのでしょうか?最新パッケージを使った継続的リリースとは、Fedora Extrasがしたこと、そしてうまくいったこと、そしてうまくいっています。 - しかし、それは主にFedora(Core)がたくさんのアップデートとほぼ継続的なリリース制度/高速なリリース周期を持っているためです。しかし、私たちがビルドしているEnterprise Linuxは、更新にもっと注意を払い、ライフサイクルが長くなります。そのため、EPELについても同じことを行うべきです。なぜなら、彼らが何らかの理由で安定したディストリビューションを選んだからです - 最新のパッケージが欲しいなら、Fedoraを選んだことでしょう。


Look [[Getting_a_Fedora_package_in_EPEL|here for the procedure used to get a Fedora package in EPEL]].
確かに、安定した基盤とその上に新しい一連のパッケージを混在させることが望まれる分野はたくさんあります。 *おそらく* EPELプロジェクトは長期的にこれらのケースのための解決策を(慎重に更新されたリポジトリと並行して)提供するでしょうが、それが本来の目的ではありません。この方向に何かを提供するサードパーティのリポジトリがすでにそこにあるので、ユーザはすでにそれらによって提供されているかもしれません。


=== ディストリビューションに特化したガイドライン ===
さらにFedora Extrasのような継続的なリリース制度は、他の理由で多くのEPELパッケージでは不可能です。新しいパッケージはしばしば新しいバージョンのあるコアライブラリを必要とします。これはEPELで問題を引き起こします。コアOSのライブラリに代わるものとして更新されたライブラリを提供することができないからです。
EL 5 and earlier do not support noarch subpackages.  If your build fails due to unpackaged debuginfo files ensure that the '''BuildArch: noarch''' is wrapped in an if to make sure its not used on EL-5 and earlier.


==== エンタープライズ Linux 4 ====
例:この文書は、RHEL5がリリースされた頃に作成されました。 RHEL5用にビルドされる多くのパッケージは、現時点ではまだRHEL4用にビルドすることはできません。RHEL4-gtk2-Packageは2年前にリリースされています。新しいgtk2に依存するため現在の多くのアプリケーションには古すぎるからです。 したがって、まったく新しいパッケージを使った継続的な制度を作ろうとしても失敗するでしょう。このライブラリ群への依存のためにたくさんのパッケージをビルドすることはできないからです。 結局、他のものはまだかなり古いものですが、私たちはいくつかの非常に新しいパッケージのレポジトリを持つことになりますが、その組み合わせでは、「最新バージョン」と「慎重なアップデートのみ」のどちらの面も満足できないでしょう。 そのため、「慎重な更新のみ」の側面をターゲットにしています。 EPELのサポートとアップデートの周期はFedorよりずっと長いことを忘れないでください。
<ul>
<li>EPEL4 Python packages should manually depend on the proper python version that it was build for. Most old FC-3 python packages should still use this trick.</li>
<li>EPEL4 Python packages need to generate .pyc and .pyo files in the spec file.  If your module is using distutils or setuptools, use the following commands during %install:
<pre>
%{__python} setup.py install --skip-build --root $RPM_BUILD_ROOT
%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
</pre></li>
</ul>


==== エンタープライズ Linux 5 ====
{{Anchor|nomaintainerresponse}}
<ul>
<li>rpm in EPEL5 and below does not automatically create dependencies for pkgconfig files.  Packages containing pkgconfig(.pc) files must <code>Requires: pkgconfig</code> (for directory ownership and usability).</li>
<li>in EPEL5 the automatic byte compilation of python files that is performed by brp-python-bytecompile byte compiles all files that match *.py  This is undesirable for program files in %{_bindir} and %{_sbindir} because the user will probably never invoke these files, only the main program file and python won't use these files.  Until the bug is resolved, there are two workarounds:
<ol>
<li>Rename scripts in %{_bindir} to not have a .py extension:  For instance, from /usr/bin/orient.py to /usr/bin/orient.</li>
<li>Use %exclude to exclude the scripts from the file listing:
<pre>
%files
%{_bindir}/orient.py
%exclude %{_bindir}/orient.pyc
%exclude %{_bindir}/orient.pyo
</pre></li>
</ol>
</li>
</ul>


==== BuildRoot タグ ====
=== EPELでFedoraパッケージを入手する ===


rpm in EPEL5 and below does not automatically provide a value for the ''BuildRoot'' tag, so one must be provided in the spec by the packager.
[[Getting_a_Fedora_package_in_EPEL|ここでEPELでFedoraパッケージを入手するために使用される手順について]]を見てください。


The ''BuildRoot'' value MUST be below <code>%{_tmppath}/</code> and MUST contain at least <code>%{name}</code>, <code>%{version}</code> and <code>%{release}</code>. It may invoke <code>mktemp</code> since this is guaranteed to exist on every system. From there, packagers are expected to use a sane ''BuildRoot''.
=== 配布に特有のガイドライン ===


The ''recommended'' values for the ''BuildRoot'' tag are (in descending order of preference) :
[[Packaging:Guidelines|Fedoraパッケージングガイドライン]]は現在のFedoraリリース向けに書かれています。時にはFedoraに変更があり、RHELで実行されている古いソフトウェアに対してパッケージングガイドラインが意味を成さないようにします。それが起こるとき、私たちは[[EPEL:Packaging]]ページのFedora Packaging Guidelinesとの違いを文書化します。
<pre>
%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%{_tmppath}/%{name}-%{version}-%{release}-root
</pre>
If unsure, simply pick the first.


{{Anchor|PreppingBuildRootForInstall}}
[[Category:EPEL]]
==== %install のために BuildRoot を設ける ====
It is important to properly prepare the ''BuildRoot'' in the <code>%install</code> section of your package before it is used as rpm in EPEL5 and below does not do this automatically.  Package for these releases MUST have an %install section that begins with either:
 
<pre>
%install
rm -rf %{buildroot}
</pre>
 
or
 
<pre>
%install
rm -rf $RPM_BUILD_ROOT
</pre>
 
This is to ensure that the ''BuildRoot'' will be created fresh during the <code>%install</code> section.


== 衝突するパッケージの方針 ==


[[Category:EPEL]]
[[EPEL/FAQ#Does_EPEL_replace_packages_provided_within_Red_Hat_Enterprise_Linux_or_layered_products.3F|RHELリリースパッケージごとの競合チャンネルの除外]]


== 競合するパッケージに対するポリシー ==
* EPELパッケージは、RHEL Base(Advanced Platformを含む)のパッケージと競合してはいけません。 EPELと競合しないRHELリリースごとのチャネルの完全なリストについては、上記のリンクを参照してください。これは、kojiが外部リポジトリからのパッケージを扱う方法によるソースパッケージ名を含みます。
* EPELパッケージは、他のRHELチャンネルのパッケージと競合する可能性があります。
* EPELパッケージ保守管理者は、RHEL保守管理者からのコミュニケーションを受け入れ、特定のパッケージを出荷しないことによって、またはケースに応じて、チャネル内の競合するパッケージをより適切に処理するようにEPELでパッケージを調整することによってそれらを試みて対応します。


* EPEL packages must never conflict with packages in RHEL Base (Including Advanced Platform).
パッケージがすでにEPELに入っているためにRHELに追加する場合は、通常EPELから削除する必要があります。これを行うには、[[How_to_remove_a_package_at_end_of_life|除外プロセス]]に従ってください。パッケージがすべてのアーキテクチャのサブセットにしか利用できない場合でも、[[EPEL:Packaging#Limited_Arch_Packages|EPEL Packaging Guidelines]]で説明されているように、パッケージをEPELに保持することは依然として可能です。
* EPEL packages can conflict with packages in other RHEL channels.
* EPEL maintainers should be open to communication from RHEL maintainers and try and accommodate them by not shipping specific packages, or by adjusting the package in EPEL to better handle a conflicting package in a channel on a case by case basis.


When a package is added to RHEL that is already in EPEL, we need to block it from being updated in EPEL.  Follow these steps to do that:
=== 互換パッケージの衝突 ===


* 'dead.package' it in the cvs branch for the EL version where the package has been added
下位互換性を維持するというEPELポリシーにより、EPELはFedoraよりも前方互換パッケージの必要性が高くなっています。 互換パッケージを作成するとき、[[Packaging:Conflicts#Compat_Package_Conflicts | Conflicts Guidelines]]で説明されているように、それらの間にConflictsを設定しても構いません。 現時点では、これはEPELのパッケージをオーバーライドするパッケージに対してのみ許可されており、RHEL Baseでは許可されていません。
* retire in pkgdb for the same branch
* file a ticket with [https://fedorahosted.org/rel-eng rel-eng] to block it.

Latest revision as of 07:20, 12 May 2019

EPEL 向けのパッケージングガイドラインとポリシー

EPELのパッケージは、Fedoraのパッケージガイドラインとメンテナンスガイドラインに従います。ガイドラインとは、パッケージングガイドラインに限定されず、パッケージ命名ガイドラインパッケージレビューガイドライン を含みます。これらは、 Fedora運営委員会パッケージング委員会 が設計し、保守管理しています。EPEL特有の例外は、本ガイドラインと EPEL:Packaging のページに文書化されています。

「ガイドライン」と「ポリシー」の各セクションでは、意図的にそれらの名前を使用しています。ガイドラインとは通常守られるべきものであると考えていますが、理由があればそうする必要はありません -- あなたの理由が正しいかどうか疑わしい場合はEPEL SIGメンバーに尋ねてください。 「ポリシー」とはガイドラインよりも強い意味を持っており、そのセクションに書かれていることは常に従わなければならない規則と考えられるべきです。

パッケージメンテナンスと更新ポリシー

EPELは、私たちのリポジトリのユーザーに共通の「見た目と使い勝手」を提供したいと考えています。そのため、EPEL SIGは、EPELでのパッケージ保守管理と更新のための規則を記述するこのポリシーを書きました。それらは現在Fedoraにあるものより少し厳しく規制されています。

要約

EPELの目的は、EPELレポジトリのパッケージを、そのパッケージの邪魔をしたり置き換えたりすることなく、そのパッケージがビルドされたEnterprise Linuxディストリビューションの質を高めるすることです。リポジトリ内のパッケージは、可能であれば、それらがビルドされたエンタープライズパッケージと同様の方法で保守管理する必要があります。言い換えれば、レポジトリ内のパッケージ群は、通常はまったく変更されず、正当な理由がある場合にのみ変更される、ほとんど安定したパッケージのセットです。つまり、「ねえ、新しいバージョンがあるんだけど、ビルドして、出荷しようよ」という考え方はありません。


ポリシー

EPELパッケージは、それらがビルドされたEnterprise Linuxディストリビューションの質を高めるだけで、邪魔することはありません。したがって、EPELからのパッケージは、ターゲットディストリビューションからのパッケージ(基本ディストリビューション上のものやレイヤードプロダクトを含む)を決して置き換えてはいけません。カーネルモジュールにいたっては、許可されていません。なぜならそれらは基本カーネルを乱すことがあるからです。

各ディストリビューションのターゲットベースは、古いメーリングリストでの議論で、Koji BuilderがアクセスできるRed Hat Enterprise Linuxのバージョンとして定義されています。

  • EPEL-6は、Red Hat Enterprise Linux 6チャンネルに対してビルドされています
    • dist-6E-Server
    • dist-6E-Server-ha
    • dist-6E-Server-optional
    • dist-6E-Server-lb
  • EPEL-7は、Red Hat Enterprise Linux 7チャンネルに対してビルドされています
    • rhel7-server
    • rhel7-rhel-extras
    • rhel7-server-ha
    • rhel7-server-optional

他のRed Hat Enterprise Linuxチャンネルにあることが知られているパッケージは、アーキテクチャが限定されているパッケージと同様の方法で保守管理する必要があります。パッケージはソフトウエア開発元(RHEL-6の場合はftp.redhat.com、RHEL-7の場合はgit.centos.org)から入手し、Red Hat Enterprise Linuxリリースのものよりも絶対に少なくしてください。これは、パッケージがワークステーションチャネルからサーバチャネルに移動することが知られており、パッケージを反対に移動することが問題になる可能性があるためです。

リポジトリ内のパッケージは、可能であれば、それらがビルドされたエンタープライズパッケージと同様の方法で保守管理する必要があります。言い換えれば、通常はまったく変更されず、変更に正当な理由がある場合にのみ変更される、ほとんど安定したパッケージのセットを用意します。これは安定したエンタープライズ環境の精神です。

避けられない変更は異なるリリースツリーにルーティングされます。重要なバグを修正したアップデート(たとえば、データの破損、セキュリティの問題、本当に厄介なバグ)だけが短期間テスト用ブランチに行き、その後安定版ブランチにプッシュされます。 EPELパッケージに署名して公開リポジトリにプッシュする人々は、安定版リポジトリ用の更新パッケージのリストにざっと目を通し、「安定版ブランチ用の重要な更新のみ」という目標が確実に満たされるようにします。

その他の更新は、時間が経つにつれてtestingレポジトリに入れられます。このリポジトリは、少なくとも2週間のテストの後、新しい安定版ブランチになります。 しかし、これらの更新でさえも可能な限り修正に限定されるべきであり、可能であれば事前にFedoraでテストされるべきです。可能であれば、ABIを変更したり設定ファイルの調整を必要とするアップデートパッケージは避けなければなりません。 ABIを変更するパッケージの更新を回避する方法がない場合は、古いABIを提供する互換パッケージをリポジトリで提供する必要があります。依存関係の問題がある場合や、メンテナが安定しているとメンテナが感じていない場合は、testingリポジトリ内のパッケージは、安定版レポジトリへのプッシュは妨げられます。パッケージ保守管理者は2週間後に彼らのパッケージを安定版にするように要求するか、そうするために彼らのアップデートに十分なカルマを持っている必要があることに注意してください。testingレポジトリから安定版レポジトリへの自動昇格は行われません。

新しい四半期ごとのアップデートがリリースされると、EPELはそのアップデートのCentOSバージョンが利用可能になるまで待ちます。

パッケージの最小テスト時間を含む、EPELパッケージの更新に関する詳細は、 EPEL Updates Policyを参照してください。

パッケージビルド&更新業務の流れ(例) / 情報

  • パッケージ保守管理者は、通常 'make build'を使ってパッケージをビルドします。
  • パッケージ保守管理者は、bodhiを使ってアップデート要求を送信します( 'make update'またはウェブインタフェースを介して)。
  • セキュリティ上の問題または重大なバグ修正でない限り、アップデートは少なくとも2週間のtestingレポジトリに置かれます。
  • 2週間後、bodhiはパッケージ保守管理者にそれが2週間であることを知らせるためにメールを送ります。
  • この時点でパッケージ保守管理者が安定版を要求している場合、または更新に十分なカルマがある場合は、次のプッシュで安定版にプッシュされます。
  • testingと安定版の両方のためのプッシュは毎日行われます。
  • メンテナがそれを要求しない限り、あるいは十分なカルマがない限り、更新は決してtestingレポジトリを離れて安定版レポジトリに行くことはありません(自動的にアップデートが安定版リポジトリへ追加されません)。

このポリシーのガイドラインと背景

どのようなパッケージ更新がうまくいったかどうかの例

実際に上述したポリシーを適用するためのやり方の概略を例示します。きっと役立つでしょう。

マイナーバージョンアップデート

パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトウエア開発元の開発者は、現在1.0.2を出荷しています

  • 通常どおりにビルドしますが、テストには少なくとも2週間、おそらくそれ以上かかります。
もう少し大きいマイナーバージョンアップデート

パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトエウア開発元の開発者は、現在1.2.0を出荷しています。 ABIは1.0.1と互換性があり、既存の設定ファイルは引き続き機能します。

  • 通常どおりにビルドしますが、安定版に移行するのに十分なカルマが存在するまでテストを続けます。
もう一度、もう少し大きいマイナーバージョンのアップデート

パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトウエア開発元の開発者は現在1.4.0を出荷しています。 ABIは1.0.1と互換性がありますが、設定ファイルは手動調整が必要です。

  • 安定版ブランチ用のビルドは通常受け入れられません。修正しなければならない重大なバグがある場合は、バックポートを強く考慮する必要があります。
  • テストブランチ用のビルドも好まれません。しかし、重大なバグを解決するための簡単な方法が他にない場合は問題ありません。しかし、アップデートと設定ファイルの調整は適切にユーザにアナウンスされる必要があります - これにはepel-announceリストを使用してください。
  • できるだけ、testingリポジトリに長く留めてください。
メジャーバージョンアップデート

パッケージfooがEPEL 5.0のバージョン1.0.1として出荷されたとしましょう。ソフトエア開発元の開発者は現在2.0.0を出荷しています。 ABIの変更や設定ファイルの手動調整が必要です。

  • 可能であれば、この更新は避けるべきです。重大なバグを修正する方法が他にない場合は、テストブランチ用に新しいバージョンをビルドして、次のアップデートのためのリリースノートでアップデートと必要な調整について言及することが受け入れられることはまれです。 ABIが変更された場合は、古いライブラリとの追加の互換パッケージが必要です。
セキュリティアップデート

セキュリティアップデートはbodhiでそのようにマークされるべきであり、安定版にプッシュされます。このため、これらの種類の更新では、できるだけ少ない変更を試みるようにしてください。バックポートされた修正のみを適用するか、必要な場合は修正のみを提供する新しいバージョンを適用します。セキュリティ更新プログラムで他の変更をプッシュしないようにしてください。

より多くの例を追加し表示する

表示される数が多すぎる場合は、それらを別の文書に入れてください。

パッケージがEPELに適しているかまだ自信がない?

EPEL SIGメンバーからの意見を、EPEL開発者メーリングリストまたはfreenode.org の #epel で尋ねてください。

Fedora Extrasのような最新のパッケージを含む継続的なリリースでは理由は?

なぜ私たちはそうすべきなのでしょうか?最新パッケージを使った継続的リリースとは、Fedora Extrasがしたこと、そしてうまくいったこと、そしてうまくいっています。 - しかし、それは主にFedora(Core)がたくさんのアップデートとほぼ継続的なリリース制度/高速なリリース周期を持っているためです。しかし、私たちがビルドしているEnterprise Linuxは、更新にもっと注意を払い、ライフサイクルが長くなります。そのため、EPELについても同じことを行うべきです。なぜなら、彼らが何らかの理由で安定したディストリビューションを選んだからです - 最新のパッケージが欲しいなら、Fedoraを選んだことでしょう。

確かに、安定した基盤とその上に新しい一連のパッケージを混在させることが望まれる分野はたくさんあります。 *おそらく* EPELプロジェクトは長期的にこれらのケースのための解決策を(慎重に更新されたリポジトリと並行して)提供するでしょうが、それが本来の目的ではありません。この方向に何かを提供するサードパーティのリポジトリがすでにそこにあるので、ユーザはすでにそれらによって提供されているかもしれません。

さらにFedora Extrasのような継続的なリリース制度は、他の理由で多くのEPELパッケージでは不可能です。新しいパッケージはしばしば新しいバージョンのあるコアライブラリを必要とします。これはEPELで問題を引き起こします。コアOSのライブラリに代わるものとして更新されたライブラリを提供することができないからです。

例:この文書は、RHEL5がリリースされた頃に作成されました。 RHEL5用にビルドされる多くのパッケージは、現時点ではまだRHEL4用にビルドすることはできません。RHEL4-gtk2-Packageは2年前にリリースされています。新しいgtk2に依存するため現在の多くのアプリケーションには古すぎるからです。 したがって、まったく新しいパッケージを使った継続的な制度を作ろうとしても失敗するでしょう。このライブラリ群への依存のためにたくさんのパッケージをビルドすることはできないからです。 結局、他のものはまだかなり古いものですが、私たちはいくつかの非常に新しいパッケージのレポジトリを持つことになりますが、その組み合わせでは、「最新バージョン」と「慎重なアップデートのみ」のどちらの面も満足できないでしょう。 そのため、「慎重な更新のみ」の側面をターゲットにしています。 EPELのサポートとアップデートの周期はFedorよりずっと長いことを忘れないでください。

EPELでFedoraパッケージを入手する

ここでEPELでFedoraパッケージを入手するために使用される手順についてを見てください。

配布に特有のガイドライン

Fedoraパッケージングガイドラインは現在のFedoraリリース向けに書かれています。時にはFedoraに変更があり、RHELで実行されている古いソフトウェアに対してパッケージングガイドラインが意味を成さないようにします。それが起こるとき、私たちはEPEL:PackagingページのFedora Packaging Guidelinesとの違いを文書化します。

衝突するパッケージの方針

RHELリリースパッケージごとの競合チャンネルの除外

  • EPELパッケージは、RHEL Base(Advanced Platformを含む)のパッケージと競合してはいけません。 EPELと競合しないRHELリリースごとのチャネルの完全なリストについては、上記のリンクを参照してください。これは、kojiが外部リポジトリからのパッケージを扱う方法によるソースパッケージ名を含みます。
  • EPELパッケージは、他のRHELチャンネルのパッケージと競合する可能性があります。
  • EPELパッケージ保守管理者は、RHEL保守管理者からのコミュニケーションを受け入れ、特定のパッケージを出荷しないことによって、またはケースに応じて、チャネル内の競合するパッケージをより適切に処理するようにEPELでパッケージを調整することによってそれらを試みて対応します。

パッケージがすでにEPELに入っているためにRHELに追加する場合は、通常EPELから削除する必要があります。これを行うには、除外プロセスに従ってください。パッケージがすべてのアーキテクチャのサブセットにしか利用できない場合でも、EPEL Packaging Guidelinesで説明されているように、パッケージをEPELに保持することは依然として可能です。

互換パッケージの衝突

下位互換性を維持するというEPELポリシーにより、EPELはFedoraよりも前方互換パッケージの必要性が高くなっています。 互換パッケージを作成するとき、 Conflicts Guidelinesで説明されているように、それらの間にConflictsを設定しても構いません。 現時点では、これはEPELのパッケージをオーバーライドするパッケージに対してのみ許可されており、RHEL Baseでは許可されていません。