File: imagedir_server.pm

package info (click to toggle)
diskless 0.3.18.0.5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 772 kB
  • ctags: 119
  • sloc: perl: 2,628; xml: 782; sh: 439; makefile: 103
file content (121 lines) | stat: -rw-r--r-- 2,489 bytes parent folder | download | duplicates (3)
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);
}