首页 文章

创建RPM文件所需的最小值是多少?

提问于
浏览
143

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

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

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

9 回答

  • 18

    我经常在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 <<EOF >~/.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 <<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.构建源和二进制rpm

    rpmbuild -ba SPECS/toybinprog.spec
    

    就这样 .

    希望这有帮助

  • 4

    作为应用程序分销商,fpm sounds perfect for your needs . an example here显示了如何从源打包应用程序 . FPM可以生成deb文件和RPM文件 .

  • -3

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

  • 14

    如需快速建造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目录中 .
  • 168

    如果 make config 适用于您的程序,或者您有一个shell脚本将您的两个文件复制到适当的位置,则可以使用checkinstall . 只需转到makefile所在的目录,然后使用参数 -R (对于RPM)和可选的安装脚本调用它 .

  • -1

    从二进制构建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:

    • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin /

    • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications /

    • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps /

    5)在这些文件夹中放入要在包中插入的文件:

    • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin / binary_file.bin

    • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications / package_name.desktop

    • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps / package_name.png

    usr / share / pixmaps / package_name.png是二进制文件/ 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

    有关构建rpm的更多详细信息,请查看此link .

    用于构建rpm的GUI java软件:https://sourceforge.net/projects/javarpmbuilder/

  • 4

    如果您熟悉Maven,那么 rpm-maven-plugin 也可以简化制作RPM:您必须只编写 pom.xml ,然后将其用于构建RPM . RPM构建环境由插件隐式创建 .

  • 15

    从源文件生成RPM的过程:

    • 下载源文件with.gz extention .

    • 从yum install安装rpm-build和rpmdevtools . (将生成rpmbuild文件夹...应在rpmbuild文件夹内生成SPECS,SOURCES,RPMS ..文件夹) .

    • 将源代码.gz复制到SOURCES文件夹 . (rpmbuild / SOURCES)

    • 使用以下命令解开tar球 . 转到SOURCES文件夹:rpmbuild / SOURCES,其中存在tar文件 . 命令:例如tar -xvzf httpd-2.22.tar.gz httpd-2.22文件夹将在同一路径中生成 .

    • 转到解压文件夹,然后在下面输入命令:./ configure --prefix = / usr / local / apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all(.configure可能因RPM必须构建的源而异 - 我已经为apache HTTPD做了,需要apr和apr-util依赖包) .
      配置成功后

    • 运行以下命令:make

    • 成功执行od make命令后运行:checkinstall在同一个文件夹中 . (如果你没有checkinstall软件,请从网站下载最新版本)另外checkinstall软件有bug可以通过以下方式解决:::::找到checkinstallrc然后使用vim命令将TRANSLATE = 1替换为TRANSLATE = 0 . 还要检查排除包:EXCLUDE = "/selinux"

    • checkinstall会询问选项(如果你想要tp build rpm for source file,请输入R)

    • 完成.rpm文件将在rpmbuild / RPMS文件中的RPMS文件夹中构建...所有最佳....

  • -4

    RPM通常是从源而不是二进制文件构建的 .

    您需要编写包含如何配置和编译应用程序的spec文件;还有哪些文件要包含在RPM中 .

    快速浏览一下手册,可以看出第8章中介绍了您需要的大部分内容 - 同时,由于大多数基于RPM的发行版都有可用的资源,因此您可以看到几十种不同方法的示例 .

相关问题