创buildRPM文件的最低要求是什么?

我只是想创build一个RPM文件来分发我的Linux二进制文件“foobar”,只有一些依赖关系。 它有一个configuration文件/etc/foobar.conf,应该安装在/ usr / bin / foobar中。

不幸的是,RPM的文档长达 27章,我真的没有时间坐下来阅读,因为我也忙于为其他平台制作.deb和EXE安装程序。

创buildRPM需要做的最低限度是什么? 假设foobar二进制文件和foobar.conf在当前的工作目录中。

我经常在Linux上为每个包装专有应用程序做二进制rpm – 也是作为websphere的。 所以我的经验也可能对你有用,除此之外,如果可以的话,最好是做一个真正的RPM。 但是我离题了。

所以打包你的(二进制)程序的基本步骤如下,我想这个程序是1.0版的toybinprog,有一个conf可以安装在/etc/toybinprog/toybinprog.conf中,并且有一个bin可以安装在/ usr / bin中调用tobinprog:

1.为RPM创buildrpm版本env <4.6,4.7

mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp} cat <<EOF >~/.rpmmacros %_topdir %(echo $HOME)/rpmbuild %_tmppath %{_topdir}/tmp EOF cd ~/rpmbuild 

2.创build你的项目的压缩包

 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.build立源代码和二进制rpm

 rpmbuild -ba SPECS/toybinprog.spec 

就这样。

希望这个帮助

作为应用程序分销商, fpm听起来非常适合您的需求 。 这里有一个例子展示了如何从源码打包一个应用程序。 FPM可以生成deb文件和RPM文件。

同样,我只需要几个文件就可以创build一个rpm。 由于这些文件是源代码控制的,而且因为它看起来很愚蠢,所以我不想为了让rpm解压而把它们弄糊涂了。 我想出了以下几点:

  1. 设置您的环境:

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

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

  2. 使用以下内容创build您的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立你的rpm: rpmbuild -bb foobar.spec

这里有一个小小的hackery,指定了'source'作为你的当前目录,但是看起来好像比另一个更优雅,就我而言,写一个单独的脚本来创build一个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上,所以你的里程可能会有所不同。

为了快速build立RPM,请检查多哥:

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

该项目有一个快速入门指南,我能够在不到3分钟的时间内创build一个基本的RPM。

使用原始问题中提供的数据的示例:

1)使用脚本创build项目目录:

 $ togo project create foobar; cd foobar 

2)在./root下build立你想要的目录结构,并将你的文件复制到它:

 $ 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)build立RPM:

 $ togo build package 

你的RPM被吐出到./rpms目录中。

从二进制文件生成rpm包的简单方法(这些步骤在Fedora 18中进行了testing):

1)首先你必须安装rpmdevtools,所以运行这些命令(注意:以普通用户身份运行)

 $ sudo yum install rpmdevtools rpmlint $ rpmdev-setuptree 

2)在〜/ rpmbuild / SPECS文件夹下创build新文件: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并重现文件放置的path所以在这种情况下,例如create:

  • 〜/的rpmbuild / buildroot的/包名,版本release.i386在/ usr / bin中/
  • 〜/的rpmbuild / buildroot的/包名,版本release.i386在/ usr /共享/应用/
  • 〜/的rpmbuild / buildroot的/包名,版本release.i386在/ usr /共享/像素图/

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

  • 〜/的rpmbuild / buildroot的/包名,版本release.i386在/ usr / bin中/ binary_file.bin
  • 〜/的rpmbuild / buildroot的/包名,版本release.i386在/ usr /共享/应用/ package_name.desktop
  • 〜/的rpmbuild / buildroot的/包名,版本release.i386在/ usr /共享/像素图/ 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

有关构buildrpm的更多详细信息,请查看此链接 。

用java编译GUI软件rpm: https : //sourceforge.net/projects/javarpmbuilder/

如果make config适用于您的程序,或者您有一个将您的两个文件复制到适当位置的shell脚本,则可以使用checkinstall 。 只要进入makefile所在的目录,用参数-R (对于RPM )和可选的安装脚本来调用它。

如果您熟悉Maven,还可以使用rpm-maven-plugin简化制作RPM:您只需要编写pom.xml ,然后使用它来构buildRPM。 RPM构build环境由插件隐式创build。

从源文件生成RPM的过程:

  1. 用.z扩展下载源文件。
  2. 从yum install安装rpm-build和rpmdevtools。 (rpmbuild文件夹将被生成… SPECS,SOURCES,RPMS ..文件夹将在rpmbuild文件夹内生成)。
  3. 将source.gz复制到SOURCES文件夹(rpmbuild / SOURCES)
  4. 使用以下命令解开焦油球。 转到SOURCES文件夹:rpmbuild / SOURCES其中存在tar文件。 命令:例如tar -xvzf httpd-2.22.tar.gz httpd-2.22文件夹将会在同一个path下生成。
  5. 去提取文件夹,然后键入下面的命令:./configure –prefix = / usr / local / apache2 –with-included-apr –enable-proxy –enable-proxy-balancer –with-mpm = worker – -enable-mods-static = all(.configure可能根据RPM的不同而有所不同 – 我已经为需要apr和apr-util依赖包的apache HTTPD完成了)。
  6. 一旦configuration成功,运行下面的命令:make
  7. 成功执行od make命令运行后:checkinstall在同一个文件夹中。 (如果你没有checkinstall软件,请从站点下载最新版本)checkinstall软件有bug可以通过以下方式解决:::::findcheckinstallrc,然后用vim命令replaceTRANSLATE = 1到TRANSLATE = 0。 还要检查排除软件包:EXCLUDE =“/ selinux”
  8. checkinstall会询问选项(如果你想为源文件build立rpm,请inputR)
  9. 完成.rpm文件将被build立在rpmbuild / RPMS文件里的RPMS文件夹中… ALL THE BEST ….

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

您需要编写涵盖如何configuration和编译应用程序的spec文件; 还有哪些文件要包含在RPM中。

快速浏览手册显示,第8章介绍了大部分所需内容 – 同样,由于大多数基于RPM的分发包含可用的源代码,所以您可以看到几十个不同方法的示例。