我只是想创建一个RPM文件来分发我的Linux二进制文件"foobar",只有几个依赖项.它有一个配置文件/etc/foobar.conf,应该安装在/ usr/bin/foobar中.
不幸的是,RPM的文档长达 27章,我真的没有一天坐下来读这个,因为我也忙于为其他平台制作.deb和EXE安装程序.
创建RPM需要做的绝对最小值是多少?假设foobar二进制文件和foobar.conf位于当前工作目录中.
我经常在linux上为每个打包专有应用程序(也就是websphere)进行二进制rpm.所以我的经验对你来说也很有用,除此之外如果可以的话,最好做一个真正的RPM.但我离题了.
因此,打包你的(二进制)程序的基本步骤如下所示,我认为程序是1.0版本的toybinprog,有一个conf安装在/etc/toybinprog/toybinprog.conf并有一个bin要安装在/ usr/bin中调用tobinprog:
mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp} cat <~/.rpmmacros %_topdir %(echo $HOME)/rpmbuild %_tmppath %{_topdir}/tmp EOF cd ~/rpmbuild
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/
cp toybinprog-1.0.tar.gz SOURCES/ cat <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 1.0-1 - First Build EOF
rpmbuild -ba SPECS/toybinprog.spec
就这样.
希望这有帮助
作为应用程序分销商,fpm听起来非常适合您的需求.这里有一个例子,展示了如何从源包装应用程序.FPM可以生成deb文件和RPM文件.
https://github.com/genereese/togo-rpm
该项目有一个快速入门指南,我能够在不到3分钟的时间内创建一个基本的RPM.
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目录中.
同样,我需要用几个文件创建一个rpm.由于这些文件是源代码控制的,并且因为它看起来很愚蠢,所以我不想将它们翻过来,只是为了让rpm解压它们.我想出了以下内容:
设置您的环境:
mkdir -p ~/rpm/{BUILD,RPMS}
echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros
使用以下内容创建您的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
建立你的rpm:
rpmbuild -bb foobar.spec
有一些hackery在那里指定'source'作为你当前的目录,但它似乎比替代更优雅,在我的情况下,写一个单独的脚本来创建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,所以你的里程可能会有所不同.