#!/usr/bin/perl use strict; use warnings; use Snap; use Data::Dumper; setup(); my $conf = readconf(); my $sources = Snap::Sources->new( $conf->{'sources'} ); my $opts = { repo => 'core', quiet => 1 }; my $corepkgs; my $packages; my $virtfs = 0; my $prepkgs = {}; my $prelist = [ 'snap-base', 'bash', 'coreutils', 'glibc', 'libacl', 'libattr', 'libcap', 'ncurses', 'readline', 'tzdata', 'perl', 'initscripts' ]; print "\n"; if ( ! Snap->TARGET ) { Snap->error( -1, 'A target must be specified with -t' ); } $sources->readpkgs(); $corepkgs = $sources->search( $opts ); for ( my $i = 0; $i <= $#$corepkgs; $i++ ) { if ( ! $opts->{'nodeps'} ) { print "Resolving dependencies for" . " $corepkgs->[$i]{'name'}\n"; $corepkgs->[$i]->depends( $sources, $packages ); } else { print "Ignoring dependencies for" . " $corepkgs->[$i]{'name'}\n"; } push( @$packages, $corepkgs->[$i] ); } for ( my $i = 0; $i <= $#$packages; $i++ ) { if ( $packages->[$i]{'path'} =~ /https*:\/\// ) { ( my $filename = $packages->[$i]{'path'} ) =~ s/.*\///; if ( ! -f Snap->PKGDIR . "/$filename" ) { Snap->httpget( $packages->[$i]{'path'}, Snap->PKGDIR . "/$filename", 0644 ); } $packages->[$i]{'path'} = Snap->PKGDIR . "/$filename"; } if ( grep( $_ eq $packages->[$i]{'name'}, @$prelist ) ) { $prepkgs->{$packages->[$i]{'name'}} = $packages->[$i]; splice( @$packages, $i, 1 ); $i--; } } foreach my $package ( @$prelist ) { print "\n"; $prepkgs->{$package}->install(); } foreach my $package ( @$packages ) { if ( ! $virtfs ) { $virtfs = virtfs( 'mount' ); } print "\n"; $package->install(); } virtfs( 'umount' ); print "\n";