updated git and svn scripts
[xrzperl.git] / diskimg-installgrub
blob4a74c86831bca7ca224cb02d824c24d49151faba
1 #!/usr/bin/perl -w
2 ###APPNAME: diskimg-installgrub
3 ###APPAUTHOR: root
4 ###APPDATE: Tue Oct 9 08:02:21 2007
5 ###APPVER: 0.1
6 ###APPDESC: setup grub on diskimg
7 ###APPUSAGE: disk.img (parttion number)
8 ###APPEXAMPLE: disk.img 1
9 ###APPOPTION:
10 use strict;
11 $ARGV[0]="-h" unless(@ARGV);
12 foreach(@ARGV){
13 exit(system("plhelp",$0,@ARGV)) if($_ eq "-h" || $_ eq "--help");
16 sub sudo_system {
17 if ($>==0) {
18 return (system(@_)==0);
20 else {
21 return (system("sudo",@_)==0);
25 sub sudo_qx($) {
26 if ($>==0) {
27 return `$_[0]`;
29 else {
30 return `sudo $_[0]`;
34 my $disk=shift;
35 die("$disk not writable\n") unless( -w $disk);
36 my $num=shift;
37 $num=1 unless($num && $num>0);
38 my $type=`diskimg-fstype $disk $num`;
39 chomp($type);
42 my $partmain=sudo_qx("losetup -f");
43 chomp($partmain);
45 die("losetup $partmain $disk:$!\n") unless(sudo_system("losetup",$partmain,$disk));
46 print("Whole disk of $disk, setup on $partmain\n");
49 my $partFst=sudo_qx("losetup -f");
50 chomp($partFst);
51 my $off=`diskimg-offset $disk $num`;
52 chomp($off);
54 die("losetup -o $off $partFst,$disk:$!\n") unless(sudo_system("losetup","-o",$off,$partFst,$disk));
55 print("First partition of $disk, setup on $partFst\n");
57 my $tmpname=`mktemp`;
58 chomp($tmpname);
60 unlink $tmpname if( -e $tmpname);
61 mkdir $tmpname or die("Unable to create mount-point directory:$tmpname\n");
62 die("mount -f $type $partFst $tmpname: $!\n") unless(sudo_system("mount","-t",$type,$partFst,$tmpname));
63 print("Mount $partFst on $tmpname\n");
65 print("Grub stage files copyed.\n") if(sudo_system("cp","-vfR","/boot/grub/",$tmpname . '/'));
67 die("$!\n") unless(sudo_system("umount",$partFst));
68 print("Unmount $partFst\n");
70 rmdir $tmpname or die("$!\n");
71 die("$!\n") if(system("ln","-sf",$partmain,$tmpname));
72 die("$!\n") if(system("ln","-sf",$partFst,$tmpname . "1"));
73 print("Create Symbol links for $partmain and $partFst\n");
75 print("Execute Grub...\n");
76 open(GRUB,"| sudo grub --batch") or die("$!\n");
77 print GRUB ('device (hd0) ',$tmpname,"\n");
78 print GRUB ("root (hd0,0)\n");
79 print GRUB ("setup (hd0)\n");
80 close GRUB;
81 print("="x40,"\n");
82 print("Clean...\n");
83 unlink $tmpname . "1";
84 unlink $tmpname;
85 sudo_system("losetup","-vd",$partFst);
86 sudo_system("losetup","-vd",$partmain);