Update TODO file.
[libguestfs.git] / TODO
diff --git a/TODO b/TODO
index d0e9320..981d67b 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,75 +1,67 @@
+TODO list for libguestfs
+======================================================================
+
+This list contains random ideas and musings on features we could add
+to libguestfs in future.
+
+   - RWMJ
+
+Python bindings
+---------------
+
 Ideas for the Python bindings:
 https://www.redhat.com/archives/fedora-virt/2009-April/msg00114.html
 
-----------------------------------------------------------------------
+FUSE API
+--------
 
-We badly need to actually implement the FTP server mentioned in the
-documentation.
+The API needs more test coverage, particularly lesser-used system
+calls.
 
-Or: Implement a FUSE-based filesystem.  See the FUSE mountlo
-project which does something similar, albeit only to single
-filesystems:
+The big unresolved issue is UID/GID mapping between guest filesystem
+IDs and the host.  It's not easy to automate this because you need
+extra details about the guest itself in order to get to its
+UID->username map (eg. /etc/passwd from the guest).
 
-http://sourceforge.net/project/showfiles.php?group_id=121684&package_id=150116
+BufferIn
+--------
 
-----------------------------------------------------------------------
+BufferIn should turn into <char *, int> and simple strings in other
+languages that can handle 8 bit clean strings.
 
-BufferIn and BufferOut should turn into <char *, int> and simple
-strings in other languages that can handle 8 bit clean strings.
 Limit on transfers would still be 2MB for these types.
  - then implement write-file properly
- - and implement read-file
 
-----------------------------------------------------------------------
+febootstrap / debootstrap inside appliance
+------------------------------------------
 
-Implement febootstrap command.
+This was originally proposed as a way to install new operating systems
+in the appliance.  However no one has come up with a workable
+solution.
 
-----------------------------------------------------------------------
+Haskell bindings
+----------------
 
 Complete the Haskell bindings (see discussion on haskell-cafe).
 
-----------------------------------------------------------------------
-
-Complete the bindings tests - must test the return values and
-error cases.
-
-----------------------------------------------------------------------
-
-For virt-inspector:
-
- - Make a libvirt XML config
-
- - Test over available OSes
+Complete bind tests
+-------------------
 
- - Add 'reged' / NT registry support.
+Complete the bind tests - must test the return values and error cases.
 
-----------------------------------------------------------------------
+virt-inspector - make libvirt XML
+---------------------------------
 
-Use virtio_blk by default.  It's faster and more natural.
-Unfortunately it seems like this will rename all devices - see next
-item.
+It should be possible to generate libvirt XML from virt-inspector
+data, at least partially.  This would be just another output type so:
 
-Note: virtio_blk *IS* supported by all our minimum platforms,
-ie. CentOS 5.3, Fedora 11, Debian.
+ virt-inspector --libvirt guest.img
 
-----------------------------------------------------------------------
-
-Qemu options -- After discussion with the KVM developers, they have
-recommended some flags which will improve the safety and reliability
-of KVM.  Need to test that these also work under qemu (or at least, do
-no harm):
-
--no-hpet      HPET support is broken and should be disabled.
-
--rtc-td-hack  Keeps the rtc clock source track time correctly.
-
--drive file=...,if=[ide|virtio],cache=off
-              cache=off is necessary to improve reliability in the
-             event of a system crash when writing.
-
-----------------------------------------------------------------------
+Note that recent versions of libvirt/virt-install allow guests to be
+imported, so this is not so useful any more.
 
 "Standalone/local mode"
+-----------------------
 
 Instead of running guestfsd (the daemon) inside qemu, there should be
 an option to just run guestfsd directly.
@@ -107,3 +99,186 @@ This is mainly useful from live CDs, ie. virt-p2v.
 
 Should we bother having the daemon at all and just link the guestfsd
 code directly into libguestfs?
