package install_any; # $Id$ use diagnostics; use strict; use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @needToCopy @needToCopyIfRequiresSatisfied $boot_medium @advertising_images); @ISA = qw(Exporter); %EXPORT_TAGS = ( all => [ qw(getNextStep spawnShell addToBeDone) ], ); @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; #-###################################################################################### #- misc imports #-###################################################################################### use MDK::Common::System; use common; use run_program; use partition_table qw(:types); use partition_table_raw; use devices; use fsedit; use modules; use detect_devices; use lang; use any; use log; use fs; #- package that have to be copied for proper installation (just to avoid changing cdrom) #- here XFree86 is copied entirey if not already installed, maybe better to copy only server. @needToCopy = qw( XFree86-8514 XFree86-AGX XFree86-Mach32 XFree86-Mach64 XFree86-Mach8 XFree86-Mono XFree86-P9000 XFree86-S3 XFree86-S3V XFree86-SVGA XFree86-W32 XFree86-I128 XFree86-Sun XFree86-SunMono XFree86-Sun24 XFree86-3DLabs XFree86-FBDev XFree86-server XFree86 XFree86-glide-module Device3Dfx Glide_V3-DRI Glide_V5 Mesa dhcpcd pump dhcpxd dhcp-client isdn4net isdn4k-utils dev pptp-adsl-fr rp-pppoe ppp ypbind rhs-printfilters lpr cups cups-drivers samba ncpfs ghostscript-utils autologin ); #- package that have to be copied only if all their requires are satisfied. @needToCopyIfRequiresSatisfied = qw( Mesa-common xpp libqtcups2 qtcups kups ); #- boot medium (the first medium to take into account). $boot_medium = 1; #-###################################################################################### #- Media change variables&functions #-###################################################################################### my $postinstall_rpms = ''; my $current_medium = $boot_medium; my $asked_medium = $boot_medium; my $cdrom = undef; sub useMedium($) { #- before ejecting the first CD, there are some files to copy! #- does nothing if the function has already been called. $_[0] > 1 and $::o->{method} eq 'cdrom' and setup_postinstall_rpms($::o->{prefix}, $::o->{packages}); $asked_medium eq $_[0] or log::l("selecting new medium '$_[0]'"); $asked_medium = $_[0]; } sub changeMedium($$) { my ($method, $medium) = @_; log::l("change to medium $medium for method $method (refused by default)"); 0; } sub relGetFile($) { local $_ = $_[0]; m|\.rpm$| ? "$::o->{packages}{mediums}{$asked_medium}{rpmsdir}/$_" : $_; } sub askChangeMedium($$) { my ($method, $medium) = @_; my $allow; do { eval { $allow = changeMedium($method, $medium) }; } while ($@); #- really it is not allowed to die in changeMedium!!! or install will cores with rpmlib!!! $allow; } sub errorOpeningFile($) { my ($file) = @_; $file eq 'XXX' and return; #- special case to force closing file after rpmlib transaction. $current_medium eq $asked_medium and log::l("errorOpeningFile $file"), return; #- nothing to do in such case. $::o->{packages}{mediums}{$asked_medium}{selected} or return; #- not selected means no need for worying about. my $max = 32; #- always refuse after $max tries. if ($::o->{method} eq "cdrom") { cat_("/proc/mounts") =~ m,(/(?:dev|tmp)/\S+)\s+(?:/mnt/cdrom|/tmp/image), and $cdrom = $1; return unless $cdrom; ejectCdrom($cdrom); while ($max > 0 && askChangeMedium($::o->{method}, $asked_medium)) { $current_medium = $asked_medium; eval { fs::mount($cdrom, "/tmp/image", "iso9660", 'readonly') }; my $getFile = getFile($file); $getFile && @advertising_images and copy_advertising($::o); $getFile and return $getFile; $current_medium = 'unknown'; #- don't know what CD is inserted now. ejectCdrom($cdrom); --$max; } } else { while ($max > 0 && askChangeMedium($::o->{method}, $asked_medium)) { $current_medium = $asked_medium; my $getFile = getFile($file); $getFile and return $getFile; $current_medium = 'unknown'; #- don't know what CD image has been copied. --$max; } } #- keep in mind the asked medium has been refused on this way. #- this means it is no more selected. $::o->{packages}{mediums}{$asked_medium}{selected} = undef; #- on cancel, we can expect the current medium to be undefined too, #- this enable remounting if selecting a package back. $current_medium = 'unknown'; return; } sub getFile { my ($f, $method) = @_; log::l("getFile $f:$method"); my $rel = relGetFile($f); do { if ($method =~ /crypto/i) { require crypto; crypto::getFile($f); } elsif ($::o->{method} eq "ftp") { require ftp; ftp::getFile($rel); } elsif ($::o->{method} eq "http") { require http; http::getFile($rel); } else { #- try to open the file, but examine if it is present in the repository, this allow #- handling changing a media when some of the file on the first CD has been copied #- to other to avoid media change... my $f2 = "$postinstall_rpms/$f"; $f2 = "/tmp/image/$rel" unless $postinstall_rpms && -e $f2; open GETFILE, $f2 and *GETFILE; } } || errorOpeningFile($f); } sub getAndSaveFile { my ($file, $local) = @_ == 1 ? ("Mandrake/mdkinst$_[0]", $_[0]) : @_; local *F; open F, ">$local" or return; local $/ = \ (16 * 1024); my $f = ref($file) ? $file : getFile($file) or return; local $_; while (<$f>) { syswrite F, $_ } 1; } #-###################################################################################### #- Post installation RPMS from cdrom only, functions #-###################################################################################### sub setup_postinstall_rpms($$) { my ($prefix, $packages) = @_; $postinstall_rpms and return; $postinstall_rpms = "$prefix/usr/postinstall-rpm"; require pkgs; require commands; log::l("postinstall rpms directory set to $postinstall_rpms"); clean_postinstall_rpms(); #- make sure in case of previous upgrade problem. commands::mkdir_('-p', $postinstall_rpms); #- compute closure of unselected package that may be copied, #- don't complain if package does not exists as it may happen #- for the various architecture taken into account (X servers). my %toCopy; foreach (@needToCopy) { my $pkg = pkgs::packageByName($packages, $_); pkgs::selectPackage($packages, $pkg, 0, \%toCopy) if $pkg; } @toCopy{@needToCopyIfRequiresSatisfied} = (); my @toCopy = map { pkgs::packageByName($packages, $_) } keys %toCopy; #- extract headers of package, this is necessary for getting #- the complete filename of each package. #- copy the package files in the postinstall RPMS directory. #- last arg is default medium '' known as the CD#1. pkgs::extractHeaders($prefix, \@toCopy, $packages->{mediums}{1}); commands::cp((map { "/tmp/image/" . relGetFile(pkgs::packageFile($_)) } @toCopy), $postinstall_rpms); } sub clean_postinstall_rpms() { require commands; $postinstall_rpms and -d $postinstall_rpms and commands::rm('-rf', $postinstall_rpms); } #-###################################################################################### #- Specific Hardware to take into account and associated rpms to install #-###################################################################################### sub allowNVIDIA_rpms { my ($packages) = @_; require pkgs; if (pkgs::packageByName($packages, "NVIDIA_GLX")) { #- at this point, we can allow using NVIDIA 3D acceleration packages. my @rpms; foreach (qw(kernel kernel-smp kernel-entreprise kernel22 kernel22-smp kernel22-secure)) { my $p = pkgs::packageByName($packages, $_); pkgs::packageSelectedOrInstalled($p) or next; my $name = "NVIDIA_kernel-" . pkgs::packageVersion($p) . "-" . pkgs::packageRelease($p) . (/(-.*)/ && $1); pkgs::packageByName($packages, $name) or return; push @rpms, $name; } @rpms > 0 or return; return [ @rpms, "NVIDIA_GLX" ]; } } #-###################################################################################### #- Functions #-###################################################################################### sub kernelVersion { my ($o) = @_; require pkgs; my $p = pkgs::packageByName($o->{packages}, "kernel"); $p ||= pkgs::packageByName($o->{packages}, "kernel22"); $p or die "I couldn't find the kernel package!"; pkgs::packageVersion($p) . "-" . pkgs::packageRelease($p); } sub getNextStep { my ($s) = $::o->{steps}{first}; $s = $::o->{steps}{$s}{next} while $::o->{steps}{$s}{done} || !$::o->{steps}{$s}{reachable}; $s; } sub spawnShell { return if $::o->{localInstall} || $::testing; -x "/bin/sh" or die "cannot open shell - /bin/sh doesn't exist"; fork and return; $ENV{DISPLAY} ||= ":0"; #- why not :pp local *F; sysopen F, "/dev/tty2", 2 or die "cannot open /dev/tty2 -- no shell will be provided"; open STDIN, "<&F" or die ''; open STDOUT, ">&F" or die ''; open STDERR, ">&F" or die ''; close F; print any::drakx_version(), "\n"; c::setsid(); ioctl(STDIN, c::TIOCSCTTY(), 0) or warn "could not set new controlling tty: $!"; my $busybox = "/usr/bin/busybox"; exec {-e $busybox ? $busybox : "/bin/sh"} "/bin/sh" or log::l("exec of /bin/sh failed: $!"); } sub fsck_option { my ($o) = @_; my $y = $o->{security} < 3 && !$::expert && "-y "; substInFile { s/^(\s*fsckoptions="?)(-y )?/$1$y/ } "$o->{prefix}/etc/rc.d/rc.sysinit"; #- " help po, DONT REMOVE } sub getAvailableSpace { my ($o) = @_; #- make sure of this place to be available for installation, this could help a lot. #- currently doing a very small install use 36Mb of postinstall-rpm, but installing #- these packages may eat up to 90Mb (of course not all the server may be installed!). #- 65mb may be a good choice to avoid almost all problem of insuficient space left... my $minAvailableSize = 65 * sqr(1024); my $n = !$::testing && getAvailableSpace_mounted($o->{prefix}) || getAvailableSpace_raw($o->{fstab}) * 512 / 1.07; $n - max(0.1 * $n, $minAvailableSize); } sub getAvailableSpace_mounted { my ($prefix) = @_; my $dir = -d "$prefix/usr" ? "$prefix/usr" : "$prefix"; my (undef, $free) = MDK::Common::System::df($dir) or return; log::l("getAvailableSpace_mounted $free KB"); $free * 1024 || 1; } sub getAvailableSpace_raw { my ($fstab) = @_; do { $_->{mntpoint} eq '/usr' and return $_->{size} } foreach @$fstab; do { $_->{mntpoint} eq '/' and return $_->{size} } foreach @$fstab; if ($::testing) { my $nb = 450; log::l("taking ${nb}MB for testing"); return $nb << 11; } die "missing root partition"; } sub preConfigureTimezone { my ($o) = @_; require timezone; #- can't be done in install cuz' timeconfig %post creates funny things add2hash($o->{timezone}, { timezone::read($o->{prefix}) }) if $o->{isUpgrade}; $o->{timezone}{timezone} ||= timezone::bestTimezone(lang::lang2text($o->{lang})); my $utc = $::expert && !grep { isFat($_) || isNT($_) } @{$o->{fstab}}; my $ntp = timezone::ntp_server($o->{prefix}); add2hash_($o->{timezone}, { UTC => $utc, ntp => $ntp }); } sub setPackages { my ($o) = @_; require pkgs; if (!$o->{packages} || is_empty_hash_ref($o->{packages}{names})) { $o->{packages} = pkgs::psUsingHdlists($o->{prefix}, $o->{method}); push @{$o->{default_packages}}, "nfs-utils-clients" if $o->{method} eq "nfs"; push @{$o->{default_packages}}, "numlock" if $o->{miscellaneous}{numlock}; push @{$o->{default_packages}}, "kernel-enterprise" if (availableRamMB() > 800) && (arch() !~ /ia64/); push @{$o->{default_packages}}, "kernel22" if c::kernel_version() =~ /^\Q2.2/; push @{$o->{default_packages}}, "kernel22-secure" if $o->{security} > 3; push @{$o->{default_packages}}, "kernel-smp" if detect_devices::hasSMP(); push @{$o->{default_packages}}, "kernel-pcmcia-cs" if $o->{pcmcia}; push @{$o->{default_packages}}, "raidtools" if !is_empty_array_ref($o->{all_hds}{raids}); push @{$o->{default_packages}}, "lvm" if !is_empty_array_ref($o->{all_hds}{lvms}); push @{$o->{default_packages}}, "usbd" if modules::get_alias("usb-interface"); push @{$o->{default_packages}}, "reiserfsprogs" if grep { isThisFs("reiserfs", $_) } @{$o->{fstab}}; push @{$o->{default_packages}}, "xfsprogs" if grep { isThisFs("xfs", $_) } @{$o->{fstab}}; push @{$o->{default_packages}}, "jfsprogs" if grep { isThisFs("jfs", $_) } @{$o->{fstab}}; push @{$o->{default_packages}}, "alsa", "alsa-utils" if modules::get_alias("sound-slot-0") =~ /^snd-card-/; push @{$o->{default_packages}}, "imwheel" if $o->{mouse}{nbuttons} > 3; pkgs::getDeps($o->{prefix}, $o->{packages}); pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, 'basesystem') || die("missing basesystem package"), 1); #- must be done after selecting base packages (to save memory) pkgs::getProvides($o->{packages}); #- must be done after getProvides pkgs::read_rpmsrate($o->{packages}, getFile("Mandrake/base/rpmsrate")); ($o->{compssUsers}, $o->{compssUsersSorted}) = pkgs::readCompssUsers($o->{meta_class}); if ($::auto_install && !$o->{interactive} && !$o->{compssUsersChoice}) { $o->{compssUsersChoice}{$_} = 1 foreach map { @{$o->{compssUsers}{$_}{flags}} } @{$o->{compssUsersSorted}}; } if ($o->{interactive} && !$o->{isUpgrade}) { #- by default, choose: $o->{compssUsersChoice}{$_} = 1 foreach 'GNOME', 'KDE', 'CONFIG'; $o->{compssUsersChoice}{$_} = 1 foreach map { @{$o->{compssUsers}{$_}{flags}} } 'Workstation|Office Workstation', 'Workstation|Internet station'; } $o->{compssUsersChoice}{uc($_)} = 1 foreach grep { modules::get_that_type($_) } ('tv', 'scanner', 'photo', 'sound'); $o->{compssUsersChoice}{uc($_)} = 1 foreach map { $_->{driver} =~ /Flag:(.*)/ } detect_devices::probeall(); $o->{compssUsersChoice}{SYSTEM} = 1; $o->{compssUsersChoice}{X} = 1 if $o->{interactive}; $o->{compssUsersChoice}{BURNER} = 1 if detect_devices::burners(); $o->{compssUsersChoice}{DVD} = 1 if detect_devices::dvdroms(); $o->{compssUsersChoice}{PCMCIA} = 1 if detect_devices::hasPCMCIA(); $o->{compssUsersChoice}{'3D'} = 1 if detect_devices::matching_desc('Matrox.* G[24][05]0') || detect_devices::matching_desc('Riva.*128') || detect_devices::matching_desc('Rage X[CL]') || detect_devices::matching_desc('Rage Mobility (?:P\/M|L) ') || detect_devices::matching_desc('3D Rage (?:LT|Pro)') || detect_devices::matching_desc('Voodoo [35]') || detect_devices::matching_desc('Voodoo Banshee') || detect_devices::matching_desc('8281[05].* CGC') || detect_devices::matching_desc('Rage 128') || detect_devices::matching_desc('[nN]Vidia.*T[nN]T2') || #- TNT2 cards detect_devices::matching_desc('[nN]Vidia.*NV[56]') || detect_devices::matching_desc('[nN]Vidia.*Vanta') || detect_devices::matching_desc('[nN]Vidia.*GeForce') || #- GeForce cards detect_devices::matching_desc('[nN]Vidia.*NV1[15]') || detect_devices::matching_desc('[nN]Vidia.*Quadro'); foreach (map { substr($_, 0, 2) } lang::langs($o->{langs})) { pkgs::packageByName($o->{packages}, "locales-$_") or next; push @{$o->{default_packages}}, "locales-$_"; } foreach (lang::langsLANGUAGE($o->{langs})) { $o->{compssUsersChoice}{qq(LOCALES"$_")} = 1; } } else { #- this has to be done to make sure necessary files for urpmi are #- present. pkgs::psUpdateHdlistsDeps($o->{prefix}, $o->{method}); } } sub unselectMostPackages { my ($o) = @_; pkgs::unselectAllPackages($o->{packages}); pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, $_) || next) foreach @{$o->{default_packages}}; } sub warnAboutNaughtyServers { my ($o) = @_; my @naughtyServers = pkgs::naughtyServers($o->{packages}) or return 1; if (!$o->ask_yesorno('', formatAlaTeX(_("You have selected the following server(s): %s These servers are activated by default. They don't have any known security issues, but some new could be found. In that case, you must make sure to upgrade as soon as possible. Do you really want to install these servers? ", join(", ", @naughtyServers))), 1)) { pkgs::unselectPackage($o->{packages}, pkgs::packageByName($o->{packages}, $_)) foreach @naughtyServers; } } sub addToBeDone(&$) { my ($f, $step) = @_; return &$f() if $::o->{steps}{$step}{done}; push @{$::o->{steps}{$step}{toBeDone}}, $f; } sub setAuthentication { my ($o) = @_; my ($shadow, $md5, $ldap, $nis) = @{$o->{authentication} || {}}{qw(shadow md5 LDAP NIS)}; my $p = $o->{prefix}; #- obsoleted always enabled (in /etc/pam.d/system-auth furthermore) #any::enableMD5Shadow($p, $shadow, $md5); any::enableShadow($p) if $shadow; if ($ldap) { $o->pkg_install(qw(chkauth openldap-clients nss_ldap pam_ldap)); run_program::rooted($o->{prefix}, "/usr/sbin/chkauth", "ldap", "-D", $o->{netc}{LDAPDOMAIN}, "-s", $ldap); } elsif ($nis) { #$o->pkg_install(qw(chkauth ypbind yp-tools net-tools)); #run_program::rooted($o->{prefix}, "/usr/sbin/chkauth", "yp", $domain, "-s", $nis); $o->pkg_install("ypbind"); my $domain = $o->{netc}{NISDOMAIN}; $domain || $nis ne "broadcast" or die _("Can't use broadcast with no NIS domain"); my $t = $domain ? "domain $domain" . ($nis ne "broadcast" && " server") : "ypserver"; substInFile { $_ = "#~$_" unless /^#/; $_ .= "$t $nis\n" if eof; } "$p/etc/yp.conf"; require network; network::write_conf("$p/etc/sysconfig/network", $o->{netc}); } } sub killCardServices { my $pid = chomp_(cat_("/tmp/cardmgr.pid")); $pid and kill(15, $pid); #- send SIGTERM } sub hdInstallPath() { cat_("/proc/mounts") =~ m|/\w+/(\S+)\s+/tmp/hdimage| or return; my ($part) = grep { $_->{device} eq $1 } @{$::o->{fstab}}; $part->{mntpoint} or grep { $_->{mntpoint} eq "/mnt/hd" } @{$::o->{fstab}} and return; $part->{mntpoint} ||= "/mnt/hd"; $part->{mntpoint} . first(readlink("/tmp/image") =~ m|^/tmp/hdimage/(.*)|); } sub unlockCdrom(;$) { my ($cdrom) = @_; $cdrom or cat_("/proc/mounts") =~ m,(/(?:dev|tmp)/\S+)\s+(?:/mnt/cdrom|/tmp/image), and $cdrom = $1; eval { $cdrom and ioctl detect_devices::tryOpen($1), c::CDROM_LOCKDOOR(), 0 }; } sub ejectCdrom(;$) { my ($cdrom) = @_; getFile("XXX"); #- close still opened filehandle $cdrom or cat_("/proc/mounts") =~ m,(/(?:dev|tmp)/\S+)\s+(?:/mnt/cdrom|/tmp/image), and $cdrom = $1; my $f = eval { $cdrom && detect_devices::tryOpen($cdrom) } or return; eval { fs::umount("/tmp/image") }; ioctl $f, c::CDROMEJECT(), 1; } sub setupFB { my ($o, $vga) = @_; $vga ||= 785; #- assume at least 640x480x16. require bootloader; #- update bootloader entries with vga, all kernel are now framebuffer. foreach (qw(vmlinuz vmlinuz-secure vmlinuz-smp vmlinuz-hack)) { if (my $e = bootloader::get("/boot/$_", $o->{bootloader})) { $e->{vga} = $vga; } } bootloader::install($o->{prefix}, $o->{bootloader}, $o->{fstab}, $o->{all_hds}{hds}); 1; } sub install_urpmi { my ($prefix, $method, $mediums) = @_; my @cfg = map_index { my $name = $_->{fakemedium}; #- build synthesis file at install, this will improve performance greatly. run_program::rooted($prefix, "parsehdlist", ">", "/var/lib/urpmi/synthesis.hdlist.$name", "--compact", "--provides", "--requires", "/var/lib/urpmi/hdlist.$name.cz"); run_program::rooted($prefix, "gzip", "-S", ".cz", "/var/lib/urpmi/synthesis.hdlist.$name"); #- safe guard correct generation of synthesis file. -s "$prefix/var/lib/urpmi/synthesis.hdlist.$name.cz" > 24 or unlink "$prefix/var/lib/urpmi/synthesis.hdlist.$name.cz"; local *LIST; my $mask = umask 077; open LIST, ">$prefix/var/lib/urpmi/list.$name" or log::l("failed to write list.$name"); umask $mask; my $dir = ${{ nfs => "file://mnt/nfs", hd => "file:/" . hdInstallPath(), ftp => $ENV{URLPREFIX}, http => $ENV{URLPREFIX}, cdrom => "removable_cdrom_$::i://mnt/cdrom" }}{$method} . "/$_->{rpmsdir}"; local *FILES; open FILES, "$ENV{LD_LOADER} parsehdlist /tmp/$_->{hdlist} |"; print LIST "$dir/$_\n" foreach chomp_(); close FILES or log::l("parsehdlist failed"), return; close LIST; $name =~ s/(\s)/\\$1/g; $dir =~ s/(\s)/\\$1/g; #- necessary to change protect white char, for urpmi >= 1.40 $dir .= " with ../base/$_->{hdlist}"; "$name $dir\n"; } values %$mediums; eval { output "$prefix/etc/urpmi/urpmi.cfg", @cfg }; } #-############################################################################### #- kde stuff #-############################################################################### sub kderc_largedisplay { my ($prefix) = @_; update_gnomekderc($_, 'KDE', Contrast => 7, kfmIconStyle => "Large", kpanelIconStyle => "Normal", #- to change to Large when icons looks better KDEIconStyle => "Large") foreach list_skels($prefix, '.kderc'); substInFile { s/^(GridWidth)=85/$1=100/; s/^(GridHeight)=70/$1=75/; } $_ foreach list_skels($prefix, '.kde/share/config/kfmrc'); } sub kdeicons_postinstall { my ($prefix) = @_; #- parse etc/fstab file to search for dos/win, floppy, zip, cdroms icons. #- handle both supermount and fsdev usage. my %l = ( 'cdrom' => [ 'cdrom', 'Cd-Rom' ], 'zip' => [ 'zip', 'Zip' ], 'floppy-ls' => [ 'floppy', 'LS-120' ], 'floppy' => [ 'floppy', 'Floppy' ], ); foreach (fs::read_fstab("$prefix/etc/fstab")) { my ($name_, $nb) = $_->{mntpoint} =~ m|.*/(\S+?)(\d*)$/|; my ($name, $text) = @{$l{$name_} || []}; my $f = ${{ supermount => sub { $name .= '.fsdev' if $name }, vfat => sub { $name = 'Dos_'; $text = $name_ }, }}{$_->{type}}; &$f if $f; template2userfile($prefix, "$ENV{SHARE_PATH}/$name.kdelnk.in", "Desktop/$text" . ($nb && " $nb"). ".kdelnk", 1, %$_) if $name; } # rename the .kdelnk to the name found in the .kdelnk as kde doesn't use it # for displaying foreach my $dir (grep { -d $_ } list_skels($prefix, 'Desktop')) { foreach (grep { /\.kdelnk$/ } all($dir)) { cat_("$dir/$_") =~ /^Name\[\Q$ENV{LANG}\E\]=(.{2,14})$/m and rename "$dir/$_", "$dir/$1.kdelnk"; } } } sub kdemove_desktop_file { my ($prefix) = @_; my @toMove = qw(doc.kdelnk news.kdelnk updates.kdelnk home.kdelnk printer.kdelnk floppy.kdelnk cdrom.kdelnk FLOPPY.kdelnk CDROM.kdelnk); #- remove any existing save in Trash of each user and #- move appropriate file there after an upgrade. foreach my $dir (grep { -d $_ } list_skels($prefix, 'Desktop')) { renamef("$dir/$_", "$dir/Trash/$_") foreach grep { -e "$dir/$_" } @toMove, grep { /\.rpmorig$/ } all($dir) } } #-############################################################################### #- auto_install stuff #-############################################################################### sub auto_inst_file() { ($::g_auto_install ? "/tmp" : "$::o->{prefix}/root") . "/auto_inst.cfg.pl" } sub report_bug { my ($prefix) = @_; any::report_bug($prefix, 'auto_inst' => g_auto_install()); } sub g_auto_install { my ($replay) = @_; my $o = {}; require pkgs; $o->{default_packages} = pkgs::selected_leaves($::o->{packages}); my @fields = qw(mntpoint type size); $o->{partitions} = [ map { my %l; @l{@fields} = @$_{@fields}; \%l } grep { $_->{mntpoint} } @{$::o->{fstab}} ]; exists $::o->{$_} and $o->{$_} = $::o->{$_} foreach qw(lang authentication printer mouse wacom netc timezone superuser intf keyboard users partitioning isUpgrade manualFstab nomouseprobe crypto security netcnx useSupermount autoExitInstall mkbootdisk); #- TODO modules bootloader if (my $card = $::o->{X}{card}) { $o->{X}{$_} = $::o->{X}{$_} foreach qw(default_depth resolution_wanted); if ($o->{X}{default_depth} and my $depth = $card->{depth}{$o->{X}{default_depth}}) { $depth ||= []; $o->{X}{resolution_wanted} ||= join "x", @{$depth->[0]} unless is_empty_array_ref($depth->[0]); $o->{X}{monitor} = $::o->{X}{monitor} if $::o->{X}{monitor}{manual}; } } local $o->{partitioning}{auto_allocate} = !$replay; local $o->{autoExitInstall} = !$replay; #- deep copy because we're modifying it below $o->{users} = [ @{$o->{users} || []} ]; $_ = { %{$_ || {}} }, delete @$_{qw(oldu oldg password password2)} foreach $o->{superuser}, @{$o->{users} || []}; require Data::Dumper; my $str = join('', "#!/usr/bin/perl -cw # # You should check the syntax of this file before using it in an auto-install. # You can do this with 'perl -cw auto_inst.cfg.pl' or by executing this file # (note the '#!/usr/bin/perl -cw' on the first line). ", Data::Dumper->Dump([$o], ['$o']), if_($replay, qq(\npackage install_steps_auto_install;), q( $graphical = 1; push @graphical_steps, 'doPartitionDisks', 'formatPartitions'; )), "\0"); $str =~ s/ {8}/\t/g; #- replace all 8 space char by only one tabulation, this reduces file size so much :-) $str; } sub getAndSaveInstallFloppy { my ($o, $where) = @_; my $image = cat_("/proc/cmdline") =~ /pcmcia/ ? "pcmcia" : ${{ hd => 'hd', cdrom => 'cdrom', ftp => 'network', nfs => 'network', http => 'network' }}{$o->{method}}; $image .= arch() =~ /sparc64/ && "64"; #- for sparc64 there are a specific set of image. getAndSaveFile("images/$image.img", $where) or log::l("failed to write Install Floppy ($image.img) to $where"), return; 1; } sub getAndSaveAutoInstallFloppy { my ($o, $replay, $where) = @_; eval { modules::load('loop') }; if (arch() =~ /sparc/) { my $imagefile = "$o->{prefix}/tmp/autoinst.img"; my $mountdir = "$o->{prefix}/tmp/mount"; -d $mountdir or mkdir $mountdir, 0755; my $workdir = "$o->{prefix}/tmp/work"; -d $workdir or rmdir $workdir; getAndSaveInstallFloppy($o, $imagefile) or return; devices::make($_) foreach qw(/dev/loop6 /dev/ram); require commands; run_program::run("losetup", "/dev/loop6", $imagefile); fs::mount("/dev/loop6", $mountdir, "romfs", 'readonly'); commands::cp("-f", $mountdir, $workdir); fs::umount($mountdir); run_program::run("losetup", "-d", "/dev/loop6"); substInFile { s/timeout.*//; s/^(\s*append\s*=\s*\".*)\"/$1 kickstart=floppy\"/ } "$workdir/silo.conf"; #" for po #-TODO output "$workdir/ks.cfg", generate_ks_cfg($o); output "$workdir/boot.msg", "\n7m", "!! If you press enter, an auto-install is going to start. ALL data on this computer is going to be lost, including any Windows partitions !! ", "7m\n"; local $o->{partitioning}{clearall} = 1; output("$workdir/auto_inst.cfg", g_auto_install()); run_program::run("genromfs", "-d", $workdir, "-f", "/dev/ram", "-A", "2048,/..", "-a", "512", "-V", "DrakX autoinst"); fs::mount("/dev/ram", $mountdir, 'romfs', 0); run_program::run("silo", "-r", $mountdir, "-F", "-i", "/fd.b", "-b", "/second.b", "-C", "/silo.conf"); fs::umount($mountdir); commands::dd("if=/dev/ram", "of=$where", "bs=1440", "count=1024"); commands::rm("-rf", $workdir, $mountdir, $imagefile); } else { my $imagefile = "$o->{prefix}/tmp/autoinst.img"; my $mountdir = "$o->{prefix}/tmp/mount"; -d $mountdir or mkdir $mountdir, 0755; my $param = 'kickstart=floppy ' . generate_automatic_stage1_params($o); getAndSaveInstallFloppy($o, $imagefile) or return; my $dev = devices::set_loop($imagefile) or log::l("couldn't set loopback device"), return; fs::mount($dev, $mountdir, 'vfat', 0); substInFile { s/timeout.*/$replay ? 'timeout 1' : ''/e; s/^(\s*append)/$1 $param/ } "$mountdir/syslinux.cfg"; unlink "$mountdir/help.msg"; output "$mountdir/boot.msg", "\n0c", "!! If you press enter, an auto-install is going to start. All data on this computer is going to be lost, including any Windows partitions !! ", "07\n" if !$replay; local $o->{partitioning}{clearall} = !$replay; output("$mountdir/auto_inst.cfg", g_auto_install($replay)); fs::umount($mountdir); c::del_loop($dev); commands::dd("if=$imagefile", "of=$where", "bs=1440", "count=1024"); } 1; } sub g_default_packages { my ($o, $quiet) = @_; my $floppy = detect_devices::floppy(); while (1) { $o->ask_okcancel('', _("Insert a FAT formatted floppy in drive %s", $floppy), 1) or return; eval { fs::mount(devices::make($floppy), "/floppy", "vfat", 0) }; last if !$@; $o->ask_warn('', _("This floppy is not FAT formatted")); } require Data::Dumper; my $str = Data::Dumper->Dump([ { default_packages => pkgs::selected_leaves($o->{packages}) } ], ['$o']); $str =~ s/ {8}/\t/g; output('/floppy/auto_inst.cfg', "# You should always check the syntax with 'perl -cw auto_inst.cfg.pl'\n", "# before testing. To use it, boot with ``linux defcfg=floppy''\n", $str, "\0"); fs::umount("/floppy"); $quiet or $o->ask_warn('', _("To use this saved packages selection, boot installation with ``linux defcfg=floppy''")); } sub loadO { my ($O, $f) = @_; $f ||= auto_inst_file; my $o; if ($f =~ /^(floppy|patch)$/) { my $f = $f eq "floppy" ? 'auto_inst.cfg' : "patch"; unless ($::testing) { fs::mount(devices::make(detect_devices::floppy()), "/mnt", (arch() =~ /sparc/ ? "romfs" : "vfat"), 'readonly'); $f = "/mnt/$f"; } -e $f or $f .= '.pl'; my $b = before_leaving { fs::umount("/mnt") unless $::testing; modules::unload($_) foreach qw(vfat fat); }; $o = loadO($O, $f); } else { -e "$f.pl" and $f .= ".pl" unless -e $f; my $fh = -e $f ? do { local *F; open F, $f; *F } : getFile($f) or die _("Error reading file %s", $f); { local $/ = "\0"; no strict; eval <$fh>; close $fh; $@ and die; } add2hash_($o ||= {}, $O); } bless $o, ref $O; } sub generate_automatic_stage1_params { my ($o) = @_; my @ks = (); if ($o->{method} =~ /hd/) { push @ks, "method:disk"; } else { push @ks, "method:" . $o->{method}; } if ($o->{method} =~ /http/) { "$ENV{URLPREFIX}" =~ m|http://(.*)/(.*)| or die; push @ks, "server:$1", "directory:$2"; } elsif ($o->{method} =~ /ftp/) { push @ks, "server:$ENV{HOST}", "directory:$ENV{PREFIX}", "user:$ENV{LOGIN}", "pass:$ENV{PASSWORD}"; } elsif ($o->{method} =~ /nfs/) { cat_("/proc/mounts") =~ m|(\S+):(\S+)\s+/tmp/image nfs| or die; push @ks, "server:$1", "directory:$2"; } my ($intf) = values %{$o->{intf}}; if ($intf->{BOOTPROTO} =~ /dhcp/) { push @ks, "network:dhcp"; } else { require network; push @ks, "network:static", "ip:$intf->{IPADDR}", "netmask:$intf->{NETMASK}", "gateway:$o->{netc}{GATEWAY}"; my @dnss = network::dnsServers($o->{netc}); push @ks, "dns:$dnss[0]" if @dnss; } "automatic=".join(',', @ks); } sub guess_mount_point { my ($part, $prefix, $user) = @_; my %l = ( '/' => 'etc/fstab', '/boot' => 'vmlinuz', '/tmp' => '.X11-unix', '/usr' => 'X11R6', '/var' => 'catman', ); my $handle = any::inspect($part, $prefix) or return; my $d = $handle->{dir}; my ($mnt) = grep { -e "$d/$l{$_}" } keys %l; $mnt ||= (stat("$d/.bashrc"))[4] ? '/root' : '/home/user' . ++$$user if -e "$d/.bashrc"; $mnt ||= (grep { -d $_ && (stat($_))[4] >= 500 && -e "$_/.bashrc" } glob_("$d")) ? '/home' : ''; ($mnt, $handle); } sub suggest_mount_points { my ($fstab, $prefix, $uniq) = @_; my $user; foreach my $part (grep { isTrueFS($_) } @$fstab) { $part->{mntpoint} && !$part->{unsafeMntpoint} and next; #- if already found via an fstab my ($mnt, $handle) = guess_mount_point($part, $prefix, \$user) or next; next if $uniq && fsedit::mntpoint2part($mnt, $fstab); $part->{mntpoint} = $mnt; delete $part->{unsafeMntpoint}; #- try to find other mount points via fstab fs::merge_info_from_fstab($fstab, $handle->{dir}, $uniq) if $mnt eq '/'; } $_->{mntpoint} and log::l("suggest_mount_points: $_->{device} -> $_->{mntpoint}") foreach @$fstab; } #- mainly for finding the root partitions for upgrade sub find_root_parts { my ($fstab, $prefix) = @_; log::l("find_root_parts"); my $user; grep { my ($mnt) = guess_mount_point($_, $prefix, \$user); $mnt eq '/'; } @$fstab; } sub use_root_part { my ($fstab, $part, $prefix) = @_; { my $handle = any::inspect($part, $prefix) or die; fs::merge_info_from_fstab($fstab, $handle->{dir}, 'uniq'); } map { $_->{mntpoint} = 'swap' } grep { isSwap($_) } @$fstab; #- use all available swap. } sub getHds { my ($o, $f_err) = @_; my $ok = 1; my $try_scsi = !$::expert; my $flags = $o->{partitioning}; my @drives = detect_devices::hds(); # add2hash_($o->{partitioning}, { readonly => 1 }) if partition_table_raw::typeOfMBR($drives[0]{device}) eq 'system_commander'; getHds: my $all_hds = catch_cdie { fsedit::hds(\@drives, $flags) } sub { $ok = 0; my $err = $@; $err =~ s/ at (.*?)$//; log::l("error reading partition table: $err"); !$flags->{readonly} && $f_err and $f_err->($err); }; my $hds = $all_hds->{hds}; if (is_empty_array_ref($hds) && $try_scsi) { $try_scsi = 0; $o->setupSCSI; #- ask for an unautodetected scsi card goto getHds; } $::testing or partition_table_raw::test_for_bad_drives($_) foreach @$hds; $ok = fsedit::verifyHds($hds, $flags->{readonly}, $ok) if !($flags->{clearall} || $flags->{clear}); #- try to figure out if the same number of hds is available, use them if ok. $ok && $hds && @$hds > 0 && @{$o->{all_hds}{hds} || []} == @$hds and return $ok; fs::get_raw_hds('', $all_hds); fs::add2all_hds($all_hds, @{$o->{manualFstab}}); $o->{all_hds} = $all_hds; $o->{fstab} = [ fsedit::get_all_fstab($all_hds) ]; fs::merge_info_from_mtab($o->{fstab}); my @win = grep { isFat($_) && isFat({ type => fsedit::typeOfPart($_->{device}) }) } @{$o->{fstab}}; log::l("win parts: ", join ",", map { $_->{device} } @win) if @win; if (@win == 1) { $win[0]{mntpoint} = "/mnt/windows"; } else { my %w; foreach (@win) { my $v = $w{$_->{device_windobe}}++; $_->{mntpoint} = $_->{unsafeMntpoint} = "/mnt/win_" . lc($_->{device_windobe}) . ($v ? $v+1 : ''); #- lc cuz of StartOffice(!) cf dadou } } my @sunos = grep { isSunOS($_) && type2name($_->{type}) =~ /root/i } @{$o->{fstab}}; #- take only into account root partitions. if (@sunos) { my $v = ''; map { $_->{mntpoint} = $_->{unsafeMntpoint} = "/mnt/sunos" . ($v && ++$v) } @sunos; } #- a good job is to mount SunOS root partition, and to use mount point described here in /etc/vfstab. $ok; } sub log_sizes { my ($o) = @_; my @df = MDK::Common::System::df($o->{prefix}); log::l(sprintf "Installed: %s(df), %s(rpm)", formatXiB($df[0] - $df[1], 1024), formatXiB(sum(`$ENV{LD_LOADER} rpm --root $o->{prefix}/ -qa --queryformat "%{size}\n"`))) if -x "$o->{prefix}/bin/rpm"; } sub copy_advertising { my ($o) = @_; return if $::rootwidth < 800; my $f; my $source_dir = "Mandrake/share/advertising"; foreach ("." . $o->{lang}, "." . substr($o->{lang},0,2), '') { $f = getFile("$source_dir$_/list") or next; $source_dir = "$source_dir$_"; } if (my @files = <$f>) { my $dir = "$o->{prefix}/tmp/drakx-images"; mkdir $dir; unlink glob_("$dir/*"); foreach (@files) { chomp; getAndSaveFile("$source_dir/$_", "$dir/$_"); } @advertising_images = map { "$dir/$_" } @files; } } sub remove_advertising { my ($o) = @_; unlink @advertising_images; rmdir "$o->{prefix}/tmp/drakx-images"; @advertising_images = (); } sub disable_user_view { my ($prefix) = @_; substInFile { s/^UserView=.*/UserView=true/ } "$prefix/usr/share/config/kdmrc"; substInFile { s/^Browser=.*/Browser=0/ } "$prefix/etc/X11/gdm/gdm.conf"; } sub write_fstab { my ($o) = @_; fs::write_fstab($o->{all_hds}, $o->{prefix}) if !$::live; } my @bigseldom_used_groups = ( [ qw(pvcreate pvdisplay vgchange vgcreate vgdisplay vgextend vgremove vgscan lvcreate lvdisplay lvremove /lib/liblvm.so) ], ); sub check_prog { my ($f) = @_; my @l = $f !~ m|^/| ? map { "$_/$f" } split(":", $ENV{PATH}) : $f; return if grep { -x $_ } @l; my ($f_) = map { m|^/| ? $_ : "/usr/bin/$_" } $f; remove_bigseldom_used(); foreach (@bigseldom_used_groups) { my (@l) = map { m|^/| ? $_ : "/usr/bin/$_" } @$_; if (member($f_, @l)) { foreach (@l) { getAndSaveFile($_); chmod 0755, $_; } return; } } getAndSaveFile($f_); chmod 0755, $f_; } sub remove_unused { $::testing and return; if ($::o->isa('interactive_gtk')) { unlink glob_("/lib/lib$_*") foreach qw(slang newt); unlink "/usr/bin/perl-install/auto/Newt/Newt.so"; } else { unlink glob_("/usr/X11R6/bin/XF*"); } } sub remove_bigseldom_used { log::l("remove_bigseldom_used"); $::testing and return; remove_unused(); unlink glob_("/usr/share/gtk/themes/$_*") foreach qw(DarkMarble marble3d); unlink(m|^/| ? $_ : "/usr/bin/$_") foreach ((map { @$_ } @bigseldom_used_groups), qw(mkreiserfs resize_reiserfs), ); } ################################################################################ package pkgs_interactive; use run_program; use common; use pkgs; sub install_steps::do_pkgs { my ($o) = @_; bless { o => $o }, 'pkgs_interactive'; } sub install { my ($do, @l) = @_; $do->{o}->pkg_install(@l); } sub is_installed { my ($do, @l) = @_; foreach (@l) { my $p = pkgs::packageByName($do->{o}->{packages}, $_); $p && pkgs::packageFlagSelected($p) or return; } 1; } sub remove { my ($do, @l) = @_; @l = grep { my $p = pkgs::packageByName($do->{o}->{packages}, $_); pkgs::unselectPackage($do->{o}->{packages}, $p) if $p; $p; } @l; run_program::rooted($do->{o}->{prefix}, 'rpm', '-e', @l); } sub remove_nodeps { my ($do, @l) = @_; @l = grep { my $p = pkgs::packageByName($do->{o}->{packages}, $_); pkgs::packageSetFlagSelected($p, 0) if $p; $p; } @l; run_program::rooted($do->{o}->{prefix}, 'rpm', '-e', '--nodeps', @l); } ################################################################################ package install_any; 1; 028'>1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364
# Srpski cirilicni prevod MandrakeUpdate fajla.
# Copyright (C) 1997-2000 GeaArt, Inc.
# Tomislav Jankovic <tomaja@net.yu>,1999,2000,2001
#
#
msgid ""
msgstr ""
"Project-Id-Version: rpmdrake 1.3\n"
"POT-Creation-Date: 2003-02-28 21:24+0100\n"
"PO-Revision-Date: 2003-02-21 21:39+0100\n"
"Last-Translator: Toma Jankovic <tomaja@net.yu>\n"
"Language-Team: Serbian <i18n@mandrake.co.yu>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 0.9.6\n"

