X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=TODO;h=7a4c3675e46e57daf08c3246928ca63cf15df2a5;hp=661c13789cc37a4952cdf17d1f2ac0d9a8a95ab6;hb=fa13b2838fd32854a4b2c6a5fff47e17a72294fb;hpb=22e531bc459309d9a871a845cfacd1396ff5b7e4 diff --git a/TODO b/TODO index 661c137..7a4c367 100644 --- a/TODO +++ b/TODO @@ -6,12 +6,6 @@ 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 -------- @@ -23,27 +17,16 @@ 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). -BufferIn --------- - -BufferIn should turn into 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 - -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. - Haskell bindings ---------------- Complete the Haskell bindings (see discussion on haskell-cafe). +PHP bindings +------------ + +Add bindtests to PHP bindings. + Complete bind tests ------------------- @@ -100,28 +83,6 @@ 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 ------------------------ @@ -212,7 +173,6 @@ To mount read-only, add C 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->mount_ro (\"/dev/sda1\", \"/\"); @@ -229,22 +189,6 @@ autogenerated module which creates a Sys::Guestfs handle singleton 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 --------------- @@ -255,11 +199,9 @@ 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. +[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 ------------------------------ @@ -267,13 +209,6 @@ 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 ------------ @@ -294,4 +229,306 @@ 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. \ No newline at end of file +libguestfs instance. + +[Not sure this is such a good idea. See also live CD inspection idea below.] + +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 + +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. +> add mydisk +Tip: You need to type 'run' before you can see into the disk image. +> run +Tip: Use 'list-filesystems' to see what filesystems are available. +> list-filesystems +/dev/vda1 +Tip: Use 'mount fs /' to mount a filesystem. +> mount /dev/vda1 / +Tip: Use 'll /' to view the filesystem or ... +> ll / + +Could we make guestfish interactive if commands are used without params? +------------------------------------------------------------------------ + +> 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: + + - 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. + +guestfish parsing +----------------- + +At the moment guestfish uses an ad hoc parser which has many +shortcomings. We should change to using a lex/yacc-based scanner and +parser (there are better parsers out there, but yacc is sufficient and +very widely available). + +The scanner must deal with the case of parsing a whole command string, +eg. for a command that the user types in: + + > add-drive-opts "/tmp/foo" readonly:true + +and also with parsing single words from the command line: + + guestfish add-drive-opts /tmp/foo readonly:true + +Note the quotes are for scanning and don't indicate types. + +We should also allow variables and expressions as part of this new +parsing code, eg: + + set roots inspect-os + set product inspect-get-product-name %{roots[0]} + +% is better than $ because of shell escaping and confusion with shell +variables. + +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 + +"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). + +The complexity here is that we would no longer have access to +stdin/stdout (or we'd have to direct that somewhere else). + +GObject Introspection +--------------------- + +We periodically get asked to implement gobject-introspection (it's a +GNOME thing): + +http://live.gnome.org/GObjectIntrospection + +This would require a separate Gtk C API since the main guestfs handle +would have to be encapsulated in a GObject. However the main +difficulty is that the annotations supported to define types are not +very rich. Notably missing are support for optional arguments +(defined but not implemented), support for structs (unless mapped to +other objects). + +Also note that the libguestfs API is not "object oriented". + +libosinfo mappings for virt-inspector +------------------------------------- + +Return libosinfo mappings from inspection API.