1 |
dpavlin |
129 |
package pxelinux; |
2 |
|
|
|
3 |
dpavlin |
138 |
use warnings; |
4 |
|
|
use strict; |
5 |
|
|
use autodie; |
6 |
|
|
|
7 |
dpavlin |
129 |
our $magic = 0xF100747E; |
8 |
|
|
|
9 |
|
|
our $config_file; #= 'pxelinux.cfg/default'; |
10 |
|
|
our $path_prefix; |
11 |
|
|
our $reboot_time; # 300 s |
12 |
|
|
|
13 |
dpavlin |
138 |
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 |
dpavlin |
153 |
return $config; |
45 |
dpavlin |
138 |
} |
46 |
|
|
|
47 |
dpavlin |
129 |
1; |