Hi,

At 03:37 PM 7/17/97 -0400, Dale Scheetz wrote:

>You can use md5sums to verify their integrity. There is a list of the
>correct checksum values in the indices directory of the archive that you
>can use to compare with the values that md5sum gives for the packages.

As Dwarf suggested, I used the MD5 checksums to check for the integrity of
my .deb files, which I downloaded from ftp.debian.org but got corrupted
when they were written to bad sectors on disk.

I could not find a tool to do the whole integrity check automagically so I
wrote a small Perl script. Now, if I want to check the integrity of several
.deb files I run this script as this: "check_deb_integrity.pl --debian /mnt
--packages /mnt/Packages"

The --debian switch tells the program where the Debian distribution is
located. If the switch is not present, the current directory is used. The
--packages switch tells the program where to look for the Packages file. If
not specified, ./Packages is used.

The program is just a first try but it is working for me. I hope you find
it useful. Here it is:

-------

#!/usr/bin/perl -w
#
# Calculate the MD5 sum of the file passed in the command line and
#       compares it to the MD5 value in the Packages file.
#
# By Eloy A. Paris <[EMAIL PROTECTED]>
#

$PACKAGES_FILE = "Packages";
$DEBIAN_LOC = ".";

## get those options:
while ($arg = shift(@ARGV) ) {
        # general options
        if ($arg eq "--help") {
                &usage();
                exit(0);
        } elsif ($arg eq "--packages") {
                $PACKAGES_FILE = shift(@ARGV);
        } elsif ($arg eq "--debian") {
                $DEBIAN_LOC = shift(@ARGV);
        } elsif ($arg =~ /^--/) {   # bad argument!
                &usage();
                exit(1);
        }
}

# Process the Packages file. We look for the file name and the MD5 checksum.
#       Everything else is useless.
open(PACKAGES, $PACKAGES_FILE) || die("Can't open Packages file $PACKAGES\n");
while (<PACKAGES>) {
        if ($_ =~ /^Filename/ || $_ =~ /^MD5sum/) {
                chop;
                push(@packages, $_);
        }
}
close(PACKAGES);

# Now find all .deb files

open(DEB_FILES, "find $DEBIAN_LOC -type f -name '*.deb' |") || die;

while ($file = <DEB_FILES>) {
        chop($file);

        if (! -f $file) {
                print STDERR ("File $file doesn't exist, can not calculate its 
MD5",
                                                " checksum\n");
                next;
        }

        # Calculate MD5 checksum of the file 
        ($file_md5_checksum = `md5sum $file`) =~ s/ .*//;
        chop($file_md5_checksum);

        # Now get base file name
        $base_fname = $file;
        $base_fname =~ s/^.*\///;
        # Escape '+' and '.'' in base file name
        $base_fname =~ s/(\+|\.)/\\\1/g;

        for ($i = 0; $packages[$i]; ++$i) {
                if ($packages[$i] =~ /Filename/ && $packages[$i] =~ 
/$base_fname/) {
                        ($correct_md5_checksum = $packages[$i + 1]) =~ s/.* //;

                        print("File $file has an incorrect MD5 checksum!!!\n") 
if
                                ($correct_md5_checksum ne $file_md5_checksum);
                        
                        last;
                }
        }
}

close(DEB_FILES);

-----------

Regards,

Eloy.-


--

Eloy A. Paris
Information Technology Department
Rockwell Automation de Venezuela
Telephone: +58-2-9432311 Fax: +58-2-9431645 Cel.: +58-16-234700

"Where does this path lead?" said Alice
"Depends on where you want to go."  Said the cat
("Alice in Wonderland", by Lewis Carroll.)


--
TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to
[EMAIL PROTECTED] . 
Trouble?  e-mail to [EMAIL PROTECTED] .

Reply via email to