#: ../rpmdrake:1 ../edit-urpm-sources.pl:1
#, c-format
msgid ""
"%s\n"
"\n"
"Is it ok to continue?"
msgstr ""
"%s\n"
"\n"
"Да ли је У реду да наставим?"

#: ../rpmdrake:1
#, c-format
msgid ""
"Welcome to the software installation tool!\n"
"\n"
"Your Mandrake Linux system comes with several thousands of software\n"
"packages on CDROM or DVD. This tool will help you choose which software\n"
"you want to install on your computer."
msgstr ""
"Добродошли у алат за инсталацију софтвера!\n"
"\n"
"Ваш Mandrake Linux оперативни систем је дошао са неколико хиљада пакета\n"
"са програмима, на CD-у или DVD-у. Овај алат ће Вам помоћи да изаберете\n"
"пакете које желите да инсталирате на Ваш рачунар."

#: ../rpmdrake:1
#, c-format
msgid ""
"Welcome to MandrakeUpdate!\n"
"\n"
"This tool will help you choose the updates you want to install on your\n"
"computer."
msgstr ""
"Добродошли у MandrakeUpdate!\n"
"\n"
"Овај алат вам може помоћи да изабете нове верзије пакета које желите да "
"инсталирате на\n"
"ваш рачунар."

