[Midnightbsd-cvs] mports: Chroot.pm: Add chroot module.

ctriv at midnightbsd.org ctriv at midnightbsd.org
Tue Sep 4 16:31:17 EDT 2007


Log Message:
-----------
Add chroot module.  This class takes care of the details of the chroot dirs
that ports are tested in.

Added Files:
-----------
    mports/Tools/lib/Magus:
        Chroot.pm (r1.1)

-------------- next part --------------
--- /dev/null
+++ Tools/lib/Magus/Chroot.pm
@@ -0,0 +1,75 @@
+package Magus::Chroot;
+
+use strict;
+use warnings;
+use File::Temp qw(tempdir);
+
+my $tarball = '0.2-CURRENT-20070901.tar';
+
+sub new {
+  my ($class, %args) = @_;
+  
+  my $self = bless {
+    workdir   => '/tmp/workdir',
+    tarball   => $tarball,
+    localbase => '/usr/local',
+    x11base   => '/usr/X11R6',
+    loopbacks => [qw(/usr/mports /usr/src)],
+    %args,
+  }, $class;
+  
+  $self->_init;
+  
+  return $self;
+}
+
+
+sub _init {
+  my ($self) = @_;
+  $self->{'root'} = tempdir();
+
+  system(qq(/usr/bin/tar xf $self->{tarball} -C $self->{'root'})) == 0 
+    or die "Couldn't untar root tarball: $?\n";
+    
+  foreach my $dir (@{$self->{loopbacks}}) {
+    $self->_mkdir($dir);
+    system("/sbin/mount -t nullfs -o ro $dir $self->{root}/$dir") == 0
+      or die "mount returned non-zer	o: $?\n";
+  }
+  
+  $self->_mtree('BSD.root.dist', '/');  
+  $self->_mtree('BSD.var.dist', '/var');
+  $self->_mtree('BSD.usr.dist', '/usr');
+  
+  for (qw(workdir x11base)) {  
+    $self->_mkdir($self->{$_});
+  }
+  
+  $self->_mtree('BSD.local.dist', $self->{localbase});
+  $self->_mtree('BSD.x11-4.dist', $self->{x11base});
+  
+  system("/sbin/mount -t devfs devfs $self->{root}/dev");
+}
+
+sub root {
+  return $_[0]->{'root'};
+}
+
+sub _mtree {
+  my ($self, $mtreefile, $dir) = @_;
+  
+  system("/usr/sbin/mtree -deU -f $self->{root}/usr/src/etc/mtree/$mtreefile -p $self->{root}$dir >/dev/null 2>&1")
+}
+
+sub _mkdir {
+  my ($self, $dir) = @_;
+  
+  mkdir("$self->{root}/$dir") ||
+    die "Couldn't mkdir $self->{root}/$dir: $!\n";
+}
+
+1;
+__END__
+
+
+


More information about the Midnightbsd-cvs mailing list