DIY RPMリポジトリ

私たちは何について話しているのですか



こんにちは、%ユーザー名%。



今日は、rpmリポジトリを簡単かつ控えめに作成する方法と、お気に入りの配布キットに最適化されたパッケージでそれを埋める方法を説明したいと思います。 したがって、このために必要なのは、ディストリビューションキットが好きなこと(私の場合はCentos 5.5を備えたVZ)、rpm-build、mock、createrepoです。 すべてのパッケージは、標準のCentosリポジトリにあります。



ビルドルートと会社


たとえば、 haproxyを収集します 。 インターネット上の指示では、パッケージをルートとして収集することはお勧めしません。それらに抵抗してビルドユーザーを作成することはありません。 新しく作成したユーザーの下に移動し、ホームディレクトリに、将来必要になる多くのディレクトリとファイルを作成します。



mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros








少し説明。 SOURCESで、収集するパッケージのソースコード、およびこれらのソースのすべてのパッチと構成をダウンロードします。 BUILDでは、システムはパッケージを解凍し、パッチを適用し、全体をコンパイルします。この場合、それはそれ以上使用されません。 RPMS-ここでは、アーキテクチャ(noarch、x86_64、x86)によって破損したアセンブルされたパッケージが使用されますが、使用されません。 SRPMS-ここでは、rpmbuildが.srpmパッケージを配置し、一緒に作業を続けます。 仕様 -ここが最も興味深い部分です。 実際のところ、ソースからrpmをビルドするには、収集する内容、rpmの構成、変更ログパラメーターなどを記述した.specファイルが必要です。以下に説明します。



SPECとそれが何で食べられるか*


すぐに警告します。.specファイルを自分でコンパイルするのは死のようです。そのため、通常はインターネット上で探すか、パッケージソースに添付されています。 しかし、主なポイントはまだ検討する価値があります。 わかりやすくするために、 ここから覗くことができます



「ヘッダー」には、名前、バージョン、ライセンスの種類、さらに数行があります。 基本的に、リリース番号を変更し、場合によってはパッチ(Path1、Path2)を追加する必要があります。 また、BuildRequiresおよびRequiresを使用してシャーマナイズする必要がある場合がありました。 1つはアセンブリの依存関係、2つ目は正しいロボットのパッケージ自体の依存関係です。 小さなヒント-Source0では、SOURCESにあるパッケージの名前か、インターネット上のどこかのファイルへのパスのいずれかです。



次に、パッケージの詳細な説明、アセンブリの準備、パッチの適用、場合によってはアセンブリが可能です。 %buildセクションでは、gccのパラメーター(CFLAGS、CPPFLAGSなど)を指定できます。 私たちにとって、%configureセクションは、残念ながらこの例にはありませんが、特に興味深いかもしれません。 この部分では、構築するパッケージに固有のconfigureのパラメーターが指定されます。 他のセクションについては説明しませんが、実行する内容は名前で理解できます。 注目したいのは、%filesセクションに、rpmでbuild-rootから具体的にビルドする必要があるものをリストする必要があるということだけです。 これは非常に長いリストになる場合があります。 一部のファイルを無視することもできますが、残念ながらまだ理解できていません。



srpmを収集する


これはすべて簡単です。インターネット/パッケージで.specファイルをコンパイル/検索してSPECSに配置した後、rpmbuildを実行します。

rpmbuil -bs haproxy.spec







これにより、対応するrpmがSRPMSディレクトリに作成され、そこからdistrのパッケージが作成されます。



モック、若いパダワンを使用


実際には、モックパッケージが必要なため、結果の.srpmを収集し、ディストリビューションへのインストールに必要なすべての依存関係を「ねじ込み」ます。 彼はすべてのバージョンのfedora(i386、x86_64、ppc)、redhat 8/9、第3バージョンから始まるcentosでビルドできます。



centos5 x86_64のパッケージをビルドするには、/ etc / mockディレクトリにdefault.cfg-> /etc/mock/centos-5-x86_64.cfgのリンクを作成する必要があります。 このファイルには、標準のCentOSリポジトリがリストされています。 そこにリポジトリを簡単に追加できます。そうすれば、モックはそこからのパッケージが常にディストリビューションで利用可能であり、依存関係を満たすために使用できると想定します。



Defaults.cfgも役立つ場合があります。 Mockは、アセンブリに必要なすべて(gcc、make、autoconfなど)を備えた最小限のシステムを含むchrootを作成します。 元のchrootにない特定のパッケージを追加する必要がありました。これはconfig_opts ['chroot_setup_cmd']行で行います。



パッケージは、.srpmファイルにモックを設定することで組み立てられます。

mock ~/rpmbuild/SRPMS/haproxy.srpm





すべてうまくいけば、/ var / lib / mock / centos-5-x86_64 / result /で、rpmインストールの準備ができたパッケージが得られます。 問題が発生した場合は、ログファイルを確認できます。 root.logにはchrootを作成するプロセスがあり、build.logにはアセンブリがあります。



すべてが順調に進み、大切なhaproxy.rpm、haproxy-debug.rpmが手に入ったとしましょう。 最もシンプルなままです。



リポジトリ


RPMSディレクトリを作成する場所で、/ var / www / htdocs /と言い、結果のファイルをそこに転送します。 はい、この部分はすでにより特権のあるユーザーから行われています。 リポジトリを作成するプロセスは簡単です。

createrepo /var/www/htdocs





内部では、RPMSとrepodataディレクトリを取得します。



必要なサーバーで.repoファイルを作成し、リポジトリを使用します。 パッケージを追加するときは、毎回、サーバー上でcreaterepoを作成する必要があります-リポジトリの新しいパッケージがインストール用に見えるように、すべてをyum clean allします。



* .specファイルを作成する際に意識を広げて禅を達成するには、次のドキュメントを参照することをお勧めします。

fedoraproject.org/wiki/How_to_create_an_RPM_package

www.rpm.org/max-rpm-snapshot

tldp.org/HOWTO/RPM-HOWTO



それが私があなたに伝えたかったことのすべてです。 誰かが助けてくれることを願っています。



All Articles