updated git and svn scripts
[xrzperl.git] / diskimg-setup
blobf5736cbe600ea310393696b67e274eff6044ee67
1 #!/usr/bin/perl -w
2 ###APPNAME: diskimg-setup
3 ###APPAUTHOR: xiaoranzzz
4 ###APPDATE: Sun Oct 7 02:52:13 2007
5 ###APPVER: 0.1
6 ###APPDESC: setup loopback device for disk image
7 ###APPUSAGE: (disk image file) (partition NUM)
8 ###APPEXAMPLE: diskimg-setup disk.img 1
9 ###APPOPTION: -d:Delete loopback device setup
10 use strict;
11 $ARGV[0]="-h" unless(@ARGV);
13 my $do_delete=0;
14 my $disk="";
15 my $num=0;
17 foreach(@ARGV){
18 exit(system("plhelp",$0,@ARGV)) if($_ eq "-h" || $_ eq "--help");
19 if($_ eq "-d") {
20 $do_delete=1;
22 elsif (-f $_ && !$disk) {
23 $disk=$_;
25 elsif (/^[0-9]+$/) {
26 $num=$_;
30 die("You must be root for running $0.\n") unless($>==0);
31 die("File not exists\n") unless(-f $disk);
32 $num=1 unless(defined($num));
34 #print join("\t","Disk=$disk","Partition=$num","Delete=$do_delete"),"\n";
35 #exit 0;
37 my $name=$disk;
38 $name =~ s/^.*\///g;
39 $name .= $num if($num > 0);
40 my $ln_loop="/share/system/loopback";
42 if (!$do_delete) {
43 my $offset=`diskimg-offset "$disk" "$num"`;
44 chomp($offset);
45 die("Could not calculat offset for $disk partition $num\n") unless($offset>=0);
46 my $freeloop=`losetup -f`;
47 chomp($freeloop);
48 die("No free loopback device found\n") unless($freeloop);
49 if(system("losetup","-o",$offset,$freeloop,$disk)==0) {
50 system("losetup",$freeloop);
51 # system("ln", "-vsf",$freeloop,$ln_loop . "/" . $name);