TODO: Attach method for disconnected operation.
[libguestfs.git] / TODO
diff --git a/TODO b/TODO
index ee431d2..a76fd2e 100644 (file)
--- a/TODO
+++ b/TODO
@@ -103,7 +103,6 @@ Ideas for extra commands
     findfs
     logsave
     mklost+found
     findfs
     logsave
     mklost+found
-    ext2undelete
 
   SELinux:
     chcat
 
   SELinux:
     chcat
@@ -190,12 +189,6 @@ autogenerated module which creates a Sys::Guestfs handle singleton
 
 How would editing files work?
 
 
 How would editing files work?
 
-ntfsclone
----------
-
-Useful imaging tool:
-http://man.linux-ntfs.org/ntfsclone.8.html
-
 virt-rescue pty
 ---------------
 
 virt-rescue pty
 ---------------
 
@@ -206,6 +199,10 @@ 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).
 
 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).
 
+[I tried to implement this in the new C virt-rescue, but it doesn't
+work.  qemu is implementing its own ptys, and they are broken.  Need
+to fix qemu.]
+
 Windows-based daemon/appliance
 ------------------------------
 
 Windows-based daemon/appliance
 ------------------------------
 
@@ -234,6 +231,8 @@ 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.
 
 One would have to download those to the host and launch another
 libguestfs instance.
 
+[Not sure this is such a good idea.  See also live CD inspection idea below.]
+
 Map filesystems to disk blocks
 ------------------------------
 
 Map filesystems to disk blocks
 ------------------------------
 
@@ -264,16 +263,6 @@ Fix 'file'
 https://www.redhat.com/archives/libguestfs/2010-June/msg00053.html
 https://www.redhat.com/archives/libguestfs/2010-June/msg00079.html
 
 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
 -----------------------
 
 Freeze/thaw filesystems
 -----------------------
 
@@ -319,7 +308,6 @@ 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:
 
 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).
 
   - Direct access to the /dev/mapper device (eg. if it contains
     anything apart from VGs).
 
@@ -376,9 +364,149 @@ parsing code, eg:
 % is better than $ because of shell escaping and confusion with shell
 variables.
 
 % is better than $ because of shell escaping and confusion with shell
 variables.
 
-live CD inspection
-------------------
+Can we combine this with ability to set and read environment
+variables?  Currently guestfish uses many environment variables like
+$EDITOR without any corresponding ability to set them.
+
+ set EDITOR /usr/bin/emacs
+ echo $EDITOR  # or %{EDITOR}
+ edit /etc/resolv.conf
+
+live CD inspection for Windows 7
+--------------------------------
+
+Windows 7 install CDs are quite different and pretty impenetrable.
+There are no obvious files to parse.
+
+More ntfs tools
+---------------
+
+ntfsprogs actually has a lot more useful tools than we currently
+use.  Interesting ones are:
+
+ntfslabel: display or change filesystem label (we should unify all
+  set*label APIs into a single set_vfs_label which can deal with any
+  filesystem)
+
+ntfsclone: clone, image, restore, rescue NTFS
+
+ntfsinfo: print various information about NTFS volume and files
+
+ntfs streams: extract alternate streams from NTFS files
+
+ntfsck: checker for NTFS filesystems
+
+Undelete files
+--------------
+
+Two useful tools:
+
+  - ext2undelete
+  - ntfsundelete
+
+More mkfs_opts options
+----------------------
+
+Useful options to offer:
+ - Set label.
+ - Set UUID.
+
+Use /proc/self/mountinfo
+------------------------
+
+This file contains lots of interesting information about
+what is mounted and where. eg:
+
+  16 21 0:3 / /proc rw,relatime - proc /proc rw
+  17 21 0:16 / /sys rw,relatime - sysfs /sys rw,seclabel
+  18 23 0:5 / /dev rw,relatime - devtmpfs udev rw,seclabel,size=1906740k,nr_inodes=476685,mode=755
+  26 21 253:3 / /home rw,relatime - ext4 /dev/mapper/vg-lv_home rw,seclabel,barrier=1,data=ordered
+
+This could be used instead of current hairy code to parse the output
+of the 'mount' command.  We could add new APIs to return kernel mount
+options, type of filesystem at a mountpoint etc.
+
+guestfish drive letters
+-----------------------
+
+There should be an option to mount all Windows drives as separate
+paths, like C: => /c/, D: => /d/ etc.
+
+More inspection features
+------------------------
+
+- last shutdown time
+- DHCP address
+- last time the software was updated
+- last user who logged in
+- lastlog, last, who
+
+Integrate virt-inspector with CMDBs
+-----------------------------------
+
+Either integrate virt-inspector with Configuration Management
+Databases (CMDBs) or at least check that virt-inspector produces the
+right range of data so that integration would be possible.  The
+standards for CMDBs come from the DMTF, see eg:
+
+http://dmtf.org/news/pr/2009/7/dmtf-releases-cmdbf-standard-federating-configuration-management-data
+
+Efficient way to visit all files
+--------------------------------
+
+https://rwmj.wordpress.com/2010/12/15/tip-audit-virtual-machine-for-setuid-files/#content
+
+A naive method would look like:
+
+  g#visit ~return_stats:true "/" (
+    fun pathname stat ->
+      ...
+  )
+
+However this has two disadvantages:
+
+ - requires hand-written custom bindings in each language
+ - unclear about locking, thread-safety and re-entrancy of handle g
+
+A better way would be to have some sort of explicit "download all
+filenames and stat structures", which could then be iterated over:
+
+  let files = g#find_opts ~return_stats:true "/" in
+  List.iter (
+    fun pathname stat ->
+      ...
+  )
+
+The problem with this is that 'files' is going to be larger than a
+protocol buffer.
+
+This leads to thinking about changes to the protocol / generator to
+make this simpler.  The proposal would be to add RBigStringList,
+RBigStructList [or RBig (Ranytype ...)].  These would work like
+FileOut, in that they would use file streaming to stream XDR
+structures (probably written to a file on the library side).
+Generated code would hide most of the implementation.
+
+We also need to think about security issues: is it possible for the
+daemon to keep sending back data forever, and if so what happens on
+the library side.
+
+[Users can now use virt-ls to solve some of these problems, but it is
+not a general solution at the API level]
+
+Interactive disk creator
+------------------------
+
+An interactive disk creator program.
+
+Attach method for disconnected operation
+----------------------------------------
+
+http://libguestfs.org/guestfs.3.html#guestfs_set_attach_method
 
 
-guestfish -i livecd.iso
+"Librarian" has an idea that he should be able to attach to a regular
+appliance, but disconnect from it and reconnect to it later.  This
+would be some sort of modified attach method (see link above).
 
 
-Could this be done through the core API and existing calls?
+The complexity here is that we would no longer have access to
+stdin/stdout (or we'd have to direct that somewhere else).