]> git.proxmox.com Git - dab.git/blobdiff - DAB.pm
closure: fix package ordering
[dab.git] / DAB.pm
diff --git a/DAB.pm b/DAB.pm
index 739f5d737a71fa21853c91f0ccd0cefd4d15d284..2f4a4f5fc93ed3273cd7974d6a6a57295e3bbaea 100644 (file)
--- a/DAB.pm
+++ b/DAB.pm
@@ -1018,18 +1018,19 @@ sub closure {
     # first, record provided packages
     __record_provides ($pkginfo, $closure, $list, 1);
 
-    my $pkgs = {};
+    my $pkghash = {};
+    my $pkglist = [];
 
     # then resolve dependencies
     foreach my $pname (@$list) {
-       __closure_single ($pkginfo, $closure, $pkgs, $pname, $self->{excl});
+       __closure_single ($pkginfo, $closure, $pkghash, $pkglist, $pname, $self->{excl});
     }
 
-    return [ keys %$pkgs ];
+    return $pkglist;
 }
 
 sub __closure_single {
-    my ($pkginfo, $closure, $pkgs, $pname, $excl) = @_;
+    my ($pkginfo, $closure, $pkghash, $pkglist, $pname, $excl) = @_;
 
     $pname =~ s/^\s+//;
     $pname =~ s/\s+$//;
@@ -1046,8 +1047,11 @@ sub __closure_single {
     my $url = $info->{url};
 
     $url || die "$pname: no url for package '$pname'";
-    
-    $pkgs->{$pname} = 1;
+
+    if (!$pkghash->{$pname}) {
+       unshift @$pkglist, $pname;
+       $pkghash->{$pname} = 1;
+    }
 
     __record_provides ($pkginfo, $closure, [$pname]) if $info->{provides};
 
@@ -1083,7 +1087,7 @@ sub __closure_single {
 
       #printf (STDERR "$pname: $p --> $found\n");
          
-      __closure_single ($pkginfo, $closure, $pkgs, $found, $excl);
+      __closure_single ($pkginfo, $closure, $pkghash, $pkglist, $found, $excl);
   }
 }
 
@@ -1161,7 +1165,7 @@ sub bootstrap {
        push @$important, "postfix";
     }
 
-    foreach my $p (keys %$pkginfo) {
+    foreach my $p (sort keys %$pkginfo) {
        next if grep { $p eq $_ } @{$self->{excl}};
        my $pri = $pkginfo->{$p}->{priority};
        next if !$pri;
@@ -1297,20 +1301,11 @@ sub bootstrap {
     $self->ve_dpkg ('install', 'mawk');
     $self->ve_dpkg ('install', 'debconf');
 
-    if ($suite eq 'trusty') {
-       # hack: util-linux preinst calls update-rc.d, which calls /sbin/insserv
-       $self->run_command ("ln -s /usr/lib/insserv/insserv '$rootdir/sbin/insserv'");
-    }
-
     # unpack required packages
     foreach my $p (@$required) {
        $self->ve_dpkg ('unpack', $p);
     }
 
-    if ($suite eq 'trusty') {
-       $self->run_command ("rm '$rootdir/sbin/insserv'");
-    }
-
     rename ("$rootdir/sbin/init.org", "$rootdir/sbin/init");
     $self->ve_divert_add ("/sbin/init");
     $self->run_command ("cp '$fake_init' '$rootdir/sbin/init'");