#       $NetBSD: TODO,v 1.1 2014/07/26 19:30:44 dholland Exp $

Things to do ....  in no specific order.

       -- On error messages, do something to allow the user to
          see any errors from anything run by run_prog().
          Ideas suggested  maximum entropy <[email protected]>.
          are:

          #1:
               if (run_prog("foo") != 0)
                       sleep(5);

          #2:
               endwin();
               run_prog("foo");
               printf("press return to continue");
               getchar();
               initscr();

          #3: (modification of #2):

               endwin();
               if (run_prog("foo") != 0) {
                       printf("press return to continue");
                       getchar();
               }
               initscr();

          #4:

               Manually fork and exec everything, dup2 fd's 1 and 2
               onto sockets in the child, and paginate the output in
               your curses app :-)

          We currently implement a special-case variant of #1 for untarring
          release sets, since the GNU tar in 1.3 fails to report many
          errors in its exit status.

       -- "browse" for a local directory to get the
          distribution set from.  Maybe just allowing the user to shell
          out and look around is good enough (this needs more thought).

       -- check for already-mounted filesystems before install newfs.
          Abort with message.

       -- check for already-mounted filesystems before upgrade fsck.
          (ignore?)

       -- check for already-mounted filesystems before upgrade mount.
          Continue, if device mount is where we wanted it?

           (Jonathan ran into the above 3 by upgrading from a live
           system to a scratch disk.  sysinst copied the live /etc/fstab
           to the target. The upgrade failed because sysinst wanted
           to mount the active system's /usr. Could happen when a
           real upgrade aborts, even running from ramdisk root.)

       -- Handle ccd's and raid's during an upgrade.

       -- Use bootp or dhcp to get network info (hostname, domain name,
          name servers, ...)

       -- Things like having config_network()
          possibly use the information on the fixed disk instead of having
          to ask everything.

       -- Build the disktab as a profile, not a true /etc/disktab so it
          doesn't overwrite the real disktab.

       -- Have both ftp and floppy gets get the file, extract the file,
          and then remove the file before going on to the next set to
          save disk space.

       -- Set current time and date.

       -- Configure NTP servers, set NTP in rc.conf

       -- On i386 (and others) allow for storing localtime in the RTC.
          Need to patch kernel variable with offset from UTC.  Any
          other kernel variables we might want to patch as well???

       -- A little more clean-up of the run_prog suite so things work
          nicely for all ports.

       -- fix "disklabel -r -w" vs. "disklabel -w": I still don't grok why
          the  -r, and the manpage says it will lose totally on sparcs.
          Phil, was there some reason to bypass the incore label on i386?
          Can we just do "disklabel -w" everywhere?

       -- Michael bumped the in-memory disklabel struct up to 16 entries.
          Also add a runtime check in case that grows in future
          (e.g., slices).  Maybe bump to 32 entries just in case.

       -- Fix sanity-check message code. It currently gets over-written
          immediately by the following message.

       -- check for disklabel edits changing active root partition.
          reject.

       -- remove any possibly-stale ld.so.cache files from the target
          /etc after unpacking sets. Maybe just don't copy ld.so.cache
          from /etc.old?

       -- Full configuration of rc.conf?

       -- If we're doing a fresh install and there's already a label
          on the disk, maybe use that instead of the compiled-in default
          label?

       -- symlinks for /tmp (/tmp -> /var/tmp or some such)

       -- Do non-standard installs from arbitrary tar files (?)

       -- Install binary packages.  (possibly a second program
          run after installation.)

       -- Provide the user a menu to select each installation step on
          its own. Currently there's no way to repeat steps or leave
          them out. (See the Debian installer for a good example.)

       -- Allow the user to install binary snapshots available from releng.
          This could be done in the following way:
               * list the available snapshots in ftp.NetBSD.org
                 (eg.: ls /pub/NetBSD-daily/*/*/${ARCH} using ftp(1)).
               * present the user with the possible selections (handle the
                 case of zero options).
               * set the variables and install via FTP showing first the
                 FTP installation screen.