quite huge refactoring
[pxelator] / lib / PXElator / upstream.pm
1 package upstream;
2
3 use warnings;
4 use strict;
5 use autodie;
6
7 use LWP::Simple qw/mirror RC_NOT_MODIFIED/;
8 use server;
9
10 our $just_once;
11
12 sub iso {
13         my $url = shift;
14
15         return if $just_once->{$url}++;
16
17         my $name = (caller(1))[3];
18         $name =~ s{config::}{} || die "caller isn't package config !";
19
20         warn "$name $url";
21
22         my $dir = "$server::base_dir/iso";
23         mkdir $dir unless -e $dir;
24
25         my $file = $1 if $url =~ m{/([^/]+\.iso$)}i;
26         die "can't find iso file in $url" unless $file;
27
28         my $iso = "$dir/$file";
29
30         print STDERR "$name mirror $url";
31         mirror( $url, $iso )
32                 == RC_NOT_MODIFIED
33                 && warn(" not modified\n")
34                 || warn(" done ", -s $iso, " bytes\n")
35                 ;
36
37         $file =~ s{\.iso$}{}i;
38         my $mnt = "$server::base_dir/tftp/$name";
39         mkdir $mnt unless -d $mnt;
40         $mnt .= '/iso';
41         mkdir $mnt unless -d $mnt;
42
43         system("mount -t iso9660 | grep $mnt || sudo mount $iso $mnt -o loop -t iso9660 -v") == 0;
44 }
45
46 1;