GSoC Proposal for "Boot many machines via BitTorrent"
Name: Yash Agarwal
Timezone: UTC +5:30
Contact Details:
- Email: (yashagarwaljpr AT gmail DOT com) (PGP Key ID: 6F234240BDEF0F60)
Web/Blog: https://yashagarwal.in
Twitter: @yash__here
- IRC: yashhere (on OFTC and freenode)
- Matrix: @im_y:matrix.org
Debian Page: https://wiki.debian.org/YashAgarwal
Salsa: https://salsa.debian.org/yashhere-guest (Nothing to show here)
Github: https://github.com/yashhere
Gitlab: https://gitlab.com/yashhere
Background: I am a final year undergraduate student of Computer Science and Engineering at National Institute of Technology, Calicut, India. My first encounter with GNU/Linux was in my second year of undergraduate course. I instantly fell in love with it. I have tried a lot of GNU/Linux distributions including but not limited to Ubuntu, Arch Linux, Gentoo, NixOS, Linux Mint, and Debian Sid. My introduction to the open source community was through FOSS club of my college. I also maintain a few open source hobby projects on Github. I am the in-charge of the FOSS club of my college and led the organizing team of FOSSMeet'18. I learned a lot about the Debian project in FOSSMeet, as we had a dedicated Debian track during the event, where we had one talk about the Debian project, a workshop about Debian packaging followed by a Debian packaging hackathon.
Why me: I heard about GSoC three years back. I was not very good in programming or Computer Science related stuff back then. Every year, I used to think that I will apply for GSoC this year. However, then, in the end, my fear of failure pulled me back always. However, this year is different. Now I have enough confidence, knowledge, and experience to work on this GSoC project and I am confident that I can complete this project. I worked hard to overcome my fear and built some strong technical skills in last two years, which are well suited for a project of this type.
Hardware/Software:
Hardware Configuration: Intel 6th generation processor with 8GB of RAM.
OS: Ubuntu 16.04 with i3wm. A docker image of Debian Sid for Debian related contributions.
Editor: I try to use Vim as my primary editor (still learning to use it). In rare cases, I use Atom or Visual Studio Code.
Internet: I have a broadband connection with 2 MBps speed. In case the Internet does not work, I can use a 4G mobile hotspot for my work.
Project title: Boot many machines via BitTorrent
Project details: The network bandwidth limitations always become a bottleneck in anything related to network booting, when multiple clients are involved. ?BootTorrent aims to improve this situation with the help of amazing BitTorrent protocol. It aims to achieve nearly linear speeds for downloading an operating system image on multiple clients at once with the help of BitTorrent. The goal of this project is to package the existing ?BootTorrent script into a well tested Debian package and to develop a GUI to facilitate the user experience in the selection of desired Operating System's boot-image. We will also be working on integrating ?BootTorrent into LTSP project so that it can be used on thin-clients.
Synopsis: The primary goal of this project is to make a Debian package for the ?BootTorrent script and integrate ?BootTorrent in the LTSP as a component. A GUI will also be implemented which will show the users a list of available operating system images so that the users can select any operating system boot image to install or simply run on thin-client.
Benefits to Debian: This project, when packaged into Debian, will provide system administrators, a simple and intuitive way to install or simply run operating systems on multiple host systems simultaneously. As Debian is already a preferred choice as a Server OS among system administrators, packaging ?BootTorrent into Debian will undoubtedly be very useful for all the community members. One other deliverable of this project is to implement an LTSP component to integrate ?BootTorrent into LTSP project. That will also help Debian users in setting up thin-clients from their Debian server.
Deliverables:
- Develop a GUI (both server and client side)
- The client-side GUI will be used to download desired OS boot images from the available seeders. A default boot image will be selected on timeout in case of user inactivity.
- The server side GUI will be used to manage the OS boot-images available on the server. It can also be used to control the LTSP server configuration in case of LTSP thin-clients.
Package the existing ?BootTorrent shell script to a Debian package
Develop a component for LTSP project to integrate the ?BootTorrent script into it.
- Develop a GUI (both server and client side)
Project schedule: This schedule is an estimate, as I do not know what issues I will have to face while working on the project. However, I will try to stick to these dates as much as possible.
Pre Community Bonding Period(before April 23): I will not be able to do anything before community bonding period as my final exams are scheduled from 11th April to 23rd April. Before the exams, I will be busy with course projects and preparation for the exams.
Community Bonding Period(April 23 to May 14): I will not be able to do much till 4th May, as after exams, I will have to submit my undergraduate thesis, and I need time to prepare for that. After 4th May, I am completely free. My goals for this time are:
- Get familiar with the best practices of packaging for Debian.
- Communicate with the community about the Debian packaging and learn from their experience about packaging and ask their views about the plan of action.
- Learn more about LTSP project in general, e.g., how to setup thin-clients.
Communicate with LTSP community about the plan of action to integrate ?BootTorrent into LTSP.
- Familiarize with the coding conventions used in the Debian and LTSP project.
Week 1(May 14 - May 21):
Understand the working of the ?BootTorrent script and try to test it with the help of a network of a few virtual machines. (My mentor(s) says that it might not be possible, but I would like to try). This exercise will be useful during the implementation of GUI. The mentor will help with a "testing lab" of a few real machines.
Experiment with ncurses and learn to program GUIs in it.
- Simultaneously read more about packaging in Debian.
Week 2(May 21 - May 28):
- Discuss the design of GUIs with the mentor(s), with the help of some mockups probably.
- Start implementing the server side GUI
Week 3(May 28 - June 4):
- Start implementing the client side GUI to be presented to the user, where she will be able to select the OS boot image that is to be installed or simply run in case of LTSP thin-client.
- If the mentor(s) has finished translating the document, then start writing a man page for the package.
Week 4(June 4 - June 11):
- (Buffer Period) Catch up with any work/bugs left from previous weeks.
Thoroughly test the new ?BootTorrent script with the GUIs.
- Clean up the code generated till now.
Submitting work done till now for the first evaluation.
Week 5(June 11 - June 18):
Week 6 & 7(June 18 - July 2):
Implement the ?BootTorrent component for LTSP.
- Write documentation for the component.
Week 8(July 2 - July 9):
- (Buffer Period) Catch up with any work/bugs left from previous weeks.
- Clean up the code generated till now.
Week 9(July 9 - July 16):
Submitting work done for the second evaluation.
Week 10(July 16 - July 23):
- (Buffer Period) Catch up with any work/bugs left from previous weeks.
- Ask the community for the review of the work done and discuss with the mentor(s) about the improvements suggested by the community.
Week 11(July 23 - July 30):
- Make changes according to the feedback from the mentor(s) and the community.
Testing phase, thoroughly test all the implemented packages and components.
Week 12(July 30 - August 6):
Testing phase.
- (Buffer Period) Catch up with any work left from previous weeks.
- Refine the code to make it more presentable. Add final touches to the documentation, and ready the project for submission.
Week 13(August 6 - August 14): Pencils Down
- Prepare a final report of the work done.
Submitting finalized tested code for the final evaluation.
- Prepare a final report of the work done.
Post GSoC 2018:
- Continue maintaining the Debian packages and work with the mentor(s) to improve the tool.
- Provide support to the community by clarifying their queries related to the tool.
Note: I am supposed to join at my first job on August 1. I have prepared the timeline, such that major portion of work is finished before that date. I will continue working on the project, but the time devoted to it will reduce to 3-4 hours.
Communication:
- I will be available on the IRC/Matrix and the mail during the daytime.
- I will be regularly reporting to my mentor(s) about progress about the project and problems faced by me.
- I am planning to write weekly blog posts about my progress on the project.
- Weekly progress updates will be sent to the mailing list for community's feedback.
Exams and other commitments: The project starts as soon as my B.Tech ends. So I am free, and I do not have any commitment for the rest of the summer.
Other summer plans: No plans as of now.
Why Debian?: I am using Debian for last one year. It has been such a nice experience. Not just the technical part of Debian, but its ideology, culture, community and the passionate people, all have contributed in building my views about the free software. Debian has been the single most important reason, that I have a clear understanding of why free software is necessary?. Debian's philosophies have inspired me to become a strong supporter of Free software. Probably I will take many more years to understand Free Software philosophy properly, but Debian has certainly put me on the right path.
My previous Debian contributions:
https://qa.debian.org/developer.php?login=yashagarwaljpr@gmail.com
https://qa.debian.org/developer.php?login=bansaly26@gmail.com
I developed many python scripts during last one year. However, they are not relevant to this project. All those projects are available on my ?GitHub profile.
Are you applying for other projects in SoC? No. Just this one.