#: ../rpmdrake:1
#, c-format
msgid ""
"Welcome to the software removal tool!\n"
"\n"
"This tool will help you choose which software you want to remove from\n"
"your computer."
msgstr ""
"Добродошли у програм за уклањање софтвера!\n"
"\n"
"Овај алат вам може помоћи да изаберете софтвер желите да уклоните са\n"
"вашег рачунара."

#: ../rpmdrake:1
#, c-format
msgid ""
"There was a problem during the removal of packages:\n"
"\n"
"%s"
msgstr ""
"Наишао сам на проблем приликом уклањања пакета:\n"
"\n"
"%s"

#: ../rpmdrake:1
#, c-format
msgid "Problem during removal"
msgstr "Проблем приликом уклањања"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, removing packages..."
msgstr "Молим Вас сачекајте, уклањам пакете..."

#: ../rpmdrake:1
#, c-format
msgid "Please wait, reading packages database..."
msgstr "Молим вас сачекајте, учитавам базу података о пакетима..."

#: ../rpmdrake:1
#, c-format
msgid ""
"There was a problem during the installation:\n"
"\n"
"%s"
msgstr ""
"Наишао сам на проблем током инсталирања:\n"
"\n"
"%s"

#: ../rpmdrake:1
#, c-format
msgid "Problem during installation"
msgstr "Проблем за време инсталирања"

