RPMファイルを作成するために最低限必要なことは何ですか?


148

Linuxバイナリ "foobar"を配布するためのRPMファイルを作成したいのですが、いくつかの依存関係があります。設定ファイル/etc/foobar.confがあり、/ usr / bin / foobarにインストールする必要があります。

残念ながら、RPMドキュメントは27チャプターの長さで、他のプラットフォーム用の.debとEXEインストーラーの作成にも忙しいので、座ってこれを読む日は本当にありません。

RPMを作成するために最低限必要なことは何ですか?foob​​arバイナリとfoobar.confが現在の作業ディレクトリにあると想定します。


1
RPMパッケージの作成方法」は、RPM(Fedoraのドキュメント)に関する優れた記事です
webwesen

6
「ライト・アップ」それを呼び出すと、控えめな表現である
kernelK

回答:


177

私はしばしば、Linux上で、プロプライエタリアプリのパッケージごとにバイナリrpmを実行します。だから私の経験はあなたにも役立つかもしれませんが、できれば真のRPMを行う方が良いでしょう。しかし、私は余談です。

(バイナリ)プログラムをパッケージ化する基本的な手順は次のとおりです-プログラムがバージョン1.0のtoybinprogであり、confが/etc/toybinprog/toybinprog.confにインストールされ、binがインストールされていると仮定します/ usr / binにtobinprogと呼ばれる:

1. RPM <4.6,4.7のrpmビルド環境を作成します

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

cat <<EOF >~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

2.プロジェクトのtarballを作成します

mkdir toybinprog-1.0
mkdir -p toybinprog-1.0/usr/bin
mkdir -p toybinprog-1.0/etc/toybinprog
install -m 755 toybinprog toybinprog-1.0/usr/bin
install -m 644 toybinprog.conf toybinprog-1.0/etc/toybinprog/

tar -zcvf toybinprog-1.0.tar.gz toybinprog-1.0/

3.ソースディレクトリにコピーします

cp toybinprog-1.0.tar.gz SOURCES/

cat <<EOF > SPECS/toybinprog.spec
# Don't try fancy stuff like debuginfo, which is useless on binary-only
# packages. Don't strip binary too
# Be sure buildpolicy set to do nothing
%define        __spec_install_post %{nil}
%define          debug_package %{nil}
%define        __os_install_post %{_dbpath}/brp-compress

Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
%{summary}

%prep
%setup -q

%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}

# in builddir
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Thu Apr 24 2009  Elia Pinto <devzero2000@rpm5.org> 1.0-1
- First Build

EOF

4.ソースとバイナリrpmをビルドする

rpmbuild -ba SPECS/toybinprog.spec

そして、それだけです。

この助けを願っています


6
「rpmbuild:コマンドが見つかりません」に遭遇した場合に備えて、wiki.centos.org/HowTos/SetupRpmBuildEnvironmentを参照してください。しかし、このガイドは、rpmの内部動作を学ぶ上で私にとって良いスタートです
icasimpan

4
あなたの例では何が_bindirを設定しますか?私はあなたの解決策を追おうとしていますが、私のバイナリを/ optに入れたいです。それに従ってtargzファイルを作成しました。そして、rpmbuildはbuildroot / usr / binで「ファイルが見つかりません」で失敗します。
キスビクトリア2014年

sudo dnf install rpm-build-rpmbuild v4.13 +をインストールするためのFedora 23コマンド
Ray Foss

1
@ devzero2000 TRUE RPMとはどういう意味ですか?
RubenLaguna

@ devzero2000 rpmbuildフォルダーは/ rootディレクトリにある必要があります。それ以外の場所に配置することもできますか?
ディオゴカラザン

20

アプリケーションディストリビューターとして、fpmはお客様のニーズに最適に聞こえます。あり、ここでの例のソースからアプリをパッケージ化する方法を示しています。FPMは、debファイルとRPMファイルの両方を生成できます。


2
FPMは素晴らしいツールです。
Takashi

私たちはこのツールを仕事でいつも使用しています。ニーズに合う最も断然実用的なツール。
djhaskin987

2
FPMには、ソフトウェアで実現できる最高の基本原則があります。それが役に立たない場合は、バグがあります。それは私が大事にする一種の責任です。
リバマー

16

迅速なRPM構築については、トーゴをチェックしてください:

