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();};
>