#: ../rpmdrake:1
#, c-format
msgid "Unrecoverable error: no package found for installation, sorry."
msgstr ""

#: ../rpmdrake:1
#, fuzzy, c-format
msgid "No package found for installation."
msgstr "Инсталација пакета"

#: ../rpmdrake:1
#, c-format
msgid "All requested packages were installed successfully."
msgstr "Сви пакети, који сте захтевали, су успешно инсталирани."

#: ../rpmdrake:1
#, c-format
msgid "Everything installed successfully"
msgstr "Све је добро инсталирано"

#: ../rpmdrake:1
#, c-format
msgid ""
"The installation is finished; %s.\n"
"\n"
"Some configuration files were created as `.rpmnew' or `.rpmsave',\n"
"you may now inspect some in order to take actions:"
msgstr ""
"Инсталација је готова, %s.\n"
"\n"
"Направио сам неке фајлове са подешавањима, пример `.rpmnew' или `.rpmsave',\n"
"можете да их проверите како би сте нешто предузели:"

#: ../rpmdrake:1
#, c-format
msgid "everything was installed correctly"
msgstr "сви пакети су добро инсталирани"

#: ../rpmdrake:1
#, c-format
msgid ""
"some packages failed to install\n"
"correctly"
msgstr ""
"неки пакети се нису исправно\n"
"инсталирати"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, removing packages to allow others to be upgraded..."
msgstr "Молим Вас сачекајте, уклањам пакете да бих омогућио других пакета..."

