return iso path
[pxelator] / lib / PXElator / upstream.pm
1 package upstream;
2
3 use warnings;
4 use strict;
5 use autodie;
6
7 use Data::Dump qw/dump/;
8 use LWP::Simple qw/mirror RC_NOT_MODIFIED/;
9 use server;
10 use once;
11
12 sub mirror_file {
13         my ( $url, $file ) = @_;
14
15         return unless once::first_time $file;
16
17         warn "mirror_file $url -> $file\n";
18         mirror( $url, $file )
19                 == RC_NOT_MODIFIED
20                 && warn(" not modified\n")
21                 || warn(" done ", -s $file, " bytes\n")
22                 ;
23 }
24
25 sub iso {
26         my $url = shift;
27
28         my $name = (caller(1))[3];
29         $name =~ s{config::}{} || die "caller isn't package config !";
30
31         warn "$name $url";
32
33         my $dir = "$server::base_dir/iso";
34         mkdir $dir unless -e $dir;
35
36         my $file = $1 if $url =~ m{/([^/]+\.iso)}i;
37         die "can't find iso file in $url" unless $file;
38
39         my $iso = "$dir/$file";
40
41         mirror_file( $url, $iso );
42
43         $file =~ s{\.iso$}{}i;
44         my $mnt = "$server::base_dir/tftp/$name";
45         mkdir $mnt unless -d $mnt;
46         $mnt .= '/iso';
47         mkdir $mnt unless -d $mnt;
48
49         system("mount -t iso9660 | grep $name/iso || sudo mount $iso $mnt -o loop -t iso9660 -v") == 0;
50         return $iso;
51 }
52
53 sub files {
54         my $url = shift;
55         my @files = @_;
56
57         if ( ! @files ) {
58                 push @files, $1 if $url =~ s{/([^/]+)$}{};
59         }
60
61         my $name = (caller(1))[3];
62         $name =~ s{config::}{} || die "caller isn't package config !";
63
64         my $path = "$server::base_dir/tftp/$name";
65         mkdir $path unless -d $path;
66
67         warn "# files $url ",dump( @files ), " -> $path\n";
68
69         foreach my $file ( @files ) {
70                 mirror_file( "$url/$file", "$path/$file" )
71                         if ! -e "$path/$file" || once::first_time( "$url/$file" );
72         }
73 }
74
75 1;