fix url typo, must be same as name of the sub in config
[pxelator] / lib / PXElator / network.pm
1 package network;
2
3 use warnings;
4 use strict;
5
6 use File::Slurp;
7
8 use server;
9
10 sub ifconfig {
11         my $dev = shift;
12         `/sbin/ifconfig $dev`
13 }
14
15 sub setup {
16
17         if ( my $dev = $ENV{DEV} ) {
18                 warn "W: running under device $dev, not configuring network\n";
19                 return;
20         }
21
22         my $ifconfig = ifconfig('virtual');
23         if ( $ifconfig !~ m{UP} ) {
24                 system "brctl addbr virtual";
25                 system "brctl setfd virtual 0";
26                 system("/sbin/ifconfig virtual $server::ip netmask $server::netmask") == 0 || warn "W: $!";
27         } else {
28                 warn "OK $ifconfig\n";
29         }
30 }
31
32 sub tap {
33
34         if ( my $dev = $ENV{DEV} ) {
35                 warn "W: running under device $dev, not configuring tap0\n";
36                 return;
37         }
38
39         if ( $server::ip !~ m{^172} ) {
40                 warn "W: server ip mismetch, not configuring tap0\n";
41                 return;
42         }
43
44         my $interfaces = read_file '/etc/network/interfaces';
45
46         if ( $interfaces !~ m{tap0}s ) {
47
48                 system "sudo apt-get install -y vde2";
49
50                 write_file '/tmp/interfaces', qq{
51
52 # added by PXElator
53 iface tap0 inet static
54         address $server::ip
55         netmask $server::netmask
56         vde2-switch -
57         # setup NAT for vde network
58         post-up sysctl -w net.ipv4.ip_forward=1
59         post-up iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o wlan0 -j MASQUERADE
60
61                 };
62
63                 system q|sudo sh -c 'cat /tmp/interfaces >> /etc/network/interfaces'|;
64                 system q|sudo sh -c 'usermod -G vde2-net -a $SUDO_USER'|;
65
66         }
67
68         my $ifconfig = ifconfig('tap0');
69         if ( $ifconfig =~ m{UP} ) {
70                  $ifconfig =~ m{$server::ip}s && return 'up';
71                 system("sudo /sbin/ifconfig tap0 $server::ip netmask $server::netmask") == 0 && return "ip changed $server::ip";
72                 die "can't change IP address of tap0 to $server::ip";
73         } else {
74                 die "bring interface up with: sudo ifup tap0\n";
75         }
76 }
77
78 1;