The source and patch tags identify the source files used to build the binary package. Shorthand for package builders describes %setup and %patch macros. Rpmspecfile perl extension for creating rpm specfiles. How to patch and rebuild an rpm package brad the mad.
During macro expansion, both flags and arguments are available as macros which are deleted at the end of macro expansion. Specifically, an rpm package consists of the cpio archive, which contains the files, and the rpm header, which contains metadata about the package. Rpm spec files are divided into the following sections. In source packages, you have the pristine sources along with any patches that were used, plus complete. Just listing the patch file in the header will only cause rpmbuild to ensure the file exists it wont actually apply the patch, but luckily there is a handy % patch macro.
However, there are two parts of rpm s build process that are fairly constant from one package to another, and they are the unpacking and patching of sources. When you build a package, rpm creates a list of the shared libraries that it includes and a list of the shared libraries to which it is linked. The rpm spec file provides numerous system and userdefined macros. Directives used in the %files list to direct rpm to handle certain files in a. Automate rpm builds from git sources using copr hobo. The new %autosetup macro allows taking care of all this in a single step. Spec you can also do a manual build by uploading a src. Avoid percent signs, %, in comments, which may get interpreted as rpm macros.
In this case, rpm will allow you to apply that patch to just one architecture only. If youre interested in what the scripts in your rpm look like after macro expansion, you can just build the rpm and then get rpm to extract the scripts. Rpm s workhorse to verificationtime script %build the %build script %clean the %clean. This section describes the various macros used by rpm. Helpful shorthand for to compressed patch files % patch the % patch macro % patch, options to the p option to the % patch e option %setup the %setup macro %setup, options to the n option to the a option scripts in scripts. If there was one thing that you should know about creating a rpm its how to write the spec file. The rpm packager applies the patch when the rpm is built. Im trying to write a single rpm spec for rhelcentossl 5 and 6. The spec file should contain all the commands needed to build the application or library you want to. Parameterized macros include an options field, and perform argcargv processing on white space separated tokens to the next newline. The rpm system defines a lot of handy macros so that your spec files can work regardless of where system directories are located. An rpm package is simply a file containing other files and information about them needed by the system. Also, macro definitions are generally put at the top of the preamble. Contribute to systemdsystemd development by creating an account on github.
The prep or prepare section precedes the build section and defines the commands necessary. The first part of the spec should contains macros definitions, as illustrated below. There are various topics in the world of rpm spec files that are. Userdefined macros follow the % macro name syntax, whereas system macros are written without the curly braces, for example %define. The %source and %patch macros can be used to refer to the full. In particular, it is not possible to add a test timeout multiplier such as is sometimes needed when building for slow architectures such as armv7hl.
Rpm also includes a set of useful macros that you can use to help debug problematic spec files and well as perform common tasks in spec files. Idea is that one can clone the repo with your files, run something like make and he will get the ready runme1. The fedora project hosts the best documentation on rpm out there in html format. Add two lines to the spec file for each patch file.
The macros section provides a detailed overview of the available macros. Different linux distributions provide open source software in rpm format. Building rpm packages with rpmbuild, koji, and gitlabci. In source packages, you have the pristine sources along with any patches that. Fedora 18 changes the way how to work with services in spec files. Rpm, %config, and noreplace jon warbrick university of cambridge computing service rpm spec files have a macro, %config, that is used to mark config files so that edits to config files wont get lost during a subsequent upgrade. The following sections summarize the spec file syntax. They usually should be used instead of hardcoded directories. What this means is that we can have rpm perform text substitutions for us so that we dont have to.
The following table lists macros which are widely used in fedora. The way we direct rpm in the build process is to create a spec file. One handy utility of the rpm command for packagers is the eval flag which allows you to ask rpm to evaluate a macro. Table 105 lists these debugging and special spec file macros. The spec files used by pkgbuild are similar to rpms spec files, but there are. Spec filespecific macros most of the predefined rpm macros hold directory paths or architecture information.
Like the patch tag, it has a numbered suffix and you can pass it paramters you would pass to the patch command. The %ifarch macro is very important to all of this. The specfile build section looks like %build cd pathsources make if the spec file path can be detected then the hardcoding of the pathsources can be avoided. First use the yumdownloader command to get the rpm package of interest.
Third, modify or create a spec file describing how to start with the original archive and one or more patch files and build either a binary rpm package file that can be installed, or a source rpm package file containing the original code plus your modifications and the spec file, or both source and binary rpm files. The first part of the spec should contain macros definitions, as illustrated below. To display the current set, add %dump to the beginning of any spec file, process with rpm, and examine the output from stderr. This article describes how to build an open source software rpm package on aix. As we saw in the previous chapter, the spec file contains eight different sections, most of which are required. This section describes the basic structure of an rpm spec file and how that applies to rpm specfile. Users can use standard package management tools for example yum or packagekit to install, reinstall, remove, upgrade and verify your rpm packages. I will explain the layout of the specfile in detail. With rpm, you have the pristine sources along with patches that we used to. Building open source rpm packages on ibm aix ibm developer. If you see a macro in a spec file that youre not familiar with, you can quickly evaluate the expression.
The %patch macro, which is used to apply patches to the original sources. Here is an example %patch definition from usrlibrpmmacros. The spec file is a description of the software along with instructions on how to build it and. Now that im actually trying to build debuginfo packages, im no longer happy with that solution, however. This option is useful in a second or later %patch macro that required a.
Rpm does not support macros in the sense of adhoc sequences of commands being defined as a macro and executed by simply referring to the macro name. Bug 850355 introduce new systemd rpm macros in utillinux spec file. However, there are two parts of rpms build process that are fairly constant from one package to another, and they are the unpacking and patching of sources. It does not attempt to give a full description of rpm spec file syntax. In rpm terms, building the package is split into four steps. Jun 15, 2017 rpm is a very popular packaging method for installing and managing software. Building and managing rpm packages on ibm aix is similar to linux distributions but with some changes. In the above example, fileutils has a patch for 64 bit machines. Reference for rpm spec macros %setup, %buildroot, etc server. Looking up the %setup options in a tutorial at rpm. In order to write spec files, it is important to understand rpm s dependency checking, macros and directory structure.
Inside the spec file in this chapter, were going to cover the spec file in detail. There are a number of different types of entries that comprise a spec file, and every one will be documented here. Like the %setup macro, the %patch directive applies a patch to the sources. For example, it includes a list of default path definitions which are used by the build system macros, and definitions for rpm package build specific directories. Macros definition the first part of the spec should contain macros definitions, as illustrated below. The spec file is present inside the source directory. Rpm packaging guide red hat enterprise linux 7 red hat. Most of the predefined rpm macros hold directory paths or architecture information. The patch tags identify any patches used to modify the sources. Rpmtoolboxspec parse rpm specs with macro expansion.
But on rhelcentos5 i need to add one additional dependen. Creating noarch rpm with minimal spec file suppose you have some files that should be packaged and distributed as a small noarch rpm, but you do not want to depend on. Macros a method of executing multiple commands easily. Because rpm maintains a database of installed packages and their files, users can easily query and verify packages on their system. The following describes how to derive a patch for a modification you need to make to the source code of a program, and apply that patch during the rpm building process. Here is a complete, working rpm spec file with several things. You now have the basics at your fingertips to create your own rpm.
In its simplest form, the macro is used with no options and gets the name of the source archive from the source tag specified earlier in the spec file. This causes the patch process to be interrupted after the kernel. Some rpm macros may need workarounds to work in copr. Use a database of installed packages to query and verify packages. This macro is an easy way to specify a number of files as. When we build a git snapshot kernel, the gitrev macro contains the value of the git snapshot patch to apply. Lets go through each section and create cdplayers spec file as we go. A spec file is basically a set of instructions on how to build the rpm package. You will need either p0 or p1 specifying how many levels to strip off the path names, depending on how you built the patch file compared to how the tar file is contructed. This spec is for python app, so there is no differences in build process. See chapter 9, working with spec files for details. One to indicate that there is a new patch file and another in the %setup section to apply the patch. The second, at the end of the %prep area, tells how to use it with the patch command.
Select the scm to use with %autosetup, if one is not set in the spec file. Macros may also be automatically included from usrlibrpmmacros. Nov 01, 2000 place the patch file into the usrsrc rpm sources directory and edit the header of your. The following describes how to derive a patch for a modification you need to. Some tips on rpm conditional macros posted by waldner on 17 september 2011, 3. Place the patch file into the usrsrc rpm sources directory and edit the header of your. Red hat enterprise linux 7 rpm packaging guide basic and advanced rpm packaging last updated. I mean, %setup, %buildroot and the like, which are not in usrlib rpm. D, define macro expr defines macro with value expr. Apr 04, 2015 specs the specs folder is where your specfile is located. The spec file is split into several sections, which will be examined individually. The specs directory is where the specfile included with an srpm will be placed.
1307 1012 919 259 1019 106 261 1362 10 1119 285 703 999 264 1199 1069 423 1287 820 51 912 1239 1128 1424 345 7 712 651 696 564 1393 602 977 299 647 711 114 1213 1001 839 1218 881 374 516 1271 568 432 419