#: ../rpmdrake:1
#, c-format
msgid ""
"Installation failed, some files are missing.\n"
"You may want to update your sources database."
msgstr ""
"Инсталација није успела, неки фајлови недостају.\n"
"Можда би требало да ажурирате базу пакета."

#: ../rpmdrake:1
#, c-format
msgid "Installation failed"
msgstr "Инсталација неуспела"

#: ../rpmdrake:1 ../edit-urpm-sources.pl:1 ../rpmdrake.pm:1
#, c-format
msgid "Cancel"
msgstr "Одустани"

#: ../rpmdrake:1 ../edit-urpm-sources.pl:1 ../rpmdrake.pm:1
#, c-format
msgid "Ok"
msgstr "У реду"

#: ../rpmdrake:1
#, c-format
msgid "Please insert the medium named \"%s\" on device [%s]"
msgstr "Убаците медијум са именом \"%s\" у уређај [%s]"

#: ../rpmdrake:1
#, c-format
msgid "Change medium"
msgstr "Промени медијум"

#: ../rpmdrake:1
#, fuzzy, c-format
msgid "Unable to get source packages, sorry. %s"
msgstr "Не могу да добавим изворне пакете, жао ми је."

#: ../rpmdrake:1
#, c-format
msgid ""
"\n"
"\n"
"Error(s) reported:\n"
"%s"
msgstr ""

