当前位置:  开发笔记 > 编程语言 > 正文

创建RPM文件需要做的最小步骤是什么?

如何解决《创建RPM文件需要做的最小步骤是什么?》经验,为你挑选了4个好方法。

我只是想创建一个RPM文件来分发我的Linux二进制文件"foobar",只有几个依赖项.它有一个配置文件/etc/foobar.conf,应该安装在/ usr/bin/foobar中.

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

创建RPM需要做的绝对最小值是多少?假设foobar二进制文件和foobar.conf位于当前工作目录中.



1> 小智..:

我经常在linux上为每个打包专有应用程序(也就是websphere)进行二进制rpm.所以我的经验对你来说也很有用,除此之外如果可以的话,最好做一个真正的RPM.但我离题了.

因此,打包你的(二进制)程序的基本步骤如下所示,我认为程序是1.0版本的toybinprog,有一个conf安装在/etc/toybinprog/toybinprog.conf并有一个bin要安装在/ usr/bin中调用tobinprog:

1.为RPM <4.6,4.7创建rpm构建环境

mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}

cat <~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

2.创建项目的tarball

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.复制到源dir

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

4.构建源和二进制rpm

rpmbuild -ba SPECS/toybinprog.spec

就这样.

希望这有帮助


如果遇到"rpmbuild:command not found",请参阅http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment.但是这本指南对于我学习rpm的内部工作方式来说是一个很好的开始
在你的例子中是什么设置_bindir?我正在尝试按照您的解决方案,但我想将我的二进制文件放到/ opt.我根据这个创建了targz文件.并且rpmbuild在buildroot/usr/bin中"找不到文件"失败.

2> timmow..:

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


FPM是一个很棒的工具.
FPM具有可以在软件中获得的最佳基本原则:如果它没有帮助,则存在错误.这是我珍惜的承诺.

3> dadealeus..:
要快速建立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目录中.



4> 小智..:

同样,我需要用几个文件创建一个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,所以你的里程可能会有所不同.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有