User:Skvidal/BuildSystem

From FedoraProject

< User:Skvidal(Difference between revisions)
Jump to: navigation, search
Line 9: Line 9:
 
* maintain existing build capabilities in koji (don't break koji)
 
* maintain existing build capabilities in koji (don't break koji)
 
* maintain compatibility of our tools (don't break fedpkg)
 
* maintain compatibility of our tools (don't break fedpkg)
* create a fedora-contributor-accessible space where arbitrary pkgs
+
* create a fedora-contributor-accessible space where arbitrary pkgs from arbitrary repos, with arbitrary dependencies can be built against fedora securely and consistently. (coprs)
  from arbitrary repos, with arbitrary dependencies can be built
+
* overhaul how we setup and maintain our buildboxes so we can redeploy these systems quickly and scale up during high demand. (builder git repo)
  against fedora securely and consistently. (coprs)
+
* overhaul how we setup and maintain our buildboxes so we can  
+
  redeploy these systems quickly and scale up during high demand.
+
  (builder git repo)
+
  
  
Line 22: Line 18:
  
 
=== Things done or mostly done ===
 
=== Things done or mostly done ===
  Over the last 4 or 5 months I've been working on a series of tools
+
  Over the last 4 or 5 months I've been working on a series of tools to achieve our goals
to achieve our goals
+
  
==== Changes to mock ====
+
==== Changes to mock ====
  * added mockchain to mock - implements recursive chain builds and
+
* added mockchain to mock - implements recursive chain builds and
    creates the mock config from base configs adding arbitrary user
+
creates the mock config from base configs adding arbitrary user repos. http://git.fedorahosted.org/cgit/mock.git/tree/py/mockchain.py http://skvidal.wordpress.com/2012/04/20/mockchain-use-cases-and-examples/
    repos. http://git.fedorahosted.org/cgit/mock.git/tree/py/mockchain.py
+
* added plugin to mock to output the chroot system state as well as set of pkgs available in repositories to yum/mock at the time
            http://skvidal.wordpress.com/2012/04/20/mockchain-use-cases-and-examples/
+
of the build. Important criteria for solving build failures due to missing build requirements.  
  * added plugin to mock to output the chroot system state as well
+
    as set of pkgs available in repositories to yum/mock at the time
+
    of the build. Important criteria for solving build failures due
+
    to missing build requirements.  
+
  
 
==== Changes to builders ====
 
==== Changes to builders ====
  * reinstall and vm-ize all of our existing builder hw in the bladecenters
+
* reinstall and vm-ize all of our existing builder hw in the bladecenters
  * setup newbuilder process using libvirtd and ansible to make our builder
+
* setup newbuilder process using libvirtd and ansible to make our builder deployment be trivial and consistent.
    deployment be trivial and consistent.
+
 
   
 
   
  
 
=== Work Started ===
 
=== Work Started ===
 
==== Changes to our infrastructure ====
 
==== Changes to our infrastructure ====
  preparing for our private cloud deployment inside phx2. This should
+
preparing for our private cloud deployment inside phx2. This should allow us to create arbitrary and COMPLETELY isolated instances on
  allow us to create arbitrary and COMPLETELY isolated instances on
+
demand without a concern for where to deploy them and if we have sufficient resources (or if we have a way of paying for them :)
  demand without a concern for where to deploy them and if we have
+
  sufficient resources (or if we have a way of paying for them :)
+
  
 
==== Coprs web interface ====
 
==== Coprs web interface ====
  For user/contributors to submit urls to srpms and build repos
+
For user/contributors to submit urls to srpms and build repos and have the pkgs from the srpm urls built (recursively) against
  and have the pkgs from the srpm urls built (recursively) against
+
each other and the packages in the build repos. I've started the coprs interface as a test case for trying out flask. I have a limited  
  each other and the packages in the build repos. I've started the coprs
+
interface and the data saving out to a db. This is insufficient and incomplete currently.
  interface as a test case for trying out flask. I have a limited  
+
  interface and the data saving out to a db. This is insufficient and  
+
  incomplete currently.
+
  
 
===== mockremote/ftbfs tools ====
 
===== mockremote/ftbfs tools ====
  Main control job for spawning arbitrary jobs on remote systems.  
+
Main control job for spawning arbitrary jobs on remote systems.  
 
+
  * mockremote is a single buildsystem mechanism to parcel out jobs
+
    one at a time and maintain a local repository for them to draw
+
    build requirements from.
+
 
+
  * ftbfs - multi-builder/multijob builder to attempt to rebuild all
+
    of fedora distribution packages. This works but needs refactoring
+
    to scale to hundreds of builder processes. It also has a couple of
+
    race issues creating a local repo for the whole process. Tested
+
    on part of rawhide (2500ish pkgs) with good results.
+
 
+
  
 +
* mockremote is a single buildsystem mechanism to parcel out jobs one at a time and maintain a local repository for them to draw build requirements from.
 +
* ftbfs - multi-builder/multijob builder to attempt to rebuild all  of fedora distribution packages. This works but needs refactoring to scale to hundreds of builder processes. It also has a couple of race issues creating a local repo for the whole process. Tested on part of rawhide (2500ish pkgs) with good results.
  
  
Line 75: Line 51:
  
 
==== Changes to koji ====
 
==== Changes to koji ====
  Script to run in kojira to monitor builders and tasks
+
Script to run in kojira to monitor builders and tasks which have not checked in at their regular schedule. This would check for abandoned/unfinished jobs and free them back up for another koji builder to take up. This will allow us to allocate/deallocate builders without having to worry about:
    which have not checked in at their regular schedule. This would check
+
#. disabling the builder in koji (finding a kojiadmin)
    for abandoned/unfinished jobs and free them back up for another koji
+
#. if a build is currently running on any given host
    builder to take up. This will allow us to allocate/deallocate  
+
    builders without having to worry about:
+
      #. disabling the builder in koji (finding a kojiadmin)
+
      #. if a build is currently running on any given host
+
  
 
==== Storage of COPRS/BUILDS ====
 
==== Storage of COPRS/BUILDS ====
  Figure out a storage destination for the results of any of these jobs. Right now we don't have a destination in mind for where these
+
Figure out a storage destination for the results of any of these jobs. Right now we don't have a destination in mind for where these
  pkgs should go. Fedorapeople.org was suggested but it is a difficult fit to get files to that system and make sure they are accessible
+
pkgs should go. Fedorapeople.org was suggested but it is a difficult fit to get files to that system and make sure they are accessible
  and owned by the right users.
+
and owned by the right users.
  
 
==== Maintenance and harvesting/clean up of all of the above ====
 
==== Maintenance and harvesting/clean up of all of the above ====
  * builds/coprs
+
* builds/coprs
  * repos
+
* repos
  * builders spawned in scale-up
+
* builders spawned in scale-up
  * ftbfs dumps.
+
* ftbfs dumps.
 +
* more? I'm sure.

Revision as of 22:35, 26 July 2012

Contents

Fedora Build System - beyond building the distro

Summary

Right now the fedora build system is focused solely on building the packages for the fedora distribution. It has little or no support for building any other arbitrary package set nor for non-fedora (but free software things).

Our goals

  • maintain existing build capabilities in koji (don't break koji)
  • maintain compatibility of our tools (don't break fedpkg)
  • create a fedora-contributor-accessible space where arbitrary pkgs from arbitrary repos, with arbitrary dependencies can be built against fedora securely and consistently. (coprs)
  • overhaul how we setup and maintain our buildboxes so we can redeploy these systems quickly and scale up during high demand. (builder git repo)


How we get there

There are a lot of areas needed to make this all come together. I broke the process into a series of smaller components such that we had something useful at each step and could assemble them to become the whole system, like voltron.

Things done or mostly done

Over the last 4 or 5 months I've been working on a series of tools to achieve our goals

Changes to mock

  • added mockchain to mock - implements recursive chain builds and

creates the mock config from base configs adding arbitrary user repos. http://git.fedorahosted.org/cgit/mock.git/tree/py/mockchain.py http://skvidal.wordpress.com/2012/04/20/mockchain-use-cases-and-examples/

  • added plugin to mock to output the chroot system state as well as set of pkgs available in repositories to yum/mock at the time

of the build. Important criteria for solving build failures due to missing build requirements.

Changes to builders

  • reinstall and vm-ize all of our existing builder hw in the bladecenters
  • setup newbuilder process using libvirtd and ansible to make our builder deployment be trivial and consistent.


Work Started

Changes to our infrastructure

preparing for our private cloud deployment inside phx2. This should allow us to create arbitrary and COMPLETELY isolated instances on demand without a concern for where to deploy them and if we have sufficient resources (or if we have a way of paying for them :)

Coprs web interface

For user/contributors to submit urls to srpms and build repos and have the pkgs from the srpm urls built (recursively) against each other and the packages in the build repos. I've started the coprs interface as a test case for trying out flask. I have a limited interface and the data saving out to a db. This is insufficient and incomplete currently.

= mockremote/ftbfs tools

Main control job for spawning arbitrary jobs on remote systems.

  • mockremote is a single buildsystem mechanism to parcel out jobs one at a time and maintain a local repository for them to draw build requirements from.
  • ftbfs - multi-builder/multijob builder to attempt to rebuild all of fedora distribution packages. This works but needs refactoring to scale to hundreds of builder processes. It also has a couple of race issues creating a local repo for the whole process. Tested on part of rawhide (2500ish pkgs) with good results.


Work Needed/Not Started

Changes to koji

Script to run in kojira to monitor builders and tasks which have not checked in at their regular schedule. This would check for abandoned/unfinished jobs and free them back up for another koji builder to take up. This will allow us to allocate/deallocate builders without having to worry about:

#. disabling the builder in koji (finding a kojiadmin)
#. if a build is currently running on any given host

Storage of COPRS/BUILDS

Figure out a storage destination for the results of any of these jobs. Right now we don't have a destination in mind for where these pkgs should go. Fedorapeople.org was suggested but it is a difficult fit to get files to that system and make sure they are accessible and owned by the right users.

Maintenance and harvesting/clean up of all of the above

  • builds/coprs
  • repos
  • builders spawned in scale-up
  • ftbfs dumps.
  • more? I'm sure.