#: ../rpmdrake:1
#, c-format
msgid "Unable to get source packages."
msgstr "Не могу да добавим изворне пакете."

#: ../rpmdrake:1
#, c-format
msgid "A required program is missing (grpmi). Check your installation."
msgstr "Недостаје потребни програм (grpmi). Проверите своју инсталацију."

#: ../rpmdrake:1
#, c-format
msgid "Program missing"
msgstr "Програм недостаје"

#: ../rpmdrake:1
#, c-format
msgid "Inspect..."
msgstr "Провери..."

#: ../rpmdrake:1
#, c-format
msgid "Installation finished"
msgstr "Инсталација готова"

#: ../rpmdrake:1
#, c-format
msgid "Do nothing"
msgstr "Не ради ништа"

#: ../rpmdrake:1
#, c-format
msgid "Use .%s as main file"
msgstr "Користи %s као главни фајл"

#: ../rpmdrake:1
#, c-format
msgid "Remove .%s"
msgstr "Уклони: %s"

#: ../rpmdrake:1
#, c-format
msgid "changes:"
msgstr "измене:"

#: ../rpmdrake:1
#, c-format
msgid "Inspecting %s"
msgstr "Проверавам %s"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, finding available packages..."
msgstr "Молим Вас сачекајте, проналазим доступне пакете..."

#: ../rpmdrake:1
#, c-format
msgid ""
"There was an error while adding the update medium via urpmi.\n"
"\n"
"This may be due to a broken or temporary unavailable mirror, or when your\n"
"Mandrake Linux version (%s) is not yet / no more supported by Mandrake "
"Linux\n"
"Official Updates.\n"
"\n"
"Do you want to try another mirror?"
msgstr ""
"Појавила се грешка током покушаја да се ажурира медиј преко urpmi.\n"
"\n"
"Ово је уследило можда услед прекида или тренутне недоступности мирора, или "
"ваша\n"
"Mandrake Linux верзија (%s) још није / није више подржаана од стране "
"Mandrake Linux\n"
"Official Updates.\n"
"\n"
"Да ли желите да пробате са другим мирором?"

#: ../rpmdrake:1
#, c-format
msgid "Error adding update medium"
msgstr "Грешка приликом додавања медијума са надоградњом"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, contacting mirror to initialize updates packages."
msgstr ""
"Молим Вас сачекајте, контактирам мирор сајт ради иницирања ажурирања пакета."

#: ../rpmdrake:1
#, c-format
msgid ""
"You may also choose your desired mirror manually: to do so,\n"
"launch the Software Sources Manager, and then add a `Security\n"
"updates' source.\n"
"\n"
"Then, restart MandrakeUpdate."
msgstr ""
"Можете изабрати жељени мирор сајт и ручно: да би то урадили,\n"
"покрените Менаџер Софтвера, а затим додајте `Security\n"
"updates' извор.\n"
"\n"
"Затим, рестарујте MandrakeUpdate."

#: ../rpmdrake:1
#, c-format
msgid "How to choose manually your mirror"
msgstr "Како ручно изабрати свој мирор сајт"

#: ../rpmdrake:1
#, c-format
msgid "There was an unrecoverable error while updating packages information."
msgstr ""
"Појавила са непоправљива грешка током ажурирања информација о пакетима."

#: ../rpmdrake:1
#, c-format
msgid "Error updating medium"
msgstr "Грешка при ажурирању медијума"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, contacting mirror to update packages information."
msgstr ""
"Молим Вас сачекајте, успостављам везу са мирор сајтом ради информације о "
"ажурираним пакетима."

#: ../rpmdrake:1
#, c-format
msgid ""
"I need to contact the mirror to get latest update packages.\n"
"Please check that your network is currently running.\n"
"\n"
"Is it ok to continue?"
msgstr ""
"Ја желим да посетим мирор ради добављања најновијих верзија пакета.\n"
"Проверите да ли је ваша конекција функционална и успостављена.\n"
"\n"
"Да ли је У реду да наставим?"

#: ../rpmdrake:1
#, c-format
msgid "Software Packages Installation"
msgstr "Инсталација пакета"

#: ../rpmdrake:1 data/mandrakeupdate.desktop.in.h:1
#, c-format
msgid "Mandrake Update"
msgstr "Mandrake Update"

#: ../rpmdrake:1
#, c-format
msgid "Software Packages Removal"
msgstr "Уклањање пакета"

#: ../rpmdrake:1 ../edit-urpm-sources.pl:1
#, c-format
msgid "Quit"
msgstr "Краj"

#: ../rpmdrake:1
#, c-format
msgid "Install"
msgstr "Инсталираj"

#: ../rpmdrake:1 ../edit-urpm-sources.pl:1
#, c-format
msgid "Remove"
msgstr "Уклони"

#: ../rpmdrake:1
#, c-format
msgid "Help"
msgstr ""

#: ../rpmdrake:1
#, c-format
msgid "Search"
msgstr "Тражи"

#: ../rpmdrake:1
#, c-format
msgid "Find:"
msgstr "Пронaђи: "

#: ../rpmdrake:1
#, c-format
msgid ""
"The following packages have to be removed for others to be upgraded:\n"
"\n"
"%s\n"
"\n"
"Is it ok to continue?"
msgstr ""
"Следеќи пакети треба да буду уклоњени да би се други инсталирали:\n"
"\n"
"%s\n"
"\n"
"да ли је У реду да наставим?"

#: ../rpmdrake:1
#, c-format
msgid "Some packages need to be removed"
msgstr "Неки пакети морају да се уклоне"

#: ../rpmdrake:1
#, c-format
msgid ""
"Warning: it seems that you are attempting to add so much\n"
"packages that your filesystem may run out of free diskspace,\n"
"during or after package installation ; this is particularly\n"
"dangerous and should be considered with care.\n"
"\n"
"Do you really want to install all the selected packages?"
msgstr ""
"Упозорење: изгледа да покушавате да додате толико\n"
"пакета да ваш фајл систем може остати без слободног простора,\n"
"током или након инсталације пакета ; ово је посебно\n"
"опасно и треба обратити додатну пажњу.\n"
"\n"
"Да ли заиста желите да инсталирате изабране пакете?"

#: ../rpmdrake:1
#, c-format
msgid "Too many packages are selected"
msgstr "Изабрали сте превише пакета"

#: ../rpmdrake:1
#, c-format
msgid "Maximum information"
msgstr "Потпуна информација"

#: ../rpmdrake:1
#, c-format
msgid "Normal information"
msgstr "Нормалана информација"

#: ../rpmdrake:1 ../rpmdrake.pm:1
#, c-format
msgid "Update source(s)"
msgstr "Ажурирање извора"

#: ../rpmdrake:1
#, c-format
msgid "Reload the packages list"
msgstr "Поново учитај листу пакета"

#: ../rpmdrake:1
#, c-format
msgid "Reset the selection"
msgstr "Поново изабери"

#: ../rpmdrake:1
#, c-format
msgid "in files"
msgstr "у фајловима"

#: ../rpmdrake:1
#, c-format
msgid "in descriptions"
msgstr "у описима"

#: ../rpmdrake:1
#, c-format
msgid "in names"
msgstr "у именима"

#: ../rpmdrake:1
#, c-format
msgid "by update availability"
msgstr "по доступности"

#: ../rpmdrake:1
#, c-format
msgid "by source repository"
msgstr "по стању изворног кода"

#: ../rpmdrake:1
#, c-format
msgid "by selection state"
msgstr "по изабраности"

#: ../rpmdrake:1
#, c-format
msgid "by size"
msgstr "по величини"

#: ../rpmdrake:1
#, c-format
msgid "by group"
msgstr "по групи"

#: ../rpmdrake:1
#, c-format
msgid "All packages,"
msgstr "Сви пакети,"

#: ../rpmdrake:1
#, c-format
msgid "All packages, alphabetical"
msgstr "Сви пакети, по абецеди"

