RootFS Build Factory: The Story So Far

Friday , 24, July 2015 4 Comments

Johnny Hughes has already posted images for Cubietruck and Raspberry Pi 2 and told you how to use them with your boards. In this post, I would like to tell you all the what has gone into development of RootFS Build Factory so far which includes a bit about the CentOS ARMv7 effort.

When I first started looking up project ideas for GSoC this year, the RootFS Build Factory idea caught my attention because it fit right into my interests and skill set. This was in the first week of March. Back then there was no CentOS ARMv7 and as far as I knew, the only person who had done any work in the area of building ARMv7 packages was Howard Johnson. His post on the CentOS arm-dev mailing list described his efforts of compiling CentOS for ARMv7 using Raspberry Pi 2 and Odroid C1. This was my first introduction to CentOS ARMv7.

Back then it seemed like the RootFS Build Factory project would require building a minimal CentOS ARMv7 first and then working on a set of scripts to re-bundle packages in this minimal build.
I got in touch with members on the CentOS team on #centos-devel and #centos-gsoc on Freenode and interacted with Jim Perrin and Ian McLeod (who later became my mentor for this GSoC project). With their inputs I started thinking of alternatives to Howard's method of compiling packages and came across work done by msalter from Redhat

He had developed plugins to cross compile packages using mock and Koji and a yum plugin for installing non native rpms. This seemed great as I did not have any ARMv7 hardware at that point and the idea of generating ARMv7 on fast x86_64 desktop seemed like a good one. Later on, after discussion with msalter (which happened in the first week of June) and based on his advice we realized that this approach wasn't going to work for CentOS as the pre/post install scripts in the RPMs wouldn't run in a cross environment.

My original GSoC Proposal was based on using msalter's yum plugin to build ARMv7 images on x86_64 but after discussion with msalter and in consultation with my mentor Ian, it was decided not to go forward with the yum cross plugin approach and to focus on the targets in my proposal which would involve building CentOS ARMv7 images using either ARMv7 hardware or QEMU.

There was still the big issue of how, where and who would compile CentOS ARMv7. This is where Fabian Arrotin's efforts came in and took care of matters. His work using a plague farm he setup on the Scaleway nodes, got us a working set of ARMv7 packages. Until then Ian and I were contemplating doing the build ourselves using hardware we had at our disposal.

We decided that until the ARMv7 CentOS build was ready, we would use Fedora for development. Fabian Arrotin was very quick in creating the repositories which meant we didn't have to use Fedora for long. Of course the first build of CentOS 7 ARM using the RootFS Build Factory happened on Fedora 21.

The present status of the project is this:

  • Tested generation of images for QEMU (, Cubietruck, Odroid C1, Raspberry Pi 2, Banana Pi, Cubieboard 2. Tests for the last two have been reported by Nicolas [nicolas at] and David Tischler [david.tischler at] respectively. The Odroid C1 and Raspberry Pi 2 images do not use the CentOS Kernel.
  • Untested Boards: Cubieboard, Wandboard{solo,dual,quad}, Pandaboard, CompuLab TrimSlice, Beaglebone. Support for these boards has been added based on information on the Fedora Wiki. I do not have these boards with me.
  • For adding support for more boards, you can refer to

Presently there are 3 main components in RootFS Build Factory

  • : takes a XML Template and generates an image.
  • : dialog based UI using the python2-pythondialog library to load/edit/create XML Templates.
  • : Takes a Generic/QEMU image, writes it to your microSD, then writes board specific U-Boot to microSD. This works for the boards where the CentOS kernel is used since the only difference between images for different boards is U-Boot. In case of Raspberry Pi 2 and Odroid C1, just the image generated by RootFS Build Factory is written to microSD.

The original proposal mentioned writing the UI in PyGTK but because cross development was out of the picture and I didn't think people would run X11 in QEMU just for RootFS Build Factory, I chose a console based approach. Although the interface loads in the QEMU console, it doesn't load the colors and there is some text visible on the edges while selecting files/directories. I suggest you set up bridge networking on your host and then SSH into the QEMU instance.

If you have any queries you can post them in the comments below or email me [emailmandar at] or discuss it on the CentOS arm-dev mailing list

4 thoughts on “ : RootFS Build Factory: The Story So Far”
  • Johnny Hughes says:

    I have been working on the armv7hl build and have gotten a bunch of packages done in the last couple of weeks. I am only a few packages away from having a GNOME desktop ready.

    I will be putting this on the back burner with the release of RHEL-6.7 while we build and release CentOS-6.7 .. but I will try to get the rest of GNOME working for armv7hl in the next few weeks.

  • Mandar Joshi says:

    That's great! HDMI works for Cubietruck, Odroid C1 and Raspberry Pi 2 at least for the console with the kernels we are using. Let's see if GNOME works as well.
    Will you be making the packages available in any new repositories on ?

    • Johnny Hughes says:

      Yes .. and the ones that are done are already there. Unfortunately nautilus is one of the non building packages at this point (as well as libreoffice).

      Also, until I figure out what I did wrong on the comps metadata build .. put a cost=5000 in comps.repo if you use yum for now.

  • Ben says:

    I wanted to install centOS 7 ARMv7 and I have been trying the Cubietruck image. followed instruction on It just does not boot up at all. I get a complete black screen. Can you please help?

  • Please give us your valuable comment

    Your email address will not be published. Required fields are marked *