/[vz-tools]/trunk/vz-create.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/vz-create.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 63 - (show annotations)
Fri Feb 27 18:38:19 2009 UTC (15 years, 1 month ago) by dpavlin
File MIME type: text/plain
File size: 3744 byte(s)
added few ideas
1 #!/usr/bin/perl -w
2 #
3 # Dobrica Pavlinusic <dpavlin@rot13.org> 2007-01-07
4 #
5 use strict;
6 use Shell qw/mkdir vzsplit rm/;
7 use IO::Prompt;
8 use Regexp::Common qw/net/;
9 use lib 'lib';
10 use VZ;
11 use Getopt::Long;
12
13 # default debian distribution
14 my $dist = 'etch';
15 # debian mirror to use
16 my $debian_mirror_uri = 'http://www.debian.org/debian';
17 my $arh = 'i386';
18 # split physicial machine in how meny virtual ones?
19 my $split = 4;
20 # swap size (Mb)
21 my $swap_size = 512;
22 # diskspace
23 my $diskspace = '2G:4G';
24
25 GetOptions(
26 'dist=s' => \$dist,
27 'arh=s' => \$arh,
28 'mirror=s' => \$debian_mirror_uri,
29 'split=i' => \$split,
30 );
31
32 check_root;
33
34 my $config_file = $0;
35 $config_file =~ s!-create.pl!-tools.conf!;
36 warn "## $config_file\n";
37 if (-e $config_file) {
38 open(my $fh, '<', $config_file) || die "can't open $config_file: $!";
39 eval join("\n", <$fh>);
40 close($fh);
41 die "Error in $config_file: $@" if ($@);
42 }
43
44 print "Creating new OpenVZ instance...\n";
45
46 my ($hostname, $ip) = ('localhost','');
47
48 foreach my $arg ( @ARGV ) {
49
50 if ($arg =~ m/$RE{net}{IPv4}/) {
51 $ip = $arg;
52 if ( my $h = ip2hostname($ip) ) {
53 $hostname = $h;
54 }
55 } elsif ($arg) {
56 if ( my $addr = hostname2ip($arg) ) {
57 ( $hostname, $ip ) = ( $arg, $addr );
58 } else {
59 $hostname = $arg;
60 }
61 }
62
63 }
64
65 # nuke arguments so that prompt doesn't get confused
66 @ARGV = ();
67
68 $ip ||= prompt('Enter IP: ', -require => {
69 'Must be IP (e.g. 192.168.0.1): ' => qr/$RE{net}{IPv4}/,
70 }) unless ($ip =~ /$RE{net}{IPv4}/);
71
72 $hostname ||= prompt('Enter hostname: ') unless ($hostname);
73
74 my @ip_split = split(/\./,$ip);
75
76 my $ve_id = sprintf('%d%03d', $ip_split[2], $ip_split[3]);
77
78 if ( $ve_id < 101 ) {
79 $ve_id += 100;
80 warn "# VEID moved to $ve_id because 0 .. 100 are reserved\n";
81 }
82
83 print "VEID: $ve_id hostname: $hostname ip: $ip\n";
84
85 warn ">> creating directories\n";
86
87 mkdir('-p', "$vz_root/root/$ve_id", "$vz_root/private/$ve_id");
88
89 warn ">> installing debian $dist $arh from $debian_mirror_uri\n";
90
91 if (! -e "$vz_root/private/$ve_id/etc/debian_version") {
92
93 my $debootstrap = "debootstrap --arch $arh $dist $vz_root/private/$ve_id $debian_mirror_uri";
94 warn "# $debootstrap\n";
95 system($debootstrap);
96
97 } else {
98 warn "Debian allready installed in $vz_root/private/$ve_id\n";
99 }
100
101 my $conf_path = "$vz_conf/${ve_id}.conf";
102 warn ">> creating configuration file $conf_path\n";
103
104 if (-e $conf_path) {
105 warn "$conf_path allready exists, not touching it\n";
106 } else {
107 vzsplit('-n', $split, '-s', $swap_size * 1024, '>', $conf_path);
108
109 die "configuration file not created" unless -e $conf_path;
110
111 open(my $tmp, '>>', $conf_path) || die "can't open $conf_path: $!";
112 print $tmp "OSTEMPLATE=debian-3.1\n";
113 close($tmp);
114
115 # vzctl('set', $ve_id, '--applyconfig', 'vps.basic', '--save');
116 vzctl('set', $ve_id, '--ipadd', $ip, '--save');
117 vzctl('set', $ve_id, '--hostname', $hostname, '--save');
118 vzctl('set', $ve_id, '--diskspace', $diskspace, '--save');
119 }
120
121 sub create_file {
122 my ($path, $code) = @_;
123 if (! -e $path) {
124 warn ">> creating $path\n";
125 open(my $tmp, '>', $path) || die "can't create $path: $!";
126 print $tmp $code->($path);
127 close($tmp);
128 }
129 }
130
131 create_file(
132 "$vz_root/private/$ve_id/etc/apt/sources.list",
133 "deb $debian_mirror_uri $dist main contrib non-free\n"
134 );
135
136 vzctl('start', $ve_id);
137
138 runscript( $ve_id, 'custom/00-all.sh' );
139
140 #vzctl('stop', $ve_id);
141
142 my $passwd = prompt( -prompt => 'root passwd: ', -echo=>'*' );
143 vzctl('set', $ve_id, '--userpasswd', 'root:' . $passwd ) if $passwd;
144
145 my $login = prompt('create login: ');
146 if ($login) {
147 $passwd = prompt( -prompt => "$login passwd: ", -echo=>'*');
148 vzctl('exec', $ve_id, "useradd --create-home $login");
149 vzctl('set', $ve_id, '--userpasswd', "$login:$passwd" );
150 }
151
152 #runscript( $ve_id, 'custom/50-hypertable.sh' );
153 print "OK: $ve_id created\n";

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26