use strict;
use autodie;
+use Data::Dump qw/dump/;
use LWP::Simple qw/mirror RC_NOT_MODIFIED/;
+use Storable;
use server;
sub mirror_file {
my ( $url, $file ) = @_;
- print STDERR "mirror $url";
+ warn "mirror_file $url -> $file\n";
mirror( $url, $file )
== RC_NOT_MODIFIED
&& warn(" not modified\n")
;
}
-our $just_once;
+my $once_path = '/tmp/pxelator.once';
+our $just_once = retrieve $once_path if -e $once_path;
+sub first_time {
+ my $what = shift;
+ return if $just_once->{$what}++;
+ store $just_once, $once_path;
+ return 1;
+}
sub iso {
my $url = shift;
- return if $just_once->{$url}++;
-
my $name = (caller(1))[3];
$name =~ s{config::}{} || die "caller isn't package config !";
my $iso = "$dir/$file";
- mirror_file( $url, $iso );
+ mirror_file( $url, $iso ) if first_time $url;
$file =~ s{\.iso$}{}i;
my $mnt = "$server::base_dir/tftp/$name";
system("mount -t iso9660 | grep $name/iso || sudo mount $iso $mnt -o loop -t iso9660 -v") == 0;
}
-sub file {
- my ( $url, $file ) = @_;
- my $path = "$server::base_dir/$file";
- my @file_parts = split m{/}, $file;
- foreach ( 1 .. $#file_parts - 1 ) {
- my $path = splice @file_parts, 0, $_;
- warn "? $path\n";
- mkdir $path unless -e $path;
+sub files {
+ my $url = shift;
+ my @files = @_;
+
+ if ( ! @files ) {
+ push @files, $1 if $url =~ s{/([^/]+)$}{};
+ }
+
+ my $name = (caller(1))[3];
+ $name =~ s{config::}{} || die "caller isn't package config !";
+
+ my $path = "$server::base_dir/tftp/$name";
+ mkdir $path unless -d $path;
+
+ warn "# files $url ",dump( @files ), " -> $path\n";
+
+ foreach my $file ( @files ) {
+ mirror_file( "$url/$file", "$path/$file" )
+ if ! -e "$path/$file" || first_time( "$url/$file" );
}
- mirror_file( $url, "$server::base_dir/$file" );
}
1;