User:Proneetv/GSoC Proposal

Abstract
The aim of this project is to improve the cloud based support for Gentoo based systems and reduce the developers time in setting up the infrastructure, by adding support for building AMIs, VM images for vagrant boxes, docker-containers via puppet and setting up monitoring and testing tools like Jenkins.

Backgroud
Currently, there are no such support present in catalyst to back the production of cloud based images or for VMs. Also, while developing, setting up a scalable infrastructure is very important and there is always a need to spawn new systems depending on the use case.

Objective
The objective of the proposal is divided into three parts:

1) Release-engineering process
 * Catalyst module which would be used to build AMI (amazon machine images) and upload it directly to the AWS
 * Catalyst currently produces Gentoo stages using spec files into which I would add a feature to build AMIs in the same manner by using the spec file. In this manner, user can generate AMIs from latest stages and configure their system in whatever fashion they want without bloating there system with pregenerated stages (which have unnecessary packages). 'rich0' has very nicely blogged about how to bootstrap Gentoo on EC2 here which I would be following to write this module up inside of catalyst for which I would be using Python. User would be expected to provide their AWS related information (like region, key pair).


 * Catalyst module, backed by packer, to build Gentoo in VM friendly formats to support Vagrant machines.

2) Docker-Puppet module
 * Puppet module to spawn docker containers by basically extending puppet-docker to work with Gentoo. Currently it doesn’t support Gentoo based systems. Since, this repository supports only Debian and Red-Hat based distributions, I would explore the manifests where OS based decisions are being taken and add a support for Gentoo wherever required to make this work with Gentoo. This part of the project would involve writing manifests in Puppet.

3) Jenkins CI
 * Currently people use binaries to make it work. I would write an ebuild for building this from source and proxy maintain it for its support in future. For this to work, I would be using the source provided by Jenkins-CI here. Since, it is a Java-Maven based application and portage eclass doesn't have support for mvn, it would be required to first convert pom.xml to build.xml using mvn plugin (`mvn ant:ant`) and then using this to build with the help of java-ant eclass in portage. This part of the project would be coded up in Bash following devmanual etiquettes.

Use-cases
I have identified the following use cases for this project:
 * the releng team can build and produce latest images for supporting AWS and other services.
 * users can manage their multiple web services each into a separate container with completely independent configurations (eg: maintaining multiple wordpress sites) with the help of webapp.
 * most cloud based systems nowadays have multiple tiers where they can spawn as many instances for any service they would want to provide (for eg. web servers, db servers)
 * managing different versions of the project hooked to git
 * setting up jenkins would be easy as portage will have its support

Timeline
21st April - 19th May: Community Bonding Period
 * Discuss the initial plan with the mentor
 * Go through packer docs
 * Brush up python

19th May - 10th June: Build modules for building AMIs and VM images

11th June - 20th June: Test various aspects of the new module. Writing a series of tests to check the working of the module and trying it on AWS and Virtual box

27th June: Mid Term Evaluations

22nd June - 5th July: Start writing manifest to make the puppet-docker work with Gentoo

6th July - 25th July: Continue porting puppet-docker to work with Gentoo

25th July - 31st July: Write tests to check the working of the module on Gentoo

1st August - 15th August: Writing ebuilds for Jenkins CI support and proxy maintain it

16th August - 21st August: Finish writing documentation for each module

22nd August: Final Evaluation

Extension
(if time permits)

Writing ebuilds to build from source for Hudson CI and Graphite.

Biography
I am a sophomore from IIT Kanpur, India, studying Materials Science and Engineering. I have been into computers and programming since I first started using a Celeron PC back in 2nd grade; usually playing games or fiddling with GW-Basic which was my first experience with writing programs. I had my first experience with a Linux distro (Fedora) in 9th and since then i am into using various *nix distributions.

I have been using Gentoo from quite a while now (around 6 months) and since then I am following the Gentoo project. I have contributed ebuilds (bug #446026) and also track the bugzilla now and then. My main interest lies in experimenting different softwares/tools and learning various programming languages. I have previously worked on a personal project where I had to configure our development architecture with Puppet.

I have been participating in a lot of programming competitions and hackathons. I have won Yahoo HackU twice (2012 and 2013) and also secured 56th position out of 410 teams in the ACM ICPC Asia Regionals 2013 held at Amritapuri. I have been the secretary of Programming Club of my college where I guided my fellow mates and juniors with programming. Currently I am also an active member of Navya (local FOSS hobby group) which aims at increasing FOSS awareness.

I'm looking forward to an enjoyable summer with Google Summer of Code, and hope to become a Gentoo developer someday!

Contact info

 * Email: proneet11@gmail.com
 * IRC: proneet @ freenode
 * Github: github.com/proneetv
 * Facebook: facebook.com/proneet.verma
 * Twitter: @proneet11