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 |
|
|
50 |
my $mac = sprintf('AC:DE:48:00:00:%02x', $nr); |
my $mac = sprintf('AC:DE:48:00:00:%02x', $nr); |
51 |
my $mon = port(10000,':'); |
my $mon = port(10000,':'); |
52 |
my $ser = port(11000,':'); |
my $ser = port(11000,':'); |
53 |
|
my $ip = client::ip_from_mac $mac; |
54 |
|
|
55 |
|
my $bridge = client::conf( $ip, 'kvm.bridge', default => 'virtual' ); |
56 |
|
$bridge = $ENV{DEV} if $ENV{DEV}; |
57 |
|
|
58 |
my $ifname = 'kvm' . $nr; |
my $ifname = 'kvm' . $nr; |
59 |
|
|
60 |
warn "# kvm start $nr $mac $mon $ser $ifname"; |
warn "# kvm $ip start $nr $mac $mon $ser $ifname $bridge"; |
61 |
|
|
62 |
# system "ifconfig $ifname down"; |
# system "ifconfig $ifname down"; |
63 |
# system "brctl delif virtual $ifname"; |
# system "brctl delif virtual $ifname"; |
70 |
unless $ifconfig =~ m{$ifname}; |
unless $ifconfig =~ m{$ifname}; |
71 |
system "ifconfig $ifname up" |
system "ifconfig $ifname up" |
72 |
unless $ifconfig =~ m{UP}; |
unless $ifconfig =~ m{UP}; |
73 |
system "brctl addif virtual $ifname" |
system "brctl addif $bridge $ifname" |
74 |
unless `brctl show` =~ m{$ifname}; |
unless `brctl show` =~ m{$ifname}; |
75 |
|
|
76 |
|
my $name = client::conf( $ip, 'hostname' ); |
77 |
|
$name ||= $nr; |
78 |
|
|
79 |
|
my $kvm_bin = client::conf( $ip => 'kvm.bin' ) || 'kvm'; |
80 |
|
my $boot = client::conf( $ip, 'kvm.boot' ) || 'n'; # network by default |
81 |
|
|
82 |
my $kvm = qq| |
my $kvm = qq| |
83 |
kvm -m $memory_size -net nic,macaddr=$mac |
$kvm_bin |
84 |
|
-name "$name" |
85 |
|
-m $memory_size -net nic,macaddr=$mac |
86 |
-net tap,ifname=$ifname,script=no |
-net tap,ifname=$ifname,script=no |
87 |
-boot n |
-boot $boot |
88 |
-monitor tcp:$mon,server,nowait |
-monitor tcp:$mon,server,nowait |
89 |
-serial tcp:$ser,server,nowait |
-serial tcp:$ser,server,nowait |
90 |
|; |
|; |
91 |
|
|
92 |
|
$kvm .= ' -vnc ' . port(0,':') unless $ENV{DISPLAY}; |
93 |
|
|
94 |
# -runas $server::user |
# -runas $server::user |
95 |
$kvm =~ s{\s+}{ }gs; |
$kvm =~ s{\s+}{ }gs; |
96 |
|
|
101 |
|
|
102 |
sub nr_from_mac { |
sub nr_from_mac { |
103 |
my $mac = shift; |
my $mac = shift; |
104 |
$mac =~ s{^.+:([0-9a-f]{2})$}{hex($1)}e; |
my $nr = (split(/:/,$mac,6))[-1]; |
105 |
$mac; |
$nr = hex($nr); |
106 |
|
return $nr; |
107 |
} |
} |
108 |
|
|
109 |
sub next_nr { |
sub next_nr { |