Membuat Berkas MD5SUMS Repo Lokal

Menyambung tulisan sebelumnya , untuk memastikan bahwa berkas-2 yg digandakan ke HD tidak ada kerusakan atau sama dg yg di DVD adalah dg memeriksa checksum tiap-2 berkas.

Ada beberapa cara untuk mendapatkan daftar checksum. Yg pertama adalah menggabungkan berkas-2 MD5SUMS tiap-2 DVD.

1. Masukkan DVD 1
2. Di Terminal, masuk ke direktori repo
cd /home/sihab/ubuntu

3. Gandakan berkas MD5SUMS
cp /media/cdrom/MD5SUMS .

4. Masukkan DVD 2
5. Tambahkan berkas di DVD ke HD
cat /media/cdrom/MD5SUMS >> MD5SUMS

6. Lakukan hal yg sama untuk DVD 3,4,5

Namun Anda harus melakukan proses pembersihan karena MD5SUMS di DVD berisi juga checksum berkas-2 Packages*.

Cara lainnya adalah mengambil checksum yg tertera di berkas-2 Packages di tiap-2 komponen. Cara ini agak rumit, namun saya tulis di sini karena akan saya gunakan untuk keperluan lain.

Salin skrip Perl berikut:

#!/usr/bin/perl


my $VERSION = '1.0-20071220';
my $DISTRO = 'gutsy';

my $main_Path = '/home/sihab/ubuntu';
my @packfiles = (
"$main_Path/dists/$DISTRO/main/binary-i386/Packages",
"$main_Path/dists/$DISTRO/multiverse/binary-i386/Packages",
"$main_Path/dists/$DISTRO/restricted/binary-i386/Packages",
"$main_Path/dists/$DISTRO/universe/binary-i386/Packages" );

my %packlist;

sub doReadPackages
{
my $packf = $_[0];
return if (!open (PACKF, "<$packf"));
while (my $l=)
{
my @f = split /: /,$l;
if ( $f[0] eq 'Package')
{
chomp ($f[1]);
$packlist{$f[1]} = $l;

READDESC: while ($l=)
{
last READDESC if ( $l eq "\n");
$packlist{$f[1]} .= $l;
}
}
}
close PACKF;
}

sub getfield #(f,packagestr)
{
my $f = $_[0];
my $packagestr = $_[1];
my @l = split /\n/,$packagestr;
my $desc;
foreach my $i (@l)
{
my @x = split /: /,$i;
if ($f eq 'Description')
{
if ($x[0] eq $f)
{ $desc = $x[1]; }
elsif ($i =~ /^ /)
{ $desc .= "\n".$i; }
elsif ($desc)
{ return $desc; }
}
elsif ($f eq $x[0])
{
return $x[1];
}
}
return $desc;
}

sub createMD5SUMFile
{
my @l;
foreach my $i (keys(%packlist))
{
my $md = getfield ('MD5sum', $packlist{$i});
my $fn = getfield ('Filename', $packlist{$i});
$l[$#l+1] = "$md $fn";
}
return if (!open(MD5,">MD5SUMS"));
print MD5 join "\n",@l;
close MD5;
}

sub doCreateDistroMD5DUM
{
foreach my $i (@packfiles) { doReadPackages ($i); }
createMD5SUMFile;
exit;
}

doCreateDistroMD5DUM;

Lalu simpan. Jgn lupa merubah akses ke executable. Jalankan di lokasi repo.

Periksa checksum dg:
md5sum -c MD5SUMS | tee /tmp/cekmd5sum.txt

Untuk mencari berkas yg bermasalah gunakan grep:
grep FAILED /tmp/cekmd5sum.txt
Powered by ScribeFire.

6 Komentar

  1. keren oey....

    aku juga punya http://udienz.wordpress.com/2007/11/26/buat-md5sum-yuk/

    eshabe: Trims tautannya...
    Tulisan ini masih bersambung lho... makanya saya buat skrip

    BalasHapus
  2. oneliner dong :P

    grep ^MD5sum\\\|^Filename dists/*/*/*/Packages | sed 'N; s/\nMD5sum://; s/\(.\+\) \(.\+\) \(.\+\)/\3 \2/'

    eshabe: Wah! Makasih banget tipsnya om! Sintak 'sed'-nya keren! Nanti belajar sed ach... :)

    BalasHapus
  3. mas eshabe... sed iku opo toh??

    eshabe: koq tanya ke saya.... sama om iang. Semacam 'inline' editor. Coba 'man sed'. Saya sendiri belum pernah pake, lebih sering pake awk :)

    BalasHapus
  4. [...] BeeVee2 « Membuat Berkas MD5SUMS Repo Lokal [...]

    BalasHapus
  5. oh iya tambahan: itu hanya berlaku andai Packages: selalu muncul sebelum MD5sum: untuk setiap deskripsi paket yang ada

    BalasHapus
  6. wah2...mantap2 neh scriptnya...*bingung gak tau tuh apaan*
    btw sed adalah streaming editor, mudahnya... sed berfungsi mengedit file tanpa perlu membukanya... *taunya itu aja, masih harus banyak belajar* :D

    BalasHapus