我只是想创建一个RPM文件来分发我的Linux二进制文件“foobar”,只有几个依赖项。它有一个配置文件/etc/foobar.conf,应该安装在/ usr / bin / foobar中。
不幸的是documentation for RPM长达27章,我真的没有一天坐下来读这个,因为我也忙于为其他平台制作.deb和EXE安装程序。
创建RPM需要做的绝对最低限度是多少?假设foobar二进制文件和foobar.conf位于当前工作目录中。
答案 0 :(得分:173)
我经常在Linux上为每个包装专有应用程序(也就是websphere)进行二进制rpm。 所以我的经验对你来说也很有用,除此之外如果可以的话,最好做一个真正的RPM。但我离题了。
因此,打包你的(二进制)程序的基本步骤如下所示,我认为 程序是1.0版本的toybinprog,在/etc/toybinprog/toybinprog.conf中安装了一个conf,并在/ usr / bin中安装了一个名为tobinprog的bin:
mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}
cat <<EOF >~/.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 <<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
rpmbuild -ba SPECS/toybinprog.spec
就是这样。
希望这个帮助
答案 1 :(得分:19)
作为应用程序分销商,fpm sounds perfect for your needs。 an example here显示了如何从源打包应用。 FPM可以生成deb文件和RPM文件。
答案 2 :(得分:15)
同样,我需要用几个文件创建一个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等,等等。 / p>
注意:在我的特殊情况下,我的文件根据他们需要的位置排列在文件夹中,如下所示:
./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,所以你的里程可能会有所不同。
答案 3 :(得分:15)
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目录。
答案 4 :(得分:4)
如果make config
适用于您的程序,或者您有一个shell脚本可将您的两个文件复制到适当的位置,则可以使用checkinstall。只需转到makefile所在的目录,然后使用参数-R
(对于 RPM )和可选的安装脚本调用它。
答案 5 :(得分: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并重现文件放置的路径 所以在这种情况下,例如create:
5)在这些文件夹中输入要在包中插入的文件:
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文件夹
如果您安装此软件包,则安装:
感谢:losurs.org/docs/tips/redhat/binary-rpms
有关构建rpm的更多详细信息,请查看此link。
用于构建rpm的GUI java软件:https://sourceforge.net/projects/javarpmbuilder/
答案 6 :(得分:-1)
如果您熟悉Maven,还有rpm-maven-plugin
,这简化了RPM的制作:您只需编写pom.xml
,然后将其用于构建RPM。 RPM构建环境由插件隐式创建。
答案 7 :(得分:-3)
从源文件生成RPM的过程:
答案 8 :(得分:-4)
RPM通常是从源代码构建的,而不是二进制代码。
您需要编写包含如何配置和编译应用程序的规范文件;还有哪些文件要包含在你的RPM中。
快速浏览一下手册,可以看到第8章中介绍了您需要的大部分内容 - 同时,由于大多数基于RPM的发行版都有可用的来源,因此您可以看到几十种不同方法的示例。 / p>