#: ../rpmdrake:1
#, c-format
msgid "Mandrake choices"
msgstr "Mandrake-ов избор"

#: ../rpmdrake:1
#, c-format
msgid "Normal updates"
msgstr "Обичне надоградње"

#: ../rpmdrake:1
#, c-format
msgid "Bugfixes updates"
msgstr "Надоградње са исправкама"

#: ../rpmdrake:1 ../edit-urpm-sources.pl:1
#, c-format
msgid "Security updates"
msgstr "Сигурносне надоградње"

#: ../rpmdrake:1
#, c-format
msgid "Description: "
msgstr "Опис:"

#: ../rpmdrake:1
#, c-format
msgid "Summary: "
msgstr "Сажетак: "

#: ../rpmdrake:1
#, c-format
msgid "Importance: "
msgstr "Важност: "

#: ../rpmdrake:1
#, c-format
msgid "%s KB"
msgstr "%s KB"

#: ../rpmdrake:1
#, c-format
msgid "Size: "
msgstr "Величина: "

#: ../rpmdrake:1
#, c-format
msgid "Version: "
msgstr "Верзија: "

#: ../rpmdrake:1
#, c-format
msgid "Name: "
msgstr "Име: "

#: ../rpmdrake:1
#, c-format
msgid "Reason for update: "
msgstr "Разлог ажурирања:"

#: ../rpmdrake:1
#, c-format
msgid "Currently installed version: "
msgstr "Тренутно инсталирана верзија: "

#: ../rpmdrake:1
#, c-format
msgid "Source: "
msgstr "Извор: "

#: ../rpmdrake:1
#, c-format
msgid "(Not available)"
msgstr "(Није доступно)"

#: ../rpmdrake:1
#, c-format
msgid "Changelog:\n"
msgstr "Измене:\n"

#: ../rpmdrake:1
#, c-format
msgid "Files:\n"
msgstr "Фајлови:\n"

#: ../rpmdrake:1
#, c-format
msgid "Selected size: %d MB"
msgstr "Величина изабраног: %d MB"

#: ../rpmdrake:1
#, c-format
msgid "Selected: %d MB / Free disk space: %d MB"
msgstr "Изабрано: %d MB / Слободан простор на диску: %d MB"

#: ../rpmdrake:1
#, c-format
msgid ""
"Because of their dependencies, the following package(s) must be\n"
"unselected now:\n"
"\n"
msgstr ""
"Због међузависности, следећи пакет(и) морају\n"
"да буду неизабрани:\n"
"\n"

#: ../rpmdrake:1
#, c-format
msgid ""
"Sorry, the following package(s) can't be selected:\n"
"\n"
msgstr ""
"Жалим, али следећи пакет(и) не могу да буду изабрани:\n"
"\n"

#: ../rpmdrake:1
#, c-format
msgid "Some packages can't be installed"
msgstr "Неки пакети не могу да се инсталирају"

#: ../rpmdrake:1
#, c-format
msgid ""
"To satisfy dependencies, the following package(s) also need\n"
"to be installed:\n"
"\n"
msgstr ""
"Да би задовољили међузависности, следећи пакет(и) такође треба\n"
"да се инсталирају:\n"
"\n"

#: ../rpmdrake:1
#, c-format
msgid "Additional packages needed"
msgstr "Потребни су додатни пакети"

#: ../rpmdrake:1
#, c-format
msgid "Some packages can't be removed"
msgstr "Неки пакети се не могу уклонити"

#: ../rpmdrake:1
#, c-format
msgid ""
"Removing these packages would break your system, sorry:\n"
"\n"
msgstr ""
"Жалим, али уклањањем ових пакета би сте оштетити систем:\n"
"\n"

#: ../rpmdrake:1
#, c-format
msgid ""
"Because of their dependencies, the following package(s) also need to be\n"
"removed:\n"
"\n"
msgstr ""
"Да би задовољили све зависности,следећи пакет(и) би такође\n"
"требало да се уклоне:\n"
"\n"

#: ../rpmdrake:1
#, c-format
msgid "Some additional packages need to be removed"
msgstr "Још неки пакети морају бити уклоњени"

#: ../rpmdrake:1
#, c-format
msgid "More information on package..."
msgstr "Додатне информације о пакету..."

#: ../rpmdrake:1
#, c-format
msgid "Information on packages"
msgstr "Информације о пакетима"

#. -PO: Keep it short, this is gonna be on a button
#: ../rpmdrake:1
#, c-format
msgid "More infos"
msgstr "Више информација"

#: ../rpmdrake:1
#, c-format
msgid "Addable"
msgstr "Могу се додати"

#: ../rpmdrake:1
#, c-format
msgid "Upgradable"
msgstr "Могу се ажурирати"

#: ../rpmdrake:1
#, c-format
msgid ""
"The list of updates is void. This means that either there is\n"
"no available update for the packages installed on your computer,\n"
"or you already installed all of them."
msgstr ""
"Листа пакета за ажурирање није креирана. Ово или значи или да нема "
"доступних\n"
"пакета за ажурирање за ваш рачунар,\n"
"или су они веќ инсталирани."

#: ../rpmdrake:1
#, c-format
msgid "No update"
msgstr "Без ажурирaња"

#: ../rpmdrake:1
#, c-format
msgid "(none)"
msgstr "(ниjедан)"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, listing packages..."
msgstr "Молим Вас сaчекаjте, приказујем пакете..."

#: ../rpmdrake:1
#, c-format
msgid "unknown package "
msgstr "непознати пакет "

#: ../rpmdrake:1
#, c-format
msgid "One of the following packages is needed:"
msgstr "Један од следећих пакета је потребан:"

#: ../rpmdrake:1
#, c-format
msgid "Please choose"
msgstr "Изаберите"

#: ../rpmdrake:1
#, c-format
msgid "rpmdrake"
msgstr "rpmdrake"

#: ../rpmdrake:1
#, c-format
msgid "Not selected"
msgstr "Нису изабрани"

#: ../rpmdrake:1
#, c-format
msgid "Selected"
msgstr "Изабрани"

#: ../rpmdrake:1
#, c-format
msgid "Search results"
msgstr "Резултати претрагe"

#: ../rpmdrake:1
#, c-format
msgid "Stop"
msgstr "Стоп"

#: ../rpmdrake:1
#, c-format
msgid "Please wait, searching..."
msgstr "Молим Вас сачекајте, тражим..."

#: ../rpmdrake:1
#, c-format
msgid "Search results (none)"
msgstr "Резултат претрагe (нема)"

#: ../rpmdrake:1
#, c-format
msgid "Other"
msgstr "Остало"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid ""
"Welcome to the packages source editor!\n"
"\n"
"This tool will help you configure the packages sources you wish to use on\n"
"your computer. They will then be available to install new software package\n"
"or to perform updates."
msgstr ""
"Добродошли у Едитор изворног кода у Пакетима!\n"
"\n"
"Овај алат вам може помоќи да подесите код у пакетима које желите да "
"користите\n"
"на вашем рачунару. Након тога ќе бити спреми за инсталацију као нови пакети\n"
"или за ажурирање старих."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Save and quit"
msgstr "Сачувај и изађи"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Proxy..."
msgstr "Прокси..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Update..."
msgstr "Ажурирај..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Add..."
msgstr "Додај..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Edit"
msgstr "Измени"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Source"
msgstr "Извор"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Enabled?"
msgstr "Укључи?"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Configure sources"
msgstr "Подешавање извора"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Password:"
msgstr "Лозинка:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "User:"
msgstr "Корисник:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "You may specify a user/password for the proxy authentication:"
msgstr "Можете да подесите корисника/лозинку за идентификацију проксија:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Proxy hostname:"
msgstr "Име прокси домаћина(hostname):"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid ""
"If you need a proxy, enter the hostname and an optional port (syntax: "
"<proxyhost[:port]>):"
msgstr ""
"Ако Вам је потребна прокси, унесите име домаћина и необавезни порт "
"(синтакса: <proksi-domacin[:port]>):"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Configure proxies"
msgstr "Подешавање проксија"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Please wait, updating medium..."
msgstr "Молим Вас сачекајте, ажурирам медијум..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid ""
"In order to save the changes, you need to insert the medium in the drive."
msgstr "Да би сте сачували измене, морате да убаците медијум у уређај."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "You need to insert the medium to continue"
msgstr "Морате да убаците медијум како би сте наставили"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Save changes"
msgstr "Сачувај измене"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Relative path to synthesis/hdlist:"
msgstr "Релативна путaња ка synthesis/hdlist:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "URL:"
msgstr "URL:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Editing source \"%s\":"
msgstr "Мењам извор \"%s\":"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Edit a source"
msgstr "Измени извор"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Please wait, removing medium..."
msgstr "Молимо Вас да сачекате, уклањам медијум..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Please wait, adding medium..."
msgstr "Молимо Вас да сачекате, додајем медијум..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Type of source:"
msgstr "Тип изворa:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Adding a source:"
msgstr "Додаjем извор:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid ""
"There is already a medium by that name, do you\n"
"really want to replace it?"
msgstr ""
"Веќ постоји медиј са тим именом, да ли\n"
"заиста желите да је замените?"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "You need to fill up at least the two first entries."
msgstr "Морате да попуните најмање прва два поља."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Name:"
msgstr "Имe:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Login:"
msgstr "Пријава:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Choose a mirror..."
msgstr "Изаберите своj мирор саjт..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Browse..."
msgstr "Тражи..."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Path or mount point:"
msgstr "Путања или тaчка монтирања:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Removable device"
msgstr "Преносни уређај"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "HTTP server"
msgstr "HTTP сервер"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "FTP server"
msgstr "FTP сервер"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Path:"
msgstr "Путaња:"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Local files"
msgstr "Локални фајлови"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Add a source"
msgstr "Додај извор"

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Unable to update medium; it will be automatically disabled."
msgstr "Не могу да ажурирам медијум; он ће бити аутоматски искључен."

