Hello, I'm 4th-year student of Belgorod State University, department of Computer Sciences and Telecommunications. Unix user since 2006, run my own NetBSD server since 2010. I have good skills in shell programming (POSIX/bash), C, Perl. Also I known some Lua, Tcl, Python and Flex/Bison. For this project I have skill in installing NetBSD without sysinst, installing to complex partitions configuration(LVM,CGD...); also I have my i386 testbed to make all needed checks and experiments. Here is my proposal for "Sysinst enhancements". Any comments are welcome. About the project ----------------- The main goal of the project is to add to NetBSD installer (sysinst) ability to install system to GPT-ed, LVM-ed, encrypted disks, RAIDs and to disk images (vnconfig). Also there are additional goals: improve sysinst usability and rewrite some utilities for more code sharing with sysinst. Traditional partitioning format (MBR) doesn't support large HDDs currently in use. Problem fixing by goes to GPT, but there is some barriers to use GPT in NetBSD: installing to GPT-partitioned disk require much more skills and free time to installing by hand. Current disk tools are rather hard to use, and partition names may confuse user. Anything aforesaid actual also for CGD, LVM and RAID, except that these technologies in most cases needed by experienced users and system administrators, who can manually configure all that needed. Nevertheless implementing appropriate features in sysinst (together with planned automated install support) may save many time and nerves for user. Most stages of install process can be automatized by advanced user in simple shell script, except disk partitioning since it require attention and manual work. Also sysint have a bit little defects in usability. In this direction I'm planning to do work including: splitting all installation process to separate steps and adding ability to run some step independently i.e. disk partitioning or extracting tar-files (useful when /targetroot already mounted by hand), add menu back option, improve network configuration dialog. If the time will permit (or after GSoC), it would be also possible to implement some additional useful features such as combined CD/USB Live/install image, support for install binary packages during OS install procedure, install thought ssh without monitor and keyboard and etc. Deliverables of the project --------------------------- 1. A set of patches for sysinst to implement GPT, LVM, RAIDFrame support (mbalmer's code merging expected); 2. Patches that divide gpt(8) code into two parts: core functions (backend) and /sbin/gpt (frontend). That's will be useful for code share; 3. (probably, if time will allow) Patches to gpt(8), fdisk(8), disklabel(8), sunlabel(8) and sysinst to share code into one library that contains all needed partitioning functions; 4. (probably) Patches to gpt and lvm rc-scripts that add ability to unravel complex dependences; 5. Small patches to fix usability issues; 6. Patches for sysinst language files (that needs review of people who speak this languages). Milestones and schedule ----------------------- 1. April 11 - May 20: inclusion * Familiarizing with sysinst architecture (and also menuc); * Familiarizing with GPT, LVM, RAIDFrame code; * Familiarizing with Anita; * Getting familiar with installation image building processes; * Discussing the ways of implementation with mentor; * Possible early coding start. 2. May 21 - June 10: * (probably) Dividing gpt(8) to frontend and backend; * Fixing usability issues and other small things; * Also this is university exams time for me. 3. June 11 - July 16: main work * Implementing menus and all needed hooks for cgdconfig(8), lvm(8), raidctl(8). Menus should include ability to work with >1 HDDs; * Refactore sysinst code to unhitch mbr/disklabel code; * Work with gpt(8): divide it to backend and frontend or just import needed code to sysinst; * Milestone: have redesigned menu and basic support for gpt, lvm, raid, cgd. 4. July 17 - August 1: the rest of the work * Fixing boot in difficult cases with gpt/lvm dependences; * (probably) Work with disklabel(8), fdisk(8) and etc to share code; * Documenting. 5. August 1 - August 12: testing stage * Reviewing and patching Anita to support new sysinst features; * Testing on simple configurations with GPT, LVM, RAID, CGD, VND: 1-3 HDDs without cases like installation into encrypted image; * Testing on complex configurations, for example: a lot of HDDs with GPT and MBR, some in raid, many partitions, LVM on some partitions, CGD on some LVs; * Testing on standard configurations - regresses searching - last because all must work after previous bugfixes. 6. August 13 - August 22: final stage * Delivery; * Reserved time (may be used for implement other ideas or in case of lag from the schedule). All work will be accessible though regular-updated public VCS. I'm planning continue my work with NetBSD installer after GSoC. That include "Add binary pkg install to sysinst" project if it will remain actual. Also I have some other plans including: * Creating DVD and USB flash live/install combined images; * Implementing ability to install pkgsrc from sysinst; * Implementing install scripts support for automated install; * Researching into using bsdinstall as NetBSD installer (probably). Appendix 1: New disk editor mock-up examples -------------------------------------------- Pic 0. Initial screen. There is 2 small HDDs with MBR, one large empty HDD and one flash card. ============================================================================== Disk editor. All disks, partitions, LVM, RAID displayed there. Create MBR or GPT, then create partitions. Press Z to get more help. +-----------------+ wd0 (MBR) - 120.0G, Hitachi HTS54321 | Default install | wd1 (LVM PV) - 20.0G, Seagate ST720011 | Drive geometry | > wd2 (Empty) - 2500.0G, WesternDigital WD015EARS | Create MBR | sd0 (MBR) - 8.0G, VERBATIM STORE N GO |>Create GPT< | slice 1. start: 1M size: 8191M type:| Create LVM PV | | Create CGD | w: Change size units (MB/sectors/cylinders) | Create RAID | x: Done +-----------------+ ============================================================================== Pic 1. Create two slices on wd0, one will be NetBSD, that contains 'a'(/) and 'b'(swap), other is LVM PV. Reuse all wd1 for LVM PV. Also create two slices on wd2 one for LVM; create FAT on sd0. ============================================================================== Disk editor. All disks, partitions, LVM, RAID displayed there. Create MBR or GPT, then create partitions. Press Z to get more help. wd0 (MBR) - 120.0G, Hitachi HTS54321 slice 1. start: 1M size: 20480M type: NetBSD mnt: a: start: 1M size: 2048M type: FFS mnt: / b: start: 2049M size: 512M type: swap mnt: Create partition (12 free)... slice 2. start: 20482M size: 81920M type: LVM PV mnt: unused. start: 81923M size: 40959M wd1 (LVM PV) - 20.0G, Seagate ST720011 wd2 (GPT) - 2500.0G, Western Digital WD015EARS part. 1. start: 1M size: 30000M type: NTFS mnt: /mnt/winnt part. 2. start: 30002M size: 2529998M type: LVM PV mnt: > sd0 (MBR) - 8.0G, VERBATIM STORE N GO slice 1. start: 1M size: 8191M type: FAT32 mnt: LVM - 2550.0G part. 1. start: 1M size: 2600960M type: NetBSD mnt: /home part. 2. start: 2600961M size: 10239M type: CGD #0 mnt: CGD #0 - 10239M part. 1. start: 1M size: 10237M type: FFS mnt: /var w: Change size units (MB/sectors/cylinders) x: Done ============================================================================== Same scheme for RAID and for VND images. For VND you need to select partition and in actions-menu enter image size and patch where this images will be created. Then image will be added to main screen as a normal disk. Also available feature to use entire disk and create default partitions deal. P.S. The criticism is welcomed. With best regards, Eugene