https://github.com/genereese/togo-rpm

プロジェクトにはクイックスタートガイドがあり、基本的なRPMを3分未満で作成できました。

元の質問で提供されたデータを使用した例:

1)スクリプトを使用してプロジェクトディレクトリを作成します。

$ togo project create foobar; cd foobar

2)./rootの下に目的のディレクトリ構造を作成し、そこにファイルをコピーします。

$ mkdir -p root/etc; cp /path/to/foobar.conf root/etc/
$ mkdir -p root/usr/bin; cp /path/to/foobar root/usr/bin/

3)RPMの所有権からシステム所有のディレクトリを除外します。

$ togo file exclude root/etc root/usr/bin

4)(オプション)生成された仕様を変更して、パッケージの説明、依存関係、バージョンなどを変更します。

$ vi spec/header

5)RPMをビルドします。

$ togo build package

-そして、RPMは./rpmsディレクトリに吐き出されます。


元の質問で提供されたシナリオと一致するように例を更新しました。
dadealeus 2014年

15

同様に、数個のファイルだけでrpmを作成する必要がありました。これらのファイルはソース管理されており、ばかげているように思えたので、rpmで解凍するためだけに風袋引きをしたくありませんでした。私は次のことを思いつきました:

  1. 環境を設定します。

    mkdir -p ~/rpm/{BUILD,RPMS}

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

  2. 次の内容でスペックファイルfoobar.specを作成します。

    Summary: Foo to the Bar
    Name: foobar
    Version: 0.1
    Release: 1
    Group: Foo/Bar
    License: FooBarPL
    Source: %{expand:%%(pwd)}
    BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
    
    %description
    %{summary}
    
    %prep
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/usr/bin
    mkdir -p $RPM_BUILD_ROOT/etc
    cd $RPM_BUILD_ROOT
    cp %{SOURCEURL0}/foobar ./usr/bin/
    cp %{SOURCEURL0}/foobar.conf ./etc/
    
    %clean
    rm -r -f "$RPM_BUILD_ROOT"
    
    %files
    %defattr(644,root,root)
    %config(noreplace) %{_sysconfdir}/foobar.conf
    %defattr(755,root,root)
    %{_bindir}/foobar
    
  3. rpmをビルドします。 rpmbuild -bb foobar.spec

現在のディレクトリとして「ソース」を指定する小さなハッカーがありますが、私の場合は別のスクリプトを記述してtarballなどを作成する方法よりもはるかにエレガントに見えました。

注:私の特定の状況では、ファイルは次のように、移動先に応じてフォルダに配置されました。

./etc/foobar.conf
./usr/bin/foobar

そして、準備セクションは次のようになりました:

%prep
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
cd $RPM_BUILD_ROOT
tar -cC %{SOURCEURL0} --exclude 'foobar.spec' -f - ./ | tar xf -

これは少しきれいです。

また、rpmバージョン4.4.2.3のRHEL5.6を使用しているため、使用距離が異なる場合があります。


私の「Red Hat Enterprise Linux Serverリリース6.9」で動作$RPM_BUILD_ROOT%{buildroot}せるには、すべてを回さなければなりませんでした。また、rpmbuildを実行すると、インストールされた2つのファイルが現在のディレクトリにある必要がありました。:私は私の他のマシンとの上でそれをインストール sudo rpm -Uvh --nodeps foobar-0.1a-1.x86_64.rpm
user1683793

4

make configプログラムで機能する場合、または2つのファイルを適切な場所にコピーするシェルスクリプトがある場合は、checkinstallを使用できます。makefileがあるディレクトリに移動し、パラメータ-RRPMの場合)およびオプションでインストールスクリプトを使用して呼び出します。


4

バイナリからrpmパッケージをビルドする簡単な方法(これらの手順はFedora 18でテストされました):

1)最初にrpmdevtoolsをインストールする必要があるため、これらのコマンドを実行します(注意:通常のユーザーとして実行)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2)〜/ rpmbuild / SPECSフォルダーに新しいファイルを作成します:package_name.spec

3)エディター(geditなど)で開き、次のように記述します。

Name:           package_name
Version:        1.0
Release:        1
Summary:        Short description (first char has to be uppercase)

License:        GPL
URL:            www. your_website/

BuildRequires:  package_required >= (or ==, or <=) 1.0.3 (for example)

