c9b88bf967b9cd2cac7d6b3c87a652e4d9b61cfc
[pxelator] / lib / PXElator / pxelinux.pm
1 package pxelinux;
2
3 use warnings;
4 use strict;
5 use autodie;
6
7 our $magic = 0xF100747E;
8
9 our $config_file; #= 'pxelinux.cfg/default';
10 our $path_prefix;
11 our $reboot_time; # 300 s
12
13 use server;
14 use File::Slurp;
15 use Carp qw/confess/;
16
17 sub config_for_ip {
18         my ($ip,$config) = @_;
19         confess "$ip not IP" unless $ip =~ m{^\d+\.\d+\.\d+\.\d+$};
20
21         $path_prefix = (caller(1))[3];
22         $path_prefix =~ s{config::}{} || die "caller isn't package config !";
23         $path_prefix .= '/';
24
25         warn "# $ip $path_prefix";
26
27         my $dir = "$server::base_dir/tftp";
28         $dhcpd::file = 'pxelinux.0';
29         symlink "/usr/lib/syslinux/pxelinux.0", "$dir/$dhcpd::file" unless -e "$dir/$dhcpd::file";
30
31         $dir .= "/$path_prefix";
32         mkdir $dir unless -d $dir;
33
34         mkdir "$dir/pxelinux.cfg" unless -e "$dir/pxelinux.cfg";
35
36         $config_file = 'pxelinux.cfg/' . uc sprintf "%02x%02x%02x%02x", split(/\./, $ip, 4);
37         warn "$ip config_file $config_file";
38
39         my $path = "$dir/$config_file";
40         write_file $path, $config;
41
42         warn "# config: $path ", -s $path;
43
44         return $config;
45 }
46
47 1;