+
+PPC problems
+------------
+
+[This section should be filed as bugs, but no one seems to care for
+PPC hosts and the hardware is rapidly becoming obsolete]
+
+  ppc (32 bit) works with qemu from git, however there is no serial console
+
+  ppc64 requires extra parameters:
+    -M mac99 -cpu ppc64
+  however it still fails:
+    invalid/unsupported opcode: 01 - 01 - 1a (06301e83) 00000000018c2738 1
+    invalid bits: 00400000 for opcode: 0b - 19 - 15 (2d746572) 0000000000009230
+
+  no serial console in ppc or ppc64 because no one can tell us what
+  console=ttyXX option to use
+
+Supermin appliance to febootstrap
+---------------------------------
+
+Supermin appliance functionality should be moved into febootstrap.
+
+Ideas for extra commands
+------------------------
+
+  General glibc / core programs:
+    chgrp
+    dd (?)
+    more mk*temp calls
+
+  ext2 properties:
+    chattr
+    lsattr
+    badblocks
+    blkid
+    debugfs
+    dumpe2fs
+    e2image
+    e2undo
+    filefrag
+    findfs
+    logsave
+    mklost+found
+
+  SELinux:
+    chcat
+    restorecon
+    ch???
+
+  Oddball:
+    pivot_root
+    fts(3) / ftw(3)
+
+Other initrd-* commands
+-----------------------
+
+Such as:
+
+initrd-extract
+initrd-replace
+
+Simple editing of configuration files
+-------------------------------------
+
+Some easy non-Augeas methods to edit configuration files.
+I'm thinking:
+
+  replace /etc/file key value
+
+which would look in /etc/file for any instances of
+
+  key=...
+  key ...
+  key:...
+
+and replace them with
+
+  key=value
+  key value
+  key:value
+
+That would solve about 50% of reconfiguration needs, and for the
+rest you'd use Augeas, 'download'+'upload' or 'edit'.
+
+RWMJ: I had a go at implementing this, but it's quite error-prone to
+do this sort of editing inside the C-based daemon code.  It's far
+better to do it with Augeas, or else to use an external language like
+Perl.
+
+Quick Perl scripts
+------------------
+
+Currently we can't do Perl "one-liners".  ie. The current syntax for
+any short Perl one-liner would be:
+
+  perl -MSys::Guestfs -e '$g = Sys::Guestfs->new(); $g->add_drive ("foo"); $g->launch; $g->mount ("/dev/sda1", "/"); ....'
+
+You can see we're well beyond a single line just getting to the point
+of adding drives and mounting.
+
+First suggestion:
+
+ $h = create ($filename, \"/dev/sda1\" => \"/\");
+
+ $h = create ([$file1, $file2], \"/dev/sda1\" => \"/\");
+
+To mount read-only, add C<ro =E<gt> 1> like this:
+
+ $h = create ($filename, \"/dev/sda1\" => \"/\", ro => 1);
+
+which is equivalent to the following sequence of calls:
+
+ $h = Sys::Guestfs->new ();
+ $h->set_autosync (1);
+ $h->add_drive_ro ($filename);
+ $h->launch ();
+ $h->mount_ro (\"/dev/sda1\", \"/\");
+
+Command-line form would be:
+
+ perl -MSys::Guestfs=:all -e '$_=create("guest.img", "/dev/sda1" => "/"); $_->cat ("/etc/fstab");'
+
+That's not brief enough for one-liners, so we could have an extra
+autogenerated module which creates a Sys::Guestfs handle singleton
+(the handle is an implicit global variable as in guestfish), eg:
+
+ perl -MSys::Guestfs::One -e 'inspect("guest.img"); cat ("/etc/fstab");'
+
+How would editing files work?
+
+ntfsclone
+---------
+
+Useful imaging tool:
+http://man.linux-ntfs.org/ntfsclone.8.html
+
+Standard images
+---------------
+
+Equip guestfish with some standard images that it can load
+quickly, eg:
+
+  load ext2
+
+Maybe it's better to create these on the fly?
+
+virt-rescue pty
+---------------
+
+See:
+http://search.cpan.org/~rgiersig/IO-Tty-1.08/Pty.pm
+http://www.perlmonks.org/index.pl?node_id=582185
+
+Note that pty requires cooperation inside the C code too (there are
+two sides to a pty, and one has to be handled after the fork).
+
+virt-rescue TERM
+----------------
+
+Pass TERM from the library, through the kernel command line, to the
+init script.
+
+Windows-based daemon/appliance
+------------------------------
+
+See discussion on list:
+https://www.redhat.com/archives/libguestfs/2009-November/msg00165.html
+
+virt-grow, virt-shrink
+----------------------
+
+Grow and shrink existing guests.  The main problem comes with
+MBR-style partitions where you have to actually copy data around the
+disk (unless you only want to change the final partition).
+
+qemu locking
+------------
+
+Add -drive file=...,lock=exclusive and -drive file=...,lock=shared
+
+Change libguestfs and libvirt to do the right thing, so that multiple
+instances of qemu cannot stomp on each other.
\ No newline at end of file