%description
Description with almost 79 characters (first char has to be uppercase)

#This is a comment (just as example)

%files
/usr/bin/binary_file.bin
/usr/share/applications/package_name.desktop
/usr/share/pixmaps/package_name.png

%changelog
* date Packager's Name <packager's_email> version-revision
- Summary of changes

#For more details see: docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html

4)〜/ rpmbuild / BUILDROOT / package_name-version-release.i386を作成し、ファイルが配置されるパスを再現します。この場合、たとえば次のように作成します。

  • 〜/ rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin /
  • 〜/ rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications /
  • 〜/ rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps /

5)これらのフォルダーに、パッケージに挿入するファイルを配置します。

  • 〜/ rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin / binary_file.bin
  • 〜/ rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications / package_name.desktop
  • 〜/ rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps / package_name.png

usr / share / pixmaps / package_name.pngはバイナリのアイコンですusr / share / applications / package_name.desktopはプログラムをメニューエントリに挿入するためのルールです

6)package_name.desktopは次のようにする必要があります:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=example
GenericName=Short description
Comment=Comment of the application
Exec=package_name
Icon=package_name
Terminal=false
Categories=System;

カテゴリは次のとおりです。standards.freedesktop.org/ menu-spec / latest / apa.html

7)実行 $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8)パッケージが〜/ rpmbuild / RPMSフォルダーにビルドされました

このパッケージをインストールすると、次のようにインストールされます。

  • /usr/bin/binary_file.bin
  • /usr/share/applications/package_name.desktop
  • /usr/share/pixmaps/package_name.png

おかげで:losurs.org/docs/tips/redhat/binary-rpms

rpmをビルドするための詳細については、このリンクを参照してください

rpmをビルドするためのGUI Javaソフトウェア:https : //sourceforge.net/projects/javarpmbuilder/


-1

Mavenに精通している場合はrpm-maven-plugin、RPMの作成を簡素化することもできます。RPMのpom.xmlビルドに使用されるもののみを記述する必要があります。RPMビルド環境は、プラグインによって暗黙的に作成されます。


-3

ソースファイルからRPMを生成するプロセス:

  1. 拡張子が.gzのソースファイルをダウンロードします。
  2. yum installからrpm-buildとrpmdevtoolsをインストールします。(rpmbuildフォルダーが生成されます... SPECS、SOURCES、RPMS ..フォルダーはrpmbuildフォルダー内に生成されます)。
  3. ソースcode.gzをSOURCESフォルダーにコピーします(rpmbuild / SOURCES)
  4. 次のコマンドを使用して、tarボールを解凍します。tarsファイルが存在するSOURCESフォルダー:rpmbuild / SOURCESに移動します。コマンド:たとえば、tar -xvzf httpd-2.22.tar.gz httpd-2.22フォルダが同じパスに生成されます。
  5. 抽出されたフォルダーに移動して、以下のコマンドを入力します。 -enable-mods-static = all(.configureはRPMをビルドする必要があるソースによって異なる場合があります-私はaprおよびapr-util依存パッケージを必要とするapache HTTPDを実行しました)。
  6. 設定が成功したら、以下のコマンドを実行します:make
  7. 成功したod makeコマンドの実行後:同じフォルダにあるcheckinstall。(checkinstallソフトウェアがない場合は、サイトから最新バージョンをダウンロードしてください)また、checkinstallソフトウェアにはバグがあり、次の方法で解決できます::::: checkinstallrcを見つけて、vimコマンドを使用してTRANSLATE = 1をTRANSLATE = 0に置き換えます。除外パッケージも確認してください:EXCLUDE = "/ selinux"
  8. checkinstallはオプションを要求します(ソースファイルのtp build rpmが必要な場合はRを入力します)
  9. 完了した.rpmファイルは、rpmbuild / RPMSファイル内のRPMSフォルダーにビルドされます...すべてのベスト....

-4

RPMは通常、バイナリではなくソースからビルドされます。

アプリケーションの構成方法とコンパイル方法をカバーするspecファイルを作成する必要があります。また、RPMに含めるファイル。

マニュアルをざっと見ると、必要なものがほとんどが第8章でカバーされていることがわかります。また、ほとんどのRPMベースのディストリビューションにはソースが用意されているため、さまざまなアプローチの例が文字通り無数にあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.