Student Application

* Name Roberto Vannucci

* Contact/Email: roberto.vann.95 [at Gmail]

* Background: I am a student of Computer Science at the University Of Udine (Italy). I have started coding during the high school and I soon started to love it. I have a good knowledge of C, C++, Java programming languages, as well as LISP and Scheme, Python and Ruby scripting languages, PHP, HTML, CSS, Javascript/ECMAscript, jQuery web languages and I also know very well the SQL database language. I have my personal website (hosted on my home Ubuntu Server which I will soon migrate to Debian or Arch Linux or CentOS). I have been using Linux for years, the first distro I installed on my pc was Ubuntu 7.04, then few years later I switched to Kubuntu and about one year I go I switched to Debian. During this period I also tried other distros like Arch Linux, which I also liked. So I can say that I am familiar with Debian O/S, even in the server version (without DE). I currently also manage a couple of Debian-based servers and few Debian/Ubuntu clients for my family and friends. I also contributed to the diffusion of Linux suggesting to try and install (x)ubuntu to any friend of mine who had problems with Microsoft Windows. I have also worked on some home automation projects using a Raspberry Pi with the Raspbian OS (derivative of Debian) and the Python programming language. I think I am the best person to work on this project because of my skills, both in web development and in Debian usage and management and I would love to work on this project to enlarge my knowledge of Linux and of the Open Source community.

* Project title Automated configuration of packaged web applications

* Project link on this Wiki Link

* Project details: The goal is to create web based application which helps users to install other web applications on Debian based servers.

The application will provide an user-friendly interface where the users can select a web application and install in easily, without to type complex commands on the command line. The application will be based on two parts:

- The first part will be the daemon which installs and configures packages and will rely on chef (or eventually chef-solo); this daemon will most probably be written in ruby, to integrate well with chef, or in C++, for optimization. This is what I call the core of the applications;

- Then I will build a web interface to interact with the daemon. It will be written using some frameworks (like Bootstrap or similar) which will eventually allow the application to be responsive and used on mobile devices, if this will be necessary. It will use APIs provided by the daemon and provide the tool to the users. I have drawed a simple example of what my idea of the web interface is. Please note that it's just a sketch and is not perfect. Sketch

- The application will have some modules, one for each web application it should install. One module will be a chef cookbook with other few files attached, such as metadata for the core application). These modules will be easy to build and to add to the application. For this project I will build few modules for two different kind of applications (PHP and Ruby on Rails) in order to provide examples to future maintainers of the project;

- I will create one module repository, where the application can connect to download the modules for installing the web applications; I suppose to build it using PHP and other web technologies, such as JSON for the APIs.

- An other part of the project will be supporting upgrades for web applications. The problem is that, when upgrading a web application most configuration files are lost. The configuration files will need to be “externalized” from the package itself, using the /etc/<appname>/.conf.d/ system. I suppose to do this by submitting patches to the web applications organizations or (better) to Debian maintainers.

- All the code will be well documented and written using standards which will make it easy to modify for other users and easy to maintain.

- Please note that I am willing to continue to maintain the project, correct bugs and help with the build system even after the Google Summer of Code program.

* Synopsis: - Build a web application installer and configurer based on chef using modules; - build a module repository; - build modules for WordPress, Drupal (PHP), Redmine (Ruby on Rails). - build some modules templates so that other users can write modules for the application.

* Benefits to Debian It will help Debian users to install web based applications without needing the command line based configuration, e.g. the databases creation, the configuration files creation etc.

* Deliverables: web application installer, module repository, web application installer modules, modules templates.

* Project schedule:

1. Community Bounding Period:

Know better the community, know better the Debian packaging system, discuss with the menthors for the details of the project, document about chef, documenting about dpkg, apt and deb packages. Documenting about some common web applications in order to be able to write patch for the conf files “externalization”.

2. First part: main unit Weeks 1-2

Configuring the web server using a customized lighttpd, writing the structure of the web pages (PHP, HTML5) , designing of the web pages (CSS3). The application will not rely to databases, only to files. Develop the core application, relying on chef. Document the relative code.

3. Second part: repository Weeks 3-4

Create one online repository where to store the modules for the application. It will provide web APIs to search for one module and provide link for the download. The application will download the required modules server-side and put them inside the modules folder. Provide easy front-end for adding modules to the repository.

3. Third part: modules Weeks 5-7

Create few modules for different technologies, in order to have samples to easily create new modules later. I will do this using existente chef cookbooks (if any), adding custom recipes and editing them. Modules I suppose to write: WordPress, Drupal, Redmine. The number and quality of realized modules may change during the projects, and will be agreed with the project menthors.

4. Last part : upgrade patch Weeks 8-10

For some web applications, write and submit a patch which externalizes the config files inside /etc/appname.conf.d/ folder so that they are not lost during package upgrades. Probably the applications I will patch are the same I will write modules for, but this can't be sure yet, will be discussed better during the project.

5. Test, bugs correction Weeks 11-12

Even though I will test every feature while writing it, I will dedicate this period for various testing: on variuos platforms, on different installations and versions of Debian (and eventually derivatives). The goal is to have clean, correct and efficient code to submit.

* Exams and other commitments: I am having few exams during this period, but nothing difficult and they are at the beginning of the coding period, so they won't take much time.

* Other summer plans: No, I have no other plan for the summer. I can work 40 or more hours per week to get the project done.

* Why Debian?: I choose Debian because I'm using it as my main O/S and I had been working on Ubuntu for years. I also choosed it to improve my knowledge of this O/S.

* Are you applying for other projects in GSoC? No I am not applying for any other project in GSoC

* Warm Up tasks: I am attaching the warm up tasks chef cookbooks requested in the project page.