1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
package imagedir_server;
@ISA = ("imagedir_base");
use strict;
use error;
use diskless;
use imagedir_base;
1;
# create a new object
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = $class->SUPER::new();
bless($self,$class);
return $self;
}
# Create object if it doesn't exist
sub create
{
my $class=$_[0];
my $imagedir=$_[1];
my $error=$_[2];
my $rc;
die if (!ref($error) or defined ($$error));
if ( !($imagedir =~ /^\//) or $imagedir eq "/" )
{
$$error="error"->new("error"->general,
"Paranoid check: Attempt to create NFS-Root image with relative or root path");
return undef;
}
if ( -d $imagedir )
{
$$error="error"->new("error"->alreadyexists,
"Attempt to create NFS-Root image when directory already exists");
return undef;
}
if ( ! -f "base2_2.tgz")
{
$$error="error"->new("error"->general,
"Cannot find base2_2.tgz");
return undef;
}
my @imagedeb = <diskless-image-*.deb>;
if ($#imagedeb < 0)
{
$$error="error"->new("error"->general,
"diskless-image-*.deb cannot be found");
return undef;
}
if ($#imagedeb >= 1)
{
$$error="error"->new("error"->general,
"more then one diskless-image-*.deb found");
return undef;
}
my $imagedeb = $imagedeb[0];
print "Will use base2_2.tgz and $imagedeb\n";
# $rc = "diskless"->mymkdir("$imagedir",$error);
# return undef if (!$rc);
$rc=system("mkdir","-p",$imagedir);
if ($rc)
{
$$error = "error"->process("Error executing mkdir",$?);
return(0);
}
my $isbuffered = $|; $| = 1;
print "Extracting base2_2.tgz to $imagedir...";
$| = $isbuffered;
$rc=system("tar","-C",$imagedir,"-xzf","base2_2.tgz");
if ($rc)
{
$$error = "error"->process("Error executing tar",$?);
return(0);
}
print "done.\n";
$rc = "diskless"->mymkdir("$imagedir/etc/diskless-image",$error);
return undef if (!$rc);
$rc=system("dpkg","--root",$imagedir,"-i",$imagedeb);
if ($? != 0)
{
$$error = "error"->process("Error executing dpkg",$?);
return(0);
}
my $self=$class->get($imagedir,$error);
return $self;
}
sub config
{
my $self=$_[0];
my $options = shift;
my $error=$_[1];
die if (!ref($error) or defined ($$error));
my $imagedir = $self->get_dirname_imagedir;
# !!!FIXME!!! package is not called diskless-image!
# How to fix? I don't know...
system("chroot",$imagedir,"/usr/sbin/configure-diskless-image");
if ($? != 0)
{
$$error = "error"->process("Error executing chroot",$?);
}
return(1);
}
|