RPM: Difference between revisions

From Leo's Notes
This page was last edited on 25 May 2018, at 18:15.
m formatting
No edit summary
Line 46: Line 46:


== Building RPM ==
== Building RPM ==
RPMs are built using a .spec specification file.
Some directives to note:
* Summary defines what the package is for
* Description describes what the package does.
* prep section unpacks source and applies patches
* build section builds any source code. The make command usually uses DESTDIR=%{buildroot}.
* install section uses the buildroot macro ({{code|%{buildroot}}} to generate a temporary buildroot location.
* files section defines all files to be included. Files can be marked as 'config', 'doc', or 'license'. Configs and docs labeld as such can be displayed using {{code|rpm -qc}} or {{code|rpm -qd}} respectively. License files are placed in {{code|/usr/share/licenses}}.
The Buildroot directory is like a chroot environment of the target system.
=== Generating a Spec File ===
A specification file can be generated using the {{code|rpmdev-newspec}} command.
{{highlight|lang=terminal|code=
# rpmdev-newspec new-package
}}
=== Creating 32bit Dependency ===
=== Creating 32bit Dependency ===
In your RPM.spec file, have the following in your {{code|Requires}} line:
In your RPM.spec file, have the following in your {{code|Requires}} line:
Line 91: Line 110:
fi
fi
}}
}}
=== Building ===
Use the {{code|rpmbuild}} command to build a RPM file using an existing .spec file.
The default topdir directory is {{code|~/rpmbuild}}. This can be changed by passing in {{code|--define "_topdir `pwd`"}}.
Packages are then signed using the {{code|rpmsign}} command. For example, {{code|rpmsign --addsign something.rpm}}.


== Troubleshooting ==
== Troubleshooting ==

Revision as of 18:15, 25 May 2018

Common RPM Tasks

Below are the common tasks I do with RPM.

List installed packages

# rpm -qa

Look for a specific package by name

# rpm -qi <package name>

Determine the origin of a file

# rpm -qf <path to file>

eg:

# rpm -qf /etc/hosts
setup-2.8.14-10.el6.noarch

Extracting a rpm package

Go into a directory and extract it using cpio. This will dump the files in the current directory, so make a directory to avoid having your files clobbered.

# mkdir package && cd package
# rpm2cpio ~/custom-package.rpm

Viewing / Editing rpm package scripts

Use the rpmrebuild utility to generate a .spec file from an existing RPM package. The spec file that gets generated will contain any scripts that may be bundled with rpm which you can modify.

# rpmrebuild -e -p some-package.rpm
## This should open your editor with the .spec file that was generated.
## Save and quit when done to have the option to rebuild the rpm.

Remove a package with a broken uninstall script

# rpm -e --noscripts <package>

Building RPM

RPMs are built using a .spec specification file.

Some directives to note:

  • Summary defines what the package is for
  • Description describes what the package does.
  • prep section unpacks source and applies patches
  • build section builds any source code. The make command usually uses DESTDIR=%{buildroot}.
  • install section uses the buildroot macro (%{buildroot} to generate a temporary buildroot location.
  • files section defines all files to be included. Files can be marked as 'config', 'doc', or 'license'. Configs and docs labeld as such can be displayed using rpm -qc or rpm -qd respectively. License files are placed in /usr/share/licenses.

The Buildroot directory is like a chroot environment of the target system.

Generating a Spec File

A specification file can be generated using the rpmdev-newspec command.

# rpmdev-newspec new-package

Creating 32bit Dependency

In your RPM.spec file, have the following in your Requires line:

Requires: nss-pam-ldapd(x86-32)

Not:

Requires: nss-pam-ldapd.i686

Checking for Install/Upgrade/Remove in Install Scripts

To check whether a .rpm file is being installed, upgraded, or removed in the pre/post install scripts, check $1 against the table below:

$1 = 0 1 2
%pre Install Upgrade
%post Install Upgrade
%preun Uninstall Upgrade
%postun Uninstall Upgrade

Example usage:

%pre

if [ $1 -eq 1 ] ; then
  # Initial install
fi

Building

Use the rpmbuild command to build a RPM file using an existing .spec file.

The default topdir directory is ~/rpmbuild. This can be changed by passing in --define "_topdir `pwd`".

Packages are then signed using the rpmsign command. For example, rpmsign --addsign something.rpm.

Troubleshooting

Warning: RPMDB altered outside of yum.

If you ever get the error:

Warning: RPMDB altered outside of yum.

... it probably means that you ran rpm. To fix this warning, clear yum's cache and force a rebuild by running:

# yum clean all
# yum makecache