要创建一个 RPM 文件,我需要做的最少是什么?

我只想创建一个 RPM 文件来发布我的 Linux 二进制“ foobar”,只有几个依赖项。它有一个配置文件/etc/foobar.conf,应该安装在/usr/bin/foobar 中。

不幸的是,转速文件是27章长,我真的没有一天坐下来读这个,因为我也忙于制作。其他平台的 deb 和 EXE 安装程序。

要创建一个 RPM,我必须做的绝对最小值是多少?假设 foobar 二进制文件和 foobar.conf 在当前工作目录中。

107902 次浏览

RPM 通常是从源代码构建的,而不是二进制文件。

您需要编写规范文件,其中包括如何配置和编译应用程序,以及在 RPM 中包含哪些文件。

快速浏览一下手册就会发现,您需要的大部分内容已经在第8章中介绍过了——而且,由于大多数基于 RPM 的发行版都有可用的源代码,因此可以看到的不同方法的例子实在是数不胜数。

我经常做二进制转速每包专有应用程序-也最为网球-在 Linux 上。 所以我的经验可能也是有用的一个你,除此之外,它会更好地做一个真正的转速,如果你可以。但我跑题了。

因此,打包您的(二进制)程序的基本步骤是如下-其中我假设 程序是 toybinprog,版本1.0,在/etc/toybinprog/toybinproc.conf 中安装 conf,在/usr/bin 中安装 bin,称为 tobinprog:

1. 为 RPM < 4.6,4.7创建 RPM build env

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. 构建源代码和二进制转速表

rpmbuild -ba SPECS/toybinprog.spec

仅此而已。

希望这个能帮上忙

如果 make config适用于您的程序,或者您有一个 shell 脚本,可以将两个文件复制到适当的位置,那么您可以使用 Checkinstall 检查安装。只需转到 makefile 所在的目录,并使用参数 -R(针对 转速)调用它,还可以选择使用安装脚本调用它。

类似地,我需要创建一个只有几个文件的 rpm。因为这些文件是源代码控制的,而且因为它看起来很傻,所以我不想为了让 rpm 解压缩它们而把它们压缩。我想到了以下几点:

  1. 建立你的环境:

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

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

  2. 创建 spec 文件 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. Build your rpm: rpmbuild -bb foobar.spec

There's a little hackery there specifying the 'source' as your current directory, but it seemed far more elegant then the alternative, which was to, in my case, write a separate script to create a tarball, etc, etc.

Note: In my particular situation, my files were arranged in folders according to where they needed to go, like this:

./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 -

这样更干净。

此外,我碰巧是在 RHEL5.6与 rpm 版本4.4.2.3,所以你的里程可能会有所不同。

作为应用程序分发服务器,Fpm 听起来非常适合您的需要举个例子展示了如何从源代码打包一个应用程序。FPM 可以生成 deb 文件和 RPM 文件。

从二进制文件构建 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/application/
  • ~/rpmbuild/BUILDROOT/package _ name-version-release. i386/usr/share/pixmap/

5)在这些文件夹中放入你想要插入到软件包中的文件:

  • ~/rpmbuild/BUILDROOT/package _ name-version-release. i386/usr/bin/inary _ file. bin
  • ~/rpmbuild/BUILDROOT/package _ name-version-release. i386/usr/share/apps/package _ name. desk
  • ~/rpmbuild/BUILDROOT/package _ name-version-release. i386/usr/share/axmap/package _ name. png

Usr/share/axmap/package _ name.png 是二进制文件的图标 Usr/share/Applications/package _ name. desk 是在菜单项中插入程序的规则

6) package _ name. 桌面必须是这样的:

[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/binar _ file. bin
  • /usr/share/apps/package _ name. desk
  • /usr/share/pixmap/package _ name. png

感谢 losurs.org/docs/tips/redhat/binary-rpms

有关构建转速的更多细节,请参见此 链接

构建 rpm 的 Java 图形用户界面软件: https://sourceforge.net/projects/javarpmbuilder/

快速转速建设,检查多哥:

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 目录中。

如果你熟悉 Maven,还有简化制作 RPM 的 rpm-maven-plugin: 你只需要编写 pom.xml,然后用它来构建 RPM。RPM 构建环境是由插件隐式创建的。

从源文件生成 RPM 的过程:

  1. 下载扩展名为.gz 的源文件。
  2. 从 yum install 安装 rpm-build 和 rpmdevtools。(rpmbuild 文件夹将生成... SPECS,SOURCES,RPMS。.文件夹将在 rpmbuild 文件夹中生成)。
  3. 将源 code.gz 复制到 SOURCES 文件夹
  4. 使用以下命令解除焦油球。 转到 SOURCES 文件夹: rpmbuild/SOURCES,其中存在 tar 文件。 命令: e.g tar-xvzf httpd-2.22.tar. gz Httpd-2.22文件夹将在相同的路径中生成。
  5. 转到解压文件夹,然后键入以下命令: ./configure —— prefix =/usr/local/apache2—— with-include-apr —— able-xy —— able-xy-balancer —— with-mpm = worker —— able-mods-static = all (.Configure 可能会根据 RPM 必须构建的源代码而有所不同——我已经为需要 apr 和 apr-util 依赖包的 apache HTTPD 做过了)。
  6. 一旦配置成功,以下面的命令运行: 制造
  7. 在成功执行之后,make command run: Checkinstall 检查安装 在同一个文件夹。(如果你没有检查安装软件请从网站下载最新版本) 此外,checkinstall 软件也存在 bug,可以通过以下方式解决: : : : : 使用 vim 命令定位 checkinstallrc,然后将 TRANSLATE = 1替换为 TRANSLATE = 0。 还要检查排除包: EXCLUDE = “/selinux”
  8. Checkinstall 将询问选项(如果您希望为源文件输入 tp build rpm,请键入 R)
  9. Rpm 文件将构建在 rpmbuild/RPMS 文件夹中的 RPMS 文件夹中..。 祝你一切顺利。