summaryrefslogtreecommitdiffstats
path: root/draklive
diff options
context:
space:
mode:
Diffstat (limited to 'draklive')
-rwxr-xr-xdraklive104
1 files changed, 1 insertions, 103 deletions
diff --git a/draklive b/draklive
index 9611ab9..b1946c8 100755
--- a/draklive
+++ b/draklive
@@ -38,6 +38,7 @@ use MDV::Draklive::Live;
use MDV::Draklive::Media;
use MDV::Draklive::StorageFS;
use MDV::Draklive::Progress;
+use MDV::Draklive::Loopback;
my $dir_distrib_sqfs = {
mountpoint => '/distrib',
@@ -184,109 +185,6 @@ sub nls_modules {
if_($fs !~ /^ext/, map { "nls_$_" } (map { "iso8859_$_" } 1..7, 9, 13..15), 'utf8');
}
-my $loop_number = 0;
-my %loop_types;
-%loop_types = (
- squashfs => {
- read_only => 1,
- is_loopback => 1,
- modules => [ qw(loop sqlzma squashfs_lzma) ],
- extension => '-lzma.sqfs',
- build => sub {
- my ($live, $dir) = @_;
- my $dest = $live->get_builddir . $live->{prefix}{build}{loopbacks} . $dir->{path} . $loop_types{squashfs}{extension};
- mkdir_p(dirname($dest));
- my $root = $dir->{root} || $live->get_system_root;
- my $src = $root . $dir->{build_from};
- my $total = directory_usage($src);
- print "have to process " . int($total/1000000) . " MB\n";
- my $progress = MDV::Draklive::Progress->new($total, time(), 6);
- my $exclude_file = tmpnam();
- output_p($exclude_file, map { $root . "$_\n" } grep { -e $root . $_ } @{$dir->{exclude} || []});
- my $sort = $live->{settings}{config_root} . '/' . $dir->{sort};
- run_foreach(sub {
- if (/^mksquashfs: file .*, uncompressed size (\d+) bytes\s*(?:DUPLICATE|LINK)?$/) {
- $progress->{current} += $1;
- $progress->show(time());
- }
- },
- 'mksquashfs', $src, $dest, '-noappend', '-no-progress', '-info', '-lzma',
- #'-processors', 1,
- '-ef', $exclude_file,
- if_(-f $sort, '-sort', $sort),
- ) or die "unable to run mksquashfs\n";
- $progress->end;
- unlink $exclude_file;
- },
- mount => sub {
- my ($live, $dir) = @_;
- $dir->{loop} = "/dev/loop" . $loop_number++;
- my $media_loopbacks = $live->get_media_prefix('loopbacks');
- (
- "/bin/losetup $dir->{loop} $live->{prefix}{live}{mnt}$live->{prefix}{media}{mnt}${media_loopbacks}$dir->{path}$loop_types{squashfs}{extension}",
- "nash-mount -o ro -t squashfs $dir->{loop} $live->{prefix}{live}{mnt}$dir->{mountpoint}",
- );
- },
- },
- modules => {
- read_only => 1,
- delay_mount => 1,
- mount => sub {
- my ($live, $dir) = @_;
- my $media_loopbacks = $live->get_media_prefix('loopbacks');
- "sh -c 'modules=; for m in $live->{prefix}{live}{mnt}$live->{prefix}{media}{mnt}${media_loopbacks}$dir->{path}/*; do n=\$(basename \$m); n=\${n%.sqfs}; d=$live->{prefix}{live}{mnt}$dir->{mountpoint}/\$n; mkdir -p \$d; mount -n -o loop,ro -t squashfs \$m \$d && modules=\$modules\$d=ro:; done; echo \$modules | sed -e s/:\$// > $live->{prefix}{live}{mnt}/$dir->{list}'";
- },
- },
- loopfs => {
- is_loopback => 1,
- modules => [],
- extension => '.loop',
- build => sub {
- my ($live, $dir) = @_;
- my $dest = $live->get_builddir . $live->{prefix}{build}{loopbacks} . $dir->{path} . $loop_types{loopfs}{extension};
- mkdir_p(dirname($dest));
- MDV::Draklive::Utils::device_allocate_file($dest, $dir->{pre_allocate});
- MDV::Draklive::Utils::device_mkfs($dest, $dir->{fs}) if !defined $dir->{min_size};
- },
- mount => sub {
- my ($live, $dir) = @_;
- $dir->{loop} = "/dev/loop" . $loop_number++;
- my $fsck = "chroot </dev/tty1 $live->{prefix}{live}{mnt}$dir_distrib_sqfs->{mountpoint} /sbin/fsck $dir->{loop}";
- my $media_loopbacks = $live->get_media_prefix('loopbacks');
- (
- "losetup $dir->{loop} $live->{prefix}{live}{mnt}$live->{prefix}{media}{mnt}${media_loopbacks}$dir->{path}$loop_types{loopfs}{extension}",
- qq(sh -c "$fsck -a || $fsck -y"),
- "nash-mount -t $dir->{fs} $dir->{loop} $live->{prefix}{live}{mnt}$dir->{mountpoint}",
- );
- },
- },
- plain => {
- mount => sub {
- my ($live, $dir) = @_;
- qq(sh -c "mkdir -p $live->{prefix}{live}{mnt}$dir->{mountpoint}");
- },
- },
- partition => {
- files => [ '/sbin/fsck', '/sbin/blkid' ],
- mount => sub {
- my ($live, $dir) = @_;
- my $fsck = "/bin/fsck";
- (
- qq(sh -c 'dev=`blkid -l -t $dir->{path} -o device`; [ -z "\$dev" ] || $fsck -a \$dev || $fsck -y \$dev'),
- "nash-mount -t $dir->{fs} $dir->{path} $live->{prefix}{live}{mnt}$dir->{mountpoint}",
- );
- },
- },
- tmpfs => {
- mount => sub {
- my ($live, $dir) = @_;
- my $mnt = $live->{prefix}{live}{mnt} . $dir->{mountpoint};
- my $cmd = "mount -t tmpfs $mnt $mnt";
- $dir->{fallback} ? qq(sh -c 'if ! grep -q " $mnt " /proc/mounts; then $cmd; fi') : $cmd;
- },
- },
-);
-
my %overlay = (
unionfs => {
modules => [ qw(unionfs) ],