Disable test for RHBZ#576879 comment 5.
[libguestfs.git] / TODO
diff --git a/TODO b/TODO
index 2b9aae1..0f933fa 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,61 +6,27 @@ to libguestfs in future.
 
    - RWMJ
 
-Python bindings
----------------
-
-Ideas for the Python bindings:
-https://www.redhat.com/archives/fedora-virt/2009-April/msg00114.html
-
-FTP server or FUSE?
--------------------
-
-Originally we had intended to implement an NFS server inside the
-appliance, which would allow the guest filesystems to be mounted on
-the host, and large changes to be made.  We eventually rejected the
-idea of using NFS, partly because it requires root to mount
-filesystems in the host, and partly because of problems handling UID
-mappings between host and guest filesystem.
-
-Then we look at implementing an FTP server instead.  FTP clients are
-widely available for many languages, don't require root, and don't
-have any UID mapping problems.  However there is the problem of
-getting the TCP connection into the guest, and that FTP requires a
-secondary data connection either in or out of the guest (the NFS
-situation is even more dire).
-
-Thirdly we looked at implementing a FUSE-based filesystem.  This is
-plausible - it could be implemented just by adding the additional FUSE
-operations to the standard guestfs(3) API, and then implementing a
-simple FUSE daemon.  (The FUSE website has some very helpful
-documentation and examples).  I [RWMJ] am not particularly convinced
-that a FUSE-based filesystem would really be useful to anyone, but am
-prepared to accept patches if someone does all the work.
-
-See also the mountlo project:
-http://sourceforge.net/project/showfiles.php?group_id=121684&package_id=150116
-
-BufferIn
+FUSE API
 --------
 
-BufferIn should turn into <char *, int> and simple strings in other
-languages that can handle 8 bit clean strings.
+The API needs more test coverage, particularly lesser-used system
+calls.
 
-Limit on transfers would still be 2MB for these types.
- - then implement write-file properly
-
-febootstrap / debootstrap inside appliance
-------------------------------------------
-
-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.
+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).
 
 Haskell bindings
 ----------------
 
 Complete the Haskell bindings (see discussion on haskell-cafe).
 
+PHP bindings
+------------
+
+Add bindtests to PHP bindings.
+
 Complete bind tests
 -------------------
 
@@ -117,38 +83,12 @@ 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 (?)
-    utime / utimes / futimes / futimens / l..
     more mk*temp calls
-    some sort of alloc/fallocate/posix_fallocate call to create empty space
-    trunc[ate??]
 
   ext2 properties:
     chattr
@@ -163,6 +103,7 @@ Ideas for extra commands
     findfs
     logsave
     mklost+found
+    ext2undelete
 
   SELinux:
     chcat
@@ -173,11 +114,6 @@ Ideas for extra commands
     pivot_root
     fts(3) / ftw(3)
 
-Swap space
-----------
-
-Allow swap space from the guest to be used.  Is it a good idea?
-
 Other initrd-* commands
 -----------------------
 
@@ -220,7 +156,7 @@ 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->wait_ready; $g->mount ("/dev/sda1", "/"); ....'
+  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.
@@ -238,10 +174,8 @@ To mount read-only, add C<ro =E<gt> 1> like this:
 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->wait_ready ();
  $h->mount_ro (\"/dev/sda1\", \"/\");
 
 Command-line form would be:
@@ -255,3 +189,169 @@ autogenerated module which creates a Sys::Guestfs handle singleton
  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
+
+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).
+
+Windows-based daemon/appliance
+------------------------------
+
+See discussion on list:
+https://www.redhat.com/archives/libguestfs/2009-November/msg00165.html
+
+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.
+
+virt-disk-explore
+-----------------
+
+For multi-level disk images such as live CDs:
+http://rwmj.wordpress.com/2009/07/15/unpack-the-russian-doll-of-a-f11-live-cd/
+
+It's possible with libguestfs to recursively look for anything that
+might be a filesystem, mount-{,loop} it and look in those, revealing
+anything in a disk image.
+
+However this won't work easily for VM disk images in the disk image.
+One would have to download those to the host and launch another
+libguestfs instance.
+
+Map filesystems to disk blocks
+------------------------------
+
+Map files/filesystems/(any other object) to the actual disk
+blocks they occupy.
+
+And vice versa.
+
+Is it even possible?
+
+See also contribs/visualize-alignment/
+
+Integration with host intrusion systems
+---------------------------------------
+
+Perfect way to monitor VMs from outside the VM.  Look for file
+hashes, log events, login/logout etc.
+
+http://www.ossec.net/
+http://la-samhna.de/samhain/
+http://sourceforge.net/projects/aide/
+http://osiris.shmoo.com/
+http://sourceforge.net/projects/tripwire/
+
+Fix 'file'
+----------
+
+https://www.redhat.com/archives/libguestfs/2010-June/msg00053.html
+https://www.redhat.com/archives/libguestfs/2010-June/msg00079.html
+
+Regression test on virt-inspector
+---------------------------------
+
+Occasionally we break virt-inspector through some change.  We should
+add a regression test for it.  However this is hard because we'd need
+to avoid having to carry huge images.
+
+Update: I managed to fit a real-but-minimal Fedora 13 image into 6.2 MB.
+See: http://rwmj.wordpress.com/2010/09/07/tip-pack-files-into-a-new-disk-image/#content
+
+Freeze/thaw filesystems
+-----------------------
+
+Access to these ioctls:
+http://git.kernel.org/linus/fcccf502540e3d7
+
+Tips for new users in guestfish
+-------------------------------
+
+$ guestfish
+Tip: You need to 'add disk.img' or 'alloc disk.img nn' to make a new image.
+Type 'notips' to disable tips permanently.
+><fs> add mydisk
+Tip: You need to type 'run' before you can see into the disk image.
+><fs> run
+Tip: Use 'list-filesystems' to see what filesystems are available.
+><fs> list-filesystems
+/dev/vda1
+Tip: Use 'mount fs /' to mount a filesystem.
+><fs> mount /dev/vda1 /
+Tip: Use 'll /' to view the filesystem or ...
+><fs> ll /
+
+Could we make guestfish interactive if commands are used without params?
+------------------------------------------------------------------------
+
+><fs> sparse
+[[Prints man page]]
+Image name? disk.img
+Size of image? 10M
+
+Common problems
+---------------
+
+How can we solve these common user problems?
+
+[space for common problems here]
+
+Better support for encrypted devices
+------------------------------------
+
+Currently LUKS support only works if the device contains volume
+groups.  If it contains, eg., partitions, you cannot access them.
+We would like to add:
+
+  - An easier way to use this from guestfish.
+  - Direct access to the /dev/mapper device (eg. if it contains
+    anything apart from VGs).
+
+Display image as PS
+-------------------
+
+Display the structure of an image file as a PS.
+
+Greater use of blkid / libblkid
+-------------------------------
+
+guestfs_zero should use wipefs.  See wipefs(8).
+
+There are various useful functions in libblkid for listing partitions,
+devices etc which we are essentially duplicating in the daemon.  It
+would make more sense to just use libblkid for this.
+
+There are some places where we call out to the 'blkid' program.  This
+might be replaced by direct use of the library (if this is easier).
+
+Visualization
+-------------
+
+Eric Sandeen pointed out the blktrace tool which is a better way of
+capturing traces than using patched qemu (see
+contrib/visualize-alignment).  We would still use the same
+visualization tools in conjunction with blktrace traces.
+
+Add-domain command
+------------------
+
+guestfs_add_domain (g, "libvirt-dom");
+
+However this would need to not depend on libvirt, eg. loading it
+on demand.