I recently gave a presentation over Fedora Infrastructure to the Sam Houston Association for Computer Scientists (Sam Houston State University student organization for the CS department) and I had quite a bit of fun with it (though some of the audience seemed a little overwhelmed as they are college students and this is a bit enterprise level for them, but I think it was very important to introduce such a system to them). I appreciate the Fedora Infrastructure in a big way because being a systems administrator is how I pay the bills and I have an incredible appreciation for what the Fedora Infrastructure team does on a daily basis to keep Fedora as a whole working smoothly.
I started out in a large class room with a big white board and a projector hooked up to my Fedora 10 (Xfce Spin) powered laptop. With dry erase marker in hand I began to boggle the student body's minds. Here is a brief overview of what I covered. (It's not entirely brief, but I covered a LOT of material in the hour I spoke so I tried to sum up where I was able in my Ambassador Report)
- What is infrastructure? -> Infrastructure in terms of fedora is a series of integrated tools that drive fedora forward and creating an extremely powerful development environment.
- Why does infrastructure matter? -> Infrastructure matters because without it the development cycle would largely be chaotic, with it we can bring procedure and structure.
- Fedora Infrastructure Team has a motto that is posted in the topic line of their irc channel, it is "We run the servers that run Fedora" and this is largely true because without the infrastructure, not much happens. The infrastructure team, just as the development team, is made up of volunteers who are willing to contribute their time towards the greater good of the project as a whole.
- Core Components of Infrastructure -> FedoraHosted, Koji, Bodhi, BugZilla (I felt this deserved inclusion even though its not managed by Fedora Infrastructure team), Fedora Account System, Package Database, Mirror Manager, Smolt, Planet, Fedora People. (I completely forgot fedora-cvs in my slides but there was a white board on the wall that I was drawing how the entire Infrastructure fit together and was able to add it on the fly.)
- What does it mean to me? -> As a developer, contributor, or even just as a user these are the components that are relied upon to keep everything functioning. We need a build system for new packages, we need an update system, we need a bug tracker, we need a place for new packages to be submitted, we need web space for miscellaneous Fedora work including but not limited to the new package review request procedures. This makes it all possible.
- Fedora Hosted -> What would be considered "upstream", this part of the Infrastructure allows developers to host their project with a ticket tracking system, a version control system, and a wiki. Each piece is extremely useful for a collaborative development environment and offers the developers choice in cvs, bzr, svn, git, or hg.
- Fedora CVS -> I know I don't have a slide on this, many apologies to all, I really can't believe I did it, but I did cover it. This is the place where packagers upload packages for inclusion into Fedora, package patches are stored here, and builds are spawned from here.
- Koji -> If you're a packager then this is an element you will get quite cozy with, it provides a build system to submit packages to. Koji offers a web front end that will allow for yourself and others to monitor the status of your build, the logs, obtain the resulting package or source package, also allows for what are called "chain builds" (I went into a quick overview of this on the board), and offers a grounds for the package to be built on multiple architectures in one wonderfully automated swoop.
- Bodhi -> Provides for an update management interface, integrates with bugzilla, will push based on karma, allows for tagging of update type and can recommend reboot for users who use PackageKit. Also provides statistics on updates. This is the system that pushes out to the mirrors.
- Bugzilla -> Place to file a bug against any component of Fedora, it allows for keeping all related parties up to date on current happenings of a bug.
- Fedora Account System -> Where so much magic happens its amazing, this is truly where the integration of the entire system comes to light. When you create a Fedora Account you are able to be granted privileges to any other component of the Infrastructure. The Account system will keep track of user information, group memberships, permissions, security keys, among other useful information.
- Package Database -> This is not only a user searchable database for those on the web, it is also a web based management interface for access to different packages. It ties in information with fedora-cvs, bodhi, koji, and bugzilla as they pertain to the package. This is a wealth of information that I've never experienced in other development environments.
- Mirror Manager -> Package updates are pushed through here, mirrors are literally managed (name kinda implied that one) and it provides a quite impressive management interface to those who want to run a mirror of their own either public or private and fine grained choice of what "branches" of the repositories to host.
- Smolt -> Statistical accumulation of hardware information. I personally think this is quite unique in the sense that anyone can go and check what hardware is popular and from what vendor which I can only imagine to be valuable information to those who develop kernel and system level components of the GNU/Linux platform and most notably for Fedora.
- Planet Fedora -> Aggregate blog posting, great place to get news on what is currently happening in the Fedora world (or planet if you prefer).
- Fedora People -> This is where contributors can post whatever they need in a web accessible location for current work, no matter if it is documentation, art, a package, or other piece of the grand Fedora puzzle. This is the place for it.
- How is it all developed? In an open source environment, by the community, in a collaborative and innovative manner... just as it should be.
- Technologies used to develop the Infrastructure -> Python, TurboGears, Kid, Genshi, SQLAlchemy and Cheetah.
Slides available here.