#: ../edit-urpm-sources.pl:1
#, c-format
msgid "Unable to create medium."
msgstr "Не могу да направим медијум."

#: ../rpmdrake.pm:1
#, c-format
msgid "Update"
msgstr "Aжурирaњe"

#: ../rpmdrake.pm:1
#, c-format
msgid "Select the source(s) you wish to update:"
msgstr "Изаберите које пакет(е) желите да ажурирате:"

#: ../rpmdrake.pm:1
#, c-format
msgid "Please wait, updating media..."
msgstr "Молим Вас сачекајте, ажурирам медијум..."

#: ../rpmdrake.pm:1
#, fuzzy, c-format
msgid " failed!"
msgstr "у фајловима"

#: ../rpmdrake.pm:1
#, c-format
msgid " done."
msgstr ""

#: ../rpmdrake.pm:1
#, c-format
msgid "Download of `%s', speed:%s"
msgstr "Download са `%s', брзина:%s"

#: ../rpmdrake.pm:1
#, c-format
msgid "Download of `%s', time to go:%s, speed:%s"
msgstr "Download са `%s', време до краја:%s, брзина:%s"

#: ../rpmdrake.pm:1
#, c-format
msgid "Starting download of `%s'..."
msgstr "Покрећем download са `%s'..."

#: ../rpmdrake.pm:1
#, c-format
msgid "Examining distant file of source `%s'..."
msgstr ""

#: ../rpmdrake.pm:1
#, c-format
msgid "Examining file of source `%s'..."
msgstr ""

#: ../rpmdrake.pm:1
#, fuzzy, c-format
msgid "Copying file for source `%s'..."
msgstr "Копирам локални фајл `%s'..."

#: ../rpmdrake.pm:1
#, c-format
msgid "Please choose the desired mirror."
msgstr "Изаберите сајт по жељи."

#: ../rpmdrake.pm:1
#, c-format
msgid ""
"I can't find any suitable mirror.\n"
"\n"
"There can be many reasons for this problem; the most frequent is\n"
"the case when the architecture of your processor is not supported\n"
"by Mandrake Linux Official Updates."
msgstr ""
"Не могу да пронаѓем ниједан одговарајуѓи мирор.\n"
"\n"
"Може постојати неколико разлога за овај проблем; најчешќи је\n"
"случај да архитектура вашег процесора није подржана\n"
"од стране Mandrake Linux Official Updates."

#: ../rpmdrake.pm:1
#, c-format
msgid "No mirror"
msgstr "Нема мирора"

#: ../rpmdrake.pm:1
#, c-format
msgid ""
"There was an error downloading the mirrors list:\n"
"\n"
"%s\n"
"The network, or MandrakeSoft website, are maybe unavailable.\n"
"Please try again later."
msgstr ""
"Појавила се грешка током download-а листе мирор сајтова:\n"
"\n"
"%s\n"
"Интернет, или MandrakeSoft-ов веб сајт можда нису тренутно доступни.\n"
"Покушајте касније поново."

#: ../rpmdrake.pm:1
#, c-format
msgid "Error during download"
msgstr "Грешка током преузимања са интернета"

#: ../rpmdrake.pm:1
#, c-format
msgid "Please wait, downloading mirrors addresses from MandrakeSoft website."
msgstr ""
"Молим Вас сачекајте, скидам листу додатних адреса са MandrakeSoft-овог веб "
"сајта."

#: ../rpmdrake.pm:1
#, c-format
msgid ""
"I need to contact MandrakeSoft website to get the mirrors list.\n"
"Please check that your network is currently running.\n"
"\n"
"Is it ok to continue?"
msgstr ""
"Желим да посетим MandrakeSoft веб сајт да би добавио листу мирора.\n"
"Проверите да ли је ваша конекција фукционална.\n"
"\n"
"Да ли је У реду да наставим?"

#: ../rpmdrake.pm:1
#, c-format
msgid "United States"
msgstr "Сједињене Америчке Државе"

#: ../rpmdrake.pm:1
#, c-format
msgid "China"
msgstr "Кина"

#: ../rpmdrake.pm:1
#, c-format
msgid "United Kingdom"
msgstr "Уједињено Краљевство"

#: ../rpmdrake.pm:1
#, c-format
msgid "Taiwan"
msgstr "Тајван"

#: ../rpmdrake.pm:1
#, c-format
msgid "Sweden"
msgstr "Шведска"

#: ../rpmdrake.pm:1
#, c-format
msgid "Russia"
msgstr "Русија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Portugal"
msgstr "Португал"

#: ../rpmdrake.pm:1
#, c-format
msgid "Poland"
msgstr "Пољска"

#: ../rpmdrake.pm:1
#, c-format
msgid "Norway"
msgstr "Норвешка"

#: ../rpmdrake.pm:1
#, c-format
msgid "Netherlands"
msgstr "Холандија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Korea"
msgstr "Кореја"

#: ../rpmdrake.pm:1
#, c-format
msgid "Japan"
msgstr "Јапан"

#: ../rpmdrake.pm:1
#, c-format
msgid "Italy"
msgstr "Италија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Israel"
msgstr "Израел"

#: ../rpmdrake.pm:1
#, c-format
msgid "Greece"
msgstr "Грчка"

#: ../rpmdrake.pm:1
#, c-format
msgid "France"
msgstr "Француска"

#: ../rpmdrake.pm:1
#, c-format
msgid "Finland"
msgstr "Финска"

#: ../rpmdrake.pm:1
#, c-format
msgid "Spain"
msgstr "Шпанија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Danmark"
msgstr "Данска"

#: ../rpmdrake.pm:1
#, c-format
msgid "Germany"
msgstr "Немачка"

#: ../rpmdrake.pm:1
#, c-format
msgid "Czech Republic"
msgstr "Чешка"

#: ../rpmdrake.pm:1
#, c-format
msgid "Costa Rica"
msgstr "Костарика"

#: ../rpmdrake.pm:1
#, c-format
msgid "Canada"
msgstr "Канада"

#: ../rpmdrake.pm:1
#, c-format
msgid "Brazil"
msgstr "Бразил"

#: ../rpmdrake.pm:1
#, c-format
msgid "Belgium"
msgstr "Белгија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Australia"
msgstr "Аустралија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Austria"
msgstr "Аустрија"

#: ../rpmdrake.pm:1
#, c-format
msgid "Info..."
msgstr "Информације..."

#: ../rpmdrake.pm:1
#, c-format
msgid "No"
msgstr "Не"

#: ../rpmdrake.pm:1
#, c-format
msgid "Yes"
msgstr "Да"

#: data/rpmdrake.desktop.in.h:1
msgid "Install Software"
msgstr "Инсталирај софтвер"

#: data/rpmdrake-remove.desktop.in.h:1
msgid "Remove Software"
msgstr "Уклони софтвер"

#: data/rpmdrake-sources.desktop.in.h:1
msgid "Software Sources Manager"
msgstr "Менаџер Софтверског Кода"

#~ msgid "Everything already installed (is this supposed to happen at all?)."
#~ msgstr "Све је већ инсталирано (да ли је ово уопште требало да се догоди?)."

#~ msgid "Everything already installed."
#~ msgstr "Све је већ инсталирано."

#~ msgid "Local file `%s' already up to date"
#~ msgstr "Локални фајл `%s' је већ ажуриран"

#~ msgid "-adobe-times-bold-r-normal--25-*-100-100-p-*-iso8859-*,*-r-*"
#~ msgstr "-adobe-times-bold-r-normal--25-*-100-100-p-*-iso8859-*,*-r-*"

#, fuzzy
#~ msgid "-misc-fixed-medium-r-normal--12-*-*-100--*-*-*-*-*,*"
#~ msgstr "-adobe-times-bold-r-normal--25-*-100-100-p-*-iso8859-*,*-r-*"

#, fuzzy
#~ msgid "Update sources"
#~ msgstr "Ажурирање Извора"

#~ msgid "Software Management"
#~ msgstr "Менаџмент Софтвера"

#~ msgid ""
#~ "Name: %s\n"
#~ "Version: %s\n"
#~ "Size: %s KB\n"
#~ "Importance: %s\n"
#~ "\n"
#~ "Summary: %s\n"
#~ "\n"
#~ "%s\n"
#~ msgstr ""
#~ "Име: %s\n"
#~ "Верзија: %s\n"
#~ "Величина: %s KB\n"
#~ "Важност: %s\n"
#~ "\n"
#~ "Сажетак: %s\n"
#~ "\n"
#~ "%s\n"

#~ msgid ""
#~ "Name: %s\n"
#~ "Version: %s\n"
#~ "Size: %s KB\n"
#~ "\n"
#~ "Summary: %s\n"
#~ "\n"
#~ "%s\n"
#~ msgstr ""
#~ "Име: %s\n"
#~ "Верзија: %s\n"
#~ "Величина: %s KB\n"
#~ "\n"
#~ "Сажетак: %s\n"
#~ "\n"
#~ "%s\n"

#, fuzzy
#~ msgid "Remove .rpmnew"
#~ msgstr "Уклони Софтвер"

#~ msgid "This would break your system"
#~ msgstr "Ово ќе покварити ваш систем"