From 624880f4d92f8aff062256d3e088d6e929b47275 Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Wed, 3 Feb 2010 18:44:11 +0300 Subject: [PATCH] Add installation without unsquashfs, but with progressbar --- install/calculate | 52 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/install/calculate b/install/calculate index 4bad8c5..00fb347 100755 --- a/install/calculate +++ b/install/calculate @@ -3263,6 +3263,20 @@ sub extract{ return 1; }; +#------------------------------------------------------------------------------ +# Выполнить копирование с прогресс баром если возможно +#------------------------------------------------------------------------------ +sub copy_with_progress{ + my ($from, $to, $count) = @_; + if( $data{run_bar} ne "cp" && $count > 0 ) { + return system("$data{path} cp -av $from/* $to/ | ". + "cut -b 1000 | $data{run_bar} -ns -nth -nc -s $count >/dev/null"); + } + else { + return system("$data{path} cp -a $from/* $to/"); + } +} + #------------------------------------------------------------------------------ # Выполним распаковку #------------------------------------------------------------------------------ @@ -3276,10 +3290,11 @@ sub extract_exec{ }else{ printmes(" ".gettext('Unpack')); printmes(" $data{stage}... "); if($data{stage} !~m/iso$/){ - $unpack = "$data{patunsquashfsh} tar -xjpf $data{stagepath}/$data{stage} -C $data{mount}"; - }else{ - $unpack = "$data{path} unsquashfs -d $data{mount} -f /mnt/cdrom/livecd.squashfs"; + $unpack = "$data{path} tar -xjpf $data{stagepath}/$data{stage} -C $data{mount}"; } +# else{ +# $unpack = "$data{path} unsquashfs -d $data{mount} -f /mnt/cdrom/livecd.squashfs"; +# } } #путь к squashfs в случае установки из ISO файла или с CD-ROM @@ -3298,9 +3313,26 @@ sub extract_exec{ #установка с ISO файла на флешку return system("$data{path} rsync -a /mnt/cdrom/ $data{mount}"); }elsif(!$data{scratch_ws}){ - $bar ++; printmes("\n"); + my $install_from; + if($data{linux} =~ m/iso$/ || $data{stage} =~ m/iso$/ ){ + system "$data{path} mkdir /mnt/squashfs && mount -o loop $squashfs /mnt/squashfs"; + $install_from = "/mnt/squashfs"; + } + else { + $install_from = "/mnt/livecd"; + } #установка с ISO файла на жесткий диск ($data{type} = "hdd" или "usb-hdd") - return system("$data{path} unsquashfs -d $data{mount} -f $squashfs"); + my $count=int(`sed -rn \"\s/^files=(.*)\$/\\1/p\" $install_from/etc/calculate/calculate.ini`); + if($count > 0 ) { + $bar ++; printmes("\n"); + } else { + $bar = 0; + } + my $res = copy_with_progress($install_from,$data{mount},$count); + if($install_from == "/mnt/squashfs"){ + system "$data{path} umount $install_from && rmdir $install_from"; + } + return $res; }elsif($data{scratch_ws}){ if($data{run_bar} =~m/bar/){$bar ++; printmes("\n");} #установка путем копирования ISO файла на жесткий диск (режим установки scratch) @@ -5291,6 +5323,16 @@ sub createiso{ $squashfile = "/mnt/flash/$data{squash_cur}" } + printmes(" ".gettext('Calculating files for packing')); printmes("..."); + my $filesnum=int(`/usr/bin/find $data{tmpdir}/livecd/calculate/ | wc -l`); + my $calc_ini="$data{tmpdir}/livecd/calculate/etc/calculate/calculate.ini"; + system(qq{ grep ^files= $calc_ini &>/dev/null && + sed -ri "s/(^files=)(.*)\$/\\1$filesnum/" $calc_ini || + echo "files=$filesnum" >>$calc_ini + } + ); + printmes(" ".gettext('done')); printmes(".\n"); + printmes(" ".gettext('Packing system into squashfs format')); printmes("..."); if(system("/usr/bin/mksquashfs $data{tmpdir}/livecd/calculate/ $squashfile &>/dev/null")){ printmes(" ".gettext('error').".\n");