9 use Data::Dump qw/dump/;
12 my ( $hostname, $path, $ip, $netmask, $server_ip ) = @_;
14 die "$path: $!" unless -d $path;
16 file::append "$path/etc/initab" => "$_\n" foreach split(/\n/, qq|
17 z6:6:respawn:/sbin/sulogin
18 1:2345:respawn:/sbin/getty 38400 console
19 c1:12345:respawn:/sbin/getty 38400 tty1 linux
20 c2:12345:respawn:/sbin/getty 38400 tty2 linux
21 c3:12345:respawn:/sbin/getty 38400 tty3 linux
22 c4:12345:respawn:/sbin/getty 38400 tty4 linux
25 file::append '/etc/fstab' => 'cgroup /cgroup cgroup rw 0 0' && mkdir '/cgroup';
26 system "mount /cgroup";
28 system "lxc-stop --name $hostname";
29 system "lxc-destroy --name $hostname";
31 file::replace "$path/etc/hostname" => $hostname;
32 file::append "$path/etc/hosts" => "$ip $hostname";
34 file::replace "$path/etc/network/interfaces" => qq|
37 iface lo inet loopback
39 iface eth0 inet static
45 file::replace "$path/etc/resolv.conf" => "nameserver $server_ip";
47 my $conf = "/virtual/$hostname.conf";
49 file::replace $conf => qq|
50 lxc.utsname = $hostname
53 lxc.network.type = veth
54 lxc.network.flags = up
55 lxc.network.link = virtual
56 lxc.network.name = eth0
57 lxc.network.mtu = 1500
60 lxc.cgroup.devices.deny = a
62 lxc.cgroup.devices.allow = c 1:3 rwm
63 lxc.cgroup.devices.allow = c 1:5 rwm
65 lxc.cgroup.devices.allow = c 5:1 rwm
66 lxc.cgroup.devices.allow = c 5:0 rwm
67 lxc.cgroup.devices.allow = c 4:0 rwm
68 lxc.cgroup.devices.allow = c 4:1 rwm
70 lxc.cgroup.devices.allow = c 1:9 rwm
71 lxc.cgroup.devices.allow = c 1:8 rwm
72 lxc.cgroup.devices.allow = c 136:* rwm
73 lxc.cgroup.devices.allow = c 5:2 rwm
75 lxc.cgroup.devices.allow = c 254:0 rwm
78 system "lxc-create --name $hostname --rcfile $conf";
80 warn "created $hostname $ip $path";