#!/usr/bin/env perl use strict; my $device = '/dev/hda'; my $datadir = `pwd`; chomp($datadir); $datadir .= "/gos"; #Run an application+args given as a string #Returns output as array of lines and exit value sub run_process { my($cmd) = @_; my @output = (); my $ret = 0; print "Executing: $cmd\n"; open(PROC, "$cmd |"); while() { push @output, $_; } close(PROC); $ret = $!; if($ret) { print "Error running $cmd:\n\nOutput:\n"; print join("",@output); exit($ret); } return (@output,$ret); } #print "\nRemoving Any Current Partitions\n"; #my (@out,$stat) = run_process("parted $device print"); #foreach(@out) { # if(m/(\d+)\s+\d+.*/) { # run_process("parted $device rm $1"); # } #} print "\nRestoring Master Boot Record\n"; run_process("dd if=$datadir/gos-mbr.mbr of=$device"); print "\nRefreshing Partition Tables\n"; run_process("partprobe"); print "\nTurning On Swap Partition\n"; run_process("swapon ".$device."5"); print "\nRestoring Root Partition\n"; run_process("partimage --batch restore ".$device."1 $datadir/gos-disk-image.partimg.gz.000"); print "\nEjecting CD and rebooting\n"; run_process("eject /dev/cdrom"); run_process("reboot"); print "\nSuccess\n";