| #!/usr/bin/perl | |
| # -*-perl-*- | |
| # | |
| # Copyright © 1996 Andy Guy <awpguy@acs.ucalgary.ca> | |
| # Copyright © 1998 Martin Schulze <joey@infodrom.north.de> | |
| # Copyright © 1999, 2009 Raphaël Hertzog <hertzog@debian.org> | |
| # | |
| # This program has been distributed under the terms of the GNU GPL. | |
| use strict; | |
| use warnings; | |
| use vars qw(%config); | |
| #use diagnostics; | |
| use lib '/usr/lib/perl5/Debian'; | |
| use lib '/usr/share/perl5/Debian'; | |
| eval 'use Net::FTP;'; | |
| if ($@) { | |
| print STDERR "Please install the 'perl' package if you want to use the\n" . | |
| "FTP access method of dselect.\n\n"; | |
| exit 1; | |
| } | |
| use Dselect::Ftp; | |
| # deal with arguments | |
| my $vardir = $ARGV[0]; | |
| my $method = $ARGV[1]; | |
| my $option = $ARGV[2]; | |
| if ($option eq "manual") { | |
| print "Manual package installation.\n"; | |
| exit 0; | |
| } | |
| #print "vardir: $vardir, method: $method, option: $option\n"; | |
| #Defaults | |
| my $arch=`dpkg --print-architecture`; | |
| $arch='i386' if $?; | |
| chomp $arch; | |
| my $logname = `whoami`; | |
| chomp $logname; | |
| my $host = `cat /etc/mailname || dnsdomainname`; | |
| chomp $host; | |
| $config{'dldir'} = "debian"; | |
| $config{'use_auth_proxy'} = 0; | |
| $config{'proxyhost'} = ""; | |
| $config{'proxylogname'} = $logname; | |
| $config{'proxypassword'} = ""; | |
| my $methdir = "$vardir/methods/ftp"; | |
| my $exit = 0; | |
| my $problem = 0; | |
| if (-f "$methdir/vars") { | |
| read_config("$methdir/vars"); | |
| } | |
| chdir "$methdir"; | |
| if (! -d "debian") { | |
| mkdir "debian", 0755; | |
| } | |
| # get info from user | |
| $| = 1; | |
| print <<EOM; | |
| You must supply an ftp site, use of passive mode, username, password, | |
| path to the debian directory,list of distributions you are interested | |
| in and place to download the binary package files to (relative to | |
| /var/lib/dpkg/methods/ftp). You can add as much sites as you like. Later | |
| entries will always override older ones. | |
| Supply "?" as a password to be asked each time you connect. | |
| Eg: ftp site: ftp.debian.org | |
| passive: y | |
| username: anonymous | |
| password: $logname\@$host | |
| ftp dir: /debian | |
| distributions: dists/stable/main dists/stable/contrib | |
| download dir: debian | |
| If you want to install package from non-US consider adding a second ftp site | |
| with "debian-non-US" as debian directory and "dists/stable/non-US" as | |
| distribution. | |
| You may have to use an authenticated FTP proxy in order to reach the | |
| FTP site: | |
| Eg: use auth proxy: y | |
| proxy: proxy.isp.com | |
| proxy account: $config{'proxylogname'} | |
| proxy password: ? | |
| EOM | |
| if (! $config{'done'}) { | |
| view_mirrors() if (yesno("y", "Would you like to see a list of ftp mirrors")); | |
| add_site(); | |
| } | |
| edit_config($methdir); | |
| my $ftp; | |
| sub download() { | |
| foreach (@{$config{'site'}}) { | |
| $ftp = do_connect ($_->[0], # Ftp server | |
| $_->[4], # username | |
| $_->[5], # password | |
| $_->[1], # ftp dir | |
| $_->[3], # passive | |
| $config{'use_auth_proxy'}, | |
| $config{'proxyhost'}, | |
| $config{'proxylogname'}, | |
| $config{'proxypassword'}); | |
| my @dists = @{$_->[2]}; | |
| my $dist; | |
| foreach $dist (@dists) { | |
| my $dir = "$dist/binary-$arch"; | |
| print "Checking $dir...\n"; | |
| # if(!$ftp->pasv()) { print $ftp->message . "\n"; die "error"; } | |
| my @dirlst = $ftp->ls("$dir/"); | |
| my $got_pkgfile = 0; | |
| my $line = ""; | |
| foreach $line (@dirlst) { | |
| if($line =~ /Packages/) { | |
| $got_pkgfile=1; | |
| } | |
| } | |
| if( !$got_pkgfile) { | |
| print "Warning: Could not find a Packages file in $dir\n", | |
| "This may not be a problem if the directory is a symbolic link\n"; | |
| $problem=1; | |
| } | |
| } | |
| print "Closing ftp connection...\n"; | |
| $ftp->quit(); | |
| } | |
| } | |
| # download stuff (protect from ^C) | |
| print "\nUsing FTP to check directories...(stop with ^C)\n\n"; | |
| eval { | |
| local $SIG{INT} = sub { | |
| die "Interrupted!\n"; | |
| }; | |
| download(); | |
| }; | |
| if($@) { | |
| $ftp->quit(); | |
| print "FTP ERROR - "; | |
| if ($@ eq "connect") { | |
| print "config was untested\n"; | |
| } else { | |
| print "$@\n"; | |
| } | |
| $exit = 1; | |
| }; | |
| # output new vars file | |
| $config{'done'} = 1; | |
| store_config("$methdir/vars"); | |
| chmod 0600, "$methdir/vars"; | |
| if($exit || $problem) { | |
| print "Press return to continue\n"; | |
| <STDIN>; | |
| } | |
| exit $exit; |