--- lib/PXElator/pxelinux.pm 2009/08/03 20:53:46 129 +++ lib/PXElator/pxelinux.pm 2009/08/04 15:25:09 138 @@ -1,9 +1,47 @@ package pxelinux; +use warnings; +use strict; +use autodie; + our $magic = 0xF100747E; our $config_file; #= 'pxelinux.cfg/default'; our $path_prefix; our $reboot_time; # 300 s +use server; +use File::Slurp; +use Carp qw/confess/; + +sub config_for_ip { + my ($ip,$config) = @_; + confess "$ip not IP" unless $ip =~ m{^\d+\.\d+\.\d+\.\d+$}; + + $path_prefix = (caller(1))[3]; + $path_prefix =~ s{config::}{} || die "caller isn't package config !"; + $path_prefix .= '/'; + + warn "# $ip $path_prefix"; + + my $dir = "$server::base_dir/tftp"; + $dhcpd::file = 'pxelinux.0'; + symlink "/usr/lib/syslinux/pxelinux.0", "$dir/$dhcpd::file" unless -e "$dir/$dhcpd::file"; + + $dir .= "/$path_prefix"; + mkdir $dir unless -d $dir; + + mkdir "$dir/pxelinux.cfg" unless -e "$dir/pxelinux.cfg"; + + $config_file = 'pxelinux.cfg/' . uc sprintf "%02x%02x%02x%02x", split(/\./, $ip, 4); + warn "$ip config_file $config_file"; + + my $path = "$dir/$config_file"; + write_file $path, $config; + + warn "# config: $path ", -s $path; + + +} + 1;