rpmstrap - Bootstrap a basic RPM-based system

This project is dead. I no longer have any interest in maintaining it. You can still technically use it, but you will need to update the suite scripts on your own (the framework still works, the suite scripts are just outdated). Anyone interested in taking this project over, feel free to grab the code and go for it.

(mirror 1 | mirror 2)

What is it?

rpmstrap is a tool for bootstrapping a basic RPM-based system. It is inspired by debootstrap, and allows you to build chroots and basic systems from RPM sources.

At present rpmstrap can build basic Fedora Core 2, Fedora Core 3, Fedora Core 4, Yellowdog 4, CentOS 3, CentOS 4, Mandriva and Scientific Linux systems. It also has support for custom RPM-based systems managed by PDK.

Why would I want it?

The best way to answer this is to give a couple of quick examples of its usage:

  • You are developing an application which you want to test on Fedora Core 3, but you are running Debian. Use rpmstrap to build a "heidelberg" chroot and you have a scratch Fedora Core 3 which you can test your application in.

  • You are running Xen and wish to run a CentOS 4 virtual server, however you do not want to use the Anaconda installer. Use rpmstrap to bootstrap your virtual server.

  • You have an application you wish to package cross-platform. You already have debootstrap for a Debian chroot, but you don't have any for Fedora Core 3 or CentOS 4. Use rpmstrap to build chroots for the two RPM distros in question and package your application inside them.

  • You have a risky upgrade that could hose a production Fedora Core 2 server. You want to test the upgrade to make sure nothing will go wrong (and, if it does, you want to know how to fix it). Simply create a "tettnang" chroot using rpmstrap and configure it like your production Fedora Core 2 server. Perform your upgrade inside the chroot, using it as a guinea pig.

  • You wish to install CentOS 4 across a network on a system you do not have physical access to but do have remote administrative access. SSH in, rpmstrap a CentOS 4 bootstrap into a mounted filesystem, set the new boot preferences, and reboot.

How do I use it?

Usage: rpmstrap [OPTION]...   []
Bootstrap RPM-based systems.

      --arch                 set the target architecture (use if no uname)
                               [ --arch x86_64 ]

      --download-only        download packages, but don't perform installation

      --delay                insert a friendly delay in seconds between each
                               attempt to download an RPM
                               [ --delay .5 ]

      --local-source         specify a local source directory for RPMS
                               [ --local-source /home/sam/rpm ]

      --pdk-source=A,B       specify a PDK workspace and component to pull RPMs
                               [ --pdk-source=workspace/path/,component.xml ]

      --print-rpms           print the packages to be installed, and exit

      --unpack-tarball       acquire .rpms from a tarball instead of http

      --strip-path           when unpacking from tarball, use the strip path
                               (See the texinfo document for tar)

      --list-suites          list the available suites this program knows

      --suite-notes          show the notes associated with a specific suite

      --find-best-mirror     find the best mirror (warning VERY slow, may be
                               better to just use a slow mirror ;-)

      --try-mirrors          instead of just using the default mirror, try
                               sequentially all of the mirrors in the event of
                               a failure

      --force                force installation of RPMs even if there are

      --ignorearch          force installation of RPMs even if they are
                               for different architecture

      --help                 display this help and exit

      --include=A,B,C        adds specified names to the list of base packages

      --exclude=A,B,C        removes specified packages from the list

      --pre                  runs a script before the installation
                               [ --pre pre-install.sh ]

      --post                 runs a script after the installation has completed
                               [ --post post-install.sh ]

      --verbose              run in verbose mode

Please note that, at present, not all options are supported. Some are planned.

Where do I get it?

The latest releases can always be found here:

How can I contribute?

The Hg repository can be found here: