How to Extract Files from an Oracle Linux RPM Package Without Installing the Package
By Lenz Grimmer
This article explains how you can look into an Oracle Linux RPM package and extract files from it without having to install the entire package. This might be handy if you don't have root permissions on a system, but you need to access some files that are contained inside an RPM package.
About the RPM Package Manager
Software and applications on Linux systems are usually organized in the form of "packages" that contain all the relevant parts of an application (for example, binaries, configuration files, and libraries). Oracle Linux uses RPM, the well-known RPM package manager, to facilitate the installation, upgrade, and removal of application packages. On the other hand, Debian Linux and derivatives such as Ubuntu Linux use an alternative packaging format called deb. Although both have their pros and cons and get the job done, I'll focus on RPM in this article.
In addition to referring to the .rpm file format, "RPM" is also the name of a command line tool that keeps track of package versions and the files contained within a package by storing this information in a local Oracle Berkeley DB database. RPM ensures that requirements and dependencies, as well as conflicts between packages, are taken into consideration. It is aware of configuration files and can take care of not overwriting changes made by an administrator during an update. Additionally, RPM is capable of verifying the integrity and authenticity of a package by supporting cryptographic signatures and file checksums.
RPM packages are archive files, similar to
.tar.gz files. The archiving format used for
.rpm files is
cpio, with some additional metadata attached to it. You can use the
rpm command line tool to obtain this information and to look at the contents of a package without installing the package.
In the following examples, I use the
oracle-validated package for illustration purposes, but you can perform the same steps with any other RPM package.
oracle-validated package is very useful for preparing an Oracle Linux system before installing Oracle Database, because it performs many of the required preparations in one step. Among other tasks, this package creates the appropriate user and group accounts, configures various Linux kernel parameters, and ensures that all required libraries and applications are installed.
oracle-validated package is included in the latest Oracle Linux 5 distributions, but you can also download the package separately from oss.oracle.com, as shown in Listing 1.
Listing 1: Downloading the
$ wget http://oss.oracle.com/el5/oracle-validated/oracle-validated-1.1.0-7.el5.x86_64.rpm --2011-07-27 10:18:27-- http://oss.oracle.com/el5/oracle-validated/oracle-validated-1.1.0-7.el5.x86_64.rpm Resolving oss.oracle.com... 22.214.171.124 Connecting to oss.oracle.com|126.96.36.199|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 23838 (23K) [application/x-rpm] Saving to: `oracle-validated-1.1.0-7.el5.x86_64.rpm' 100%[======================================>] 23,838 44.1K/s in 0.5s 2011-07-27 10:18:28 (44.1 KB/s) - `oracle-validated-1.1.0-7.el5.x86_64.rpm' saved [23838/23838]
Now you have a local copy of the package, named
oracle-validated-1.1.0-7.el5.x86_64.rpm, in your current directory, as shown in Listing 2.
Listing 2: Verifying You Have a Local Copy of the Package
$ ls -lh oracle-validated-1.1.0-7.el5.x86_64.rpm -rw-r--r-- 1 lenz lenz 24K Nov 17 2010 oracle-validated-1.1.0-7.el5.x86_64.rpm
Let's first take a look at the package's metadata. RPM packages contain quite a lot of useful information about themselves, which you can obtain without having to install the package, as shown in Listing 3.
Listing 3: Displaying Metadata for a Package
$ rpm -qip oracle-validated-1.1.0-7.el5.x86_64.rpm warning: oracle-validated-1.1.0-7.el5.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 1e5e0159: NOKEY Name : oracle-validated Relocations: (not relocatable) Version : 1.1.0 Vendor: Oracle Release : 7.el5 Build Date: Wed Nov 17 20:03:20 2010 Install Date: (not installed) Build Host: ca-build9.us.oracle.com Group : Test Environment/Libraries Source RPM: oracle-validated-1.1.0-7.el5.src.rpm Size : 61204 License: GPL Signature : DSA/SHA1, Wed Nov 17 20:03:31 2010, Key ID 66ced3de1e5e0159 Summary : Verifies and sets system parameters based on Oracle validated configuration recommendations for OEL5 Description : This package verifies and sets system parameters based on Oracle validated configuration recommendations for Oracle Enterprise Linux Release 5 Files affected: /etc/sysctl.conf, /etc/security/limits.conf, /etc/modprobe.conf, /boot/grub/menu.lst. For changes to modules, this package installation will modify module parameters and re-insert.
We can also look at the files included in the package, as shown in Listing 4.
Listing 4: Listing the Files Included a Package
$ rpm -qlp oracle-validated-1.1.0-7.el5.x86_64.rpm /etc/rc.d/init.d/oraclevalidated /etc/sysconfig/oracle-validated/oracle-validated-verify /etc/sysconfig/oracle-validated/oracle-validated.params /usr/bin/oracle-validated-verify
Three Ways to Examine Package Files
Let's say we wanted to take a closer look at the init script
/etc/rc.d/init.d/oraclevalidated. How can we do that without having to install the package, which would also drag in a lot of additional software that we don't need at this point? There are actually several ways to achieve this goal. I'll cover three alternatives.
Remember that RPM utilizes CPIO for the actual file archiving. So one option would be to simply extract the files using the
cpio command line utility. However, we first need to strip the RPM metadata from the archive; otherwise, CPIO will complain about the file format.
Most distributions ship with a tool named
rpm2cpio, which extracts the
cpio archive from an RPM package. You can either redirect its output into a local file, or pipe it right into the
So let's start by converting the RPM package into a
cpio archive and letting CPIO list its contents, as shown in Listing 5.
Listing 5: Converting a Package into a cpio Archive
$ rpm2cpio oracle-validated-1.1.0-7.el5.x86_64.rpm | \ cpio -i --list ./etc/rc.d/init.d/oraclevalidated ./etc/sysconfig/oracle-validated/oracle-validated-verify ./etc/sysconfig/oracle-validated/oracle-validated.params ./usr/bin/oracle-validated-verify 122 blocks
--extract) option can be used to list as well as extract files from an archive. You can provide file names (including wildcards) to restrict the output to matching file name patterns, as shown in Listing 6.
Listing 6: Restricting the Output to Matching File Names
$ rpm2cpio oracle-validated-1.1.0-7.el5.x86_64.rpm | \ cpio --extract --list "*oraclevalidated" ./etc/rc.d/init.d/oraclevalidated 122 blocks
CPIO does not create directories by default. Because we can't (and don't want to) extract the file in question into the "real"
/etc/rc.d/init.d directory, we need to instruct
cpio to create subdirectories when extracting files. Therefore, it' a good idea to create a separate working directory (for example, in
/tmp), as shown in Listing 7, so you don't accidentally clutter your home directory.
Listing 7: Extracting a File into a Temporary Directory
$ mkdir /tmp/rpm2cpio $ cp oracle-validated-1.1.0-7.el5.x86_64.rpm /tmp/rpm2cpio $ cd /tmp/rpm2cpio $ rpm2cpio oracle-validated-1.1.0-7.el5.x86_64.rpm | \ cpio --extract --make-directories --verbose "*oraclevalidated" ./etc/rc.d/init.d/oraclevalidated 122 blocks
There's our file. Now you can now take a look at its content, as shown in Listing 8.
Listing 8: Verifying You Have the Extracted File
$ [lenz@thebe rpm2cpio]% ls -lh etc/rc.d/init.d/oraclevalidated -rwxr-xr-x 1 lenz lenz 1.3K Jul 27 10:45 etc/rc.d/init.d/oraclevalidated
As an alternative to using the command line, you can use file managers or GUI tools. Many of the Linux-based utilities can read and open RPM packages directly. For example, there is the GNU Midnight Commander, which is a free implementation of the classic Norton Commander utility. You can invoke it from the command line, and it will open an RPM package if you highlight the package name and press Enter, as shown in Figure 1.
Figure 1: Opening an RPM Package Using GNU Midnight Commander
The actual files are contained in the
CONTENTS.cpio file, as shown in Figure 2.
Figure 2: Viewing the Content of an RPM Package Using GNU Midnight Commander
You can navigate the archive's directory structure like any other file system, as shown in Figure 3.
Figure 3: Navigating the Archive's Directory Structure
And you can open a file by highlighting its name and pressing Enter, as shown in Figure 4.
Figure 4: Opening a File
/etc/rc.d/init.d/ directory and press F3 to view the file in the built-in text viewer, as shown in Figure 5.
Figure 5: Viewing a File
You can exit the viewer by pressing the F10 function key.
If you are using the GNOME desktop, you can simply use File Roller, the GNOME archive manager, to open an RPM package. You invoke File Roller via Nautilus, the GNOME file manager, by right-clicking the RPM file icon and choosing Open With Archive Manager, as shown in Figure 6.
Figure 6: Using File Roller to Open an RPM Package
Alternatively, you can start the archive manager from the command line by passing the RPM package name as an argument, as shown in Listing 9.
Listing 9: Starting File Roller from the Command Line
$ file-roller oracle-validated-1.1.0-7.el5.x86_64.rpm
You can now navigate the RPM package's content like any other archive. Click the dot directory to see the top-level directory structure, as shown in Figure 7.
Figure 7: Viewing the Top-Level Directory Structure
Now you can navigate into the
/etc/rc.d/init.d subdirectory to find the oraclevalidated script. You can then extract it from the archive by using drag and drop, or you can view the file directly by right-clicking it and selecting Open, as shown in Figure 8.
Figure 8: Viewing a File from File Roller
The script is then displayed in the GNOME text editor (or whatever application you associated with displaying text files).
As you can see, there are many options for accessing the content and files of an RPM package without having to install the package.
Here are resources referenced earlier in this document:
- Oracle Linux: http://www.oracle.com/linux/
- RPM: http://rpm.org/
debfile format: http://en.wikipedia.org/wiki/Deb_%28file_format%29
- Oracle Berkley DB: http://www.oracle.com/database/technologies/related/berkeleydb.html
- CPIO: http://en.wikipedia.org/wiki/Cpio
oracle-validatedpackage in the Oracle Linux 5 distribution: http://oss.oracle.com/el5/oracle-validated/
- GNU Midnight Commander: http://www.midnight-commander.org/