1.  More OS support:
     - Debian Etch, Lenny, Squeeze
     - SUSE Linux 10.0, 10.1
     - openSUSE 10.2
     - OpenBSD (http://people.cs.uchicago.edu/~brendan/howtos/openbsd_install/)
     - NetBSD (anita)
     - FreeBSD
     - Dragonfly BSD
     - Windows Vista, 98, 95, ME
     - RHL 5.2, 6.0, 6.1, 6.2 (only nfs installs work)
2.  Add partition support to the TDL.
3.  Add improved error logging to guest installation.  That is, if the guest
    installation fails, we want to get detailed error information out of the
    installer to find out why.  Fedora/RHEL support doing remote syslog via
    network or virtio-serial, and I also believe anaconda will dump data to
    syslog during installation, so that is one avenue to pursue.  NOTE: anaconda
    virtio-serial support does not exist until F-14.  See
    http://fedoraproject.org/wiki/Anaconda/Logging
4.  Before attempting an install, check the output_dir to make sure it will
    approximately have enough space for the output disk image.
5.  With windows from MSDN (at least 2000, maybe other versions too), the
    top-level doesn't really contain the bits you care about.  What happens is
    that there are 3 boot options on the CD: installer for Professional, Server,
    and Advanced Server.  The directory structure on the CD is something like:

    english
        win2000
            adv_server
            pro
            server

    and underneath each of (adv_server, pro, server) are the bits you care
    about.  To automate this you really need to figure out which one the user
    cares about, then copy just that subdirectory.  You'll also need to extract
    the appropriate parts of eltorito so it boots automatically, and then
    you'll also need to set i386/txtsetup.sif [SetupData]: SetupSourcePath = "\".
    See http://old.bink.nu/bootcd/
6.  Take a screen shot if some customization or generate-icicle steps time out.
7.  Try to do automatic detection of distro/version/architecture from the ISO
    that are provided to us.  That will make it so that a minimal TDL will only
    include the path to the ISO, and we can figure out the rest of the
    information.
8.  Add support for additional drivers during install (needed for Windows virtio
    support).
9.  Make "python setup.py bdist_rpm" work.  The problem is that bdist_rpm
    generates its own SPEC file based on the information in setup.py.  When it
    does this, it somehow messes up the %description (minor, probably a change
    to the setup macro), fails to create the /var/lib/oz subdirectories (which
    could be moved into setup.py as well), and also fails to find the gzipped
    man page files (which is what eventually causes the build to fail).
10. RHL 6.2 does not work via HTTP because of a bug in the installer; when
    parsing a URL passed in via "method", it fails to put a / at the beginning
    of the URL.  What this means is that when the installer goes to fetch the
    install images via "GET path/to/netstg2.img HTTP/0.9", the web server then
    returns an error.  To do a fully automated install, we need to use an ISO,
    NFS or FTP install method; I could not get FTP to work, but I did not try
    that hard.
11. RHL 6.1 fails because there is no netstg2.img available in the distribution
    I have.  Unfortunately, I have not been able to find the netstg2.img, nor an
    ISO of 6.1 to do an alternate install.  NFS may still work here.
12. RHL 6.0 fails because the kernel panics on boot:
     VFS: Cannot open root device 08:21
     Kernel panic: VFS: Unable to mount root fs on 08:21
13. Enable SELinux in enforcing mode inside of Fedora/RHEL guests.  The current
    problem with this is that prior to launching the customize step, we upload
    files like ssh keys via libguestfs.  In the default mode libguestfs uploads
    them with no SELinux context, which means reads are denied.

    Jim Meyering suggests that we add a script to the end of /etc/rc.d/rc.local
    that does a "restorecon" on the files we care about.  Then we don't need
    to worry about knowing the context in Oz; we just make it do the right
    thing.  There are two problems with this: 1) if we upload /etc/rc.d/rc.local,
    that will have the wrong context that we have to deal with, and 2) there
    is a race condition between icicle-nc checking in and this restorecon
    script finishing.  Neither problem is insurmountable, but we should make
    the effort to get this working.

14. Do preflight checks on detected bridges.  That is, if we detected the
    bridge (i.e. it was not specified by the user), then we should do some
    basic checks to make sure that we think it will work.  We should check the
    state of at least:

    /proc/sys/vm/net/ipv4/ip_forward
    /proc/sys/net/bridge/bridge-nf-call-arptables
    /proc/sys/net/bridge/bridge-nf-call-ip6tables
    /proc/sys/net/bridge/bridge-nf-call-iptables
    iptables -t filter -L -v
    iptables -t nat -L -v

15. We should add a mode where we assume the responsibility for uploading RPMs
    into the guest (via ssh) and then doing a yum localinstall on those RPMs.
16. We should add additional commands section.  In particular, we should have
    "pre" package installation and "post" package installation command
    sections.
17. Support hashes for the root password support.
18. Add a mode where we use a reverse ssh tunnel with a SOCKS proxy to
    download the packages.  This means that the packages need to be visible to
    the imagefactory machine, but not necessarily to the instance.
19. During customization/icicle generation, we should check to make sure that
    the bridge listed in the libvirt XML matches up with what we detected (if
    anything).  This isn't really an issue when doing oz-install -g -u, but if
    you use the short-circuit oz-customize or oz-generate-icicle, the user
    could have fed us bad data.
20. Currently we use libguestfs to extract the installation ISO, make changes
    to it, and then rebundle the ISO using mkisofs.  This is time consuming,
    partially because we are doing two copies of the ISO (once from the ISO to
    the filesystem, and once from the filesystem to the new ISO), and partially
    because we are only modifying a very small portion of the ISO.  We can
    improve this situation and get rid of one whole copy by mounting the ISO
    with fuseiso/guestmount, symlinking most of the contents to a temporary
    directory, and only modifying the small bits we need to.  Then we can pack
    the whole thing back up using mkisofs.  This gets rid of the first copy, so
    it should cut our initial time in half (plus or minus the page cache).
21. Change setup.py to make the directories /var/lib/oz/*.  Since that is
    repeated in both of the RPM and deb building stuff, it would be better to
    just do it on python setup.py install instead.
