summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorOlivier Blin <oblin@mandriva.com>2008-10-29 00:10:13 +0000
committerOlivier Blin <oblin@mandriva.com>2008-10-29 00:10:13 +0000
commit85ff78d269cbd31ad2a6eeb952f3cce8a17fb330 (patch)
tree4cf43599d110c443c349acbb43d6ed175cd961a2 /lib
parentad0fa345dc453d2aaeaea17e62d6328ca398779a (diff)
downloaddrakiso-85ff78d269cbd31ad2a6eeb952f3cce8a17fb330.tar
drakiso-85ff78d269cbd31ad2a6eeb952f3cce8a17fb330.tar.gz
drakiso-85ff78d269cbd31ad2a6eeb952f3cce8a17fb330.tar.bz2
drakiso-85ff78d269cbd31ad2a6eeb952f3cce8a17fb330.tar.xz
drakiso-85ff78d269cbd31ad2a6eeb952f3cce8a17fb330.zip
move overlay data in MDV::Draklive::Overlay
Diffstat (limited to 'lib')
-rw-r--r--lib/MDV/Draklive/Initrd.pm5
-rw-r--r--lib/MDV/Draklive/Overlay.pm22
2 files changed, 25 insertions, 2 deletions
diff --git a/lib/MDV/Draklive/Initrd.pm b/lib/MDV/Draklive/Initrd.pm
index 95755b6..9d4bb0b 100644
--- a/lib/MDV/Draklive/Initrd.pm
+++ b/lib/MDV/Draklive/Initrd.pm
@@ -6,6 +6,7 @@ use list_modules;
use MDV::Draklive::Utils;
use MDV::Draklive::StorageFS;
use MDV::Draklive::Loopback;
+use MDV::Draklive::Overlay;
sub nls_modules {
my ($live) = @_;
@@ -122,7 +123,7 @@ sub create_initrd_for_media {
$media->get_media_fs_module,
@{$media->get_media_setting('extra_modules') || []},
(map { @{$loop_types{$_}{modules} || []} } uniq(map { $_->{type} } @{$live->{mount}{dirs} || []})),
- ($live->{mount}{overlay} ? @{$overlay{$live->{mount}{overlay}}{modules} || []} : ());
+ ($live->{mount}{overlay} ? @{$MDV::Draklive::Overlay::overlay{$live->{mount}{overlay}}{modules} || []} : ());
my @additional_modules = map { if_(m!([^/]+)\.ko(?:\.gz)?!, list_modules::filename2modname($1)) } @{$live->{system}{additional_modules}};
@$extra_modules = difference2($extra_modules, \@additional_modules);
@@ -200,7 +201,7 @@ sub create_initrd_scriptlet {
"showlabels --removable",
MDV::Draklive::StorageFS::get_mount($fs)->($live, $media),
(map { $loop_types{$_->{type}}{mount}->($live, $_) } @$mount_first, @$mount_last),
- ($live->{mount}{overlay} ? $overlay{$live->{mount}{overlay}}{mount}->($live) : ()),
+ ($live->{mount}{overlay} ? $MDV::Draklive::Overlay::overlay{$live->{mount}{overlay}}{mount}->($live) : ()),
if_($live->{system}{initrd_pre_pivot}, deref_array($live->{system}{initrd_pre_pivot})),
qq(splashy_update "chroot $target"),
"echo 0x0100 > /proc/sys/kernel/real-root-dev",
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;