cleanup code, try to connect to video port
[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 client;
15 use File::Slurp;
16 use Carp qw/confess/;
17
18 sub config_for_ip {
19         my ($ip,$config) = @_;
20         confess "$ip not IP" unless $ip =~ m{^\d+\.\d+\.\d+\.\d+$};
21
22         $path_prefix = (caller(1))[3];
23         $path_prefix = (caller(2))[3] unless $path_prefix =~ m{config::};
24         $path_prefix =~ s{config::}{} || warn "# caller isn't package config !";
25         $path_prefix .= '/';
26
27         warn "# $ip $path_prefix";
28
29         my $dir = "$server::base_dir/tftp";
30         $dhcpd::file = 'pxelinux.0';
31         symlink "/usr/lib/syslinux/pxelinux.0", "$dir/$dhcpd::file" unless -e "$dir/$dhcpd::file";
32
33         $dir .= "/$path_prefix";
34         mkdir $dir unless -d $dir;
35
36         mkdir "$dir/pxelinux.cfg" unless -e "$dir/pxelinux.cfg";
37
38         $config_file = 'pxelinux.cfg/' . uc sprintf "%02x%02x%02x%02x", split(/\./, $ip, 4);
39         warn "$ip config_file $config_file";
40
41         my $path = "$dir/$config_file";
42         write_file $path, $config;
43
44         warn "# config: $path ", -s $path;
45
46         return $config;
47 }
48
49 sub config_ip_boot {
50         my ( $ip, $boot, $append ) = @_;
51
52         my $default = client::conf $ip => 'default';
53         my $config;
54
55         foreach my $kernel ( glob "$boot/vmlinuz*" ) {
56                 my $ver = $1 if $kernel =~ m{vmlinuz(.+)};
57                 $default ||= 'boot' . $ver;
58
59                 $config .= qq{
60
61 label boot$ver
62         kernel $ip/boot/vmlinuz$ver
63         append initrd=$ip/boot/initrd.img$ver $append
64
65                 };
66         }
67
68         config_for_ip( $ip, qq{
69
70 default $default
71 prompt 1
72 timeout 30
73
74 $config
75
76         });
77
78 }
79
80 1;