User Tools

Site Tools


xen_vm_creation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

xen_vm_creation [2011/04/22 14:34]
jt created
xen_vm_creation [2020/08/10 02:35]
Line 1: Line 1:
-====== Xen VM Creation ====== 
  
-This script will create a vm from a image. 
- 
-<code perl> 
- 
-#!/bin/env perl 
-## Build vm providing options 
-## $1 Hostname 
-## $2 IP Address - This will be checked to make sure that it currently not being used 
- 
-# test ip address is free 
-# test vg for free space 
-# create lv if test is good 
-# dd image file to lv 
-# mount root lv to test mount and edit files 
-# mount var lv to test mount and edit files 
-# create xen configuration 
-# start xen 
- 
-use strict; 
- 
-usage(); ​ 
-check_user();​ 
- 
-my $hostname=$ARGV[0];​ 
-my $ipaddress=$ARGV[1];​ 
-my $memory="​1024";​ 
- 
-if (defined($ARGV[2])){ print "yay memory is set";} 
-#my $hostname="​testium";​ 
-#my $ipaddress="​192.168.1.240";​ 
-my $lvprefix = "​$hostname-x86_64";​ 
-my $tmpmnt = "/​home/​systems/​mnt";​ 
-my $tmpdir = "/​var/​tmp";​ 
-my $vgpath = "/​dev/​vg";​ 
- 
- 
-check_ip($ipaddress);​ 
-create_lv($hostname);​ 
-dd_lv($hostname);​ 
-root_fs($hostname);​ 
-var_fs($hostname);​ 
-mk_swap(); 
-make_it_so(build_xenconfig($hostname,​ $memory)); 
- 
-sub build_xenconfig{ 
- 
-my ($hostname, $memory) = @_; 
-my $xenconfdir = "/​etc/​xen/​vmconfigs";​ 
-my $xenfile = "​$hostname-x86_64-pygrub.cfg";​ 
-my @cmd = ("​sudo",​ "​mv",​ "​$tmpdir/​$xenfile",​ "​$xenconfdir/​$xenfile"​);​ 
-my @xenconfig = ( 
-  "​bootloader = \"/​usr/​bin/​pygrub\"",​ 
-  "​memory = $memory",​ 
-  "name = \"​$hostname\"",​ 
-  "vif = [ '​bridge=xenbr0'​ ]", 
-  "disk = [ '​phy:​vg/​$hostname-x86_64-root,​sda1,​w',​ '​phy:​vg/​$hostname-x86_64-swap,​sda2,​w',​ '​phy:​vg/​$hostname-x86_64-var,​sdb1,​w'​ ]",); 
- 
-  if (-e "​$xenconfdir/​$xenfile"​){ 
-    print STDERR "File $xenfile exists! Please choose another name or check!\n";​ 
-  } 
-  else{ 
-    open(CFGFILE,​ ">>",​ "​$tmpdir/​$xenfile"​) or die "​Couldn'​t open file for writing: $!\n"; 
-      foreach (@xenconfig){ 
-      print CFGFILE "​$_\n";​ 
-      } 
-    system(@cmd); ​ 
-    close CFGFILE; 
-  } 
-return "​$xenconfdir/​$xenfile";​ 
-} 
- 
-sub root_fs{ 
- 
-my $suffix = "​root";​ 
-my @changeme = ( 
-  "​192.168.1.240",​ 
-  "​lithium",​ 
-  ); 
-my @editfiles = (  
-  "​$tmpmnt/​etc/​hosts",​ 
-  "​$tmpmnt/​etc/​motd",​ 
-  "​$tmpmnt/​etc/​ssh/​sshd_config",​ 
-  "​$tmpmnt/​etc/​varnish/​default.vcl",​ 
-  "​$tmpmnt/​etc/​conf.d/​hostname",​ 
-  "​$tmpmnt/​etc/​conf.d/​net",​ 
-  "​$tmpmnt/​etc/​init.d/​apache2",​ 
-  "​$tmpmnt/​etc/​apache2/​httpd.conf",​ 
-  "​$tmpmnt/​opt/​jetty/​etc/​jetty.xml",​ 
-  "​$tmpmnt/​opt/​jetty/​contexts/​podalaya.xml",​ 
-  ); 
- 
-mount_lv($suffix,​ $hostname); 
-prep_fs($suffix,​ \@changeme, \@editfiles);​ 
-umount_lv();​ 
-} 
- 
-sub var_fs{ 
- 
-my ($hostname) = @_; 
-my $suffix = "​var";​ 
-my @changeme = ( 
-  "​turbonium",​ 
-  ); 
-my @editfiles = (  
-  "​$tmpmnt/​www/​dev/​otter/​conf/​blip/​$changeme[0]",​ 
-  "​$tmpmnt/​www/​dev/​otter/​conf/​blip/​$hostname",​ 
-  "​$tmpmnt/​www/​dev/​otter/​conf/​blip/​$hostname/​otter.conf",​ 
-  ); 
- 
-mount_lv($suffix,​ $hostname); 
-prep_fs($suffix,​ \@changeme, \@editfiles);​ 
-umount_lv();​ 
-} 
- 
-sub prep_fs{ 
-# Prep root parition for startup 
- 
-my ($suffix, $changeme, $filelist) = @_; 
- 
-  if ($suffix eq "​root"​){ 
-    foreach my $editfile (@$filelist){ 
-      my $changeip = "sudo sed -i -e '​s/​@$changeme[0]/​$ipaddress/​g'​ $editfile";​ 
-      my $changehost = "sudo sed -i -e '​s/​@$changeme[1]/​$hostname/​g'​ $editfile";​ 
-      my @chattr = ("​sudo",​ "​chattr",​ "​-i",​ $editfile); 
-      system (@chattr); 
-      system ($changeip);​ 
-      system ($changehost);​ 
-    } 
-  } 
-  elsif ($suffix eq "​var"​){ 
-    my @mvconfdir = ("​sudo",​ "​mv",​ @$filelist[0],​ @$filelist[1]);​ 
-    my $changehost = "sudo sed -i -e '​s/​@$changeme[0]/​$hostname/​g'​ @$filelist[2]";​ 
-    system (@mvconfdir);​ 
-    system ($changehost);​ 
-  } 
-} 
- 
-sub usage { 
-## Must provide following variables, will implement usage for only 
- 
-  if (@ARGV != "​2"​){ 
-   print "​Usage:​ build_vm [hostname] [ip_address] <​memory>​\n";​ 
-   exit 1; 
-  } 
-} 
- 
-sub check_user { 
-# Check if running as user systems, if not tell them no 
- 
-  my $whoami = `id`; 
-  ​ 
-  if ($whoami !~ m/​systems/​){ 
-      print "You are not systems, exit!\n";​ 
-      exit 1; 
-  } 
-} 
- 
-sub mount_lv { 
- 
-my ($suffix, $hostname) = @_; 
-my @cmd = ("​sudo",​ "​mount",​ "​$vgpath/​$lvprefix-$suffix",​ "​$tmpmnt"​);​ 
- 
-system(@cmd);​ 
- 
-  if ($? == 0){ 
-    return 0; 
-  } 
-  else { 
-    print "Could not mount $suffix to $tmpmnt, exit!\n";​ 
-    exit 1; 
-  } 
-} 
- 
-sub umount_lv { 
-my @cmd = ("​sudo",​ "​umount",​ $tmpmnt); 
-system(@cmd);​ 
-} 
- 
-sub dd_lv { 
- 
-my ($hostname) = @_; 
-my $imagepath = "/​img/​xen";​ 
-my $imageprefix = "​lithium-x86_64";​ 
-my @lvimage = ( "​root",​ "​var"​ );  
-  ​ 
-  print "​Copying image file to lvm - this may take some time... \n"; 
-  foreach (@lvimage){ 
-    my $cmd = "​gunzip -c $imagepath/​$imageprefix-$_.img.gz | sudo dd of=$vgpath/​$lvprefix-$_ bs=300k";​ 
-    open(STDOUT,​ ">/​dev/​null"​);​ 
-    system($cmd);​ 
-    close STDOUT; 
-  } 
-} 
- 
-sub create_lv { 
-# Create lv for specified hostname 
- 
-my ($hostname) = @_; 
-my %lvlist = ( 
-  "​root"​ => "​32G",​ 
-  "​var" ​ => "​130G",​ 
-  "​swap"​ => "​2G",​ ); 
- 
-  if(check_vg() == "​0"​){ 
-    for my $suffix( keys %lvlist) { 
-      my $size = $lvlist{$suffix};​ 
-      my @cmd = ("​sudo",​ "​lvcreate",​ "​-L",​ "​$size",​ "​-n",​ "​$lvprefix-$suffix",​ "​vg"​);​ 
-      open(STDOUT,​ ">/​dev/​null"​);​ 
-      system(@cmd);​ 
-      close STDOUT; 
-      if( $? != "​0"​ ){ 
-        print STDERR "​lvcreate failed: $!\n"; 
-        exit 1; 
-      } 
-      print "LVM created... \n"; 
-    } 
-  } 
-} 
- 
-sub mk_swap{ 
- 
-my @cmd = ("​sudo",​ "​mkswap",​ "​$vgpath/​$lvprefix-swap"​);​ 
-open(STDOUT,​ ">/​dev/​null"​);​ 
-system(@cmd) == 0 
-or die  "Swap failed to create: $!\n"; 
-close STDOUT; 
-} 
- 
-sub check_vg { 
-## Check volume group for empty space 
- 
-my $vmsize = "​154";​ 
-my $vginfo = `sudo vgdisplay vg`; 
- 
-  if($vginfo =~ /​\s+Free\s+PE\s+\S+\s+Size\s+\d+\s+\S+\s+([\w+.]+)+\sGiB/​g){ 
-    if ( $vmsize > $1 ){ 
-      print STDERR "Not enough space in vg, only $1 GB.\n";​ 
-      exit 1; 
-    } 
-    else{ 
-      return 0; 
-    } 
-  } 
-} 
- 
-sub check_ip { 
-## Check to see if ip address is used 
- 
-my ($ipaddress) = @_; 
-my @cmd = ("/​bin/​ping",​ "​-c1",​ "​$ipaddress"​);​ 
- 
-  open(STDOUT,​ ">/​dev/​null"​);​ 
-  system(@cmd) != 0 
-    or die  "​$ipaddress is already used, please use another\n";​ 
-  close STDOUT; 
-} 
- 
-sub make_it_so { 
-## start vm 
- 
-my ($xmconfig) = @_; 
-my @cmd =("​sudo",​ "​xm",​ "​create",​ "​$xmconfig"​);​ 
-print "​Starting vm... \n"; 
-system(@cmd) == 0 or die "xm create failed!: $!\n"; 
-} 
-</​code>​ 
xen_vm_creation.txt ยท Last modified: 2020/08/10 02:35 (external edit)