home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / lib / dpkg / methods / disk / install < prev    next >
Text File  |  1999-03-02  |  3KB  |  122 lines

  1. #!/bin/sh
  2.  
  3. set -e
  4. vardir="$1"
  5. method=$2
  6. option=$3
  7.  
  8. cd "$vardir/methods/disk"
  9.  
  10. . ./shvar.$option
  11.  
  12. xit=1
  13. trap '
  14.     if [ -n "$umount" ]
  15.     then
  16.         umount "$umount" >/dev/null 2>&1
  17.     fi
  18.     exit $xit
  19. ' 0
  20.  
  21. if [ -n "$p_blockdev" ]
  22. then
  23.     umount="$p_mountpoint"
  24.     mount -rt "$p_fstype" -o nosuid,nodev "$p_blockdev" "$p_mountpoint"
  25. fi
  26.  
  27. if [ -n "$p_nfs" ]
  28. then
  29.     umount="$p_mountpoint"
  30.     mount -rt nfs "$p_nfs" -o nosuid,nodev "$p_mountpoint"
  31. fi
  32.  
  33. predep="$vardir/predep-package"
  34. while true
  35. do
  36.     set +e
  37.     dpkg --predep-package >"$predep"
  38.     rc=$?
  39.     set -e
  40.     if test $rc = 1; then break; fi
  41.     test $rc = 0
  42.  
  43.     perl -e '
  44.         ($binaryprefix,$predep) = @ARGV;
  45.         $binaryprefix =~ s,/*$,/, if length($binaryprefix);
  46.         open(P,"< $predep") || die "cannot open $predep: $!\n";
  47.         while (<P>) {
  48.             s/\s*\n$//;
  49.             $package= $_ if s/^Package: //i;
  50.             @filename= split(/ /,$_) if s/^Filename: //i;
  51.             @msdosfilename= split(/ /,$_) if s/^MSDOS-Filename: //i;
  52.         }
  53.         length($package) || die "internal error - no package";
  54.         @filename || die "internal error - no filename";
  55.         @filename==@msdosfilename || !@filename || !@msdosfilename ||
  56.             die "internal error - mismatch >@filename< >@msdosfilename<";
  57.         @invoke=(); $|=1;
  58.         for ($i=0; $i<=$#filename; $i++) {
  59.             $ppart= $i+1;
  60.             print "Looking for part $ppart of $package ... ";
  61.             if (-f "$binaryprefix$filename[$i]") {
  62.                 $print= $filename[$i];
  63.                 $invoke= "$binaryprefix$filename[$i]";
  64.             } elsif (-f "$binaryprefix$msdosfilename[$i]") {
  65.                 $print= $msdosfilename[$i];
  66.                 $invoke= "$binaryprefix$msdosfilename[$i]";
  67.             } else {
  68.                 $base= $filename[$i]; $base =~ s,.*/,,;
  69.                 $msdosbase= $msdosfilename[$i]; $msdosbase =~ s,.*/,,;
  70.                 defined($c= open(X,"-|")) ||
  71.                     die "failed to fork for find: $!\n";
  72.                 if (!$c) {
  73.                     exec("find", length($binaryprefix)
  74.                          ? $binaryprefix : ".","-follow",
  75.                          "-name",$base,"-o","-name",$msdosbase);
  76.                     die "failed to exec find: $!\n";
  77.                 }
  78.                 while (chop($invoke= <X>)) { last if -f $invoke; }
  79.                 $print= $invoke;
  80.                 if (substr($print,0,length($binaryprefix)+1) eq
  81.                     "$binaryprefix/") {
  82.                     $print= substr($print,length($binaryprefix));
  83.                 }
  84.             }
  85.             if (!length($invoke)) {
  86.                 print STDERR "
  87.  
  88. Oh dear, I need to install or upgrade $package, but I don'\''t see
  89. the appropriate file(s) anywhere.  I'\''m expecting version $version or
  90. later, as that is listed in the Packages file.
  91.  
  92. Perhaps you downloaded it with an unexpected name, or something.
  93. In any case, you must find the file(s) and then either place it with
  94. the correct filename(s) (as listed in the Packages file or in
  95. /var/lib/dpkg/available) and rerun the installation, or upgrade the
  96. package by using `dpkg --install --auto-deconfigure'\'' by hand.
  97.  
  98. ";
  99.                 exit(1);
  100.             }
  101.             print "$print\n";
  102.             push(@invoke,$invoke);
  103.         }
  104.         print "Running dpkg -iB for $package ...\n";
  105.         exec("dpkg","-iB","--",@invoke);
  106.         die "failed to exec dpkg: $!\n";
  107.     ' -- "$p_mountpoint$p_main_binary" "$predep"
  108. done
  109.  
  110. for f in main ctb nf nus lcl
  111. do
  112.     eval 'this_binary=$p_'$f'_binary'
  113.     if [ -z "$this_binary" ]; then continue; fi
  114.     echo Running dpkg -iGROEB "$p_mountpoint$this_binary"
  115.     dpkg -iGROEB "$p_mountpoint$this_binary"
  116. done
  117.  
  118. echo -n 'Installation OK.  Hit RETURN.  '
  119. read response
  120.  
  121. xit=0
  122.