summaryrefslogtreecommitdiffstats
path: root/lua/examples/create_disk.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/examples/create_disk.lua')
-rw-r--r--lua/examples/create_disk.lua66
1 files changed, 66 insertions, 0 deletions
diff --git a/lua/examples/create_disk.lua b/lua/examples/create_disk.lua
new file mode 100644
index 00000000..2dfc1fc2
--- /dev/null
+++ b/lua/examples/create_disk.lua
@@ -0,0 +1,66 @@
+-- Example showing how to create a disk image.
+
+require "guestfs"
+
+output = "disk.img"
+
+g = Guestfs.create ()
+
+-- Create a raw-format sparse disk image, 512 MB in size.
+file = io.open (output, "w")
+file:seek ("set", 512 * 1024 * 1024)
+file:write (' ')
+file:close ()
+
+-- Set the trace flag so that we can see each libguestfs call.
+g:set_trace (true)
+
+-- Attach the disk image to libguestfs.
+g:add_drive (output, { format = "raw", readonly = false })
+
+-- Run the libguestfs back-end.
+g:launch ()
+
+-- Get the list of devices. Because we only added one drive
+-- above, we expect that this list should contain a single
+-- element.
+devices = g:list_devices ()
+if table.getn (devices) ~= 1 then
+ error "expected a single device from list-devices"
+end
+
+-- Partition the disk as one single MBR partition.
+g:part_disk (devices[1], "mbr")
+
+-- Get the list of partitions. We expect a single element, which
+-- is the partition we have just created.
+partitions = g:list_partitions ()
+if table.getn (partitions) ~= 1 then
+ error "expected a single partition from list-partitions"
+end
+
+-- Create a filesystem on the partition.
+g:mkfs ("ext4", partitions[1])
+
+-- Now mount the filesystem so that we can add files.
+g:mount (partitions[1], "/")
+
+-- Create some files and directories.
+g:touch ("/empty")
+message = "Hello, world\n"
+g:write ("/hello", message)
+g:mkdir ("/foo")
+
+-- This one uploads the local file /etc/resolv.conf into
+-- the disk image.
+g:upload ("/etc/resolv.conf", "/foo/resolv.conf")
+
+-- Because we wrote to the disk and we want to detect write
+-- errors, call g:shutdown. You don't need to do this:
+-- g:close will do it implicitly.
+g:shutdown ()
+
+-- Note also that handles are automatically closed if they are
+-- reaped by the garbage collector. You only need to call close
+-- if you want to close the handle right away.
+g:close ()