创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解压而把它们弄糊涂了。 我想出了以下几点:
-
设置您的环境:
mkdir -p ~/rpm/{BUILD,RPMS}
echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros
-
使用以下内容创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
-
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的过程:
- 用.z扩展下载源文件。
- 从yum install安装rpm-build和rpmdevtools。 (rpmbuild文件夹将被生成… SPECS,SOURCES,RPMS ..文件夹将在rpmbuild文件夹内生成)。
- 将source.gz复制到SOURCES文件夹(rpmbuild / SOURCES)
- 使用以下命令解开焦油球。 转到SOURCES文件夹:rpmbuild / SOURCES其中存在tar文件。 命令:例如tar -xvzf httpd-2.22.tar.gz httpd-2.22文件夹将会在同一个path下生成。
- 去提取文件夹,然后键入下面的命令:./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完成了)。
- 一旦configuration成功,运行下面的命令:make
- 成功执行od make命令运行后:checkinstall在同一个文件夹中。 (如果你没有checkinstall软件,请从站点下载最新版本)checkinstall软件有bug可以通过以下方式解决:::::findcheckinstallrc,然后用vim命令replaceTRANSLATE = 1到TRANSLATE = 0。 还要检查排除软件包:EXCLUDE =“/ selinux”
- checkinstall会询问选项(如果你想为源文件build立rpm,请inputR)
- 完成.rpm文件将被build立在rpmbuild / RPMS文件里的RPMS文件夹中… ALL THE BEST ….
RPM通常是从源码而不是二进制文件构build的。
您需要编写涵盖如何configuration和编译应用程序的spec文件; 还有哪些文件要包含在RPM中。
快速浏览手册显示,第8章介绍了大部分所需内容 – 同样,由于大多数基于RPM的分发包含可用的源代码,所以您可以看到几十个不同方法的示例。