#! /usr/bin/perl -w # # Fast way to make an exact copy of a production server. # Should not be used anymore -- use the menu option # # $Id: copy_server,v 1.1 2000/03/03 17:19:01 stewart Exp $ # # Rod m. Stewart # stewart@netwinder.org # sub fdisk; sub fatal_error; sub setup_production; # $server = $ARGV[0] or die "Usage: ./create_prod server_ip \n"; # $server = system ("grep addr /proc/mounts |cut -f 2 --delimiter==|cut -f 1 --delimiter=' '"); $server = "192.168.4.254"; setup_production (); ############################ # the rest are sub routines ############################ # # fdisk the drive # /dev/hda1 (root) 250 MB # /dev/hda2 (swap) 64 MB # /dev/hda3 (/home/ftp) rest MB # sub fdisk { open PFDISK, '|/sbin/fdisk /dev/hda'; print PFDISK <<"EOF"; d 4 d 3 d 2 d 1 n p 1 +250M n p 2 +64M n p 3 t 2 82 p w EOF close PFDISK; } # # Fatal error # sub fatal_error { print $_[0]; print "\nFatal error! Reset or CTRL-ALT-DEL to retry!\n"; # exit 0; do {} while(1); } # # Copy and setup the server # sub setup_production { print "calling fdisk\n"; fdisk (); $rc = system ("mke2fs /dev/hda1"); fatal_error('Error formatting /dev/hda1 partition') if ($rc); $rc = system ("mkswap /dev/hda2"); fatal_error('Error creating swap partition') if ($rc); $rc = system ("mke2fs /dev/hda3"); fatal_error('Error formatting /dev/hda3 partition') if ($rc); $rc = system ("mount /dev/hda1 /mnt/hda1"); fatal_error('Error mounting root (/dev/hda1) partition') if ($rc); $rc = system ("mkdir -p /mnt/hda1/proc"); $rc = system ("mkdir -p /mnt/hda1/home/ftp"); $rc = system ("mkdir -p /server-root"); $rc = system ("mount /dev/hda3 /mnt/hda1/home/ftp"); fatal_error('Error mounting ftp (/dev/hda3) partition') if ($rc); $rc = system ("mount $server:/ /server-root"); fatal_error('Error mounting nfs root partition from $server') if ($rc); $rc = system ("mkdir -p /mnt/hda1/home/ftp/pub"); $rc = system ("cp -avx /server-root/{b,d,e,li,m,n,o,r,s,t,u,v}* /mnt/hda1"); $rc = system ("cp -avx /server-root/home/nfsflash /mnt/hda1/home/"); $rc = system ("cp -avx /server-root/home/stewart /mnt/hda1/home/"); $rc = system ("cp -avx /server-root/home/ftp/{b,e,l}* /mnt/hda1/home/ftp"); $rc = system ("cp -avx /server-root/home/ftp/pub/{R,S,f,tftpb,v}* /mnt/hda1/home/ftp/pub"); $rc = system ("cd /mnt/hda1/home/ftp/pub; wget ftp://$server/pub/\*.tar.gz"); fatal_error('Error retrieving tars') if ($rc); # delete the .kudzu.done file if it exists # we want to run kudzu again on the new machine $rc = system ("rm -f /mnt/hda1/etc/.kudzu.done"); $rc = system ("cp -avx /mnt/hda1/etc/rc.d/rc.sysinit /mnt/hda1/etc/rc.d/rc.sysinit~ "); $rc = system ("egrep -a -v \"sbin/kudzu|hdparm|Enable disk DMA\" /mnt/hda1/etc/rc.d/rc.sysinit~ > /mnt/hda1/etc/rc.d/rc.sysinit"); $rc = system ("umount -a -t ext2"); fatal_error('Error umounting ext2 partitions') if ($rc); $rc = system ("umount /server-root"); $rc = system ("sync"); print "Finished installing production server\n"; print "Reboot now\n"; print "\nReset or CTRL-ALT-DEL to Reboot!\n"; do {} while(1); }