This is an old revision of the document!
====== Pravin Shinde: boot.kernel.org - Universal remote network booting for the masses ====== This project is about making the network boot process available to users on a large scale. The project aims to enable the creation of a site (say, boot.kernel.org) which can be used by any person in multiple ways to get a customized system image, hardware diagnostics, utilities, security and rescue tools and network installation images. This can be done either through any web browser by creating and downloading custom images, or with tools like PXElinux which can contact boot.kernel.org at boot time over HTTP for fetching a bootable image. The reasoning behind this project is to provide one stop location for user where he can find and use most of the diagnostic, rescue tools and various system images without any need for creation of dedicated media or installation. It will allow users to try out various systems in painless way. This project is based on "PXE Knife" which let the user select and boot from various system utilities using PXE. Currently PXE Knife works over TFTP. The first step of this project will be to extend PXE Knife to work over HTTP. This project goes beyond "PXE Knife" by supporting the hosting of actual applications on centralized server and giving out only small stub to user which will boot the system and bring it to network. Then the stub will contact central server for any application/utilities. This way, initial download time is significantly reduced and all applications can be always kept uptodate at central location of server. This way, user will always get most updated and *working* application whenever he needs. Next immediate step will be about customizing PXELinux to use boot.linux.org. This customized PXEClient is nothing but regular PXELinux with an embedded script that sets the "next-server" to boot.kernel.org regardless of what the local DHCP server provides. This way, any user can use boot.linux.org without having to (re)configure a dhcp server. Machines with static IP addresses can be handled by providing a separate embedded script which can be generated at boot.kernel.org by providing an IP-address, router and DNS server address corresponding to the user's machine. These values will be hard-coded into the embedded script which will be bundled with PXEClient handed to the user. User will be provided with web-interface at boot.linux.org where he will feed in his network setting, and customized PXEClient embedded script for user's network will be automatically generated. These customized PXElinux clients will start the machine and contact boot.kernel.org. boot.kernel.org will return a Syslinux image with a menu providing the user with a list of various systems and tools/utilities he/she wishes to select for his/her system. Once the user makes his/her choices, boot.linux.org will create a new system image by bundling together a precompiled kernel, a prepared initramfs and appending the selected tool/packages/stubs to it. This customized system image returned by boot.linux.org will be used by the machine to boot. Syslinux will be used to provide the user with an interface where he/she can select which kernel and which tools he wants to bundle into the image. Depending on the selection made by the user, an image will be dynamically generated and made available to him/her. The default interface will be using vesamenu.c32 giving simple navigation, and expert mode interface can be provided using menu.c32 giving more flexibility. The image generated by boot.kernel.org will consist of two major components: the kernel itself and initramfs. The kernel portion will be common for all system images generated for a particular architecture. Most of the device drivers will be compiled as modules to reduce the hardware dependence and size of the kernel. These kernel modules will be part of the initramfs component. The base system kernel will be designed on the lines of "Ultimate boot CD" or "Knoppix" which are able to boot on most commodity hardware. But root filesystem will be entirely based on initramfs and hence self sufficient for execution. To keep the size of the system image resonably small, base system will only provide minimal functionality. However, the user will be provided with options to add any applications or utilities he/she wants to bundle in the image. The application selected by users will be appended to initramfs base system by exploiting the ability to append into CPIO as one more layer. This will provide semi-transparency to users as when user selects any appliction/tool, all the dependencies will be precomputed. After accepting the selection from a user's side, boot.kernel.org will dynamically append the applications selected to the base initramfs system. It will also add any other appliction/library needed for selected application to work. As all the tools which will be will be pre-configured and kept ready for deployment, only appending the binaries to the initramfs will be needed (in addition to changes in configuration of base system, if required). As no compilation is involved, this step can be done with an acceptable response time. This system can be also extended beyond providing basic rescue facilities by providing the ability to perform a network installation. Initially, the base system provided to the user will boot the machine, after which the network installation is kickstarted using the repository available on boot.kernel.org. By providing central repository and custom boot images Network installtion can be made possible. Most distributions come with network boot support over TFTP. But with small modifications these destributions can also support booting and installation over HTTP. ===== Project Plan ===== ==== Summary ==== ==== Outline ==== ==== Milestones and Timeline ====