package install_interactive; # $Id$
use diagnostics;
use strict;
use common;
use partition_table qw(:types);
use partition_table::raw;
use detect_devices;
use install_steps;
use install_any;
use devices;
use fsedit;
use log;
use fs;
sub tellAboutProprietaryModules {
my ($o) = @_;
my @l = grep { $_ } map { $_->{driver} =~ /^Bad:(.*)/ && $1 } detect_devices::probeall();
$o->ask_warn('', formatAlaTeX(
N("Some hardware on your computer needs ``proprietary'' drivers to work.
You can find some information about them at: %s", join(", ", @l)))) if @l;
}
#- unit of $mb is mega bytes, min and max are in sectors, this
#- function is used to convert back to sectors count the size of
#- a partition ($mb) given from the interface (on Resize or Create).
#- modified to take into account a true bounding with min and max.
sub from_Mb {
my ($mb, $min, $max) = @_;
$mb <= $min >> 11 and return $min;
$mb >= $max >> 11 and return $max;
$mb * 2048;
}
sub partition_with_diskdrake {
my ($o, $all_hds, $nowizard) = @_;
my $ok;
do {
$ok = 1;
my $do_force_reload = sub {
$o->{all_hds} = fsedit::empty_all_hds();
install_any::getHds($o, $o);
$all_hds = $o->{all_hds};
$o->{all_hds};
};
require diskdrake::interactive;
{
local $::expert = $::expert;
diskdrake::interactive::main($o, $all_hds, $nowizard, $do_force_reload, $o->interactive_help_sub_display_id('partition_with_diskdrake'));
}
if (delete $o->{wizard}) {
partitionWizard($o, 'nodiskdrake') or redo;
return 1;
}
my @fstab = fsedit::get_all_fstab($all_hds);
unless (fsedit::get_root_(\@fstab)) {
$ok = 0;
$o->ask_okcancel('', N("You must have a root partition.
For this, create a partition (or click on an existing one).
Then choose action ``Mount point'' and set it to `/'"), 1) or return;
}
if (!any { isSwap($_) } @fstab) {
$ok &&= $o->ask_okcancel('', N("You don't have a swap partition.\n\nContinue anyway?"));
}
if (arch() =~ /ia64/ && !fsedit::has_mntpoint("/boot/efi", $all_hds)) {
$o->ask_warn('', N("You must have a FAT partition mounted in /boot/efi"));
$ok = '';
}
} until $ok;
1;
}
sub partitionWizardSolutions {
my ($o, $all_hds) = @_;
my $hds = $all_hds->{hds};
my $fstab = [ fsedit::get_all_fstab($all_hds) ];
my @wizlog;
my (%solutions);
my $min_linux = 400 << 11;
my $max_linux = 3000 << 11;
my $min_swap = 50 << 11;
my $max_swap = 300 << 11;
my $min_freewin = 100 << 11;
# each solution is a [ score, text, function ], where the function retunrs true if succeeded
my @hds_rw = grep { !$_->{readonly} } @$hds;
my @hds_can_add = grep { $_->can_raw_add } @hds_rw;
if (fsedit::free_space(@hds_can_add) > $min_linux) {
$solutions{free_space} = [ 20, N("Use free space"), sub { fsedit::auto_allocate($all_hds); 1 } ]
} else {
push @wizlog, N("Not enough free space to allocate new partitions") . ": " .
(@hds_can_add ?
fsedit::free_space(@hds_can_add) . " < $min_linux" :
"no harddrive on which partitions can be added");
}
if (my @truefs = grep { isTrueFS($_) } @$fstab) {
#- value twice the ext2 partitions
$solutions{existing_part} = [ 6 + @truefs + @$fstab, N("Use existing partitions"), sub { $o->ask_mntpoint_s($fstab) } ]
} else {
push @wizlog, N("There is no existing partition to use");
}
my @fats = grep { isFat($_) } @$fstab;
fs::df($_) foreach @fats;
if (my @ok_forloopback = sort { $b->{free} <=> $a->{free} } grep { $_->{free} > $min_linux + $min_swap + $min_freewin } @fats) {
$solutions{loopback} =
[ -10 - @fats, N("Use the Windows partition for loopback"),
sub {
my ($s_root, $s_swap);
my $part = $o->ask_from_listf('', N("Which partition do you want to use for Linux4Win?"), \&partition_table::description, \@ok_forloopback) or return;
$max_swap = $min_swap + 1 if $part->{free} - $max_swap < $min_linux;
$o->ask_from('', N("Choose the sizes"), [
{ label => N("Root partition size in MB: "), val => \$s_root, min => $min_linux >> 11, max => min($part->{free} - $max_swap, $max_linux) >> 11, type => 'range' },
{ label => N("Swap partition size in MB: "), val => \$s_swap, min => $min_swap >> 11, max => $max_swap >> 11, type => 'range' },
]) or return;
push @{$part->{loopback}},
{ type =>0x483, loopback_file => '/lnx4win/linuxsys.img', mntpoint => '/', size => $s_root << 11, loopback_device => $part, notFormatted => 1 },
{ type => 0x82, loopback_file => '/lnx4win/swapfile', mntpoint => 'swap', size => $s_swap << 11, loopback_device => $part, notFormatted => 1 };
fsedit::recompute_loopbacks($all_hds);
1;
} ];
} else {
push @wizlog, N("There is no FAT partition to use as loopback (or not enough space left)") .
(@fats ? "\nFAT partitions:" . join('', map { "\n $_->{device} $_->{free} (" . ($min_linux + $min_swap + $min_freewin) . ")" } @fats) : '');
}
if (my @ok_for_resize_fat = grep { isFat_or_NTFS($_) && !fsedit::part2hd($_, $all_hds)->{readonly} } @$fstab) {
$solutions{resize_fat} =
[ 6 - @ok_for_resize_fat, N("Use the free space on the Windows partition"),
sub {
my $part = $o->ask_from_listf_raw({ messages => N("Which partition do you want to resize?"),
interactive_help_id => 'resizeFATChoose',
}, \&partition_table::description, \@ok_for_resize_fat) or return;
my $hd = fsedit::part2hd($part, $all_hds);
my $resize_fat = eval {
my $pkg = isFat($part) ? do {
require resize_fat::main;
'resize_fat::main';
} : do {
require diskdrake::resize_ntfs;
'diskdrake::resize_ntfs';
};
$pkg->new($part->{device}, devices::make($part->{device}));
};
$@ and die \N("The FAT resizer is unable to handle your partition,
the following error occured: %s", formatError($@));
my $min_win = do {
my $_w = $o->wait_message(N("Resizing"), N("Computing the size of the Windows partition"));
$resize_fat->min_size;
};
#- make sure that even after normalizing the size to cylinder boundaries, the minimun will be saved,
#- this save at least a cylinder (less than 8Mb).
$min_win += partition_table::raw::cylinder_size($hd);
$part->{size} > $min_linux + $min_swap + $min_freewin + $min_win or die \N("Your Windows partition is too fragmented. Please reboot your computer under Windows, run the ``defrag'' utility, then restart the Mandrake Linux installation.");
$o->ask_okcancel('', N("WARNING!
DrakX will now resize your Windows partition. Be careful:
this operation is dangerous. If you have not already done
so, you should first exit the installation, run scandisk
under Windows (and optionally run defrag), then restart the
installation. You should also backup your data.
When sure, press Ok.")) or return;
my $mb_size = $part->{size} >> 11;
$o->ask_from('', N("Which size do you want to keep for Windows on"), [
{ label => N("partition %s", partition_table::description($part)), val => \$mb_size, min => $min_win >> 11, max => ($part->{size} - $min_linux - $min_swap) >> 11, type => 'range' },
]) or return;
my $oldsize = $part->{size};
$part->{size} = from_Mb($mb_size, $min_win, $part->{size});
$hd->adjustEnd($part);
eval {
my $_w = $o->wait_message(N("Resizing"), N("Resizing Windows partition"));
$resize_fat->resize($part->{size});
};
if (my $err = $@) {
$part->{size} = $oldsize;
die \N("FAT resizing failed: %s", formatError($err));
}
$part->{isFormatted} = 1;
$hd->{isDirty} = $hd->{needKernelReread} = 1;
partition_table::adjust_local_extended($hd, $part);
partition_table::adjust_main_extended($hd);
fsedit::auto_allocate($all_hds);
1;
} ];
} else {
push @wizlog, N("There is no FAT partition to resize (or not enough space left)");
}
if (@$fstab && @hds_rw) {
$solutions{wipe_drive} =
[ 10, fsedit::is_one_big_fat_or_NT($hds) ? N("Remove Windows(TM)") : N("Erase entire disk"),
sub {
my $hd = $o->ask_from_listf_raw({ messages => N("You have more than one hard drive, which one do you install linux on?"),
interactive_help_id => 'takeOverHdChoose',
},
\&partition_table::description, \@hds_rw) or return;
$o->ask_okcancel_({ messages => N("ALL existing partitions and their data will be lost on drive %s", partition_table::description($hd)),
interactive_help_id => 'takeOverHdConfirm' }) or return;
partition_table::raw::zero_MBR($hd);
fsedit::auto_allocate($all_hds);
1;
} ];
}
if (@hds_rw) {
$solutions{diskdrake} = [ 0, N("Custom disk partitioning"), sub { partition_with_diskdrake($o, $all_hds, 'nowizard') } ];
}
$solutions{fdisk} =
[ -10, N("Use fdisk"), sub {
$o->enter_console;
foreach (@$hds) {
print "\n" x 10, N("You can now partition %s.
When you are done, don't forget to save using `w'", partition_table::description($_));
print "\n\n";
my $pid = 0;
if (arch() =~ /ppc/) {
$pid = fork() or exec "pdisk", devices::make($_->{device});
} else {
$pid = fork() or exec "fdisk", devices::make($_->{device});
}
waitpid($pid, 0);
}
$o->leave_console;
0;
} ] if $o->{partitioning}{fdisk};
log::l("partitioning wizard log:\n", (map { ">>wizlog>>$_\n" } @wizlog));
%solutions;
}
sub partitionWizard {
my ($o, $nodiskdrake) = @_;
my %solutions = partitionWizardSolutions($o, $o->{all_hds});
delete $solutions{diskdrake} if $nodiskdrake;
my @solutions = sort { $b->[0] <=> $a->[0] } values %solutions;
my $level = $::expert ? -9999 : 0;
my @sol = grep { $_->[0] >= $level } @solutions;
log::l('' . "solutions found: " . join('', map { $_->[1] } @sol) .
" (all solutions found: " . join('', map { $_->[1] } @solutions) . ")");
@solutions = @sol if @sol > 1;
log::l("solutions: ", int @solutions);
@solutions or $o->ask_warn('', N("I can't find any room for installing")), die 'already displayed';
log::l('HERE: ', join(',', map { $_->[1] } @solutions));
my $sol;
$o->ask_from_({ messages => N("The DrakX Partitioning wizard found the following solutions:"),
interactive_help_id => 'doPartitionDisks',
},
[ { val => \$sol, list => \@solutions, format => sub { $_[0][1] }, type => 'list' } ]);
log::l("partitionWizard calling solution $sol->[1]");
my $ok = eval { $sol->[2]->() };
$@ and $o->ask_warn('', N("Partitioning failed: %s", formatError($@)));
$ok or goto &partitionWizard;
1;
}
sub upNetwork {
my ($o, $pppAvoided) = @_;
my $_w = $o->wait_message('', N("Bringing up the network"));
install_steps::upNetwork($o, $pppAvoided);
}
sub downNetwork {
my ($o, $pppOnly) = @_;
my $_w = $o->wait_message('', N("Bringing down the network"));
install_steps::downNetwork($o, $pppOnly);
}
1;
лакай истифодашуда дорад, миёна рад "
"шуд"
-#: ../urpm.pm:207 ../urpm.pm:1211 ../urpm.pm:1221
+#: ../urpm.pm:208 ../urpm.pm:1213 ../urpm.pm:1223
#, c-format
msgid "unable to access hdlist file of \"%s\", medium ignored"
msgstr "дохилшавии файли hdlist-и \"%s\" номумкин, муҳит рад шуд"
-#: ../urpm.pm:210 ../urpm.pm:2379
+#: ../urpm.pm:211 ../urpm.pm:2380
#, c-format
msgid "unable to access list file of \"%s\", medium ignored"
msgstr "дохилшавии файли рӯйхати \"%s\" номумкин, муҳит рад шуд"
-#: ../urpm.pm:238
+#: ../urpm.pm:239
#, c-format
msgid "trying to bypass existing medium \"%s\", avoiding"
msgstr "кӯшиши гузаштани муҳити вуҷуддоштаи \"%s\", кандашавӣ"
-#: ../urpm.pm:246
+#: ../urpm.pm:247
#, c-format
msgid ""
"virtual medium \"%s\" should not have defined hdlist or list file, medium "
@@ -163,254 +163,254 @@ msgstr ""
"сарчашмаи маҷозӣ \"%s\"на бояд файли муайяни hdlist ё файли рӯйхатиродошта "
"бошад, сарчашма ба эътибор гирифта намешавад"
-#: ../urpm.pm:251
+#: ../urpm.pm:252
#, c-format
msgid "virtual medium \"%s\" should have a clear url, medium ignored"
msgstr ""
"сарчашмаи маҷозӣ \"%s\" бояд url-и холӣ дошта бошад, сарчашма эътиборнадорад"
-#: ../urpm.pm:260
+#: ../urpm.pm:261
#, c-format
msgid "unable to find hdlist file for \"%s\", medium ignored"
msgstr "ёфтани файли hdlist барои \"%s\" номумкин, муҳит рад шуд"
-#: ../urpm.pm:267
+#: ../urpm.pm:268
#, c-format
msgid "unable to find list file for \"%s\", medium ignored"
msgstr "дарёфти файли рӯйхат барои \"%s\" номумкин, муҳит рад шуд"
-#: ../urpm.pm:289
+#: ../urpm.pm:290
#, c-format
msgid "inconsistent list file for \"%s\", medium ignored"
msgstr "файли рӯйхати бемуносибат барои \"%s\", муҳит рад шуд"
-#: ../urpm.pm:297
+#: ../urpm.pm:298
#, c-format
msgid "unable to inspect list file for \"%s\", medium ignored"
msgstr ""
"аз назар гузаронидани файли рӯйхат барои \"%s\" номумкин, муҳит рад шуд"
-#: ../urpm.pm:330
+#: ../urpm.pm:331
#, c-format
msgid "too many mount points for removable medium \"%s\""
msgstr "нуқтаи васлкунии хеле зиёд барои миёнаи хориҷшаванда \"%s\""
-#: ../urpm.pm:331
+#: ../urpm.pm:332
#, c-format
msgid "taking removable device as \"%s\""
msgstr "қабули дастгоҳи хориҷшаванда ҳамчун \"%s\""
-#: ../urpm.pm:335
+#: ../urpm.pm:336
#, c-format
msgid "using different removable device [%s] for \"%s\""
msgstr "истифодаи дигар дастгоҳи хориҷшавандаи [%s] барои \"%s\""
-#: ../urpm.pm:340 ../urpm.pm:343
+#: ../urpm.pm:341 ../urpm.pm:344
#, c-format
msgid "unable to retrieve pathname for removable medium \"%s\""
msgstr "барқарори номироҳ барои миёнаи хориҷшаванда \"%s\""
-#: ../urpm.pm:368
+#: ../urpm.pm:369
#, c-format
msgid "unable to write config file [%s]"
msgstr "навиштани файли танзимдарории [%s] номумкин"
-#: ../urpm.pm:372
+#: ../urpm.pm:373
#, c-format
msgid "unable to write file [%s]"
msgstr "навиштани файли [%s] номумкин аст"
-#: ../urpm.pm:379
+#: ../urpm.pm:380
#, c-format
msgid "write config file [%s]"
msgstr "файли танзимдарории [%s] нависед"
-#: ../urpm.pm:391
+#: ../urpm.pm:392
#, c-format
msgid "Can't use parallel mode with use-distrib mode"
msgstr "Усули параметрҳоро бо усули use-distrib якҷоя истифода бурда намешавад"
-#: ../urpm.pm:401
+#: ../urpm.pm:402
#, c-format
msgid "unable to parse \"%s\" in file [%s]"
msgstr "таҷзияи \"%s\" дар файли [%s] номумкин"
-#: ../urpm.pm:411
+#: ../urpm.pm:412
#, c-format
msgid "examining parallel handler in file [%s]"
msgstr "санҷидани дастгузори параллел дар файли [%s]"
-#: ../urpm.pm:421
+#: ../urpm.pm:422
#, c-format
msgid "found parallel handler for nodes: %s"
msgstr "дастгузори параллел ёфт шуд барои гиреҳҳо: %s"
-#: ../urpm.pm:425
+#: ../urpm.pm:426
#, c-format
msgid "using associated media for parallel mode: %s"
msgstr "барои навъи параллелӣ расонаи вобасташуда истифода мешавад: %s"
-#: ../urpm.pm:429
+#: ../urpm.pm:430
#, c-format
msgid "unable to use parallel option \"%s\""
msgstr "истифодабарии хосияти параллели \"%s\" номумкуин"
-#: ../urpm.pm:440
+#: ../urpm.pm:441
#, c-format
msgid ""
"--synthesis cannot be used with --media, --excludemedia, --sortmedia, --"
"update or --parallel"
msgstr "--synthesis бо --media, --update ё --parallel истифода бурда намешавад"
-#: ../urpm.pm:492 ../urpm.pm:518 ../urpm.pm:953 ../urpm.pm:964 ../urpm.pm:1033
-#: ../urpm.pm:1050 ../urpm.pm:1135 ../urpm.pm:1194 ../urpm.pm:1422
-#: ../urpm.pm:1541 ../urpm.pm:1656 ../urpm.pm:1662 ../urpm.pm:1762
-#: ../urpm.pm:1848 ../urpm.pm:1852
+#: ../urpm.pm:493 ../urpm.pm:519 ../urpm.pm:954 ../urpm.pm:965 ../urpm.pm:1034
+#: ../urpm.pm:1051 ../urpm.pm:1137 ../urpm.pm:1196 ../urpm.pm:1423
+#: ../urpm.pm:1542 ../urpm.pm:1657 ../urpm.pm:1663 ../urpm.pm:1763
+#: ../urpm.pm:1849 ../urpm.pm:1853
#, c-format
msgid "examining synthesis file [%s]"
msgstr "санҷидани файли synthesis [%s]"
-#: ../urpm.pm:496 ../urpm.pm:511 ../urpm.pm:524 ../urpm.pm:956 ../urpm.pm:967
-#: ../urpm.pm:1039 ../urpm.pm:1045 ../urpm.pm:1140 ../urpm.pm:1198
-#: ../urpm.pm:1426 ../urpm.pm:1545 ../urpm.pm:1650 ../urpm.pm:1668
-#: ../urpm.pm:1858
+#: ../urpm.pm:497 ../urpm.pm:512 ../urpm.pm:525 ../urpm.pm:957 ../urpm.pm:968
+#: ../urpm.pm:1040 ../urpm.pm:1046 ../urpm.pm:1142 ../urpm.pm:1200
+#: ../urpm.pm:1427 ../urpm.pm:1546 ../urpm.pm:1651 ../urpm.pm:1669
+#: ../urpm.pm:1859
#, c-format
msgid "examining hdlist file [%s]"
msgstr "санҷидани файли hdlist [%s]"
-#: ../urpm.pm:506 ../urpm.pm:960
+#: ../urpm.pm:507 ../urpm.pm:961
#, c-format
msgid "virtual medium \"%s\" is not local, medium ignored"
msgstr ""
"сарчашмаи маҷозӣ \"%s\"маҳаллӣ нест, сарчашма ба эътибор гирифта намешавад"
-#: ../urpm.pm:534 ../urpm.pm:974 ../urpm.pm:1058 ../urpm.pm:1144
-#: ../urpm.pm:1549
+#: ../urpm.pm:535 ../urpm.pm:975 ../urpm.pm:1059 ../urpm.pm:1146
+#: ../urpm.pm:1550
#, c-format
msgid "problem reading hdlist or synthesis file of medium \"%s\""
msgstr "муаммои хондани файли hdlist ё файли сарчашмаи synthesis \"%s\""
-#: ../urpm.pm:540 ../urpm.pm:1801
+#: ../urpm.pm:541 ../urpm.pm:1802
#, c-format
msgid "performing second pass to compute dependencies\n"
msgstr "роҳи дуюми ҳисоби вобастагиҳо ба амал оварда мешавад\n"
-#: ../urpm.pm:555
+#: ../urpm.pm:556
#, c-format
msgid "skipping package %s"
msgstr "қуттӣ парофта мешавад %s"
-#: ../urpm.pm:568
+#: ../urpm.pm:569
#, c-format
msgid "would install instead of upgrade package %s"
msgstr "ба ҷои аз нав намудани қуттӣ коргузорӣ амалӣ хоҳад шуд %s"
-#: ../urpm.pm:579 ../urpm.pm:2193 ../urpm.pm:2256 ../urpm.pm:2821
-#: ../urpm.pm:2938
+#: ../urpm.pm:580 ../urpm.pm:2194 ../urpm.pm:2257 ../urpm.pm:2822
+#: ../urpm.pm:2939
#, c-format
msgid "unable to open rpmdb"
msgstr "кушодани rpmdb номумкин"
-#: ../urpm.pm:617
+#: ../urpm.pm:618
#, c-format
msgid "medium \"%s\" already exists"
msgstr "муҳити \"%s\" аллакай вуҷуд дорад"
-#: ../urpm.pm:624
+#: ../urpm.pm:625
#, c-format
msgid "virtual medium needs to be local"
msgstr "сарчашмаи маҷозӣ бояд маҳаллӣ бошад"
-#: ../urpm.pm:662
+#: ../urpm.pm:663
#, c-format
msgid "added medium %s"
msgstr "миёнаи иловашуда %s"
-#: ../urpm.pm:682
+#: ../urpm.pm:683
#, c-format
msgid "unable to access first installation medium"
msgstr "дохилшавӣ ба миёнаи коргузориши аввала номумкин"
-#: ../urpm.pm:686
+#: ../urpm.pm:687
#, c-format
msgid "copying hdlists file..."
msgstr "нусхабардории файли hdlists..."
-#: ../urpm.pm:688 ../urpm.pm:1073 ../urpm.pm:1239 ../urpm.pm:1297
-#: ../urpm.pm:1490 ../urpm.pm:1496
+#: ../urpm.pm:689 ../urpm.pm:1074 ../urpm.pm:1241 ../urpm.pm:1297
+#: ../urpm.pm:1491 ../urpm.pm:1497
#, c-format
msgid "...copying failed"
msgstr "...нусхабардорӣ нагузашт"
-#: ../urpm.pm:689 ../urpm.pm:1074 ../urpm.pm:1168
+#: ../urpm.pm:690 ../urpm.pm:1075 ../urpm.pm:1170
#, c-format
msgid "...copying done"
msgstr "...нусхабардорӣ шуд"
-#: ../urpm.pm:692 ../urpm.pm:715 ../urpm.pm:746
+#: ../urpm.pm:693 ../urpm.pm:716 ../urpm.pm:747
#, c-format
msgid "unable to access first installation medium (no hdlists file found)"
msgstr ""
"дохилшавӣ ба миёнаи коргузориши аввала номумкин (файли hdlists ёфт нашуд)"
-#: ../urpm.pm:698
+#: ../urpm.pm:699
#, c-format
msgid "retrieving hdlists file..."
msgstr "барқароркунии файли hdlists..."
-#: ../urpm.pm:709 ../urpm.pm:1531 ../urpm.pm:2008 ../urpm.pm:2693
+#: ../urpm.pm:710 ../urpm.pm:1532 ../urpm.pm:2009 ../urpm.pm:2694
#: ../urpmi.addmedia:167
#, c-format
msgid "...retrieving done"
msgstr "...барқароркунӣ шуд"
-#: ../urpm.pm:711 ../urpm.pm:1515 ../urpm.pm:1524 ../urpm.pm:2011
-#: ../urpm.pm:2695 ../urpmi:629 ../urpmi.addmedia:169
+#: ../urpm.pm:712 ../urpm.pm:1516 ../urpm.pm:1525 ../urpm.pm:2012
+#: ../urpm.pm:2696 ../urpmi:629 ../urpmi.addmedia:169
#, c-format
msgid "...retrieving failed: %s"
msgstr "...барқароркунӣ нагузашт: %s"
-#: ../urpm.pm:731
+#: ../urpm.pm:732
#, c-format
msgid "invalid hdlist description \"%s\" in hdlists file"
msgstr "invalid hdlist description \"%s\" in hdlists file"
-#: ../urpm.pm:782
+#: ../urpm.pm:783
#, c-format
msgid "trying to select nonexistent medium \"%s\""
msgstr "кӯшиши интихоби муҳити вуҷуд надоштаи \"%s\""
-#: ../urpm.pm:784
+#: ../urpm.pm:785
#, c-format
msgid "selecting multiple media: %s"
msgstr "интихобкунии миёнаи бисёр: %s"
-#: ../urpm.pm:784
+#: ../urpm.pm:785
#, c-format
msgid "\"%s\""
msgstr "\"%s\""
-#: ../urpm.pm:800
+#: ../urpm.pm:801
#, c-format
msgid "removing medium \"%s\""
msgstr "хориҷкунии миёнаи \"%s\""
-#: ../urpm.pm:851
+#: ../urpm.pm:852
#, c-format
msgid "reconfiguring urpmi for media \"%s\""
msgstr "бозтанзимкунии urpmi барои миёнаи \"%s\""
-#: ../urpm.pm:877
+#: ../urpm.pm:878
#, c-format
msgid "...reconfiguration failed"
msgstr "...бозтанзимкунӣ бо нокомӣ анҷомид"
-#: ../urpm.pm:884
+#: ../urpm.pm:885
#, c-format
msgid "reconfiguration done"
msgstr "бозтанзимгузорӣ хотима ёфт"
-#: ../urpm.pm:1011
+#: ../urpm.pm:1012
#, c-format
msgid ""
"unable to access medium \"%s\",\n"
@@ -421,7 +421,7 @@ msgstr ""
"ин ҳангоми ба таври дастӣ насб намудани феҳрист дар ҳолати сохтанисарчашма "
"ба амал меояд."
-#: ../urpm.pm:1062
+#: ../urpm.pm:1063
#, c-format
msgid ""
"virtual medium \"%s\" should have valid source hdlist or synthesis, medium "
@@ -430,231 +430,236 @@ msgstr ""
"сарчашмаи маҷозии\"%s\" бояд hdlist-и аввали дурустро дошт бошад ё ин "
"киsynthesis, сарчашма эътибор надорад"
-#: ../urpm.pm:1070
+#: ../urpm.pm:1071
#, c-format
msgid "copying description file of \"%s\"..."
msgstr "нусхабардории файли тавсифоти \"%s\"..."
-#: ../urpm.pm:1095 ../urpm.pm:1382
+#: ../urpm.pm:1096 ../urpm.pm:1382
#, c-format
msgid "computing md5sum of existing source hdlist (or synthesis)"
msgstr "ҳисоби md5sum-и сарчашмаи вуҷуд доштаи hdlist (ё ин ки synthesis)"
-#: ../urpm.pm:1106 ../urpm.pm:1393
+#: ../urpm.pm:1107 ../urpm.pm:1393
#, c-format
msgid "examining MD5SUM file"
msgstr "санҷидани файли MD5SUM"
-#: ../urpm.pm:1160
+#: ../urpm.pm:1162
#, c-format
msgid "copying source hdlist (or synthesis) of \"%s\"..."
msgstr "нусхабардории сарчашмаи hdlist (ё synthesis)-и \"%s\"..."
-#: ../urpm.pm:1174
+#: ../urpm.pm:1176
#, c-format
msgid "copy of [%s] failed (file is suspiciously small)"
msgstr "нусхабардории [%s] бо нокомӣ анҷомид (файл шубҳаомез кӯтоҳ аст)"
-#: ../urpm.pm:1179
+#: ../urpm.pm:1181
#, c-format
msgid "computing md5sum of copied source hdlist (or synthesis)"
msgstr ""
"hdlist (ё ин ки synthesis) аввали нусха гирифташуда ҳисоб мешавад md5sum"
-#: ../urpm.pm:1181
+#: ../urpm.pm:1183
#, c-format
msgid "copy of [%s] failed (md5sum mismatch)"
msgstr "нусхабардории [%s] бо нокомӣ анҷомид (ба md5sum мутобиқат намекунад)"
-#: ../urpm.pm:1202 ../urpm.pm:1430 ../urpm.pm:1765
+#: ../urpm.pm:1204 ../urpm.pm:1431 ../urpm.pm:1766
#, c-format
msgid "problem reading synthesis file of medium \"%s\""
msgstr "муаммои хондани файли synthesis-и муҳити \"%s\""
-#: ../urpm.pm:1255
+#: ../urpm.pm:1254
#, c-format
msgid "reading rpm files from [%s]"
msgstr "хониши файлҳои rpm аз [%s]"
-#: ../urpm.pm:1280
+#: ../urpm.pm:1269
+#, c-format
+msgid "no rpms read"
+msgstr ""
+
+#: ../urpm.pm:1279
#, c-format
msgid "unable to read rpm files from [%s]: %s"
msgstr "хондани файли rpm номумкин аз [%s]: %s"
-#: ../urpm.pm:1285
+#: ../urpm.pm:1284
#, c-format
msgid "no rpm files found from [%s]"
msgstr "файлҳои rpm аз [%s] ёфт нашуданд"
-#: ../urpm.pm:1448
+#: ../urpm.pm:1449
#, c-format
msgid "retrieving source hdlist (or synthesis) of \"%s\"..."
msgstr "барқароркунии сарчашмаи hdlist (ё synthesis) \"%s\"..."
-#: ../urpm.pm:1475
+#: ../urpm.pm:1476
#, c-format
msgid "found probed hdlist (or synthesis) as %s"
msgstr "hdlist (ё synthesis)-и таҳқиқшуда ёфт шуд ҳамчун %s"
-#: ../urpm.pm:1522
+#: ../urpm.pm:1523
#, c-format
msgid "computing md5sum of retrieved source hdlist (or synthesis)"
msgstr ""
"аз hdlist-и аввалаи гирифташуда md5sum ҳисоб карда мешавад(ё ин ки synthesis)"
-#: ../urpm.pm:1524
+#: ../urpm.pm:1525
#, c-format
msgid "md5sum mismatch"
msgstr "мувофиқ набудан ба md5sum"
-#: ../urpm.pm:1620
+#: ../urpm.pm:1621
#, c-format
msgid "retrieval of source hdlist (or synthesis) failed"
msgstr "hdlist (ё synthesis)-и аввала ба даст оварда нашуд"
-#: ../urpm.pm:1627
+#: ../urpm.pm:1628
#, c-format
msgid "no hdlist file found for medium \"%s\""
msgstr "файли hdlist барои муҳити \"%s\" ёфт нашуд"
-#: ../urpm.pm:1638 ../urpm.pm:1692
+#: ../urpm.pm:1639 ../urpm.pm:1693
#, c-format
msgid "file [%s] already used in the same medium \"%s\""
msgstr "файли [%s] дар сарчашмаи монанд аллакай истифода мешавад \"%s\""
-#: ../urpm.pm:1678
+#: ../urpm.pm:1679
#, c-format
msgid "unable to parse hdlist file of \"%s\""
msgstr "таҷзияи файли hdlist - и \"%s\" номумкин"
-#: ../urpm.pm:1715
+#: ../urpm.pm:1716
#, c-format
msgid "unable to write list file of \"%s\""
msgstr "навиштани файли рӯйхатии \"%s\" номумкин"
-#: ../urpm.pm:1722
+#: ../urpm.pm:1723
#, c-format
msgid "writing list file for medium \"%s\""
msgstr "навиштани файли рӯйхат барои миёнаи \"%s\""
-#: ../urpm.pm:1724
+#: ../urpm.pm:1725
#, c-format
msgid "nothing written in list file for \"%s\""
msgstr "дар файли рӯйхат барои \"%s\" чизе навишта нашудааст"
-#: ../urpm.pm:1739
+#: ../urpm.pm:1740
#, c-format
msgid "examining pubkey file of \"%s\"..."
msgstr "барои \"%s\"файли калиди кушод тафтиш карда мешавад..."
-#: ../urpm.pm:1746
+#: ../urpm.pm:1747
#, c-format
msgid "...imported key %s from pubkey file of \"%s\""
msgstr "...калиди гирифта шуда %s аз файли калиди кушода \"%s\""
-#: ../urpm.pm:1749
+#: ../urpm.pm:1750
#, c-format
msgid "unable to import pubkey file of \"%s\""
msgstr "навиштани файли рӯйхатии \"%s\" номумкин"
-#: ../urpm.pm:1815
+#: ../urpm.pm:1816
#, c-format
msgid "reading headers from medium \"%s\""
msgstr "хониши сарлавҳаҳо аз миёнаи \"%s\""
-#: ../urpm.pm:1820
+#: ../urpm.pm:1821
#, c-format
msgid "building hdlist [%s]"
msgstr "офариниши hdlist [%s]"
-#: ../urpm.pm:1835 ../urpm.pm:1870
+#: ../urpm.pm:1836 ../urpm.pm:1871
#, c-format
msgid ""
"Unable to build synthesis file for medium \"%s\". Your hdlist file may be "
"corrupted."
msgstr ""
-#: ../urpm.pm:1838 ../urpm.pm:1873 ../urpmi:356
+#: ../urpm.pm:1839 ../urpm.pm:1874 ../urpmi:356
#, c-format
msgid "built hdlist synthesis file for medium \"%s\""
msgstr "файли сунъии офаридаи hdlist барои муҳити \"%s\""
-#: ../urpm.pm:1894
+#: ../urpm.pm:1895
#, c-format
msgid "found %d headers in cache"
msgstr "%d сарлавҳаҳо дар кэш ёфт шуданд"
-#: ../urpm.pm:1898
+#: ../urpm.pm:1899
#, c-format
msgid "removing %d obsolete headers in cache"
msgstr "хориҷи сарлавҳаҳои кӯҳнашудаи %d дар кэш"
-#: ../urpm.pm:1948
+#: ../urpm.pm:1949
#, c-format
msgid "mounting %s"
msgstr "васлкунии %s"
-#: ../urpm.pm:1964
+#: ../urpm.pm:1965
#, c-format
msgid "unmounting %s"
msgstr "ҷудокунии %s"
-#: ../urpm.pm:1986
+#: ../urpm.pm:1987
#, c-format
msgid "relocated %s entries in depslist"
msgstr "элементҳои %s-и ҷойивазшуда дар depslist"
-#: ../urpm.pm:1987
+#: ../urpm.pm:1988
#, c-format
msgid "no entries relocated in depslist"
msgstr "ягон элемент ба depslist ҷойиваз нашуд"
-#: ../urpm.pm:2000
+#: ../urpm.pm:2001
#, c-format
msgid "invalid rpm file name [%s]"
msgstr "номи файли rpm-и нодурусти [%s]"
-#: ../urpm.pm:2006
+#: ../urpm.pm:2007
#, c-format
msgid "retrieving rpm file [%s] ..."
msgstr "барқароркунии файли rpm [%s] ..."
-#: ../urpm.pm:2013 ../urpm.pm:2863
+#: ../urpm.pm:2014 ../urpm.pm:2864
#, c-format
msgid "unable to access rpm file [%s]"
msgstr "дохилшавии файли rpm-и [%s] номумкин"
-#: ../urpm.pm:2018
+#: ../urpm.pm:2019
#, c-format
msgid "unable to register rpm file"
msgstr "бақайдгирии файли rpm номумкин"
-#: ../urpm.pm:2021
+#: ../urpm.pm:2022
#, c-format
msgid "error registering local packages"
msgstr "хатогии ба қайдгирии қуттиҳои маҳаллӣ"
-#: ../urpm.pm:2130
+#: ../urpm.pm:2131
#, c-format
msgid "no package named %s"
msgstr "қуттии бо номи %s нест"
-#: ../urpm.pm:2133 ../urpme:88
+#: ../urpm.pm:2134 ../urpme:88
#, c-format
msgid "The following packages contain %s: %s"
msgstr "Қуттиҳои зерин соҳиби %s: %s"
-#: ../urpm.pm:2316 ../urpm.pm:2360 ../urpm.pm:2386
+#: ../urpm.pm:2317 ../urpm.pm:2361 ../urpm.pm:2387
#, c-format
msgid "there are multiple packages with the same rpm filename \"%s\""
msgstr "қуттиҳои зиёде бо чунин номи файли rpm \"%s\" вуҷуд доранд"
-#: ../urpm.pm:2371
+#: ../urpm.pm:2372
#, c-format
msgid "unable to correctly parse [%s] on value \"%s\""
msgstr "таҷзияи дурсти [%s] дар қиммати \"%s\" номумкин"
-#: ../urpm.pm:2398
+#: ../urpm.pm:2399
#, c-format
msgid ""
"medium \"%s\" uses an invalid list file:\n"
@@ -663,144 +668,144 @@ msgstr ""
"сарчашмаи \"%s\" рӯйхати файли нодурустро истифода мебарад:\n"
" мумкин оина кӯҳна шудааст, барои истифодаи усули дигар кӯшиш намоед"
-#: ../urpm.pm:2402
+#: ../urpm.pm:2403
#, c-format
msgid "medium \"%s\" does not define any location for rpm files"
msgstr "сарчашмаи \"%s\" ҷойгиршавии файлҳои rpm-ро муаяйн намекунад"
-#: ../urpm.pm:2414
+#: ../urpm.pm:2415
#, c-format
msgid "package %s is not found."
msgstr "қуттии %s ёфт нашуд."
-#: ../urpm.pm:2454 ../urpm.pm:2469 ../urpm.pm:2493 ../urpm.pm:2508
+#: ../urpm.pm:2455 ../urpm.pm:2470 ../urpm.pm:2494 ../urpm.pm:2509
#, c-format
msgid "urpmi database locked"
msgstr "urpmi манбаи маълумот дастнорас аст"
-#: ../urpm.pm:2560 ../urpm.pm:2563 ../urpm.pm:2593
+#: ../urpm.pm:2561 ../urpm.pm:2564 ../urpm.pm:2594
#, c-format
msgid "medium \"%s\" is not selected"
msgstr "муҳити \"%s\" интихоб нашудааст"
-#: ../urpm.pm:2589
+#: ../urpm.pm:2590
#, c-format
msgid "unable to read rpm file [%s] from medium \"%s\""
msgstr "хондани файли rpm [%s] аз муҳити \"%s\" номумкин"
-#: ../urpm.pm:2597
+#: ../urpm.pm:2598
#, c-format
msgid "inconsistent medium \"%s\" marked removable but not really"
msgstr ""
"муҳити бемуносибати \"%s\" ҳамчун ивазшаванда ишора шудааст, локиннодуруст"
-#: ../urpm.pm:2609
+#: ../urpm.pm:2610
#, c-format
msgid "unable to access medium \"%s\""
msgstr "дохилшавии муҳити \"%s\" номумкин"
-#: ../urpm.pm:2671
+#: ../urpm.pm:2672
#, c-format
msgid "malformed input: [%s]"
msgstr "даровардани бад: [%s]"
-#: ../urpm.pm:2678
+#: ../urpm.pm:2679
#, c-format
msgid "retrieving rpm files from medium \"%s\"..."
msgstr "барқароркунии файли rpm аз миёна \"%s\"..."
-#: ../urpm.pm:2760 ../urpmi:707
+#: ../urpm.pm:2761 ../urpmi:707
#, c-format
msgid "Preparing..."
msgstr "Тайёрӣ..."
-#: ../urpm.pm:2794
+#: ../urpm.pm:2795
#, c-format
msgid "using process %d for executing transaction"
msgstr "раванди %d -ро барои иҷроиши амалиёт истифода баред"
-#: ../urpm.pm:2825
+#: ../urpm.pm:2826
#, c-format
msgid ""
"created transaction for installing on %s (remove=%d, install=%d, upgrade=%d)"
msgstr "тарокуниш барои коргузорӣ дар %s (remove=%d, install=%d, upgrade=%d)"
-#: ../urpm.pm:2828
+#: ../urpm.pm:2829
#, c-format
msgid "unable to create transaction"
msgstr "офаридани муҳит номумкин аст"
-#: ../urpm.pm:2835
+#: ../urpm.pm:2836
#, c-format
msgid "removing package %s"
msgstr "хориҷкунии қуттии %s"
-#: ../urpm.pm:2837
+#: ../urpm.pm:2838
#, c-format
msgid "unable to remove package %s"
msgstr "хориҷи қуттии %s номумкин"
-#: ../urpm.pm:2847
+#: ../urpm.pm:2848
#, c-format
msgid "adding package %s (id=%d, eid=%d, update=%d, file=%s)"
msgstr "иловаи барномаи коромода %s (id=%d, eid=%d, update=%d, file=%s)"
-#: ../urpm.pm:2850
+#: ../urpm.pm:2851
#, c-format
msgid "unable to install package %s"
msgstr "кор гузоштани қуттии %s номумкин"
-#: ../urpm.pm:2912
+#: ../urpm.pm:2913
#, c-format
msgid "More information on package %s"
msgstr "Ахбороти изофагӣ дар бастаи %s"
-#: ../urpm.pm:3070 ../urpm.pm:3103
+#: ../urpm.pm:3071 ../urpm.pm:3104
#, c-format
msgid "due to missing %s"
msgstr "аз сабаби мавҷуд набудан %s"
-#: ../urpm.pm:3071 ../urpm.pm:3101
+#: ../urpm.pm:3072 ../urpm.pm:3102
#, c-format
msgid "due to unsatisfied %s"
msgstr "аз сабаби қонеъ набудан %s"
-#: ../urpm.pm:3072
+#: ../urpm.pm:3073
#, c-format
msgid "trying to promote %s"
msgstr "кӯшиши фаъол намудан %s"
-#: ../urpm.pm:3073
+#: ../urpm.pm:3074
#, c-format
msgid "in order to keep %s"
msgstr "барои нигоҳдории %s"
-#: ../urpm.pm:3096
+#: ../urpm.pm:3097
#, c-format
msgid "in order to install %s"
msgstr "барои коргузоштани %s"
-#: ../urpm.pm:3108
+#: ../urpm.pm:3109
#, c-format
msgid "due to conflicts with %s"
msgstr "аз ҳисоби ба вуҷуд омадани муаммо бо %s"
-#: ../urpm.pm:3110
+#: ../urpm.pm:3111
#, c-format
msgid "unrequested"
msgstr "хоҳиш нашуда"
-#: ../urpm.pm:3126
+#: ../urpm.pm:3127
#, c-format
msgid "Invalid signature (%s)"
msgstr "Имзои нодуруст (%s)"
-#: ../urpm.pm:3158
+#: ../urpm.pm:3159
#, c-format
msgid "Invalid Key ID (%s)"
msgstr "Калиди нодуруст ID (%s)"
-#: ../urpm.pm:3160
+#: ../urpm.pm:3161
#, c-format
msgid "Missing signature (%s)"
msgstr "Имзо мавҷуд нест (%s)"