summaryrefslogtreecommitdiffstats
path: root/lib/MDV/Draklive/Overlay.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MDV/Draklive/Overlay.pm')
-rw-r--r--lib/MDV/Draklive/Overlay.pm22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/MDV/Draklive/Overlay.pm b/lib/MDV/Draklive/Overlay.pm
new file mode 100644
index 0000000..50b9cdd
--- /dev/null
+++ b/lib/MDV/Draklive/Overlay.pm
@@ -0,0 +1,22 @@
+package MDV::Draklive::Overlay;
+
+use MDV::Draklive::Loopback;
+
+our %overlay = (
+ unionfs => {
+ modules => [ qw(unionfs) ],
+ mount => sub {
+ my ($live) = @_;
+ #- build dirs list: "dir1=ro:dir2:ro:dir3=rw"
+ my $dirs = join(':',
+ map {
+ $_->{list} ? "\$(cat $live->{prefix}{live}{mnt}/$_->{list})" :
+ "$live->{prefix}{live}{mnt}$_->{mountpoint}=" .
+ (!$loop_types{$_->{type}}{read_only} && !$_->{read_only} ? 'rw' : 'ro');
+ } reverse grep { !$_->{fallback} } @{$live->{mount}{dirs} || []});
+ "sh -c 'mount -o dirs=$dirs -t unionfs unionfs $live->{prefix}{live}{mnt}$live->{mount}{root}'";
+ },
+ },
+);
+
+1;