#!/usr/bin/perl # $Id$ #- Copyright (C) 1999-2005 Mandriva #- #- This program is free software; you can redistribute it and/or modify #- it under the terms of the GNU General Public License as published by #- the Free Software Foundation; either version 2, or (at your option) #- any later version. #- #- This program is distributed in the hope that it will be useful, #- but WITHOUT ANY WARRANTY; without even the implied warranty of #- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #- GNU General Public License for more details. #- #- You should have received a copy of the GNU General Public License #- along with this program; if not, write to the Free Software #- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use strict; use urpm; use urpm::args 'options'; use urpm::msg; use urpm::download (); use urpm::cfg; sub usage { my $m = shift; # Translator: The URI types strings 'file:', 'ftp:', 'http:', # Translator: and 'removable:' must not be translated! # Translator: neither the ``with''. # Translator: only what is between <brackets> can be translated. my $usage = N("usage: urpmi.addmedia [options] <name> <url> [with <relative_path>] where <url> is one of [file:/]/<path> with <relative filename of hdlist> ftp://<login>:<password>@<host>/<path> with <relative filename of hdlist> ftp://<host>/<path> with <relative filename of hdlist> http://<host>/<path> with <relative filename of hdlist> removable://<path> and [options] are from ") . N(" --help - print this help message. ") . N(" --wget - use wget to retrieve distant files. ") . N(" --curl - use curl to retrieve distant files. ") . N(" --limit-rate - limit the download speed. ") . N(" --proxy - use specified HTTP proxy, the port number is assumed to be 1080 by default (format is <proxyhost[:port]>). ") . N(" --proxy-user - specify user and password to use for proxy authentication (format is <user:password>). ") . N(" --update - create an update medium. ") . N(" --probe-synthesis - try to find and use synthesis file. ") . N(" --probe-hdlist - try to find and use hdlist file. ") . N(" --no-probe - do not try to find any synthesis or hdlist file. ") . N(" --distrib - automatically create all media from an installation medium. ") . N(" --from - use specified url for list of mirrors, the default is %s ", $urpm::cfg::mirrors) . N(" --version - use specified distribution version, the default is taken from the version of the distribution told by the installed mandriva-release package. ") . N(" --arch - use specified architecture, the default is arch of mandriva-release package installed. ") . N(" --virtual - create virtual media wich are always up-to-date, only file:// protocol is allowed. ") . N(" --no-md5sum - disable MD5SUM file checking. ") . N(" --norebuild - don't try to rebuild hdlist if not readable. ") . N(" --nopubkey - don't import pubkey of added media ") . N(" --raw - add the media in config, but don't update it. ") . N(" -c - clean headers cache directory. ") . N(" -f - force generation of hdlist files. ") . N(" -q - quiet mode. ") . N(" -v - verbose mode. "); print $m ? "$usage\n$m" : $usage; exit 0; } #- remove quietly the failing media. sub remove_failed { my ($urpm, @media) = @_; if (@media) { print STDERR join("\n", map { N("unable to update medium \"%s\"\n", $_->{name}) } @media); local $urpm->{log} = sub {}; $urpm->remove_selected_media; $urpm->update_media(%options, callback => \&urpm::download::sync_logger); } } #- parse /etc/urpmi/mirror.config if present, or use default mdk mirror. #- the --from option overrides this setting. if ($options{mirrors_url}) { $urpm::cfg::mirrors = $options{mirrors_url}; } else { urpm::cfg::mirrors_cfg(); } $options{force} = 0; $options{noclean} = 1; $options{verbose} = 1; my $urpm = new urpm; urpm::args::parse_cmdline(urpm => $urpm); #- the default is to probe a synthesis file, except for --distrib $options{probe_with} = 'synthesis' unless $options{distrib} || exists($options{probe_with}); our ($name, $url, $with, $relative_hdlist) = our @cmdline; #- remove verbose if not asked. $options{verbose} > 0 or $urpm->{log} = sub {}; $url or ($url, $name) = ($name, ''); my ($type) = $url =~ m,^(([^:]*):/)?/, or usage; if ($< != 0) { $urpm->{fatal}(1, N("Only superuser is allowed to add media")); } if (!-e $urpm->{config}) { $urpm->{error}(N("Will create config file [%s]", $urpm->{config})); open my $f, '>', $urpm->{config} or $urpm->{fatal}(6, N("Can't create config file [%s]", $urpm->{config})); } $urpm->read_config; exists $options{limit_rate} or $options{limit_rate} = $urpm->{options}{'limit-rate'}; if ($options{distrib}) { $with || $relative_hdlist and usage N("no need to give <relative path of hdlist> with --distrib"); $urpm->add_distrib_media($name, $url, virtual => $options{virtual}, update => $options{update}, probe_with => $options{probe_with}); $urpm->update_media(%options, callback => \&urpm::download::sync_logger); remove_failed($urpm, grep { $_->{modified} } @{$urpm->{media}}); } else { $name or usage; if ($with eq "with") { $relative_hdlist or usage N("<relative path of hdlist> missing\n"); } elsif ($type =~ /ftp|http|rsync|ssh/) { $options{probe_with} || $with eq "with" or usage N("`with' missing for network media\n"); } $urpm->add_medium( $name, $url, $relative_hdlist, virtual => $options{virtual}, update => $options{update}, no_reload_config => $options{raw}, ); urpm::download::copy_cmd_line_proxy($name); if ($options{raw}) { $urpm->write_config; } else { $urpm->update_media(%options, callback => \&urpm::download::sync_logger); #- check creation of media my ($medium) = grep { $_->{name} eq $name } @{$urpm->{media}}; $medium or die N("unable to create medium \"%s\"\n", $name); remove_failed($urpm, $medium) if $medium->{modified}; } } #- try to umount removable devices which may have been mounted. $urpm->try_umounting_removables; # vim:ts=8:sts=4:sw=4