29 |
} |
} |
30 |
|
|
31 |
sub serial { |
sub serial { |
|
my $nr = $ENV{nr} || 0; |
|
32 |
x11::xterm( 'serial ' . nr() => 'nc ' . port(11000,' ') ); |
x11::xterm( 'serial ' . nr() => 'nc ' . port(11000,' ') ); |
33 |
} |
} |
34 |
|
|
69 |
system "brctl addif virtual $ifname" |
system "brctl addif virtual $ifname" |
70 |
unless `brctl show` =~ m{$ifname}; |
unless `brctl show` =~ m{$ifname}; |
71 |
|
|
72 |
|
my $ip = client::ip_from_mac $mac; |
73 |
|
|
74 |
|
my $name = client::conf( $ip, 'hostname' ); |
75 |
|
$name ||= $nr; |
76 |
|
|
77 |
|
my $kvm_bin = client::conf( $ip => 'kvm.bin' ) || 'kvm'; |
78 |
|
my $boot = client::conf( $ip, 'kvm.boot' ) || 'n'; # network by default |
79 |
|
|
80 |
my $kvm = qq| |
my $kvm = qq| |
81 |
kvm -m $memory_size -net nic,macaddr=$mac |
$kvm_bin |
82 |
|
-name "$name" |
83 |
|
-m $memory_size -net nic,macaddr=$mac |
84 |
-net tap,ifname=$ifname,script=no |
-net tap,ifname=$ifname,script=no |
85 |
-boot n |
-boot $boot |
86 |
-monitor tcp:$mon,server,nowait |
-monitor tcp:$mon,server,nowait |
87 |
-serial tcp:$ser,server,nowait |
-serial tcp:$ser,server,nowait |
88 |
|; |
|; |
89 |
|
|
90 |
|
$kvm .= ' -vnc ' . port(0,':') unless $ENV{DISPLAY}; |
91 |
|
|
92 |
# -runas $server::user |
# -runas $server::user |
93 |
$kvm =~ s{\s+}{ }gs; |
$kvm =~ s{\s+}{ }gs; |
94 |
|
|
97 |
|
|
98 |
} |
} |
99 |
|
|
100 |
|
sub nr_from_mac { |
101 |
|
my $mac = shift; |
102 |
|
my $nr = (split(/:/,$mac,6))[-1]; |
103 |
|
$nr = hex($nr); |
104 |
|
return $nr; |
105 |
|
} |
106 |
|
|
107 |
|
sub next_nr { |
108 |
|
my @kvms = glob "$server::conf/mac/AC:DE:48:00:00:*"; |
109 |
|
my $nr = nr_from_mac( pop @kvms ); |
110 |
|
return $nr + 1; |
111 |
|
} |
112 |
|
|
113 |
warn 'loaded'; |
warn 'loaded'; |
114 |
|
|
115 |
1; |
1; |