Fix typo in error message.
[libguestfs.git] / TODO
1 Ideas for the Python bindings:
2 https://www.redhat.com/archives/fedora-virt/2009-April/msg00114.html
3
4 ----------------------------------------------------------------------
5
6 We badly need to actually implement the FTP server mentioned in the
7 documentation.
8
9 Or: Implement a FUSE-based filesystem.  See the FUSE mountlo
10 project which does something similar, albeit only to single
11 filesystems:
12
13 http://sourceforge.net/project/showfiles.php?group_id=121684&package_id=150116
14
15 ----------------------------------------------------------------------
16
17 BufferIn should turn into <char *, int> and simple strings in other
18 languages that can handle 8 bit clean strings.
19
20 Limit on transfers would still be 2MB for these types.
21  - then implement write-file properly
22
23 ----------------------------------------------------------------------
24
25 Implement febootstrap command.
26
27 ----------------------------------------------------------------------
28
29 Complete the Haskell bindings (see discussion on haskell-cafe).
30
31 ----------------------------------------------------------------------
32
33 Complete the bindings tests - must test the return values and
34 error cases.
35
36 ----------------------------------------------------------------------
37
38 For virt-inspector:
39
40  - Make a libvirt XML config
41
42  - Test over available OSes
43
44  - Add 'reged' / NT registry support.
45
46 ----------------------------------------------------------------------
47
48 Use virtio_blk by default.  It's faster and more natural.
49 Unfortunately it seems like this will rename all devices - see next
50 item.
51
52 Note: virtio_blk *IS* supported by all our minimum platforms,
53 ie. CentOS 5.3, Fedora 11, Debian.
54
55 ----------------------------------------------------------------------
56
57 "Standalone/local mode"
58
59 Instead of running guestfsd (the daemon) inside qemu, there should be
60 an option to just run guestfsd directly.
61
62 The architecture in this mode would look like:
63
64      +------------------+
65      | main program     |
66      |------------------|
67      | libguestfs       |
68      +--------^---------+
69           |   | reply
70       cmd |   |
71      +----v-------------+
72      | guestfsd         |
73      +------------------+
74
75 Notes:
76
77 (1) This only makes sense if we are running as root.
78
79 (2) There is no console / kernel messages in this configuration, but
80 we might consider capturing stderr from the daemon.
81
82 (3) guestfs_config and guestfs_add_drive become no-ops.
83
84 Obviously in this configuration, commands are run directly on the
85 local machine's disks.  You could just run the commands themselves
86 directly, but libguestfs provides a convenient API and language
87 bindings.  Also deals with tricky stuff like parsing the output of the
88 LVM commands.  Also we get to leverage other code such as
89 virt-inspector.
90
91 This is mainly useful from live CDs, ie. virt-p2v.
92
93 Should we bother having the daemon at all and just link the guestfsd
94 code directly into libguestfs?
95
96 ----------------------------------------------------------------------
97
98 PPC problems:
99
100   ppc (32 bit) works with qemu from git, however there is no serial console
101
102   ppc64 requires extra parameters:
103     -M mac99 -cpu ppc64
104   however it still fails:
105     invalid/unsupported opcode: 01 - 01 - 1a (06301e83) 00000000018c2738 1
106     invalid bits: 00400000 for opcode: 0b - 19 - 15 (2d746572) 0000000000009230
107
108   no serial console in ppc or ppc64 because no one can tell us what
109   console=ttyXX option to use
110
111 ----------------------------------------------------------------------
112
113 Supermin appliance should be moved into febootstrap.
114
115 ----------------------------------------------------------------------
116
117 Extra commands / functionality:
118
119   General glibc / core programs:
120     chgrp
121     grep (do it locally using pipe?)
122     dd (?)
123     ln / ln -s
124     readlink
125     utime / utimes / futimes / futimens / l..
126     more mk*temp calls
127     some sort of alloc/fallocate/posix_fallocate call to create empty space
128     realpath
129     trunc[ate??]
130
131   ext2 properties:
132     chattr
133     lsattr
134     badblocks
135     blkid
136     debugfs
137     dumpe2fs
138     e2image
139     e2undo
140     filefrag
141     findfs
142     logsave
143     mklost+found
144
145   SELinux:
146     chcat
147     restorecon
148     ch???
149
150   Oddball:
151     pivot_root
152     fts(3) / ftw(3)
153
154 ----------------------------------------------------------------------
155
156 Allow swap space from the guest to be used.  Is it a good idea?
157
158 ----------------------------------------------------------------------
159
160 Need a way to query a binary or library file for its architecture.
161 Using objdump or readelf?
162 What about non-ELF files (eg. Windows, BSD).
163
164 To do this properly requires some serious logic, eg. to cover Linux
165 and Windows we'd need objdump and i686-pc-mingw32-objdump, and more to
166 cover a.out, COFF and 64 bit Windows.  Therefore this cannot be done
167 inside the daemon, and should be done by a separate, external program
168 similar to virt-inspector.
169
170 Probably we should go all the way and have virt-inspector able to
171 determine kernel and userspace architectures of guests.
172
173 ----------------------------------------------------------------------
174
175 Other initrd-* commands, such as:
176
177 initrd-extract
178 initrd-replace
179
180 ----------------------------------------------------------------------
181
182 Some easy non-Augeas methods to edit configuration files.
183 I'm thinking:
184
185   replace /etc/file key value
186
187 which would look in /etc/file for any instances of
188
189   key=...
190   key ...
191   key:...
192
193 and replace them with
194
195   key=value
196   key value
197   key:value
198
199 That would solve about 50% of reconfiguration needs, and for the
200 rest you'd use Augeas, 'download'+'upload' or 'edit'.