«
»

How to extract RPM or DEB packages

January 28th, 2008 by George Notaras

RPM and DEB packages are both containers for other files. An RPM is some sort of cpio archive. On the other hand, a DEB file is a pure ar archive. So, it should be possible to unpack their contents using standard archiving tools, regardless of your distribution’s package format. Under normal conditions, you should use your distribution’s standard package manager, rpm or dpkg and their frontends, to manage those files. But, if you need to be more generic, here is how to do it.

RPM

For RPMs you need two command line utilities, rpm2cpio and cpio. Extracting the contents of the RPM package is a one step process:

rpm2cpio mypackage.rpm | cpio -vid

If you just need to list the contents of the package without extracting them, use the following:

rpm2cpio mypackage.rpm | cpio -vt

The -v option is used in order to get verbose output to the stdout. If you don’t need it, you can safely omit this switch. For more information about the cpio options, please refer to the cpio(1) manual page.

DEB

DEB files are ar archives, which contain three files:

  • debian-binary
  • control.tar.gz
  • data.tar.gz

As you might have already guessed, the needed archived files exist in data.tar.gz. It is also obvious that unpacking this file is a two-step process.

First, extract the aforementioned three files from the DEB file (ar archive):

ar vx mypackage.deb

Then extract the contents of data.tar.gz using tar:

tar -xzvf data.tar.gz

Or, if you just need to get a listing of the files:

tar -tzvf data.tar.gz

Again the -v option in both ar and tar is used in order to get verbose output. It is safe not to use it. For more information, read the man pages: tar(1) and ar(1).

If anyone knows a one step process to extract the contents of the data.tar.gz, I’d be very interested in it!

Update

As Jon suggested in the comment area, the contents of data.tar.gz can be extracted from the DEB package in a one step process as shown below:

ar p mypackage.deb data.tar.gz | tar zx

That will do it.

The How to extract RPM or DEB packages by George Notaras, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.

Related Articles

Tags: , , , , ,

21 Responses to “How to extract RPM or DEB packages”

  1. knud Says :

    Please also try these:
    ‘rpm -qpvl package.rpm’
    ‘rpm -qpvl package.rpm > textfile’
    ‘less package.rpm’
    ‘lesspipe… > textfile’
    ‘less package.deb’
    ‘lesspipe… package.deb > textfile’
    And of course The Midtnight Commander ‘mc’ will open both rpm and deb.
    Rgds

  2. Jon Says :

    One-liner to extract data.tar.gz:

    ar p package.deb data.tar.gz|tar zx

  3. George Notaras Says :

    Jon: Excellent. Thanks for your feedback. I will update the post.

  4. Kilgore Trout Says :

    Is there a GUI program to do all this that will take any package and convert it to what you want?

  5. George Notaras Says :

    None that I know of. There is a command line tool though, called alien, which can convert packages between the RPM and DEB formats. Its use is very straightforward. I highly recommend you give it a shot.

  6. Johny Desmons Says :

    You can also extract deb files on Windows and Mac for free with AnyToISO program

  7. Steven Li Says :

    to extract RPM, I recommend p7z

  8. Benjamin Says :

    The easiest way to extract a Debian package is with dpkg-deb. To extract the content run “dpkg-deb –extract mypackage.deb foobar”. If you want to modify the package:

    dpkg-deb –extract mypackage.deb foobar
    dpkg-deb -e mypackage.deb foobar/DEBIAN
    modify files in foobar directory
    dpkg-deb -b foobar

  9. George Notaras Says :

    Hi Benjamin,

    Having used RPM-based distributions, I was not aware that it was so easy to modify the contents of a DEB package and then repackage the modified files. Thanks for the tip!

    As for the method of extracting the contents of RPM or DEB I describe in that post, it is meant to be a generic method without requiring any distribution specific tools, but generic archive managers.

    I had decided to write it because I once needed to extract a DEB package under CentOS; I cannot recall why.

    Thanks for stopping by.

  10. asfd Says :

    ar is rare to fine already installed. Please revise this to use dpkg-deb or at least show it as an option.

    dpkg-deb -x

  11. George Notaras Says :

    This article describes how to extract a DEB or RPM package using generic archive decompressors. The fact that utilities like rpm or dpkg are not used is intentional. Thanks

  12. Jonathan Says :

    “An one-step process” should be “a one step process.” This is because a/an is decided based on the pronunciation of the following word, not on the spelling. See: http://www.english-test.net/forum/ftopic31401.html

    Thanks for the article :-).

  13. George Notaras Says :

    Hi Jonathan. Thanks for pointing it out! The same mistake probably exists in several posts throughout the web site.

    It has been corrected in the current post. Thanks :-)

  14. toto Says :

    good tutorial and very clear description and how to solve my problem. Thank for your tutorial. My problem about how to extract rpm file is solve :)

  15. Eruva Says :

    It’s good to mention that ar is in binutils package.

  16. George Notaras Says :

    Hi and thanks for your feedback. The binutils package is installed by default even in minimal installations on RHEL, Fedora, CentOS and Scientific Linux, so it was kind of impossible for this package to be missing. Also the following command reveals the containing RPM package:

    yum provides /usr/bin/ar
    
  17. srm Says :

    What is the use of :

    debian-binary
    control.tar.gz

    in a .deb package. Dont we need to extract files in them too ?

  18. koofoos Says :

    Any way to convert .deb packages to .rpm and vice versa, without losing the post-install scripts?

  19. vamsi Says :

    @Benjamin, awesome!! That’s exactly what I was looking for. So I wanted to make few changes to the priority level in control file and your process is what I wanted.

    Thanks @George Notaras for posting good stuff.

  20. gracias Says :

    Thanks, worked for me!

  21. Mark Says :

    just came in very handy, my dpkg and tar binaries were incompatible (dpkg calling tar with an unknown option), so I couldn’t use the famed dpkg-deb, I guess this is a good reason to have another way to unpack these things.

    Got the tar.deb and unpacked it to get the newer tar binary, so my dpkg would work again.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight=""> <pre>