Answers:
我经常在Linux上对每个打包的专有应用程序(也更像是Websphere)执行二进制rpm。因此,我的经验对您也可能有用,此外,如果可以的话,最好执行TRUE RPM。但是我离题了。
因此,打包(二进制)程序的基本步骤如下-我假设程序是1.0版的toybinprog,在/etc/toybinprog/toybinprog.conf中安装conf,并安装bin。在/ usr / bin中称为tobinprog:
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
就这样。
希望有帮助
sudo dnf install rpm-build
-用于安装rpmbuild v4.13 +的Fedora 23命令
作为应用程序分发者,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
创建具有以下内容的规范文件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
那里有一个小小的黑客,将“源”指定为当前目录,但它看起来比替代方案优雅得多,就我而言,替代方案是编写一个单独的脚本来创建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 -
哪个更清洁。
另外,我碰巧使用的是RHEL5.6,rpm版本为4.4.2.3,因此您的里程可能会有所不同。
$RPM_BUILD_ROOT
才能%{buildroot}
在我的“ Red Hat Enterprise Linux Server 6.9版”上工作。另外,当我运行rpmbuild时,已安装的两个文件必须位于当前目录中。我通过以下方式将其安装在另一台计算机上:sudo rpm -Uvh --nodeps foobar-0.1a-1.x86_64.rpm
如果make config
适用于您的程序,或者您具有将两个文件复制到适当位置的Shell脚本,则可以使用checkinstall。只需转到您的makefile所在的目录,并使用参数-R
(对于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并重现将放置文件的路径,因此在这种情况下,请创建:
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的更多详细信息,请查看此链接。
用于构建rpm的GUI Java软件:https : //sourceforge.net/projects/javarpmbuilder/
从源文件生成RPM的过程: