/[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

Diff of /trunk/vz-create.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 38 by dpavlin, Fri Feb 8 21:45:37 2008 UTC revision 47 by dpavlin, Sun Mar 30 12:48:39 2008 UTC
# Line 8  use IO::Prompt; Line 8  use IO::Prompt;
8  use Regexp::Common qw/net/;  use Regexp::Common qw/net/;
9  use lib 'lib';  use lib 'lib';
10  use VZ;  use VZ;
11    use Getopt::Long;
12    
13  # default debian distribution  # default debian distribution
14  my $dist = 'etch';  my $dist = 'etch';
# Line 15  my $dist = 'etch'; Line 16  my $dist = 'etch';
16  my $debian_mirror_uri = 'http://www.debian.org/debian';  my $debian_mirror_uri = 'http://www.debian.org/debian';
17  my $arh = 'i386';  my $arh = 'i386';
18  # split physicial machine in how meny virtual ones?  # split physicial machine in how meny virtual ones?
19  my $ve_total = 4;  my $split = 4;
20  # swap size (Mb)  # swap size (Mb)
21  my $swap_size = 512;  my $swap_size = 512;
22  # diskspace  # diskspace
23  my $diskspace = '2G:4G';  my $diskspace = '2G:4G';
24    
25  $dist = 'testing';  GetOptions(
26  $arh = 'amd64';          'dist=s'        => \$dist,
27            'arh=s'         => \$arh,
28            'mirror=s'      => \$debian_mirror_uri,
29            'split=i'       => \$split,
30    );
31    
32  check_root;  check_root;
33    
# Line 44  foreach my $arg ( @ARGV ) { Line 49  foreach my $arg ( @ARGV ) {
49    
50          if ($arg =~ m/$RE{net}{IPv4}/) {          if ($arg =~ m/$RE{net}{IPv4}/) {
51                  $ip = $arg;                  $ip = $arg;
52                  if ( my $h = hostname2ip($arg) ) {                  if ( my $h = ip2hostname($ip) ) {
53                          $hostname = $h;                          $hostname = $h;
54                  }                  }
55          } elsif ($arg) {          } elsif ($arg) {
# Line 54  foreach my $arg ( @ARGV ) { Line 59  foreach my $arg ( @ARGV ) {
59                          $hostname = $arg;                          $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 => {  $ip ||= prompt('Enter IP: ', -require => {
69          'Must be IP (e.g. 192.168.0.1): ' => qr/$RE{net}{IPv4}/,          'Must be IP (e.g. 192.168.0.1): ' => qr/$RE{net}{IPv4}/,
70  }) unless ($ip =~ /$RE{net}{IPv4}/);  }) unless ($ip =~ /$RE{net}{IPv4}/);
# Line 66  my @ip_split = split(/\./,$ip); Line 75  my @ip_split = split(/\./,$ip);
75    
76  my $ve_id = sprintf('%d%03d', $ip_split[2], $ip_split[3]);  my $ve_id = sprintf('%d%03d', $ip_split[2], $ip_split[3]);
77    
 my $vz_root = '/vz';  
   
 die "need to know vz_root, and $vz_root doesn't exist: $!\n" unless (-e $vz_root);  
   
78  print "VEID: $ve_id hostname: $hostname ip: $ip\n";  print "VEID: $ve_id hostname: $hostname ip: $ip\n";
79    
80  warn ">> creating directories\n";  warn ">> creating directories\n";
# Line 88  if (! -e "$vz_root/private/$ve_id/etc/de Line 93  if (! -e "$vz_root/private/$ve_id/etc/de
93          warn "Debian allready installed in $vz_root/private/$ve_id\n";          warn "Debian allready installed in $vz_root/private/$ve_id\n";
94  }  }
95    
96  sub vzctl {  my $conf_path = "$vz_conf/${ve_id}.conf";
         my @args = @_;  
         warn "## vzctl ", join(" ",@args), "\n";  
         system "vzctl", @args;  
 }  
   
 my $conf_path = "/etc/vz/conf/${ve_id}.conf";  
97  warn ">> creating configuration file $conf_path\n";  warn ">> creating configuration file $conf_path\n";
98    
99  if (-e $conf_path) {  if (-e $conf_path) {
100          warn "$conf_path allready exists, not touching it\n";          warn "$conf_path allready exists, not touching it\n";
101  } else {  } else {
102          vzsplit('-n', $ve_total, '-s', $swap_size * 1024, '>', $conf_path);          vzsplit('-n', $split, '-s', $swap_size * 1024, '>', $conf_path);
103    
104          die "configuration file not created" unless -e $conf_path;          die "configuration file not created" unless -e $conf_path;
105    
# Line 131  create_file( Line 130  create_file(
130    
131  vzctl('start', $ve_id);  vzctl('start', $ve_id);
132    
133  my $customize_sh = <<'__END_OF_SH__';  runscript( $ve_id, 'custom/00-all.sh' );
   
 # use shadow passwords  
 pwconv  
   
 # upgrade to lastest version  
 apt-get -y update  
 apt-get -y upgrade  
   
 # install additional packages  
 apt-get -y --force-yes install vim less ssh sudo screen telnet finger  
   
 # remove unwanted packages  
 apt-get -y remove nano  
   
 # apt-iselect helper  
 wget -t 1 -T 5 -O /usr/local/bin/apt-iselect http://www.rot13.org/~dpavlin/projects/scripts/apt-iselect  
 chmod 755 /usr/local/bin/apt-iselect  
   
 # lock root user  
 usermod -L root  
   
 # disable getty  
 sed -i -e '/getty/d' /etc/inittab  
   
 # sane permissions for /root directory  
 chmod 700 /root  
   
 # disable sync() for syslog  
 sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/syslog.conf  
   
 # fix /etc/mtab  
 rm -f /etc/mtab  
 ln -s /proc/mounts /etc/mtab  
   
 # remove unneeded packages  
 dpkg --purge modutils  
 dpkg --purge ppp pppoeconf pppoe pppconfig  
   
 # disable services  
 update-rc.d -f klogd remove  
 update-rc.d -f quotarpc remove  
 update-rc.d -f exim4 remove  
 update-rc.d -f inetd remove  
   
 # clean packages  
 apt-get clean  
   
 __END_OF_SH__  
   
 foreach my $l (split(/\n/, $customize_sh)) {  
         next if ($l =~ /^\s*$/);  
         if ($l =~ /^#\s+(.+)$/) {  
                 warn ">> $1\n";  
         } else {  
                 vzctl('exec', $ve_id, $l);  
         }  
 }  
134    
135  #vzctl('stop', $ve_id);  #vzctl('stop', $ve_id);
136    
137  my $passwd = prompt('root passwd: ', -echo=>'*');  my $passwd = prompt( -prompt => 'root passwd: ', -echo=>'*' );
138  vzctl('set', $ve_id, '--userpasswd', 'root:' . $passwd ) if ($passwd);  vzctl('set', $ve_id, '--userpasswd', 'root:' . $passwd ) if $passwd;
139    
140  my $login = prompt('create login: ');  my $login = prompt('create login: ');
141  if ($login) {  if ($login) {
142          $passwd = prompt("$login passwd: ", -echo=>'*');          $passwd = prompt( -prompt => "$login passwd: ", -echo=>'*');
143          vzctl('exec', $ve_id, "useradd --create-home $login");          vzctl('exec', $ve_id, "useradd --create-home $login");
144          vzctl('set', $ve_id, '--userpasswd', "$login:$passwd" );          vzctl('set', $ve_id, '--userpasswd', "$login:$passwd" );
145  }  }
146    
147    runscript( $ve_id, 'custom/50-hypertable.sh' );
148    print "OK: $ve_id created\n";

Legend:
Removed from v.38  
changed lines
  Added in v.47

  ViewVC Help
Powered by ViewVC 1.1.26