pool-DVD nutzbar machen

Matthias Taube no_html.max50kb at nurfuerspam.de
Fre Jul 20 15:16:04 BST 2007


Matthias Mees schrieb:
> ich betreibe hier ein Desktop-System mit Feisty Fawn, welches aufgrund
> einer dünnen Netzanbindung mehr oder weniger auf DVDs als Paketquellen
> angewiesen ist, soll heißen: Es ist relativ bequem, bestimmte Pakete,
> die »mal eben ausprobiert« werden sollen, von DVD statt über das Netz
> einzuspielen.

Kopiere die Dateien in das Verzeichnis Deines lokalen Webservers und
greife ganz normal darauf zu, als ob es irgendwo im Web liegen würde.

Ansonsten hier mein kleiner Perl-Hack, mit dem ich das mache.
$mirror ist das Zielverzeichnis.


> #!/usr/bin/perl -w
> #
> # Aufbau eines Debian-repositories
> 
> use strict;
> use warnings;
> 
> use Cwd;
> use File::Copy;
> 
> my $USAGE   = "$0 file
> Debian - Repository aufbauen
> Options:
> -h     : This help
> -s dir : Directory to copy files from into mirror     
> -p     : Pkg-scan, Packages Dateien neu aufbauen
> ";
> 
> use Getopt::Long;
> $Getopt::Long::ignorecase = 0;
> use vars
>   qw($opt_h $opt_help $opt_s $opt_source $opt_p $opt_pkgscan);
> GetOptions("h|help", "s=s", "p")   || die "$USAGE";    # Kommandozeile parsen
> if ( defined $opt_h ) { print ("$USAGE"); exit(); }
> 
> my $mirror = "/home/data/cd/ubuntu/mirror";
> 
> sub OpenDir {
>     my $dir = shift;
>     opendir( DIR, $dir ) or die("error opening: $!");
>     my @dateien1 = readdir DIR;
>     closedir(DIR) or die("error closing: $!");
>     my @dateien = ();
>     @dateien = sort { lc($a) cmp lc($b) } @dateien1;
>     return @dateien;
> }
> 
> sub dir_tree {
>     my $dir     = shift;
>     my @dateien = &OpenDir($dir);
>     foreach my $datei (@dateien) {
>         next if ( ( $datei eq "." ) or ( $datei eq ".." ) );
>         if ( -f "$dir/$datei" ) {
>             if (   ( substr( $datei, -4, 4 ) eq ".deb" )
>                 or ( substr( $datei, -5, 5 ) eq ".udeb" ) )
>             {
>                 &moved( $dir, $datei );
> 
>             }
>         }
>     }
>     foreach my $datei ( sort @dateien ) {
>         next if ( ( $datei eq "." ) or ( $datei eq ".." ) or ( -l $datei ) );
>         if ( -d "$dir/$datei" ) {
>             &dir_tree("$dir/$datei");
>         }
>     }
> }
> 
> sub moved {
>     my $dir   = shift;
>     my $sdir  = substr( $dir, 2 );
>     my $zdir  = "$mirror/pool/$sdir";
>     my $datei = shift;
>     unless ( -d $zdir ) {
>         print "mkdir ", $zdir, "\n";
>         system("/bin/mkdir -p $zdir");
>     }
>     unless ( -e "$zdir/$datei" ) {
>         print "copy pool/$sdir/$datei $zdir/$datei\n";
>         copy( "$sdir/$datei", "$zdir/$datei" ) or die "Copy failed: $!";
>     }
> }
> 
> sub pkgscan {
>     chdir("$mirror/pool");
>     my @dateien  = &OpenDir(".");
>     my $zdir     = "";
>     my $release  = "";
>     my $releaseg = "Architectures: i386
> Codename: feisty
> Components: ";
>     foreach my $datei ( sort @dateien ) {
>         next if ( ( $datei eq "." ) or ( $datei eq ".." ) or ( -l $datei ) );
>         next unless ( -d $datei );
>         $zdir = "$mirror/dists/feisty/$datei/binary-i386";
>         unless ( -d $zdir ) {
>             print "mkdir $zdir\n";
>             system("/bin/mkdir -p $zdir");
>         }
>         my $override="$mirror/pool/override.feisty.$datei";
>         unless (-e $override) {$override = "/dev/null";};
>         print
> "apt-ftparchive packages $datei $override pool/ | gzip > $zdir/Packages.gz\n";
>         system(
> "apt-ftparchive packages $datei $override pool/ | gzip > $zdir/Packages.gz"
>         );
>         $releaseg = "$releaseg $datei";
>         $release  = "Archive: feisty
> Component: $datei
> Origin: Ubuntu
> Label: Ubuntu
> Architecture: i386";
>         open( RELDAT, ">$zdir/Release" ) or die("$!");
>         print RELDAT $release;
>         close(RELDAT) or die("$!");
> 
>     }
>     $releaseg = "$releaseg
> Description: Ubuntu Feisty
> Label: Ubuntu
> Origin: Ubuntu
> Suite: feisty\n" . `apt-ftparchive release "$mirror/dists/feisty"`;
>     print $releaseg;
>     open( RELDAT, ">$mirror/dists/feisty/Release" ) or die("$!");
>     print RELDAT $releaseg;
>     close(RELDAT) or die("$!");
> }
> 
> if (defined $opt_s) {
> chdir("$opt_s/pool");
> my $curr = ".";
> &dir_tree($curr); };
> 
> if (defined $opt_p) {&pkgscan();};
>